Wstaw pola

Istnieje kilka różnych sposobów wstawiania pól do dokumentu:

W tym artykule przyjrzymy się każdemu sposobowi bardziej szczegółowo i przeanalizujemy, jak wstawić określone pola za pomocą tych opcji.

Wstawianie pól do dokumentu przy użyciu narzędzia DocumentBuilder

W Aspose.Words metoda InsertField służy do wstawiania nowych pól do dokumentu. Pierwszy parametr akceptuje pełny kod pola, które ma zostać wstawione. Drugi parametr jest opcjonalny i umożliwia ręczne ustawienie wyniku pola. Jeśli nie zostanie to podane, pole zostanie automatycznie zaktualizowane. Do tego parametru można przekazać wartość null lub pusty, aby wstawić pole z wartością pustego pola. Jeśli nie masz pewności co do składni konkretnego kodu pola, utwórz najpierw pole w formacie Microsoft Word i przełącz się, aby zobaczyć jego kod pola.

Poniższy przykład kodu pokazuje, jak wstawić pole scalania do dokumentu przy użyciu 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");

Tę samą technikę stosuje się do wstawiania pól zagnieżdżonych w innych polach.

Poniższy przykład kodu pokazuje, jak wstawić pola zagnieżdżone w innym polu za pomocą 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");

Określ ustawienia regionalne na poziomie pola

Identyfikator języka to standardowy międzynarodowy skrót numeryczny języka danego kraju lub regionu geograficznego. W Aspose.Words można określić ustawienia regionalne na poziomie pola przy użyciu właściwości LocaleId, która pobiera lub ustawia identyfikator ustawień regionalnych pola.

Poniższy przykład kodu pokazuje, jak używać tej opcji:

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

Wstaw niewpisane/puste pole

Jeśli chcesz wstawić niewpisane/puste pola ({}), tak jak pozwala na to Microsoft Word, możesz użyć metody InsertField z parametrem FieldType.FieldNone. Aby wstawić pole do dokumentu Word, możesz nacisnąć kombinację klawiszy “Ctrl + F9”.

Poniższy przykład kodu pokazuje, jak wstawić puste pole do dokumentu:

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

Wstawianie pól do dokumentu za pomocą FieldBuilder

Alternatywnym sposobem wstawiania pól w Aspose.Words jest klasa FieldBuilder. Zapewnia płynny interfejs do określania przełączników pól i wartości argumentów jako tekstu, węzłów, a nawet pól zagnieżdżonych.

Poniższy przykład kodu pokazuje, jak wstawić pole do dokumentu za pomocą 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");

Wstawianie pól za pomocą DOM

Za pomocą Aspose.Words Document Object Model (DOM) możesz także wstawiać różne typy pól. W tej sekcji przyjrzymy się kilku przykładom.

Wstawianie pola scalania do dokumentu za pomocą DOM

Pole MERGEFIELD w dokumencie Word może być reprezentowane przez klasę FieldMergeField. Klasę FieldMergeField można wykorzystać do wykonania następujących operacji:

  • określ nazwę pola scalania
  • określ formatowanie pola scalania
  • określ tekst znajdujący się pomiędzy separatorem pola a końcem pola scalającego
  • określ tekst, który ma zostać wstawiony po polu scalającym, jeśli pole nie jest puste
  • określ tekst, który ma zostać wstawiony przed polem scalania, jeśli pole nie jest puste

Poniższy przykład kodu pokazuje, jak dodać pole MERGE za pomocą formatu DOM do akapitu w dokumencie:

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

Wstawianie pola Mail Merge ADDRESSBLOCK do dokumentu przy użyciu formatu DOM

Pole ADDRESSBLOCK służy do wstawienia bloku adresu Mail Merge do dokumentu Word. Pole ADDRESSBLOCK w dokumencie Word może być reprezentowane przez klasę FieldAddressBlock. Za pomocą klasy FieldAddressBlock możesz wykonać następujące operacje:

  • określ, czy w polu ma być zawarta nazwa kraju/regionu
  • określ, czy adres ma być formatowany zgodnie z krajem/regionem odbiorcy zgodnie z definicją POST*CODE (Powszechny Związek Pocztowy 2006)
  • podaj nazwę wykluczonego kraju/regionu
  • określ format nazwy i adresu
  • określ identyfikator języka używany do formatowania adresu

Poniższy przykład kodu pokazuje, jak dodać pole Mail Merge ADDRESSBLOCK przy użyciu formatu DOM do akapitu w dokumencie:

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

Wstawianie pola ADVANCE do dokumentu bez użycia narzędzia DocumentBuilder

Pole ADVANCE służy do przesuwania kolejnego tekstu w wierszu w lewo, w prawo, w górę lub w dół. Pole ADVANCE w dokumencie Word może być reprezentowane przez klasę FieldAdvance. Klasę FieldAdvance można wykorzystać do wykonania następujących operacji:

  • określ liczbę punktów, o jaką tekst następujący po polu powinien zostać odsunięty w pionie od górnej krawędzi strony
  • określić liczbę punktów, o jaką tekst następujący za polem powinien zostać przesunięty poziomo od lewej krawędzi kolumny, ramki lub pola tekstowego
  • określ liczbę punktów, o jaką tekst następujący po polu ma zostać przesunięty w lewo, w prawo, w górę lub w dół

Poniższy przykład kodu pokazuje, jak dodać pole ADVANCE za pomocą formatu DOM do akapitu w dokumencie:

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

Wstawianie pola ASK do dokumentu bez użycia narzędzia DocumentBuilder

Pole ASK służy do monitowania użytkownika o tekst do przypisania do zakładki w dokumencie programu Word. Pole ASK w dokumencie Word może być reprezentowane przez klasę FieldAsk. Klasę FieldAsk można wykorzystać do wykonania następujących operacji:

  • podaj nazwę zakładki
  • określ domyślną reakcję użytkownika (wartość początkowa zawarta w oknie zachęty)
  • określ, czy odpowiedź użytkownika powinna być odbierana raz na operację mail merge
  • określ tekst zachęty (tytuł okna podpowiedzi)

Poniższy przykład kodu pokazuje, jak dodać pole ASK za pomocą formatu DOM do akapitu w dokumencie:

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

Wstawianie pola AUTHOR do dokumentu bez użycia narzędzia DocumentBuilder

Pole AUTHOR służy do podania nazwiska autora Dokumentu na podstawie właściwości Document. Pole AUTHOR w dokumencie Word może być reprezentowane przez klasę FieldAuthor. Za pomocą klasy FieldAuthor możesz wykonać następujące operacje:

  • podać nazwisko autora dokumentu

Poniższy przykład kodu pokazuje, jak dodać pole AUTHOR za pomocą formatu DOM do akapitu w dokumencie:

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

Wstawianie pola INCLUDETEXT do dokumentu bez użycia narzędzia DocumentBuilder

Pole INCLUDETEXT wstawia tekst i grafikę zawartą w dokumencie nazwanym w kodzie pola. Można wstawić cały dokument lub jego część, do której odnosi się zakładka. To pole w dokumencie Word jest reprezentowane przez INCLUDETEXT. Klasę FieldIncludeText można wykorzystać do wykonania następujących operacji:

  • podaj nazwę zakładki dołączanego dokumentu
  • określ lokalizację dokumentu

Poniższy przykład kodu pokazuje, jak dodać pole INCLUDETEXT za pomocą formatu DOM do akapitu w dokumencie:

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

Wstawianie pola TOA do dokumentu bez użycia narzędzia DocumentBuilder

Pole TOA (Tabela źródeł) tworzy i wstawia tabelę źródeł. Pole TOA gromadzi wpisy oznaczone polami TA (Table of Authorities Entry). Microsoft Office Word wstawia pole TOA po kliknięciu Wstaw tabelę źródeł w grupie Tabela władz na karcie References. Gdy przeglądasz pole TOA w swoim dokumencie, składnia wygląda następująco:

{ TOA [Switches ] }

Poniższy przykład kodu pokazuje, jak dodać pole TOA za pomocą formatu DOM do akapitu w dokumencie:

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