Felder einfügen

Es gibt verschiedene Möglichkeiten, Felder in ein Dokument einzufügen:

In diesem Artikel werden wir uns jeden Weg genauer ansehen und analysieren, wie bestimmte Felder mit diesen Optionen eingefügt werden.

Einfügen von Feldern in ein Dokument mit DocumentBuilder

In Aspose.Words wird die InsertField -Methode verwendet, um neue Felder in ein Dokument einzufügen. Der erste Parameter akzeptiert den vollständigen Feldcode des einzufügenden Felds. Der zweite Parameter ist optional und ermöglicht die manuelle Einstellung des Feldergebnisses des Felds. Wenn dies nicht angegeben wird, wird das Feld automatisch aktualisiert. Sie können null oder empty an diesen Parameter übergeben, um ein Feld mit einem leeren Feldwert einzufügen. Wenn Sie sich über die bestimmte Feldcodesyntax nicht sicher sind, erstellen Sie zuerst das Feld in Microsoft Word und wechseln Sie, um den Feldcode anzuzeigen.

Das folgende Codebeispiel zeigt, wie Sie ein Seriendruckfeld mit DocumentBuilder in ein Dokument einfügen:

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");

Dieselbe Technik wird verwendet, um Felder einzufügen, die in anderen Feldern verschachtelt sind.

Das folgende Codebeispiel zeigt, wie Sie mit DocumentBuilder in ein anderes Feld verschachtelte Felder einfügen:

// 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");

Gebietsschema auf Feldebene angeben

Eine Sprachkennung ist eine internationale numerische Standardabkürzung für die Sprache in einem Land oder einer geografischen Region. Mit Aspose.Words können Sie das Gebietsschema auf Feldebene mithilfe der Eigenschaft LocaleId angeben, die das Gebietsschema ID des Felds abruft oder festlegt.

Das folgende Codebeispiel zeigt, wie diese Option verwendet wird:

//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");

Untypisiertes/leeres Feld einfügen

Wenn Sie nicht typisierte / leere Felder ({}) einfügen möchten, wie es Microsoft Word zulässt, können Sie die Methode InsertField mit dem Parameter FieldType.FieldNone verwenden. Um ein Feld in ein Word-Dokument einzufügen, können Sie die Tastenkombination “Strg + F9” drücken.

Das folgende Codebeispiel zeigt, wie Sie ein leeres Feld in das Dokument einfügen:

//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");

Einfügen von Feldern in ein Dokument mit FieldBuilder

Die alternative Möglichkeit, Felder in Aspose.Words einzufügen, ist die FieldBuilder -Klasse. Es bietet eine fließende Schnittstelle zum Angeben von Feldschaltern und Argumentwerten als Text, Knoten oder sogar verschachtelte Felder.

Das folgende Codebeispiel zeigt, wie Sie ein Feld mit FieldBuilder in ein Dokument einfügen:

//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");

Felder mit DOM einfügen

Sie können auch verschiedene Arten von Feldern einfügen mit Aspose.Words Dokumentobjektmodell (DOM). In diesem Abschnitt werden wir uns einige Beispiele ansehen.

Seriendruckfeld mit DOM in ein Dokument einfügen

Das Feld MERGEFIELD im Word-Dokument kann durch die Klasse FieldMergeField dargestellt werden. Sie können die Klasse FieldMergeField verwenden, um die folgenden Vorgänge auszuführen:

  • geben Sie den Namen des Seriendruckfelds an
  • geben Sie die Formatierung des Seriendruckfelds an
  • geben Sie den Text zwischen dem Feldtrennzeichen und dem Feldende des Seriendruckfelds an
  • geben Sie den Text an, der nach dem Seriendruckfeld eingefügt werden soll, wenn das Feld nicht leer ist
  • geben Sie den Text an, der vor dem Seriendruckfeld eingefügt werden soll, wenn das Feld nicht leer ist

Das folgende Codebeispiel zeigt, wie Sie das Feld MERGE mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");

Einfügen eines Mail Merge-Adressblockfelds in ein Dokument mit DOM

Das Feld ADDRESSBLOCK wird verwendet, um einen Mail Merge -Adressblock in ein Word-Dokument einzufügen. Das Feld ADDRESSBLOCK im Word-Dokument kann durch die Klasse FieldAddressBlock dargestellt werden. Sie können die Klasse FieldAddressBlock verwenden, um die folgenden Vorgänge auszuführen:

  • geben Sie an, ob der Name des Landes/der Region in das Feld aufgenommen werden soll
  • geben Sie an, ob die Adresse entsprechend dem Land/der Region des Empfängers formatiert werden soll, wie in POST*CODE definiert (Weltpostverein 2006)
  • geben Sie den Namen des ausgeschlossenen Landes/der ausgeschlossenen Region an
  • geben Sie das Namens- und Adressformat an
  • geben Sie die Sprache ID an, in der die Adresse formatiert wird

Das folgende Codebeispiel zeigt, wie Sie das Feld Mail Merge ADDRESSBLOCK mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");

Erweitertes Feld in ein Dokument einfügen, ohne DocumentBuilder zu verwenden

Das Feld ADVANCE wird verwendet, um nachfolgenden Text innerhalb einer Zeile nach links, rechts, oben oder unten zu verschieben. Das Feld ADVANCE im Word-Dokument kann durch die Klasse FieldAdvance dargestellt werden. Sie können die Klasse FieldAdvance verwenden, um die folgenden Vorgänge auszuführen:

  • geben Sie die Anzahl der Punkte an, um die der Text, der auf das Feld folgt, vertikal vom oberen Rand der Seite verschoben werden soll
  • geben Sie die Anzahl der Punkte an, um die der Text, der auf das Feld folgt, horizontal vom linken Rand der Spalte, des Rahmens oder des Textfelds verschoben werden soll
  • geben Sie die Anzahl der Punkte an, um die der Text, der auf das Feld folgt, nach links, rechts, oben oder unten verschoben werden soll

Das folgende Codebeispiel zeigt, wie Sie das Feld ADVANCE mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");

ASK-Feld in ein Dokument einfügen, ohne DocumentBuilder zu verwenden

Das Feld ASK wird verwendet, um den Benutzer zur Eingabe von Text aufzufordern, der einem Lesezeichen im Word-Dokument zugewiesen werden soll. Das Feld ASK im Word-Dokument kann durch die Klasse FieldAsk dargestellt werden. Sie können die Klasse FieldAsk verwenden, um die folgenden Vorgänge auszuführen:

  • geben Sie den Namen des Lesezeichens an
  • Standardbenutzerantwort angeben (Anfangswert im Eingabeaufforderungsfenster enthalten)
  • geben Sie an, ob die Benutzerantwort einmal pro mail merge-Vorgang empfangen werden soll
  • geben Sie den Eingabeaufforderungstext an (den Titel des Eingabeaufforderungsfensters)

Das folgende Codebeispiel zeigt, wie Sie das Feld ASK mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");

AUTHOR-Feld in ein Dokument einfügen, ohne DocumentBuilder zu verwenden

Das Feld AUTHOR wird verwendet, um den Namen des Autors des Dokuments aus den Document-Eigenschaften anzugeben. Das Feld AUTHOR im Word-Dokument kann durch die Klasse FieldAuthor dargestellt werden. Sie können die Klasse FieldAuthor verwenden, um die folgenden Vorgänge auszuführen:

  • geben Sie den Namen des Dokumentautors an

Das folgende Codebeispiel zeigt, wie Sie das Feld AUTHOR mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");

INCLUDETEXT-Feld in ein Dokument einfügen, ohne DocumentBuilder zu verwenden

Das Feld INCLUDETEXT fügt den Text und die Grafiken ein, die in dem im Feldcode genannten Dokument enthalten sind. Sie können das gesamte Dokument oder einen Teil des Dokuments einfügen, auf das durch ein Lesezeichen verwiesen wird. Dieses Feld im Word-Dokument wird durch INCLUDETEXT dargestellt. Sie können die Klasse FieldIncludeText verwenden, um die folgenden Operationen auszuführen:

  • geben Sie den Namen des Lesezeichens des enthaltenen Dokuments an
  • geben Sie den Speicherort des Dokuments an

Das folgende Codebeispiel zeigt, wie Sie das Feld INCLUDETEXT mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");

TOA-Feld in ein Dokument einfügen, ohne DocumentBuilder zu verwenden

Das Feld TOA (Table of Authorities) erstellt und fügt eine Tabelle mit Berechtigungen ein. Das Feld TOA sammelt Einträge, die mit TA (Table of Authorities Entry) Feldern markiert sind. Microsoft Office Word fügt das Feld TOA ein, wenn Sie auf Insert Table of Authorities in der Gruppe Table of Authorities auf der Registerkarte References klicken. Wenn Sie das Feld TOA in Ihrem Dokument anzeigen, sieht die Syntax folgendermaßen aus:

{ TOA [Switches ] }

Das folgende Codebeispiel zeigt, wie Sie das Feld TOA mit DOM zu einem Absatz in einem Dokument hinzufügen:

//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");
/