Vložit Pole

Existuje několik různých způsobů, jak vložit pole do dokumentu:

V tomto článku se podíváme na každou cestu podrobněji a analyzujeme, jak vložit určitá pole pomocí těchto možností.

Vkládání polí do dokumentu pomocí DocumentBuilder

V Aspose.Words se metoda InsertField používá k vložení nových polí do dokumentu. První parametr přijímá úplný kód pole pole, které má být vloženo. Druhý parametr je volitelný a umožňuje ruční nastavení výsledku pole pole. Pokud toto není dodáno, pole se automaticky aktualizuje. K tomuto parametru můžete předat null nebo empty a vložit pole s prázdnou hodnotou pole. Pokud si nejste jisti syntaxí konkrétního kódu pole, vytvořte pole nejprve v Microsoft Word a přepnutím zobrazte jeho kód pole.

Následující příklad kódu ukazuje, jak vložit slučovací pole do dokumentu pomocí 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");

Stejná technika se používá k vkládání polí vnořených do jiných polí.

Následující příklad kódu ukazuje, jak vložit pole vnořená do jiného pole pomocí 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");

Zadejte národní prostředí na úrovni pole

Identifikátor jazyka je standardní mezinárodní číselná zkratka pro jazyk v zemi nebo zeměpisné oblasti. Pomocí Aspose.Words můžete určit národní prostředí na úrovni pole pomocí vlastnosti LocaleId, která získá nebo nastaví národní prostředí pole ID.

Následující příklad kódu ukazuje, jak tuto možnost použít:

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

Vložit Netypované / Prázdné Pole

Pokud chcete vložit netypovaná / prázdná pole ({}) stejně jako Microsoft Word umožňuje, můžete použít metodu InsertField s parametrem FieldType.FieldNone. Chcete-li vložit pole do dokumentu Word, můžete stisknout kombinaci kláves “Ctrl + F9”.

Následující příklad kódu ukazuje, jak vložit prázdné pole do dokumentu:

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

Vkládání polí do dokumentu pomocí FieldBuilder

Alternativní způsob vložení polí do Aspose.Words je třída FieldBuilder. Poskytuje plynulé rozhraní pro určení přepínačů polí a hodnot argumentů jako text, uzly nebo dokonce vnořená pole.

Následující příklad kódu ukazuje, jak vložit pole do dokumentu pomocí 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");

Vkládání polí pomocí DOM

Můžete také vložit různé typy polí pomocí Aspose.Words Model Objektu Dokumentu (DOM). V této části se podíváme na několik příkladů.

Vložení slučovacího pole do dokumentu pomocí DOM

Pole MERGEFIELD v dokumentu Word může být reprezentováno třídou FieldMergeField. Třídu FieldMergeField můžete použít k provedení následujících operací:

  • zadejte název pole sloučení
  • určete formátování pole sloučení
  • určete text, který je mezi oddělovačem polí a koncem pole slučovacího pole
  • pokud pole není prázdné, zadejte text, který se má vložit za pole sloučení
  • pokud pole není prázdné, zadejte text, který se má vložit Před pole sloučení

Následující příklad kódu ukazuje, jak přidat pole MERGE pomocí DOM do odstavce v dokumentu:

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

Vložení Mail Merge pole bloku adresy do dokumentu pomocí DOM

Pole ADDRESSBLOCK se používá k vložení bloku adresy Mail Merge do dokumentu Word. ADDRESSBLOCK pole v Word dokumentu může být reprezentováno třídou FieldAddressBlock. Třídu FieldAddressBlock můžete použít k provedení následujících operací:

  • určete, zda chcete do pole Zahrnout název země/oblasti
  • určete, zda se má Adresa formátovat podle země / oblasti příjemce podle definice POST*CODE (Světová poštovní unie 2006)
  • zadejte název vyloučené země / oblasti
  • zadejte název a formát adresy
  • zadejte jazyk ID použitý k formátování adresy

Následující příklad kódu ukazuje, jak přidat pole Mail Merge ADDRESSBLOCK pomocí DOM do odstavce v dokumentu:

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

Vložení pole předem do dokumentu bez použití DocumentBuilder

Pole ADVANCE se používá k vyrovnání následného textu v řádku doleva, doprava, nahoru nebo dolů. Pole ADVANCE v dokumentu Word může být reprezentováno třídou FieldAdvance. Třídu FieldAdvance můžete použít k provedení následujících operací:

  • určete počet bodů, o které by měl být text, který následuje po poli, přesunut svisle od horního okraje stránky
  • určete počet bodů, o které má být text, který následuje po poli, přesunut vodorovně z levého okraje sloupce, rámečku nebo textového pole
  • určete počet bodů, o které by měl být text, který následuje po poli, přesunut doleva, doprava, nahoru nebo dolů

Následující příklad kódu ukazuje, jak přidat pole ADVANCE pomocí DOM do odstavce v dokumentu:

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

Vložení ASK pole do dokumentu bez použití DocumentBuilder

Pole ASK se používá k výzvě uživatele k přiřazení textu k záložce v dokumentu Word. ASK pole v Word dokumentu může být reprezentováno třídou FieldAsk. Třídu FieldAsk můžete použít k provedení následujících operací:

  • zadejte název záložky
  • zadejte výchozí odpověď uživatele (počáteční hodnota obsažená v okně výzvy)
  • určete, zda má být odpověď uživatele přijata jednou za operaci Mail Merge
  • zadejte text výzvy (název okna výzvy)

Následující příklad kódu ukazuje, jak přidat pole ASK pomocí DOM do odstavce v dokumentu:

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

Vložení AUTHOR pole do dokumentu bez použití DocumentBuilder

Pole AUTHOR se používá k určení jména autora dokumentu z vlastností Document. Pole AUTHOR v dokumentu Word může být reprezentováno třídou FieldAuthor. Třídu FieldAuthor můžete použít k provedení následujících operací:

  • zadejte jméno autora dokumentu

Následující příklad kódu ukazuje, jak přidat pole AUTHOR pomocí DOM do odstavce v dokumentu:

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

Vložení INCLUDETEXT pole do dokumentu bez použití DocumentBuilder

Pole INCLUDETEXT vloží text a grafiku obsaženou v dokumentu pojmenovaném v kódu pole. Můžete vložit celý dokument nebo část dokumentu, na kterou odkazuje Záložka. Toto pole v Word dokumentu je reprezentováno INCLUDETEXT. Třídu FieldIncludeText můžete použít k provedení následujících operací:

  • zadejte název záložky přiloženého dokumentu
  • určete umístění dokumentu

Následující příklad kódu ukazuje, jak přidat pole INCLUDETEXT pomocí DOM do odstavce v dokumentu:

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

Vložení TOA pole do dokumentu bez použití DocumentBuilder

Pole TOA (Table of Authorities) vytvoří a vloží tabulku autorit. Pole TOA shromažďuje položky označené poli TA (Table of Authorities Entry). Microsoft Office Word vloží pole TOA, Když kliknete na Insert Table of Authorities ve skupině Table of Authorities na kartě References. Při zobrazení pole TOA v dokumentu vypadá syntaxe takto:

{ TOA [Switches ] }

Následující příklad kódu ukazuje, jak přidat pole TOA pomocí DOM do odstavce v dokumentu:

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