フィールドの概要
Aspose.Words は、Microsoft Word ドキュメントのサーバー側処理用に設計されたクラス ライブラリであり、次の方法でフィールドをサポートします。
- 文書内のすべてのフィールドは、開く/保存するとき、および変換中に保持されます。
 - ほとんどのフィールドの結果を更新することが可能
 
この記事では、フィールド構造、Aspose.Words でサポートされているフィールド、およびそのようなフィールドの操作の詳細について学びます。
フィールド構造
フィールドは次のもので構成されます。
- フィールド開始ノードと区切りノードは、フィールド コードを構成するコンテンツ (通常はプレーン テキストとして) を包含するために使用されます。
 - フィールド区切り文字とフィールド末尾はフィールド結果を囲みます。これは、一連のテキストから段落、表に至るまで、さまざまなタイプのコンテンツで構成されます。
 - 一部のフィールドには区切り文字がない場合があります。つまり、コンテンツ全体がフィールド コードを構成します。
 - フィールド コードはフィールドの動作を定義し、フィールド識別子と、多くの場合フィールド名やスイッチなどの他のパラメータで構成されます。
 - フィールドの結果には、フィールドの最新の評価が含まれます。この値はフィールド結果に保存され、ユーザーに表示されます。一部のフィールドにはフィールド結果がない場合があるため、ドキュメントには何も表示されません。同様に、一部のフィールドはまだ更新されていない可能性があるため、フィールド結果もありません。
 

フィールド コードを構成するコンテンツは、FieldStart と FieldSeparator の間に Run ノードとして格納されます。フィールドの結果は FieldSeparator ノードと FieldEnd ノードの間に保存され、さまざまなタイプのコンテンツで構成されます。通常、フィールド結果には Run ノードで構成されるテキストのみが含まれますが、FieldEnd ノードがまったく別の段落に配置される可能性があるため、フィールド結果が Table や Paragraph ノードなどの ドキュメント内のノードの論理レベル で構成されることもあります。
ここでは、ギットハブ にある「DocumentExplorer」 の例を使用して、フィールドが Aspose.Words にどのように保存されるかを示します。

Aspose.Words Document Object Model (DOM) のフィールド
ドキュメントが Aspose.Words にロードされると、ドキュメントのフィールドが個別のコンポーネント (ノード) のセットとして Aspose.Words Document Object Model (DOM) にロードされます。単一のフィールドは、FieldStart、FieldSeparator、および FieldEnd ノードのコレクションとして、これらのノード間のコンテンツとともにロードされます。フィールドにフィールド結果がない場合、FieldSeparator ノードは存在しません。これらのノードはすべて、常にインラインで (Paragraph または SmartTag の子として) 見つかります。
Aspose.Words では、各 FieldXXX ノードは FieldChar から派生します。このクラスは、FieldType プロパティを通じて、指定されたノードによって表されるフィールドのタイプをチェックするプロパティを提供します。たとえば、FieldType.FieldMergeField はドキュメント内の差し込みフィールドを表します。
Word 文書には、FieldXXX ノードのコレクションとして Aspose.Words にインポートされない特定のフィールドがいくつかあります。たとえば、LINK フィールドと INCLUDEPICTURE フィールドは Shape オブジェクトとして Aspose.Words にインポートされます。このオブジェクトは、通常これらのフィールドに保存されている画像データを操作するためのプロパティを提供します。 INCLUDEPICTURE フィールドを FieldXXX ノードとしてインポートするには、PreserveIncludePictureField オプションを true として指定する必要があります。
フォーム フィールドも、独自の特別なクラスとして Aspose.Words にインポートされます。 FormField クラスは Word 文書内のフォーム フィールドを表し、フォーム フィールドに固有の追加メソッドを提供します。
サポートされているフィールド
次のフィールドの計算は、Aspose.Words の現在のバージョンでサポートされています。
- = (式)
 ADDRESSBLOCKASKAUTHORAUTONUMAUTONUMLGLAUTONUMOUTAUTOTEXTBARCODECOMMENTSCOMPARECREATEDATEDATABASEDATEDISPLAYBARCODEDOCPROPERTYDOCVARIABLEEDITTIMEEQFILENAMEFILESIZEFILLINFORMCHECKBOXFORMDROPDOWNFORMTEXTGLOSSARYGOTOBUTTONGREETINGLINEHYPERLINKIFIMPORTINCLUDEINCLUDEPICTUREINCLUDETEXTINDEXINFOKEYWORDSLASTSAVEDBYLISTNUMMACROBUTTONMERGEBARCODEMERGEFIELDMERGERECMERGESEQNEXTNEXTIFNOTEREFNUMCHARSNUMPAGESNUMWORDSPAGEPAGEREFPRINTDATEQUOTEREFREVNUMSAVEDATESECTIONSECTIONPAGESSEQSETSHAPESKIPIFSTYLEREFSUBJECTSYMBOLTEMPLATETIMETITLETOATOCUSERADDRESSUSERINITIALSUSERNAME
高度なフィールド解析
Aspose.Words は Microsoft Word がフィールドを処理する方法に従い、その結果、以下を正しく処理します。
- ネストされたフィールド:
IF { =OR({ COMPARE { =2.5 +PRODUCT(3,5 ,8.4) } > 4}, { =2/2 }) } = 1 "Credit not acceptable" "Credit acceptable" - フィールド引数は、ネストされたフィールドの結果にすることができます
 - フィールドは、フィールドコード内およびフィールド結果内でネストできます。
 - スペース/スペースなし、引用符/引用符なし、フィールド内のエスケープ文字など:
MERGEFIELD \f"Text after""Field \n\ame with \" and \\\ and \\\*"\bTextBefor\e - 複数の段落にまたがるフィールド
 
数式フィールド
Aspose.Words は、数式エンジンの非常に本格的な実装を提供し、以下をサポートします。
- 算術演算子および論理演算子:
=(54+4*(6-77)-(5))+(-6-5)/4/5 - 機能:
=ABS(-01.4)+2.645/(5.6^3.5)+776457 \\\# "#,##0" - ブックマークへの参照:
=IF(C>4, 5,ABS(A)*.76) +3.85 - 数値フォーマットスイッチ:
=00000000 \\\# "$#,##0.00;($#,##0.00)" 
式内の次の関数がサポートされています: ABS、AND、AVERAGE、COUNT、DEFINED、FALSE、IF、INT、MAX、MIN、MOD、NOT、OR、PRODUCT、ROUND、SIGN、SUM、TRUE。
IF および COMPARE フィールド
Aspose.Words が簡単に計算できる IF 式の一部を見れば、この機能がいかに強力であるかがわかるはずです。
IF 3 > 5.7^4+MAX(4,3) True FalseIF "abcd" > "abc" True FalseIF "?ab*" = "1abdsg" True FalseIF 4 = "2*2" True FalseCOMPARE 3+5/34 < 4.6/3/2
DATE および TIME フィールド
Aspose.Words は、Microsoft Word で使用可能なすべての日付と時刻の書式設定スイッチをサポートしています。いくつかの例を次に示します。
DATE @ "d-MMM-yy"DATE @ "d/MM/yyyy h:mm am/pm
Mail Mergeフィールド
Aspose.Words は、ドキュメント内の Mail Merge フィールドの複雑さに制限を設けず、ネストされた IF フィールドと数式フィールドをサポートし、数式を使用して差し込みフィールドの名前を計算することもできます。
Aspose.Words がサポートする Mail Merge フィールドの例をいくつか示します。
- Mail merge フィールド スイッチ:
MERGEFIELD FirstName \\\\\\\\* FirstCap \b "Mr. " - 数式内のネストされた差し込みフィールド:
IF {MERGEFIELDValue1 } >= {MERGEFIELDValue2 } True False - 実行時に差し込みフィールドの名前を計算します。
MERGEFIELD {IF{MERGEFIELDValue1 } >= {MERGEFIELDValue2 } FirstName"LastName" } - データ ソース内の次のレコードに条件付きで移動します。
NEXTIF {MERGEFIELDValue1 } <= { =IF(-2.45 >= 6*{MERGEFIELDValue2 }, 2, -.45) } 
フォーマットスイッチ
ドキュメント内のフィールドには、結果の値の書式設定方法を指定する書式設定スイッチを含めることができます。 Aspose.Words は次の形式スイッチをサポートしています。
- \@ – 日付と時刻の形式
 - \# – 数値の書式設定
 - \* キャップ
 - \* ファーストキャップ
 - \* より低い
 - \* アッパー
 - \* CHARFORMAT – フィールド コードの最初の文字に従って結果をフォーマットします
 - \* MERGEFORMAT – 古い結果のフォーマットに従って結果をフォーマットします
 
Date とフィールドの数値フォーマット
Aspose.Words がフィールド結果を計算する場合、多くの場合、文字列を数値または日付値に解析し、文字列にフォーマットし直す必要があります。デフォルトでは、Aspose.Words はフィールド更新中にフィールド値を計算するときに、現在のスレッド カルチャを使用して解析とフォーマットを実行します。そしてmail merge。 FieldOptions クラスの形式で提供されるオプションもあり、フィールドの更新中にどのカルチャを使用するかをさらに制御できます。
- デフォルトでは、FieldUpdateCultureSource プロパティは、現在のスレッド カルチャを使用してフィールドをフォーマットする CurrentThread に設定されます。
 - このプロパティを FieldCode に設定すると、フィールドのフィールド コードから設定された言語が代わりに書式設定に使用されます。
 
現在のスレッドのカルチャを使用したフォーマット
フィールド計算中に使用されるカルチャを制御するには、フィールド計算を呼び出す前に、Thread.CurrentThread.CurrentCulture プロパティを選択したカルチャに設定するだけです。
次のコード例は、更新中にフィールドの書式設定で使用されるカルチャを変更する方法を示しています。
現在のカルチャを使用してフィールドを書式設定すると、システムはフィールド更新時にドキュメント内のすべてのフィールドの書式設定方法を簡単かつ一貫して制御できるようになります。
ドキュメント内のカルチャを使用した書式設定
一方、Microsoft Word は、フィールド内で見つかったテキストの言語 (具体的には、フィールド コードからのラン) に基づいて、個々のフィールドをフォーマットします。フィールドの更新中に、これが望ましい動作になる場合があります。たとえば、さまざまな言語で構成されたコンテンツを含むグローバル化されたドキュメントがあり、テキストで使用されているロケールを各フィールドに適用したい場合などです。 Aspose.Words もこの機能をサポートしています。
Document クラスは、ドキュメント内でフィールドを更新する方法を制御するために使用できるメンバーを含む FieldOptions プロパティを提供します。
次のコード例は、フィールド更新および Mail Merge 中に日付の書式設定に使用されるカルチャがどこから選択されるかを指定する方法を示しています。