הוספת שדות

ישנן מספר דרכים שונות להכניס שדות למסמך:

במאמר זה, נבחן כל דרך בפירוט רב יותר ולנתח כיצד להוסיף שדות מסוימים באמצעות אפשרויות אלה.

הוספת שדות למסמך באמצעות DocumentBuilder

ב Aspose.Words ה InsertField השיטה משמשת להכנסת שדות חדשים למסמך. הפרמטר הראשון מקבל את קוד השדה המלא של השדה שיוכנס. הפרמטר השני הוא אופציונלי ומאפשר להגדיר את תוצאת השדה של השדה באופן ידני. אם זה לא מסופק אז השדה מתעדכן באופן אוטומטי. אתה יכול להעביר אפס או ריק לפרמטר זה כדי להוסיף שדה עם ערך שדה ריק. אם אינך בטוח לגבי תחביר קוד השדה המסוים, צור תחילה את השדה ב 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, ניתן לציין את האזור ברמת השדה באמצעות המאפיין LocaleId, שמקבל או מגדיר את אזור השדה ID.

דוגמת הקוד הבאה מראה כיצד להשתמש באפשרות זו:

//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, אתה יכול ללחוץ על" שילוב מקשים + 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

השדה MERGEFIELD במסמך Word יכול להיות מיוצג על ידי הכיתה FieldMergeField. אתה יכול להשתמש בכיתה FieldMergeField כדי לבצע את הפעולות הבאות:

  • ציין את שם שדה המיזוג
  • ציין את העיצוב של שדה המיזוג
  • ציין את הטקסט שנמצא בין מפריד השדות לסוף השדה של שדה המיזוג
  • ציין את הטקסט שיוכנס לאחר שדה המיזוג אם השדה אינו ריק
  • ציין את הטקסט שיוכנס לפני שדה המיזוג אם השדה אינו ריק

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה MERGE באמצעות DOM לפסקה במסמך:

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

הוספת שדה בלוק כתובת Mail Merge למסמך באמצעות DOM

השדה ADDRESSBLOCK משמש להכנסת בלוק כתובת Mail Merge במסמך Word. ADDRESSBLOCK שדה במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAddressBlock. אתה יכול להשתמש בכיתה FieldAddressBlock כדי לבצע את הפעולות הבאות:

  • ציין אם לכלול את שם המדינה/האזור בשדה
  • ציין אם לעצב את הכתובת בהתאם למדינה / אזור הנמען כפי שהוגדר על ידי POST * CODE (איחוד הדואר האוניברסלי 2006)
  • ציין את שם המדינה/האזור שלא נכלל
  • ציין את תבנית השם והכתובת
  • ציין את השפה ID המשמשת לעיצוב הכתובת

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה Mail Merge ADDRESSBLOCK באמצעות DOM לפסקה במסמך:

//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 יכול להיות מיוצג על ידי הכיתה FieldAdvance. אתה יכול להשתמש בכיתה FieldAdvance כדי לבצע את הפעולות הבאות:

  • ציין את מספר הנקודות שבאמצעותן יש להעביר את הטקסט העוקב אחר השדה אנכית מהקצה העליון של הדף
  • ציין את מספר הנקודות שבאמצעותן יש להזיז את הטקסט העוקב אחר השדה אופקית מהקצה השמאלי של העמודה, המסגרת או תיבת הטקסט
  • ציין את מספר הנקודות שבאמצעותן יש להזיז את הטקסט העוקב אחר השדה שמאלה, ימינה, למעלה או למטה

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה ADVANCE באמצעות DOM לפסקה במסמך:

//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 למסמך ללא שימוש DocumentBuilder

השדה ASK משמש כדי לבקש מהמשתמש להקצות טקסט לסימניה במסמך Word. ASK שדה במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAsk. אתה יכול להשתמש בכיתה FieldAsk כדי לבצע את הפעולות הבאות:

  • ציין את שם הסימנייה
  • ציין תגובת משתמש ברירת מחדל (ערך ראשוני הכלול בחלון הפקודה)
  • ציין אם יש לקבל את תגובת המשתמש פעם אחת לכל פעולה Mail Merge
  • ציין את טקסט ההנחיה (כותרת חלון ההנחיה)

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה ASK באמצעות DOM לפסקה במסמך:

//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 למסמך ללא שימוש DocumentBuilder

השדה AUTHOR משמש לציון שם מחבר המסמך מהמאפיינים Document. השדה AUTHOR במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAuthor. אתה יכול להשתמש בכיתה FieldAuthor כדי לבצע את הפעולות הבאות:

  • ציין את שם מחבר המסמך

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה AUTHOR באמצעות DOM לפסקה במסמך:

//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 למסמך ללא שימוש DocumentBuilder

השדה INCLUDETEXT מוסיף את הטקסט והגרפיקה הכלולים במסמך ששמו בקוד השדה. אתה יכול להכניס את המסמך כולו או חלק מהמסמך שאליו מתייחסת סימניה. שדה זה במסמך Word מיוצג על ידי INCLUDETEXT. אתה יכול להשתמש בכיתה FieldIncludeText כדי לבצע את הפעולות הבאות:

  • ציין את שם הסימנייה של המסמך הכלול
  • ציין את מיקום המסמך

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה INCLUDETEXT באמצעות DOM לפסקה במסמך:

//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 למסמך ללא שימוש DocumentBuilder

השדה TOA (Table of Authorities) בונה ומכניס טבלת רשויות. השדה TOA אוסף ערכים המסומנים בשדות TA (Table of Authorities Entry). Microsoft משרד Word מוסיף את השדה TOA כאשר אתה לוחץ על Insert Table of Authorities בקבוצה Table of Authorities בכרטיסייה References. כשאתה מציג את השדה TOA במסמך שלך, התחביר נראה כך:

{ TOA [Switches ] }

דוגמת הקוד הבאה מראה כיצד להוסיף את השדה TOA באמצעות DOM לפסקה במסמך:

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