החל עיצוב

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

Aspose.Words מספק עשיר API כדי לאחזר ולהחיל עיצוב לטבלה. אתה יכול להשתמש בצמתים Table, RowFormat ו CellFormat כדי להגדיר את העיצוב.

במאמר זה נדבר על אופן החלת העיצוב על צמתים שונים בטבלה ובאילו הגדרות עיצוב טבלה Aspose.Words תומכות.

החל עיצוב על צמתים שונים

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

עיצוב ברמת הטבלה

כדי להחיל עיצוב על טבלה, ניתן להשתמש במאפיינים הזמינים בצומת Table המתאים באמצעות הכיתות Table, PreferredWidth ו - TableCollection.

התמונות שלהלן מציגות ייצוג של תכונות העיצוב Table ב Microsoft Word והמאפיינים המתאימים שלהן ב Aspose.Words.

formattin-features-table-level-aspose-words-cpp

formatting-table-options-aspose-words-cpp

דוגמת הקוד הבאה מראה כיצד להחיל גבול מתאר על טבלה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Align the table to the center of the page.
table->set_Alignment(TableAlignment::Center);
// Clear any existing borders from the table.
table->ClearBorders();
// Set a green border around the table but not inside.
table->SetBorder(BorderType::Left, LineStyle::Single, 1.5, System::Drawing::Color::get_Green(), true);
table->SetBorder(BorderType::Right, LineStyle::Single, 1.5, System::Drawing::Color::get_Green(), true);
table->SetBorder(BorderType::Top, LineStyle::Single, 1.5, System::Drawing::Color::get_Green(), true);
table->SetBorder(BorderType::Bottom, LineStyle::Single, 1.5, System::Drawing::Color::get_Green(), true);
// Fill the cells with a light green solid color.
table->SetShading(TextureIndex::TextureSolid, System::Drawing::Color::get_LightGreen(), System::Drawing::Color::Empty);
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.ApplyOutlineBorder.docx");

דוגמת הקוד הבאה מראה כיצד לבנות טבלה עם כל הגבולות מופעלים (רשת):

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Clear any existing borders from the table.
table->ClearBorders();
// Set a green border around and inside the table.
table->SetBorders(LineStyle::Single, 1.5, System::Drawing::Color::get_Green());
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.BuildTableWithBorders.docx");

עיצוב רמת שורה

רמת שורה

התמונות שלהלן מציגות ייצוג של תכונות העיצוב Row ב Microsoft Word והמאפיינים המתאימים שלהן ב Aspose.Words.

formatting-row-level-aspose-words-cpp

דוגמת הקוד הבאה מראה כיצד לשנות את עיצוב שורת הטבלה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Retrieve the first row in the table.
SharedPtr<Row> firstRow = table->get_FirstRow();
firstRow->get_RowFormat()->get_Borders()->set_LineStyle(LineStyle::None);
firstRow->get_RowFormat()->set_HeightRule(HeightRule::Auto);
firstRow->get_RowFormat()->set_AllowBreakAcrossPages(true);

עיצוב ברמת התא

עיצוב ברמת התא נשלט על ידי כיתות Cell, CellFormat ו - CellCollection.

התמונות שלהלן מציגות ייצוג של תכונות העיצוב Cell ב Microsoft Word והמאפיינים המתאימים שלהן ב Aspose.Words.

formatting-cell-level-aspose-words-cpp

auto-formatting-cell-level-aspose-words-cpp

דוגמת הקוד הבאה מראה כיצד לשנות את העיצוב של תא טבלה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
SharedPtr<Cell> firstCell = table->get_FirstRow()->get_FirstCell();
firstCell->get_CellFormat()->set_Width(30);
firstCell->get_CellFormat()->set_Orientation(TextOrientation::Downward);
firstCell->get_CellFormat()->get_Shading()->set_ForegroundPatternColor(System::Drawing::Color::get_LightGreen());

דוגמת הקוד הבאה מראה כיצד להגדיר את כמות השטח (בנקודות) להוסיף לשמאל / למעלה/ימינה / למטה של תוכן התא:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->StartTable();
builder->InsertCell();
// Sets the amount of space (in points) to add to the left/top/right/bottom of the cell's contents.
builder->get_CellFormat()->SetPaddings(30, 50, 30, 50);
builder->Writeln(u"I'm a wonderful formatted cell.");
builder->EndRow();
builder->EndTable();
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.CellPadding.docx");
view raw cell-padding.h hosted with ❤ by GitHub

ציין גבהים בשורה

הדרך הפשוטה ביותר להגדיר את גובה השורה היא להשתמש ב - DocumentBuilder. באמצעות המאפיינים המתאימים RowFormat, באפשרותך להגדיר את הגדרת הגובה המוגדרת כברירת מחדל או להחיל גובה שונה עבור כל שורה בטבלה.

ב Aspose.Words, גובה שורת הטבלה נשלט על ידי:

  • מאפיין גובה השורה - Height
  • מאפיין כלל הגובה עבור השורה הנתונה - HeightRule

במקביל, גובה שונה ניתן להגדיר עבור כל שורה – זה מאפשר לך לשלוט באופן נרחב את הגדרות הטבלה.

דוגמת הקוד הבאה מראה כיצד ליצור טבלה המכילה תא בודד ולהחיל עיצוב שורות:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
SharedPtr<Table> table = builder->StartTable();
builder->InsertCell();
SharedPtr<RowFormat> rowFormat = builder->get_RowFormat();
rowFormat->set_Height(100);
rowFormat->set_HeightRule(HeightRule::Exactly);
// These formatting properties are set on the table and are applied to all rows in the table.
table->set_LeftPadding(30);
table->set_RightPadding(30);
table->set_TopPadding(30);
table->set_BottomPadding(30);
builder->Writeln(u"I'm a wonderful formatted row.");
builder->EndRow();
builder->EndTable();
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.ApplyRowFormatting.docx");

ציון רוחב טבלה ותא

טבלה במסמך Microsoft Word מספקת מספר דרכים שונות לשינוי גודל הטבלה והתאים הבודדים. תכונות אלה מאפשרות שליטה ניכרת על המראה וההתנהגות של הטבלה, כך ש Aspose.Words תומך בהתנהגות של טבלאות, כמו ב Microsoft Word.

חשוב לדעת כי אלמנטים בטבלה מציגים מספר מאפיינים שונים שיכולים להשפיע על אופן חישוב רוחב הטבלה הכוללת, כמו גם תאים בודדים:

  • רוחב מועדף על השולחן
  • רוחב מועדף על תאים בודדים
  • מאפשר התאמה אוטומטית על השולחן

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

כיצד להשתמש רוחב מועדף

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

הסוג והערך המתאימים של הרוחב המועדף נקבעים באמצעות השיטות של הכיתה PreferredWidth:

  • שיטת Auto כדי לציין אוטומטי או “אין רוחב מועדף”
  • שיטת FromPercent כדי לציין אחוז רוחב
  • שיטת FromPoints כדי לציין את הרוחב בנקודות

התמונות למטה מראות ייצוג של preferred width setting features ב Microsoft Word והמאפיינים המתאימים שלהם ב Aspose.Words.

formatting-table-properties-aspose-words-cpp

דוגמה לאופן החלת אפשרויות אלה על טבלה אמיתית במסמך ניתן לראות בתמונה למטה.

todo:image_alt_text

ציין את הטבלה או רוחב התא המועדפים

ב Aspose.Words, רוחבי טבלה ותא מוגדרים באמצעות המאפיין Table.PreferredWidth והמאפיין CellFormat.PreferredWidth, עם אפשרויות זמינות בספירה PreferredWidthType:

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

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

דוגמת הקוד הבאה מראה כיצד להגדיר את הטבלה להתאמה אוטומטית ל-50% מרוחב העמוד:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Insert a table with a width that takes up half the page width.
SharedPtr<Table> table = builder->StartTable();
builder->InsertCell();
table->set_PreferredWidth(PreferredWidth::FromPercent(50));
builder->Writeln(u"Cell #1");
builder->InsertCell();
builder->Writeln(u"Cell #2");
builder->InsertCell();
builder->Writeln(u"Cell #3");
doc->Save(ArtifactsDir + u"WorkingWithTables.AutoFitToPageWidth.docx");

שימוש במאפיין CellFormat.PreferredWidth בתא נתון יתאים את רוחבו המועדף.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Insert a table row made up of three cells which have different preferred widths.
builder->StartTable();
// Insert an absolute sized cell.
builder->InsertCell();
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPoints(40));
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_LightYellow());
builder->Writeln(u"Cell at 40 points width");
// Insert a relative (percent) sized cell.
builder->InsertCell();
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(20));
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_LightBlue());
builder->Writeln(u"Cell at 20% width");
// Insert a auto sized cell.
builder->InsertCell();
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::Auto());
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_LightGreen());
builder->Writeln(u"Cell automatically sized. The size of this cell is calculated from the table preferred width.");
builder->Writeln(u"In this case the cell will fill up the rest of the available space.");
doc->Save(ArtifactsDir + u"WorkingWithTables.PreferredWidthSettings.docx");

מצא סוג וערך רוחב מועדפים

ניתן להשתמש במאפיינים Type ו - Value כדי למצוא את פרטי הרוחב המועדפים על הטבלה או התא הרצויים.

דוגמת הקוד הבאה מראה כיצד לאחזר את סוג הרוחב המועדף של תא טבלה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
table->set_AllowAutoFit(true);
SharedPtr<Cell> firstCell = table->get_FirstRow()->get_FirstCell();
PreferredWidthType type = firstCell->get_CellFormat()->get_PreferredWidth()->get_Type();
double value = firstCell->get_CellFormat()->get_PreferredWidth()->get_Value();

כיצד להגדיר התאמה אוטומטית

המאפיין AllowAutoFit מאפשר לתאים בטבלה לגדול ולהתכווץ בהתאם לקריטריון שנבחר. לדוגמה, באפשרותך להשתמש באפשרות AutoFit to Window כדי להתאים את הטבלה לרוחב הדף, ובאפשרות AutoFit to Content כדי לאפשר לכל תא לגדול או להתכווץ בהתאם לתוכן שלו.

כברירת מחדל, Aspose.Words מוסיף טבלה חדשה באמצעות AutoFit to Window. הטבלה תהיה בגודל בהתאם לרוחב העמוד הזמין. כדי לשנות את גודל הטבלה, ניתן לקרוא לשיטת AutoFit. שיטה זו מקבלת ספירה AutoFitBehavior המציינת איזה סוג של התאמה אוטומטית מוחל על הטבלה.

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

דוגמת הקוד הבאה מראה כיצד לערוך טבלה לכיווץ או גידול של כל תא בהתאם לתכולתו:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
table->set_AllowAutoFit(true);

AutoFit שולחן לחלון

כאשר התאמה אוטומטית לחלון מוחלת על טבלה, הפעולות הבאות מבוצעות למעשה מאחורי הקלעים:

  1. המאפיין Table.AllowAutoFit מאפשר לשנות באופן אוטומטי את גודל העמודות כך שיתאימו לתוכן הזמין, תוך שימוש בערך Table.PreferredWidth של 100%
  2. CellFormat.PreferredWidth מוסר מכל תאי הטבלה
  3. רוחב העמודות מחושב מחדש עבור תוכן הטבלה הנוכחי-התוצאה הסופית היא טבלה שתופסת את כל הרוחב הזמין
  4. רוחב העמודות בטבלה משתנה באופן אוטומטי כאשר המשתמש עורך את הטקסט

דוגמת הקוד הבאה מראה כיצד להתאים טבלה אוטומטית לרוחב העמוד:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Autofit the first table to the page width.
table->AutoFit(AutoFitBehavior::AutoFitToWindow);
doc->Save(ArtifactsDir + u"WorkingWithTables.AutoFitTableToWindow.docx");

AutoFit טבלה לתוכן

כאשר הטבלה מותאמת אוטומטית לתוכן, השלבים הבאים מבוצעים למעשה מאחורי הקלעים:

  1. המאפיין Table.AllowAutoFit מאפשר לשנות באופן אוטומטי את גודל כל תא בהתאם לתוכן שלו

  2. רוחב הטבלה המועדף מוסר מ Table.PreferredWidth, CellFormat.PreferredWidth מוסר עבור כל תא טבלה

  3. רוחב העמודות מחושב מחדש עבור תוכן הטבלה הנוכחי-התוצאה הסופית היא טבלה שבה רוחב העמודות ורוחב הטבלה כולה משתנים באופן אוטומטי כך שיתאימו בצורה הטובה ביותר לתוכן כאשר המשתמש עורך את הטקסט

דוגמת הקוד הבאה מראה כיצד להתאים אוטומטית טבלה לתוכן שלה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
table->AutoFit(AutoFitBehavior::AutoFitToContents);
doc->Save(ArtifactsDir + u"WorkingWithTables.AutoFitTableToContents.docx");

השבת AutoFit בטבלה והשתמש ברוחבי עמודות קבועים

אם לטבלה יש התאמה אוטומטית מושבת ובמקום זאת משתמשים ברוחבי עמודות קבועים, השלבים הבאים מבוצעים:

  1. Table.AllowAutoFit המאפיין מושבת כך שעמודות לא צומחות או מתכווצות לתוכן שלהן
  2. הרוחב המועדף של הטבלה כולה מוסר מ Table.PreferredWidth, CellFormat.PreferredWidth מוסר מכל תאי הטבלה
  3. התוצאה הסופית היא טבלה שרוחב העמודות שלה נקבע על ידי המאפיין CellFormat.Width, והעמודות שלה לא משתנות באופן אוטומטי כאשר המשתמש מזין טקסט או כאשר גודל הדף משתנה

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Disable autofitting on this table.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);
doc->Save(ArtifactsDir + u"WorkingWithTables.AutoFitTableToFixedColumnWidths.docx");

סדר עדיפות בעת חישוב רוחב התא

Aspose.Words מאפשר למשתמשים להגדיר את רוחב הטבלה או התא באמצעות אובייקטים מרובים, כולל CellFormat – המאפיין Width שלו נשאר בעיקר מגרסאות קודמות, עם זאת, הוא עדיין שימושי לפשט את הגדרת רוחב התא.

חשוב לדעת כי המאפיין CellFormat.Width פועל באופן שונה בהתאם לאיזה מהמאפיינים האחרים של רוחב כבר קיימים בטבלה.

Aspose.Words משתמש בסדר הבא לחישוב רוחב התא:

הזמנה נכס תיאור
AllowAutoFit נקבע אם AutoFit מופעל:
- הטבלה עשויה לצמוח מעבר לרוחב המועדף כדי להתאים לתוכן-היא בדרך כלל לא מתכווצת מתחת לרוחב המועדף
- כל שינוי לערך CellFormat.Width מתעלם והתא יתאים לתוכן שלו במקום
PreferredWidthType עם ערך של Points או Percent CellFormat.Width מתעלמים
PreferredWidthType עם ערך של Auto הערך מ CellFormat.Width מועתק והופך לרוחב המועדף על התא (בנקודות)

אפשר מרווח בין תאים

אתה יכול לקבל או להגדיר כל רווח נוסף בין תאי טבלה בדומה לאפשרות “ריווח תאים” ב Microsoft Word. ניתן לעשות זאת באמצעות המאפיין AllowCellSpacing.

דוגמה לאופן החלת אפשרויות אלה על טבלה אמיתית במסמך ניתן לראות בתמונה למטה.

formatting-spacing-between-cells-aspose-words-cpp

דוגמת הקוד הבאה מראה כיצד להגדיר את המרווח בין תאים:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
table->set_AllowCellSpacing(true);
table->set_CellSpacing(2);
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.AllowCellSpacing.docx");

החל גבולות והצללה

ניתן להחיל גבולות והצללה על כל הטבלה באמצעות Table.SetBorder, Table.SetBorders ו Table.SetShading, או רק על תאים ספציפיים באמצעות CellFormat.Borders ו CellFormat.Shading. בנוסף, ניתן להגדיר גבולות שורות באמצעות RowFormat.Borders, אולם לא ניתן ליישם הצללה בדרך זו.

התמונות שלהלן מציגות את הגדרות הגבול והצל ב Microsoft Word ואת המאפיינים המתאימים שלהם ב Aspose.Words.

formatting-border-line-aspose-words-cpp

formatting-cell-color-aspose-words-cpp

דוגמת הקוד הבאה מראה כיצד לעצב טבלה ותא עם גבולות וצללים שונים:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
SharedPtr<Table> table = builder->StartTable();
builder->InsertCell();
// Set the borders for the entire table.
table->SetBorders(LineStyle::Single, 2.0, System::Drawing::Color::get_Black());
// Set the cell shading for this cell.
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_Red());
builder->Writeln(u"Cell #1");
builder->InsertCell();
// Specify a different cell shading for the second cell.
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_Green());
builder->Writeln(u"Cell #2");
builder->EndRow();
// Clear the cell formatting from previous operations.
builder->get_CellFormat()->ClearFormatting();
builder->InsertCell();
// Create larger borders for the first cell of this row. This will be different
// compared to the borders set for the table.
builder->get_CellFormat()->get_Borders()->get_Left()->set_LineWidth(4.0);
builder->get_CellFormat()->get_Borders()->get_Right()->set_LineWidth(4.0);
builder->get_CellFormat()->get_Borders()->get_Top()->set_LineWidth(4.0);
builder->get_CellFormat()->get_Borders()->get_Bottom()->set_LineWidth(4.0);
builder->Writeln(u"Cell #3");
builder->InsertCell();
builder->get_CellFormat()->ClearFormatting();
builder->Writeln(u"Cell #4");
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.FormatTableAndCellWithDifferentBorders.docx");