フィールドの挿入

ドキュメントにフィールドを挿入するには、いくつかの方法があります。

この記事では、それぞれの方法を詳しく見て、これらのオプションを使用して特定のフィールドを挿入する方法を分析します。

DocumentBuilder を使用したドキュメントへのフィールドの挿入

Aspose.Words では、InsertField メソッドを使用して新しいフィールドをドキュメントに挿入します。最初のパラメータは、挿入されるフィールドの完全なフィールド コードを受け入れます。 2 番目のパラメータはオプションで、フィールドのフィールド結果を手動で設定できます。これが指定されていない場合、フィールドは自動的に更新されます。このパラメーターに null または空を渡すと、空のフィールド値を持つフィールドを挿入できます。特定のフィールド コードの構文がわからない場合は、まず Microsoft Word でフィールドを作成し、そのフィールド コードを表示するように切り替えます。

次のコード例は、DocumentBuilder を使用してドキュメントに差し込みフィールドを挿入する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertField(@"MERGEFIELD MyFieldName \* MERGEFORMAT");
doc.Save(ArtifactsDir + "WorkingWithFields.InsertField.docx");

同じ手法を使用して、他のフィールド内にネストされたフィールドを挿入します。

次のコード例は、DocumentBuilder を使用して別のフィールド内にネストされたフィールドを挿入する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
for (int i = 0; i < 5; i++)
builder.InsertBreak(BreakType.PageBreak);
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
// We want to insert a field like this:
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" }
Field field = builder.InsertField(@"IF ");
builder.MoveTo(field.Separator);
builder.InsertField("PAGE");
builder.Write(" <> ");
builder.InsertField("NUMPAGES");
builder.Write(" \"See Next Page\" \"Last Page\" ");
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertNestedFields.docx");

フィールドレベルでロケールを指定する

言語識別子は、国または地理的地域の言語の標準的な国際的な数値略称です。 Aspose.Words では、フィールドのロケール ID を取得または設定する LocaleId プロパティを使用して、フィールド レベルでロケールを指定できます。

次のコード例は、このオプションの使用方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
DocumentBuilder builder = new DocumentBuilder();
Field field = builder.InsertField(FieldType.FieldDate, true);
field.LocaleId = 1049;
builder.Document.Save(ArtifactsDir + "WorkingWithFields.SpecifylocaleAtFieldlevel.docx");

型なし/空のフィールドを挿入

Microsoft Word で許可されているのと同じように、型なし/空のフィールド ({}) を挿入する場合は、FieldType.FieldNone パラメーターを指定した InsertField メソッドを使用できます。 Word 文書にフィールドを挿入するには、「Ctrl + F9」キーの組み合わせを押します。

次のコード例は、空のフィールドをドキュメントに挿入する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
FieldUnknown field = (FieldUnknown) builder.InsertField(FieldType.FieldNone, false);
doc.Save(ArtifactsDir + "WorkingWithFields.InsertFieldNone.docx");

FieldBuilder を使用してドキュメントにフィールドを挿入する

Aspose.Words にフィールドを挿入する別の方法は、FieldBuilder クラスです。フィールド スイッチと引数値をテキスト、ノード、またはネストされたフィールドとして指定するための流暢なインターフェイスを提供します。

次のコード例は、FieldBuilder を使用してドキュメントにフィールドを挿入する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"}
FieldBuilder fieldBuilder = new FieldBuilder(FieldType.FieldIf)
.AddArgument("left expression")
.AddArgument("=")
.AddArgument("right expression")
.AddArgument(
new FieldArgumentBuilder()
.AddText("Firstname: ")
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("firstname")))
.AddArgument(
new FieldArgumentBuilder()
.AddText("Lastname: ")
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("lastname")));
// Insert IF field in exact location
Field field = fieldBuilder.BuildAndInsert(doc.FirstSection.Body.FirstParagraph);
field.Update();
doc.Save(ArtifactsDir + "Field.InsertFieldUsingFieldBuilder.docx");

DOM を使用したフィールドの挿入

Aspose.Words Document Object Model (DOM) を使用してさまざまなタイプのフィールドを挿入することもできます。このセクションでは、いくつかの例を見ていきます。

DOM を使用して差し込みフィールドをドキュメントに挿入する

Word 文書の MERGEFIELD フィールドは、FieldMergeField クラスで表すことができます。 FieldMergeField クラスを使用して、次の操作を実行できます。

  • 差し込みフィールドの名前を指定します
  • 差し込みフィールドの書式設定を指定します
  • フィールド区切り文字と差し込みフィールドのフィールド末尾の間にあるテキストを指定します
  • 差し込みフィールドが空白でない場合に、差し込みフィールドの後に挿入するテキストを指定します。
  • 差し込みフィールドが空白でない場合に、差し込みフィールドの前に挿入するテキストを指定します。

次のコード例は、DOM を使用してドキュメント内の段落に MERGE フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
builder.MoveTo(para);
// We want to insert a merge field like this:
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
FieldMergeField field = (FieldMergeField) builder.InsertField(FieldType.FieldMergeField, false);
// { " MERGEFIELD Test1" }
field.FieldName = "Test1";
// { " MERGEFIELD Test1 \\b Test2" }
field.TextBefore = "Test2";
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 }
field.TextAfter = "Test3";
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" }
field.IsMapped = true;
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
field.IsVerticalFormatting = true;
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMergeFieldUsingDOM.docx");

DOM を使用したドキュメントへの Mail Merge ADDRESSBLOCK フィールドの挿入

ADDRESSBLOCK フィールドは、Word 文書に Mail Merge アドレス ブロックを挿入するために使用されます。 Word 文書の ADDRESSBLOCK フィールドは FieldAddressBlock クラスで表現できます。 FieldAddressBlock クラスを使用して、次の操作を実行できます。

  • フィールドに国/地域の名前を含めるかどうかを指定します
  • POST*CODE (万国郵便連合 2006) で定義されている受信者の国/地域に従って住所をフォーマットするかどうかを指定します。
  • 除外する国/地域名を指定します
  • 名前とアドレスの形式を指定します
  • 住所のフォーマットに使用する言語 ID を指定します

次のコード例は、DOM を使用してドキュメント内の段落に Mail Merge ADDRESSBLOCK フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
builder.MoveTo(para);
// We want to insert a mail merge address block like this:
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
FieldAddressBlock field = (FieldAddressBlock) builder.InsertField(FieldType.FieldAddressBlock, false);
// { ADDRESSBLOCK \\c 1" }
field.IncludeCountryOrRegionName = "1";
// { ADDRESSBLOCK \\c 1 \\d" }
field.FormatAddressOnCountryOrRegion = true;
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 }
field.ExcludedCountryOrRegionName = "Test2";
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 }
field.NameAndAddressFormat = "Test3";
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
field.LanguageId = "Test 4";
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx");

DocumentBuilder を使用せずに ADVANCE フィールドをドキュメントに挿入する

ADVANCE フィールドは、行内の後続のテキストを左、右、上、または下にオフセットするために使用されます。 Word 文書の ADVANCE フィールドは、FieldAdvance クラスで表すことができます。 FieldAdvance クラスを使用して、次の操作を実行できます。

  • フィールドに続くテキストをページの上端から垂直に移動するポイント数を指定します。
  • フィールドに続くテキストを列、フレーム、またはテキスト ボックスの左端から水平方向に移動するポイント数を指定します。
  • フィールドに続くテキストを左右上下に移動するポイント数を指定します

次のコード例は、DOM を使用してドキュメント内の段落に ADVANCE フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an Advance field like this:
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
FieldAdvance field = (FieldAdvance) para.AppendField(FieldType.FieldAdvance, false);
// { ADVANCE \\d 10 " }
field.DownOffset = "10";
// { ADVANCE \\d 10 \\l 10 }
field.LeftOffset = "10";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 }
field.RightOffset = "-3.3";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 }
field.UpOffset = "0";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 }
field.HorizontalPosition = "100";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
field.VerticalPosition = "100";
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx");

DocumentBuilder を使用せずに ASK フィールドをドキュメントに挿入する

ASK フィールドは、Word 文書のブックマークに割り当てるテキストをユーザーに要求するために使用されます。 Word 文書の ASK フィールドは、FieldAsk クラスで表現できます。 FieldAsk クラスを使用して、次の操作を実行できます。

  • ブックマークの名前を指定します
  • デフォルトのユーザー応答を指定します (プロンプト ウィンドウに含まれる初期値)
  • ユーザー応答を Mail Merge 操作ごとに 1 回受信するかどうかを指定します
  • プロンプトテキスト (プロンプトウィンドウのタイトル) を指定します。

次のコード例は、DOM を使用してドキュメント内の段落に ASK フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an Ask field like this:
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
FieldAsk field = (FieldAsk) para.AppendField(FieldType.FieldAsk, false);
// { ASK \"Test 1\" " }
field.BookmarkName = "Test 1";
// { ASK \"Test 1\" Test2 }
field.PromptText = "Test2";
// { ASK \"Test 1\" Test2 \\d Test3 }
field.DefaultResponse = "Test3";
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
field.PromptOnceOnMailMerge = true;
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx");

DocumentBuilder を使用せずに AUTHOR フィールドをドキュメントに挿入する

AUTHOR フィールドは、Document プロパティからドキュメントの作成者の名前を指定するために使用されます。 Word 文書の AUTHOR フィールドは、FieldAuthor クラスで表現できます。 FieldAuthor クラスを使用して、次の操作を実行できます。

  • 文書の作成者の名前を指定します

次のコード例は、DOM を使用してドキュメント内の段落に AUTHOR フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an AUTHOR field like this:
// { AUTHOR Test1 }
FieldAuthor field = (FieldAuthor) para.AppendField(FieldType.FieldAuthor, false);
field.AuthorName = "Test1"; // { AUTHOR Test1 }
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertAuthorField.docx");

DocumentBuilder を使用せずに INCLUDETEXT フィールドをドキュメントに挿入する

INCLUDETEXT フィールドは、フィールド コードで指定されたドキュメントに含まれるテキストとグラフィックを挿入します。文書全体、またはブックマークで参照されている文書の一部を挿入できます。 Word 文書のこのフィールドは INCLUDETEXT で表されます。 FieldIncludeText クラスを使用して、次の操作を実行できます。

  • 含まれるドキュメントのブックマーク名を指定します
  • ドキュメントの場所を指定します

次のコード例は、DOM を使用してドキュメント内の段落に INCLUDETEXT フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = new Paragraph(doc);
// We want to insert an INCLUDETEXT field like this:
// { INCLUDETEXT "file path" }
FieldIncludeText fieldIncludeText = (FieldIncludeText) para.AppendField(FieldType.FieldIncludeText, false);
fieldIncludeText.BookmarkName = "bookmark";
fieldIncludeText.SourceFullName = MyDir + "IncludeText.docx";
doc.FirstSection.Body.AppendChild(para);
fieldIncludeText.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx");

DocumentBuilder を使用せずに TOA フィールドをドキュメントに挿入する

TOA (典拠表) フィールドは典拠表を作成して挿入します。 TOA フィールドは、TA (Table of Authorities Entry) フィールドでマークされたエントリを収集します。 Microsoft Office Word は、[References] タブの 権威一覧表 グループで [典拠表の挿入] をクリックすると、TOA フィールドを挿入します。ドキュメント内の TOA フィールドを表示すると、構文は次のようになります。

{ TOA [Switches ] }

次のコード例は、DOM を使用してドキュメント内の段落に TOA フィールドを追加する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = new Paragraph(doc);
// We want to insert TA and TOA fields like this:
// { TA \c 1 \l "Value 0" }
// { TOA \c 1 }
FieldTA fieldTA = (FieldTA) para.AppendField(FieldType.FieldTOAEntry, false);
fieldTA.EntryCategory = "1";
fieldTA.LongCitation = "Value 0";
doc.FirstSection.Body.AppendChild(para);
para = new Paragraph(doc);
FieldToa fieldToa = (FieldToa) para.AppendField(FieldType.FieldTOA, false);
fieldToa.EntryCategory = "1";
doc.FirstSection.Body.AppendChild(para);
fieldToa.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx");