レガシーフォーム フィールド
レガシーフォーム フィールド
Aspose.Words FOSS for .NET は、Word のレガシー(コンテンツコントロール以前)フォームフィールド(テキスト入力、チェックボックス、ドロップダウンフィールド)を、Aspose.Words.Fields の FormField クラスとその 3 つの専門サブクラスを通じて読み取り・操作します。
フォームフィールド値の読み取り
Document.Range.FormFields(FormFieldCollection)は、ノードツリーを手動でたどることなく、範囲内のすべてのレガシーフォームフィールドへ直接アクセスできます。各FormFieldは、Name(フィールドを参照するために使用されるブックマーク形式の識別子)、Type(どの種類のフォームフィールドかを識別するFieldType値)、Result(現在の値)、Enabled、およびHelpText/OwnHelp と StatusText/OwnStatus を通じたヘルプ/ステータステキストを公開します。SetTextInputValue(newValue) はテキスト入力フィールドの新しい値を直接設定します。FormFieldCollection をブックマーク名(例:formFields["BookmarkName"])でインデックス付けして特定のフィールドを取得し、Remove(formField) / RemoveAt(index) でコレクションからフィールドを削除します。
テキスト、チェックボックス、ドロップダウンフィールドの種類
3 つのレガシーフォームフィールドタイプはそれぞれ専用のクラスを持ちます:FieldFormText(FORMTEXT フィールド、FieldType.FieldFormTextInput に相当)は自由テキスト入力用、FieldFormCheckBox(FORMCHECKBOX フィールド)はブール値の切替用、FieldFormDropDown(FORMDROPDOWN フィールド)は選択リスト用です。基礎となる FormField ノード上で、TextInputType(TextFormFieldType 値 — Regular、Number、Date、CurrentDate、CurrentTime、または Calculated) と TextInputFormat がテキストフィールドの値の解釈と書式設定を制御します;MaxLength が入力長さを制限し、TextInputDefault がデフォルト値を提供します。Checked と Default はチェックボックスフィールドに適用され、IsCheckBoxExactSize/CheckBoxSize が表示サイズを制御します。ドロップダウンフィールドはオプションリストを DropDownItems に保持し、DropDownItemCollection は Add、Insert、Remove、Contains、IndexOf をサポートし、さらに現在選択されている項目のために DropDownSelectedIndex を持ちます。
ヒントとベストプラクティス
Document.Range.FormFieldsを使用し、Document.Range.Fieldsをタイプで手動でフィルタリングしないでください — これはレガシーフォームフィールド用の直接的で型指定されたエントリーポイントです。- ユーザーがフィールドから離れた瞬間に、フォームフィールドの値が依存フィールドの再計算をトリガーすべき場合は、
CalculateOnExitを設定してください。 FormField.EntryMacro/ExitMacroは、元のドキュメントで設定された VBA マクロ名を参照します — それらを読み取ってもマクロコードは実行されません。- テキストフィールドの
Resultを数値や日付として解析する前に、TextInputTypeを確認してください —Regularフィールドにはフォーマット制約がありません。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
ブックマーク名で FormFieldCollection をインデックス付けすると null が返されます | フォームフィールドのブックマーク名が一致しないか、検索範囲にフィールドが存在しません | 列挙中に FormField.Name を使用して正確なブックマーク名を確認してください |
Checked を設定した後にチェックボックスの状態が反映されません | 変更後にドキュメントが保存されません | 変更後にドキュメントを保存してください; Checked は次回アクセス時に読み取られます |
ドロップダウン DropDownSelectedIndex が範囲外です | インデックスが DropDownItems の項目に対応していません | 設定する前にインデックスを DropDownItems.Count と照合してください |
| テキストフィールドの値が適用されていません | SetTextInputValue の代わりに直接プロパティ代入を使用しました | FormField に対して SetTextInputValue(newValue) を呼び出してください |
FAQ
FormField と FieldFormText/FieldFormCheckBox/FieldFormDropDown の違いは何ですか?
FormField は任意のレガシーフォームフィールドを表す汎用ノードで、Document.Range.FormFields を通じてアクセスします。FieldFormText、FieldFormCheckBox、および FieldFormDropDown は、一般的な Field コレクションを介して操作する際に、各フィールドタイプに対応するフィールド固有のクラス(Field から派生)です。
ドキュメント内のすべてのフォームフィールドの値を取得するにはどうすればよいですか?
Document.Range.FormFields を列挙し、各 FormField の Name/Result を読み取ります。
ドロップダウンフォームフィールドにオプションを追加できますか?
はい — FormField.DropDownItems は Add(value)、Insert(index, value)、Remove(name) を備えた DropDownItemCollection です。
これらは最新のコンテンツコントロールと同じですか?
いいえ。レガシーフォームフィールド(FORMTEXT、FORMCHECKBOX、FORMDROPDOWN)は Word の構造化ドキュメントタグ(コンテンツコントロール)モデルよりも前に作られました; 両方が同じドキュメントに存在できます。
API Reference の概要
| クラス / メソッド | 説明 |
|---|---|
Document.Range.FormFields | 範囲内のすべてのレガシーフォームフィールドへの直接アクセス |
FormField | 汎用レガシーフォームフィールドノード: name、type、result、enabled state |
FormFieldCollection | FormField オブジェクトのコレクション; ブックマーク名でインデクサ、Remove() |
FieldFormText | FORMTEXT フィールドクラス |
FieldFormCheckBox | FORMCHECKBOX フィールドクラス |
FieldFormDropDown | FORMDROPDOWN フィールドクラス |
TextFormFieldType | テキストフィールド入力形式の列挙型 (Regular, Number, Date など) |
DropDownItemCollection | ドロップダウンフィールドのオプションの編集可能なリスト |