כיצד לעבוד עם שדות ב .NET

כיצד לעבוד עם שדות ב .NET

מדריך זה מציג כיצד לעבוד עם שדות Word — DATE, IF, REF, DATABASE, ועשרות אחרים — ב-Aspose.Words FOSS עבור .NET: הוספת שדה וקבלת תוצאתו, עדכון שדות לאחר עריכה תכנותית, הגדרת התנהגות עדכון, מעקב אחר עדכונים באמצעות Callback, והמרה או הסרת שדה. Aspose.Words FOSS עבור .NET זמין דרך NuGet או על ידי בנייה ממקורות.

מדריך שלב אחר שלב

שלב 1: קבל את הספרייה

שכפל את המאגר ובנה Aspose.Words.sln בתצורת Release, ואז הוסף הפנייה לפרויקט ל Aspose.Words.csproj מפרויקט .NET שלך, כפי שמתואר ב- מדריך ההתקנה. הוסף using Aspose.Words; and using Aspose.Words.Fields; בראש של כל קובץ שעובד עם שדות.


שלב 2: הוסף שדה וקרא את התוצאה שלו

DocumentBuilder.InsertField() מוסיף שדה חדש במיקום הסמן, עם גרסאות עומס שמעדכנות את תוצאת השדה מיד או משאירות אותה לעדכון מאוחר יותר. כל שדה הוא מופע של Field המורכב משלושה צמתים סימון — FieldStart, Separator ו-FieldEnd, המוצגים כ-Field.Start / Field.Separator / Field.End. Field.Type מזהה איזה FieldType הוא מייצג, Field.Result ו-Field.DisplayResult מחזיקים את הערך המחושב לאחרונה, Field.Format מחזיק כל מתגי פורמט המצורפים לקוד, ו-Field.GetFieldCode() מחזיר את טקסט קוד השדה הגולמי.


צעד 3: עדכון שדות לאחר עריכה תוכניתית

Aspose.Words FOSS אינו מחשב מחדש את השדות כאשר המסמך נטען או נשמר. לאחר עריכה שאמורה לשנות את תוצאת השדה, קראו ל-Range.UpdateFields() כדי לחשב מחדש כל שדה בטווח הזה — השתמשו ב-Document.Range.UpdateFields() לכל המסמך — או ב-Field.Update() לשדה בודד. Range.UnlinkFields() ממיר כל שדה בטווח לטקסט סטטי בקריאה אחת, ו-Range.NormalizeFieldTypes() מתאם את קוד הסוג השמור של השדה מול קוד השדה האמיתי לאחר עריכה ידנית.


צעד 4: הגדרת התנהגות עדכון השדות באמצעות FieldOptions

Document.FieldOptions (מופע של FieldOptions) שולט איך השדות של כל המסמך מתנהגים במהלך עדכון: CurrentUser (מופע של UserInformation — Name, Initials, Address) מספק את הזהות שממנה קוראים השדות הקשורים למחבר ולשם המשתמש, DefaultDocumentAuthor מזרק תוצאות הקשורות למחבר, ו-LegacyNumberFormat / UseInvariantCultureNumberFormat / PreProcessCulture / FieldUpdateCultureSource שולטות בעיצוב מספרים ותאריכים. לצינורות ללא השגחה, הקצו את FieldOptions.UserPromptRespondent (IFieldUserPromptRespondent) כדי ששדות מבוססי בקשה כגון ASK ו-FILLIN לא יחסמו בהמתנה לקלט אינטראקטיבי, והקצו IFieldDatabaseProvider מותאם אישית ל-FieldOptions.FieldDatabaseProvider כדי לספק את השורות של השדה DATABASE ממקור הנתונים שלכם במקום חיבור למסד נתונים אמיתי.


צעד 5: מעקב אחרי עדכוני שדות באמצעות Callback

מימשו את IFieldUpdatingCallback (FieldUpdating ו-FieldUpdated) והקצו אותו ל-FieldOptions כדי להריץ קוד מייד לפני ואחרי שכל שדה מחושב מחדש — שימושי לביקורת מדויקת על אילו שדות השתנו בעבודת אצווה. לדיווח על התקדמות במסמך גדול, מימשו את IFieldUpdatingProgressCallback (Notify), אשר מקבל FieldUpdatingProgressArgs חושף את TotalFieldsCount, UpdatedFieldsCount, ו-UpdateCompleted.


צעד 6: המרת או הסרת שדה

Field.Unlink() מחליף את השדה בתוצאת החישוב האחרונה שלו כטקסט סטטי רגיל, תוך זריקת קוד השדה הבסיסי — השתמשו בו כשאתם רוצים שהערך יהיה משולב במסמך לצמיתות. Field.Remove() מוחק את הצמתים FieldStart, Separator, ו-FieldEnd יחד עם קוד השדה והתוצאה, ומסיר את השדה לחלוטין. העדיפו את שני השיטות הללו על פני מחיקת צמתים סימון באופן ישיר, מכיוון שהסרה ידנית של רק חלק ממבנה השדה עלולה לגרום לעץ המסמך להיות בלתי עקבי.

בעיות נפוצות ותיקונים

התוצאה המוצגת של שדה מתיישנת לאחר עריכת המסמך. Aspose.Words FOSS אינו מעדכן שדות אוטומטית בעת טעינה או שמירה. קרא Range.UpdateFields() or Field.Update() בצורה מפורשת אחרי העריכה.

PAGE, NUMPAGES, או שמספר עמוד בתוכן העניינים תמיד מוצג 0. פריסת עמוד/הצגה איננה חלק מהמהדורה הזו, ולכן שדות שהתוצאה שלהם תלויה בעימוד מתקבלים כמחליף 0. זהו התנהגות צפויה במהדורה זו.

עדכון שדה בקבוצה נראה תקוע. שדה מונחה פקודה (ASK, FILLIN) אין IFieldUserPromptRespondent מוקצה. הקצה FieldOptions.UserPromptRespondent, או הגדר DefaultResponse על המופע של השדה הפרטי.

ה DATABASE השדה אינו מייצר שורות. לא IFieldDatabaseProvider משוייך ל FieldOptions.FieldDatabaseProvider. מימוש הממשק והקצאתו לפני הקריאה Range.UpdateFields().

שאלות נפוצות

האם Aspose.Words FOSS מעריך כל סוג שדה של Word?

מודל האובייקטים Field מייצג כל ערך FieldType ומעדכן את רובם, אך שדות שהתוצאה שלהם תלויה בפריסת העמוד — כגון PAGE ו-NUMPAGES — מתמירים למילוי מציין מקום 0 מכיוון שהגרסה הזו אינה כוללת את מנוע הפריסה/הצגה.

איך אני מבצע הערכה מחדש של השדות לאחר עריכה פרוגרמטית?

הפעל את Range.UpdateFields() על הטווח הכולל את התוכן שערך, או את Document.Range.UpdateFields() עבור כל המסמך.

האם אפשר להמיר שדה לטקסט פשוט וסטטי?

כן — Field.Unlink() מחליף את השדה בתוצאתו המחושבת האחרונה כטקסט רגיל.

איך אני מסיר שדה לחלוטין, כולל התוצאה שלו?

הפעל את Field.Remove(). הוא מוחק את הצמתים FieldStart, Separator ו-FieldEnd יחד עם קוד השדה ותוכן התוצאה.

איך אני מספק נתונים מותאמים אישית לשדה DATABASE?

ממש IFieldDatabaseProvider והקצה אותו לDocument.FieldOptions.FieldDatabaseProvider. המימוש של GetQueryResult() שלו מחזיר FieldDatabaseDataTable שנבנה מFieldDatabaseDataRow מופעים.

ראה גם

 עברית