כיצד לעבוד עם טבלאות ב-.NET
המדריך הזה מראה כיצד לבנות, לעצב ולקרוא טבלאות באופן תכנותי ב Aspose.Words FOSS עבור .NET, תוך שימוש ב Table, Row, ו Cell מחלקות ב Aspose.Words.Tables מרחב שמות יחד עם DocumentBuilder. זה מכסה בניית טבלה מאפס, עיצוב תאים ושורות תוך כדי בנייה, שליטה על פריסת הטבלה בכללותה ו-AutoFit, קביעת רוחבים מועדפים, מיזוג תאים, וקריאת טבלאות שכבר קיימות במסמך שנטען.
מדריך שלב-אחר-שלב
שלב 1: התקנת החבילה
Aspose.Words FOSS for .NET עדיין לא מפרסם חבילה של NuGet – במקום זאת יש לבנות את הספרייה ממקורות. שכפלו את https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, ולאחר מכן בנו את Aspose.Words.sln בתצורת Release עם ערכת הפיתוח .NET והפנו אל הרכיב Aspose.Words שנוצר מהפרויקט שלכם. הספרייה מיועדת ל-.NET Standard 2.0, ולכן היא פועלת על .NET Framework 4.6.2+ ו-.NET 6/8/10.
שלב 2: ייבוא מחלקות נדרשות
הוסיפו הנחיית using Aspose.Words; עבור מחלקות המסמך המרכזיות (Document, DocumentBuilder), והנחיית using Aspose.Words.Tables; עבור מחלקות הטבלה הספציפיות שהמדריך מכסה – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth, וה-enum-ים הקשורים.
שלב 3: בניית טבלה חדשה עם DocumentBuilder
צור Document ו-DocumentBuilder הקשורים אליו, ואז קרא ל-DocumentBuilder.StartTable() כדי להתחיל טבלה במצב הסמן. עבור כל תא בשורה, קרא ל-DocumentBuilder.InsertCell(), ואז סגור את השורה עם DocumentBuilder.EndRow(). חזור על הפעולה עבור מספר השורות שהטבלה דורשת, וסגור את כל הטבלה עם DocumentBuilder.EndTable(). כל StartTable() דורש EndTable() תואם, וכל שורה דורשת EndRow() תואם, אחרת המצב הפנימי של הבונה – ועץ המסמך שנוצר – יהיו פגומים.
שלב 4: עיצוב תאים ושורות בזמן הבנייה
הגדר את DocumentBuilder.CellFormat ו-DocumentBuilder.RowFormat לפני קריאה ל-InsertCell() או EndRow() כדי להחיל עיצוב על התאים והשורות שהבונה עומד ליצור – שני המאפיינים הללו משמשים כתבנית לתוכן חדש, ולא כתיקון רטרואקטיבי לתאים שכבר הוכנסו. CellFormat חושף את Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, ואת ארבעת מאפייני הריפוד (LeftPadding, RightPadding, TopPadding, BottomPadding), שניתן להגדיר כולם בבת אחת עם SetPaddings(). RowFormat חושף את Borders, Height, HeightRule, AllowBreakAcrossPages, ו-HeadingFormat. קרא ל-CellFormat.ClearFormatting() או RowFormat.ClearFormatting() כדי לאפס כל אחד מהם לברירות המחדל לפני הגדרת ערכים חדשים לשורה או לתא הבא.
שלב 5: הגדרת פריסת כלל הטבלה ו-AutoFit
לאחר שהטבלה קיימת, הגדר את מאפייני הפריסה ישירות על האובייקט Table: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) ו-TextWrapping. קרא ל-Table.SetBorders() כדי להחיל סגנון גבול, רוחב וצבע אחד על כל הטבלה, או ל-Table.SetBorder() כדי להגדיר צד יחיד; ClearBorders() ו-ClearShading() מאפסים אותם. Table.AutoFit(AutoFitBehavior) משנה את גודל הטבלה והתאים שלה בהתאם להתנהגות שנבחרה – קרא לו שוב לאחר כל עריכה מבנית, מכיוון שהוא משקף את מצב הטבלה רק ברגע הריצה, ולא באופן רציף.
שלב 6: הגדרת רוחב מועדף ורוחב תאים
צור ערכי רוחב באמצעות שיטות היצרן הסטטיות PreferredWidth.FromPercent() לפריסה המסתגלת לרוחב העמוד הזמין, או PreferredWidth.FromPoints() לרוחב קבוע; PreferredWidthType מדווחת איזו סוג ערך (Auto, Percent או Points) מוחזק על ידי PreferredWidth נתון. הקצה את התוצאה ל-Table.PreferredWidth עבור כל הטבלה או ל-CellFormat.PreferredWidth לתא בודד.
שלב 7: מיזוג תאים
סמן תאים כממוזגים על ידי הגדרת CellFormat.HorizontalMerge או CellFormat.VerticalMerge (שניהם משויכים כ-CellMerge) על התאים שצריכים להשתתף במיזוג. אם התאים נראו כממוזגים רק על ידי התאמת הרוחב שלהם במקום שסומן במפורש, קרא ל-Table.ConvertToHorizontallyMergedCells() כדי להמיר את הסידור החזותי לתאים עם מצב CellMerge אמיתי. CellVerticalAlignment שולט באיך שהתוכן מיושר אנכית בתוך תא, באופן בלתי תלוי במיזוג.
שלב 8: קריאת טבלאות ממסמך קיים
כדי לעבוד עם טבלאות שכבר קיימות במסמך טעון, קרא את Body.Tables (או את המאפיין Tables על כל Story אחר) – TableCollection – במקום לבנות חדשים. Table.Rows מחזיר RowCollection ו-Row.Cells מחזיר CellCollection; שלושת סוגי האוספים תומכים ב-Add(), Insert(), Remove(), RemoveAt(), Contains() ו-IndexOf() לעריכות תכנותיות. לאחר הסרת שורות או תאים, קרא ל-Table.EnsureMinimum(), Row.EnsureMinimum() או Cell.EnsureMinimum() כדי שהצומת תשמור על המבנה המינימלי התקין שה-Word מצפה לו – שורה ריקה, תא ריק או פסקה ריקה, בהתאמה.
בעיות נפוצות ותיקונים
מסמך שנשמר נראה פגום, או שקרתה שגיאה במהלך השמירה שורה או הטבלה עצמה מעולם לא נסגרה. תמיד לצמד DocumentBuilder.StartTable() עם סיום EndTable(), וסגור כל שורה עם EndRow() לפני המעבר לבאה או לפני סיום הטבלה.
תאים חדשים אינם מקבלים את העיצוב שהגדרתי CellFormat and RowFormat שונו ב DocumentBuilder אחרי שהתאים המושפעים כבר הוכנסו. הגדר DocumentBuilder.CellFormat / RowFormat לפני ה InsertCell() or EndRow() קריאה שיוצרת את התוכן שברצונך לעצב.
הטבלה לא משנה גודל כפי שאני מצפה לאחר שאני ערוך את התוכן שלה Table.AutoFit(AutoFitBehavior) משקפת את מבנה הטבלה רק ברגע שהיא נקראת. קרא לה שוב לאחר כל עריכה מבנית – הוספה או הסרה של שורות, תאים, או תוכן – אם הפריסה צריכה להיות מותאמת מחדש.
תאים שנראים משולבים מתנהגים כתאים נפרדים כאשר קוראים להם בחזרה התאים התאימו רק לפי רוחב, ולא תוייגו עם CellMerge. קריאה Table.ConvertToHorizontallyMergedCells(), או קבע CellFormat.HorizontalMerge / VerticalMerge באופן מפורש על התאים שצריך למזג.
הסרת שורות או תאים משאירה את הטבלה במצב לא תקין Word מצפה לכל Table, Row, ו Cell לשמור על מבנה מינימלי תקין. לאחר הסרת תוכן בצורה תוכניתית, קרא EnsureMinimum() על הצומת שזה עתה שונה.
שאלות נפוצות
איך אני בונה טבלה מאפס במקום לערוך טבלה קיימת?
השתמש ב-DocumentBuilder: קרא ל-StartTable(), ואז InsertCell() עבור כל תא בשורה, EndRow() כדי לסגור את השורה, חזור עבור שורות נוספות, ו-EndTable() כדי לסגור את הטבלה.
איך אני מקבל את הטבלאות שכבר קיימות במסמך טעון?
קרא למאפיין Tables (זהו TableCollection) על ה-Body של הקטע שמעניין אותך, או על כל Story אחר כגון כותרת עליונה או כותרת תחתונה.
איך אני מגדיר טבלה כאחוז מרוחב העמוד במקום ברוחב קבוע?
הקצה Table.PreferredWidth = PreferredWidth.FromPercent(value) במקום PreferredWidth.FromPoints(value).
מה ההבדל בין קביעת גבולות עם SetBorders לבין SetBorder?
Table.SetBorders() מחיל סגנון קו, רוחב וצבע אחד על כל הגבולות בטבלה בבת אחת; Table.SetBorder() מגדיר צד בודד, ומאפשר לצדים השונים לקבל עיצוב שונה.
איך אני מאפס את העיצוב בתא או בשורה לפני השימוש בו מחדש?
קרא CellFormat.ClearFormatting() על CellFormat של התא, או RowFormat.ClearFormatting() על RowFormat של השורה.