עבודה עם טבלאות
עבודה עם טבלאות
טבלאות ב Aspose.Words FOSS עבור .NET מיוצגות על ידי Aspose.Words.Tables מרחב שמות: Table, Row, ו Cell יוצרות היררכיית צמתים מורכבת בת שלושה רמות היושבת בעץ המסמך לצד פסקאות. דף זה מסקר בניית טבלאות עם DocumentBuilder, עיצוב שורות ותאים, שליטה בפריסת הטבלה כולה, ומיזוג תאים.
מודל האובייקט של הטבלה
Table הוא CompositeNode המכיל צמתים Row, וכל Row הוא CompositeNode המכיל צמתים Cell; Cell בתורו מכיל פסקאות וייתכן שגם טבלאות מקוננות. Table.Rows מחזיר RowCollection, Row.Cells מחזיר CellCollection, ו-Body או Story אחרים חושפים כל טבלה ברמת העליונה שבה דרך המאפיין Tables, שהוא TableCollection. כל שלוש האוספים תומכים ב-Add(), Insert(), Remove(), RemoveAt(), Contains(), ו-IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum(), ו-Cell.EnsureMinimum() ממלאים כל אחד את התוכן הקטן ביותר החוקי שהצומת מסוג זה צריך (שורה ריקה, תא ריק, או פסקה ריקה, בהתאמה) לאחר עריכות תוכניתיות שמשאירות אחד ללא זה.
בניית טבלאות עם DocumentBuilder
DocumentBuilder.StartTable() מתחיל טבלה חדשה במצב הסמן, InsertCell() מוסיף תא לשורה הנוכחית, EndRow() סוגר את השורה הנוכחית, ו-EndTable() סוגר את הטבלה. הגדר את DocumentBuilder.CellFormat ו-DocumentBuilder.RowFormat לפני קריאה ל-InsertCell() או ל-EndRow() כדי ליישם עיצוב ברירת מחדל לתאים ולשורות בזמן יצירתם – מאפיינים אלה פועלים כתבנית לתוכן שהבונה מכניס לאחר מכן, ולא כתיקון רטרואקטיבי לתאים שכבר קיימים במסמך.
עיצוב תאים ושורות
Cell.CellFormat הוא מקרה של CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) עם ClearFormatting() לאיפוס שלו ו-SetPaddings() כדי להגדיר את כל ארבעת הריפודים של התא בבת אחת. Row.RowFormat הוא מקרה של RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) עם ClearFormatting() משלו.
עיצוב לכל הטבלה ו-AutoFit
Table עצמו חושף מאפייני פריסה – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, ונתוני נגישות דרך Title ו-Description. Table.AutoFit(AutoFitBehavior) משנה את גודל הטבלה והתאים שלה בהתאם להתנהגות שנקבעה. SetBorder() מגדיר צד גבול אחד ו-SetBorders() מגדיר כל גבול לאותו סגנון קו, רוחב וצבע בכל הטבלה; ClearBorders() ו-ClearShading() מאפסים זאת. ConvertToHorizontallyMergedCells() ממיר תאים שנמזגו על ידי התאמת רוחב לתאים המסומנים במפורש עם HorizontalMerge.
רוחבים מועדפים ורוחב תאים
PreferredWidth מייצג רוחב והיחידה שלו, נוצר באמצעות שיטות היצרן הסטטיות PreferredWidth.FromPercent() או PreferredWidth.FromPoints(); PreferredWidthType מזהה איזה סוג ערך (Auto, Percent או Points) מחזיק PreferredWidth נתון. גם Table.PreferredWidth וגם CellFormat.PreferredWidth מקבלים ערכים אלה.
תאים ממוזגים
CellFormat.HorizontalMerge ו-CellFormat.VerticalMerge (CellMerge) מציינים כיצד תא משתתף במיזוג אופקי או אנכי עם השכנים שלו. CellVerticalAlignment שולט כיצד התוכן מיושר בתוך התא בצורה אנכית, ללא תלות במצב המיזוג.
טיפים ושיטות עבודה מומלצות
- סגור כל
StartTable()עםEndRow()תואם לכל שורה ו-EndTable()סופי – שורה או טבלה שלא נסגרו משאירות את המצב הפנימי של הבונה (ועץ המסמך המתקבל) פגום. - הגדר
DocumentBuilder.CellFormatו-DocumentBuilder.RowFormatלפני כל קריאה ל-InsertCell()או ל-EndRow()אם שורות או תאים שונים באותה טבלה דורשים עיצוב שונה; הבונה מיישם את מה שהוגדר ברגע ההכנסה. - קרא ל-
Table.EnsureMinimum(),Row.EnsureMinimum()אוCell.EnsureMinimum()לאחר הסרת תוכן בצורה תכנית, כך שהצומת שומרת על המבנה המינימלי התקף שמצפה Word. - השתמש ב-
PreferredWidth.FromPercent()עבור טבלאות שצריכות להתאים לרוחב העמוד הזמין, וב-PreferredWidth.FromPoints()עבור רוחב פריסה קבוע. AutoFitBehaviorמתבצע כאשר אתה קורא ל-Table.AutoFit()– הוא אינו רץ באופן רצוף כאשר אתה מוסיף או מסיר תוכן, ולכן קרא לו שוב אחרי עריכות משמעותיות אם אתה צריך שהטבלה תותאם מחדש.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
| הטבלה נראית פגומה או גורמת לשגיאה בעת השמירה | שורה או הטבלה מעולם לא נסגרו עם EndRow() / EndTable() | תמיד יש לצמד את StartTable() עם EndTable() הסופי, ולסגור כל שורה עם EndRow() |
| תאים חדשים אינם מקבלים את העיצוב שהגדרתי | CellFormat / RowFormat שונו בבונה לאחר שהתאים כבר הוכנסו | הגדר DocumentBuilder.CellFormat / RowFormat לפני קריאה ל-InsertCell() / EndRow() עבור תוכן זה |
| הטבלה לא משנה גודל כפי שאני מצפה לאחר עריכות | AutoFit() משקף את מצבו של הטבלה ברגע שבו הוא נקרא, ולא באופן רציף | קרא ל-Table.AutoFit(AutoFitBehavior) שוב לאחר עריכות מבניות |
| תאים סמוכים שנראים כאילו הם ממוזגים פועלים כתאים נפרדים | תאים נבחרו רק לפי הרוחב, ולא סומנו עם CellMerge | קרא ל-Table.ConvertToHorizontallyMergedCells(), או הגדר את CellFormat.HorizontalMerge / VerticalMerge במפורש |
FAQ
איך אני בונה טבלה מאפס עם DocumentBuilder?
קרא StartTable(), לאחר מכן InsertCell() עבור כל תא בשורה, EndRow() לסגירת השורה, חזור עבור שורות נוספות, ולבסוף EndTable() לסגירת הטבלה.
איך אני מגדיר רוחב טבלה באחוזים במקום רוחב קבוע?
הקצה Table.PreferredWidth = PreferredWidth.FromPercent(value) במקום PreferredWidth.FromPoints(value).
איך אני מאפס את כל העיצוב בתא או בשורה?
קרא CellFormat.ClearFormatting() על CellFormat של תא, או RowFormat.ClearFormatting() על RowFormat של שורה.
איך אני מגדיר גבולות והצללה לכל הטבלה בבת אחת?
השתמש ב-Table.SetBorders() לגבול אחיד על כל הצדדים, ב-Table.SetBorder() לצד אחד בכל פעם, וב-Table.SetShading() להצללה אחידה; ClearBorders() ו-ClearShading() מאפסים אותם.
API Reference סיכום
| מחלקה / Enum | תיאור |
|---|---|
Table | צומת טבלה; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | צומת שורת טבלה; Cells, RowFormat, EnsureMinimum() |
Cell | צומת תא בטבלה; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | אוספים טיפוסיים של צמתים Table / Row / Cell |
CellFormat | עיצוב לכל תא: גבולות, צללה, ריווח, מצב מיזוג, יישור אנכי |
RowFormat | עיצוב לכל שורה: גבולות, גובה, התנהגות שבירת עמוד |
PreferredWidth / PreferredWidthType | ערך רוחב של טבלה או תא והיחידה שלו (אוטומטי, אחוז, נקודות) |
AutoFitBehavior | כיצד Table.AutoFit() משנה את גודל הטבלה והתאים שלה |
CellMerge / CellVerticalAlignment | מצב מיזוג תאים אופקי/אנכי ויישור תוכן אנכי |
TableAlignment / TableStyleOptions / TextWrapping | יישור לכל רוחב הטבלה, יישום סגנון, והתנהגות גלישת טקסט |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | בניית טבלה מבוססת סמן |