כיצד לעבוד עם אינדקס ו-טבלאות Word ב-.NET
איך לעבוד עם אינדקס וטבלאות של Word ב-.NET
מדריך זה מציג כיצד להכניס ולבנות את מבני ההתייחסות המונעים-שדות שמסמכי Word משתמשים בהם כדי לתמצת את התוכן שלהם — תוכנית תוכן, אינדקס אלפביתי, וטבלת רשויות — עם Aspose.Words קוד פתוח עבור .NET. כל אחד מהם מורכב משדות סימון במקומות אחרים במסמך: FieldToc מרכיב ערכים מבוססי כותרת וערכים המסומנים ב-FieldTC, FieldIndex מרכיב סימני FieldXE, ו-FieldToa מרכיב ציטוטי FieldTA. כל מחלקת שדה במשפחה זו נגזרת מסוג הבסיס Field במרחב השמות Aspose.Words.Fields.
מדריך שלב-אחר-שלב
שלב 1: הוספת תוכן עניינים
קרא ל-DocumentBuilder.InsertTableOfContents(switches) במיקום שבו צריך להופיע ה-TOC, תוך העברת מחרוזת מתג-שדה בסגנון Word — לדוגמה "\o \"1-3\" \h \z \u" — כדי לשלוט באילו רמות כותרת ייכללו וכיצד הפלט יעוצב, אותם מתגים שה-Word כותב כאשר TOC מוכנס דרך הממשק שלו. פעולה זו מכניסה FieldToc, שגם חושפת את המבנה הזה ישירות כמאפיינים: HeadingLevelRange/EntryLevelRange לרמות המתאר המוכללות, InsertHyperlinks, PreserveTabs/PreserveLineBreaks, ו-BookmarkName. כדי לקבל טבלת איורים במקום תוכן עניינים, הגדר TableOfFiguresLabel או CaptionlessTableOfFiguresLabel באותו FieldToc.
שלב 2: סימון ערכי תוכן עניינים מותאמים אישית
לא כל ערך שמופיע בתוכן עניינים (TOC) נובע מסגנון כותרת. יש להכניס FieldTC במיקום ספציפי כדי לסמן אותו כערך בתוכן עניינים באופן עצמאי מסגנון הפסקה: FieldTC.Text הוא טקסט הערך, EntryLevel הוא רמת המתאר שבו הוא צריך להופיע, ו-OmitPageNumber מדכא את מספר העמוד עבור ערך זה. כאשר מסמך זקוק ליותר מתוכן עניינים אחד — למשל תכני עניינים ראשי ותוכן דמויות נפרד — יש להגדיר את FieldTC.TypeIdentifier כך שיתאים ל-EntryIdentifier של ה-FieldToc שעליו הוא ייאסף.
צעד 3: בניית אינדקס מהערכים המסומנים
סמן כל מיקום השייך לאינדקס עם FieldXE, קבע Text לטקסט הערך; EntryType מקבץ ערכים לתת-רמות באמצעות תחביר מופרד בנקודותיים, ו-PageRangeBookmarkName מסמן סימנייה שהיקפה הופכת לטווח עמודים באינדקס במקום למספר עמוד בודד. FieldIndex מרכיב כל סימון FieldXE במסמך לתוצאה אלפביתית — הגדר את Heading להוספת מחלקי כותרות אותיות (A, B, C…), את LetterRange להגבלת האינדקס לחלק מהאלפבית, ואת RunSubentriesOnSameLine לשליטה בפריסת תתי-ערכים. PageNumberSeparator, PageRangeSeparator, SequenceSeparator ו-CrossReferenceSeparator שולטים בפיסוק בין הערך להתייחסות העמוד. סגנונות הוויזואליים המובנים של אינדקס ב-Word זמינים כמונה FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
צעד 4: בניית טבלת רשויות מציטוטים
סמן כל ציטוט בטקסט עם FieldTA: LongCitation ו-ShortCitation מחזיקים את טקסט הציטוט, EntryCategory מקבץ אותו תחת כותרת כגון “Cases” או “Statutes”, ו-IsBold/IsItalic שולטות בעיצובו. FieldToa מרכיב את הציטוטים האלה לטבלה — EntryCategory בוחר איזו קטגוריה להרכיב, UseHeading שולט האם כותרות הקטגוריות מופיעות, UsePassim מיישם את השיטה “passim” למקורות שצוינו פעמים רבות, ו-PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting שולטות בפריסה.
צעד 5: רענון שדות לאחר שינוי המסמך
ת 内容 עניינים, אינדקס, או טבלת רשויות לא מתעדכנים באופן אוטומטי כשמתוכן הסביבה משתנה. יש לקרוא ל-Update() על השדה הספציפי — לדוגמה FieldToc.Update() — כדי לחשב מחדש את תוצאתו, או ל-FieldToc.UpdatePageNumbers() כאשר רק חלק מספר העמוד צריך רענון. כדי לרענן את כל השדות במסמך בבת אחת במקום אחד אחר אחד, יש לקרוא ל-Document.UpdateFields(). יש לזכור שמספרי העמוד בתוצאות של שדות אלה מוערכים כערכי מציין מקום בגרסה זו, מכיוון שסידור העמודים והדפדוף אינם חלק ממנה.
צעד 6: לכלול ערכים ממסמכים אחרים
הכנס FieldRD כדי ש-TOC, אינדקס או טבלת סמכויות ימשכו רשומות מקובץ אחר בזמן הקומפילציה. FieldRD.FileName מציין את המסמך המופנה, ו-IsPathRelative שולט האם הנתיב נפתר יחסית למסמך הנוכחי. הוסף FieldRD אחד לכל מסמך נוסף ועדכן את שדה הקומפילציה לאחר מכן כך שהתוצאה המשולבת תכלול את התוכן המופנה.
בעיות נפוצות ופתרונות
תּוכן העניינים אינו כולל את הכותרות הצפויות. מחרוזת המתג של ה-TOC (או HeadingLevelRange) מוחקת את רמות המתאר האלה. התאימו את המתגים המועברים ל InsertTableOfContents, או הגדירו FieldToc.HeadingLevelRange ישירות.
רשומת אינדקס אינה מופיעה במקום הצפוי. המתאימה FieldXE הסמן חסר, או שה- EntryType התחביר ברמת המשנה אינו תואם למה FieldIndex מצפה. ודא את FieldXE הסמנים קיימים וה EntryType הערכים מעוצבים באופן עקבי.
תוצאות השדה נראות מיושנות לאחר עריכת תוכן. השדה לא עודכן לאחר העריכה. קרא Update() על השדה המסוים, או Document.UpdateFields() לרענן את כל השדות בבת אחת.
רשומות ממסמך אחר אינן נכללות בעת ההידור. לא FieldRD הפניה למסמך זה קיימת, או IsPathRelative אינה תואמת לאופן שבו הנתיב צריך להיפתר. הוסף FieldRD עם הנכון FileName and IsPathRelative הגדרה.
שאלות נפוצות
איך אני מוסיף תוכן עניינים באופן תכנותי?
הפעל את DocumentBuilder.InsertTableOfContents(switches) עם מחרוזת מתג בסגנון Word, כגון "\o \"1-3\" \h \z \u", במיקום שבו צריך להופיע תוכן העניינים.
איך מסמן טקסט כערך באינדקס?
הכנס שדה FieldXE במיקום זה עם המאפיין Text שלו מוגדר לטקסט הערך; FieldIndex מקמפיל את כל הסמנים FieldXE במסמך לתוצאה של האינדקס.
מה ההבדל בין FieldTC לערך תוכן עניינים מבוסס כותרת?
התנהגות ברירת המחדל של תוכן העניינים ב-Word אוספת ערכים מפסקאות באמצעות סגנונות כותרת. FieldTC מסמן מיקום שרירותי כערך תוכן עניינים באופן בלתי תלוי בסגנון הפסקה, ש-FieldToc יכול לכלול באמצעות התאמת ערכי EntryIdentifier/TypeIdentifier.
איך מרענן תוכן עניינים או אינדקס לאחר שינוי המסמך?
הפעל את Update() על השדה הספציפי (או UpdatePageNumbers() על FieldToc רק למספרי העמודים), או Document.UpdateFields() כדי לרענן כל שדה במסמך.
האם ניתן לקמפל TOC או אינדקס על פני מספר מסמכים?
כן — הוסף FieldRD שמפנה לכל מסמך נוסף דרך FileName. שדה הקימפול (FieldToc, FieldIndex, או FieldToa) כולל רשומות מהמסמכים המופנים ברגע שהוא מתעדכן.