フィールドの挿入

文書にフィールドを挿入するには、いくつかの方法があります:

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

DocumentBuilderを使用した文書へのフィールドの挿入

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

次のコード例は、DocumentBuilderを使用して差し込み項目を文書に挿入する方法を示しています:

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

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

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Insert a few page breaks (just for testing)
for (int i = 0; i < 5; i++)
{
builder->InsertBreak(BreakType::PageBreak);
}
// Move the DocumentBuilder cursor into the primary footer.
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
// We want to insert a field like this:
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" }
System::SharedPtr<Field> field = builder->InsertField(u"IF ");
builder->MoveTo(field->get_Separator());
builder->InsertField(u"PAGE");
builder->Write(u" <> ");
builder->InsertField(u"NUMPAGES");
builder->Write(u" \"See Next Page\" \"Last Page\" ");
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertNestedFields.docx");

フィールドレベルでのロケールの指定

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

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

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto builder = MakeObject<DocumentBuilder>();
SharedPtr<Field> field = builder->InsertField(FieldType::FieldDate, true);
field->set_LocaleId(1049);
builder->get_Document()->Save(ArtifactsDir + u"WorkingWithFields.SpecifylocaleAtFieldlevel.docx");

型指定されていない/空のフィールドを挿入する

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

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

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
auto field = System::DynamicCast<FieldUnknown>(builder->InsertField(FieldType::FieldNone, false));
doc->Save(ArtifactsDir + u"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-C
auto doc = MakeObject<Document>();
auto firstName = MakeObject<FieldBuilder>(FieldType::FieldMergeField);
firstName->AddArgument("firstname");
auto lastName = MakeObject<FieldBuilder>(FieldType::FieldMergeField);
lastName->AddArgument("lastname");
auto firstnameArgumentBuilder = MakeObject<FieldArgumentBuilder>();
firstnameArgumentBuilder->AddText(u"Firstname: ");
firstnameArgumentBuilder->AddField(firstName);
auto lastnameArgumentBuilder = MakeObject<FieldArgumentBuilder>();
lastnameArgumentBuilder->AddText(u"Lastname: ");
lastnameArgumentBuilder->AddField(lastName);
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"}
auto fieldBuilder = MakeObject<FieldBuilder>(FieldType::FieldIf);
fieldBuilder->AddArgument(u"left expression");
fieldBuilder->AddArgument(u"=");
fieldBuilder->AddArgument(u"right expression");
fieldBuilder->AddArgument(firstnameArgumentBuilder);
fieldBuilder->AddArgument(lastnameArgumentBuilder);
auto field = fieldBuilder->BuildAndInsert(doc->get_FirstSection()->get_Body()->AppendParagraph(String::Empty));
field->Update();
doc->Save(ArtifactsDir + u"Field.InsertFieldUsingFieldBuilder.docx");

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

次を使用して、さまざまなタイプのフィールドを挿入することもできます Aspose.Wordsドキュメントオブジェクトモデル(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-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
builder->MoveTo(para);
// We want to insert a merge field like this:
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
auto field = System::DynamicCast<FieldMergeField>(builder->InsertField(FieldType::FieldMergeField, false));
// { " MERGEFIELD Test1" }
field->set_FieldName(u"Test1");
// { " MERGEFIELD Test1 \\b Test2" }
field->set_TextBefore(u"Test2");
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 }
field->set_TextAfter(u"Test3");
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" }
field->set_IsMapped(true);
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
field->set_IsVerticalFormatting(true);
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMergeFieldUsingDOM.docx");

DOMを使用して文書にMail Mergeアドレスブロックフィールドを挿入する

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

  • フィールドに国/地域の名前を含めるかどうかを指定します
  • POST*CODE(Universal Postal Union2006)で定義されているように、受取人の国/地域に応じて住所を書式設定するかどうかを指定します
  • 除外された国/地域名を指定します
  • 名前とアドレスの形式を指定します
  • アドレスの書式設定に使用する言語IDを指定します

次のコード例は、DOMを使用してMail MergeADDRESSBLOCKフィールドを文書内の段落に追加する方法を示しています:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(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\" }
auto field = System::DynamicCast<FieldAddressBlock>(builder->InsertField(FieldType::FieldAddressBlock, false));
// { ADDRESSBLOCK \\c 1" }
field->set_IncludeCountryOrRegionName(u"1");
// { ADDRESSBLOCK \\c 1 \\d" }
field->set_FormatAddressOnCountryOrRegion(true);
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 }
field->set_ExcludedCountryOrRegionName(u"Test2");
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 }
field->set_NameAndAddressFormat(u"Test3");
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
field->set_LanguageId(u"Test 4");
field->Update();
doc->Save(ArtifactsDir + u"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-C
auto doc = MakeObject<Document>();
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
// We want to insert an Advance field like this:
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
auto field = System::DynamicCast<FieldAdvance>(para->AppendField(FieldType::FieldAdvance, false));
// { ADVANCE \\d 10 " }
field->set_DownOffset(u"10");
// { ADVANCE \\d 10 \\l 10 }
field->set_LeftOffset(u"10");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 }
field->set_RightOffset(u"-3.3");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 }
field->set_UpOffset(u"0");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 }
field->set_HorizontalPosition(u"100");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
field->set_VerticalPosition(u"100");
field->Update();
doc->Save(ArtifactsDir + u"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-C
auto doc = MakeObject<Document>();
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
// We want to insert an Ask field like this:
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
auto field = System::DynamicCast<FieldAsk>(para->AppendField(FieldType::FieldAsk, false));
// { ASK \"Test 1\" " }
field->set_BookmarkName(u"Test 1");
// { ASK \"Test 1\" Test2 }
field->set_PromptText(u"Test2");
// { ASK \"Test 1\" Test2 \\d Test3 }
field->set_DefaultResponse(u"Test3");
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
field->set_PromptOnceOnMailMerge(true);
field->Update();
doc->Save(ArtifactsDir + u"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-C
auto doc = MakeObject<Document>();
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
// We want to insert an AUTHOR field like this:
// { AUTHOR Test1 }
auto field = System::DynamicCast<FieldAuthor>(para->AppendField(FieldType::FieldAuthor, false));
// { AUTHOR Test1 }
field->set_AuthorName(u"Test1");
field->Update();
doc->Save(ArtifactsDir + u"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-C
auto doc = MakeObject<Document>();
auto para = MakeObject<Paragraph>(doc);
// We want to insert an INCLUDETEXT field like this:
// { INCLUDETEXT "file path" }
auto fieldIncludeText = System::DynamicCast<FieldIncludeText>(para->AppendField(FieldType::FieldIncludeText, false));
fieldIncludeText->set_BookmarkName(u"bookmark");
fieldIncludeText->set_SourceFullName(MyDir + u"IncludeText.docx");
doc->get_FirstSection()->get_Body()->AppendChild(para);
fieldIncludeText->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx");

DocumentBuilderを使用せずに文書にTOAフィールドを挿入する

TOA(Table of Authorities)フィールドは、権限のテーブルを構築して挿入します。 TOAフィールドは、TA(Table of Authorities Entry)フィールドでマークされたエントリを収集します。 Microsoft Office Wordでは、ReferencesタブのTable of AuthoritiesグループでInsert Table of AuthoritiesをクリックするとTOAフィールドが挿入されます。 ドキュメントのTOAフィールドを表示すると、構文は次のようになります:

{ TOA [Switches ] }

次のコード例は、DOMを使用してTOAフィールドを文書内の段落に追加する方法を示しています:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto para = MakeObject<Paragraph>(doc);
// We want to insert TA and TOA fields like this:
// { TA \c 1 \l "Value 0" }
// { TOA \c 1 }
auto fieldTA = System::DynamicCast<FieldTA>(para->AppendField(FieldType::FieldTOAEntry, false));
fieldTA->set_EntryCategory(u"1");
fieldTA->set_LongCitation(u"Value 0");
doc->get_FirstSection()->get_Body()->AppendChild(para);
para = MakeObject<Paragraph>(doc);
auto fieldToa = System::DynamicCast<FieldToa>(para->AppendField(FieldType::FieldTOA, false));
fieldToa->set_EntryCategory(u"1");
doc->get_FirstSection()->get_Body()->AppendChild(para);
fieldToa->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx");
/