Použít Formátování

Každý prvek tabulky lze použít s různým formátováním. Například formátování tabulky se použije na celou tabulku, formátování řádků pouze na konkrétní řádky, formátování buněk pouze na určité buňky.

Aspose.Words poskytuje bohatý API pro načtení a použití formátování tabulky. K nastavení formátování můžete použít Uzly Table, RowFormat a CellFormat.

V tomto článku si povíme, jak použít formátování na různé uzly tabulky a jaká nastavení formátování tabulky Aspose.Words podporuje.

Použít formátování na různé uzly

V této části se podíváme na použití formátování na různé uzly tabulky.

Formátování Úrovně Tabulky

Chcete-li použít formátování tabulky, můžete použít vlastnosti dostupné v odpovídajícím uzlu Table pomocí tříd Table, PreferredWidth a TableCollection.

Obrázky níže ukazují reprezentaci funkcí formátování Table v Microsoft Word a jejich odpovídajících vlastností v Aspose.Words.

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

formatting-table-options-aspose-words-cpp

Následující příklad kódu ukazuje, jak použít ohraničení obrysu na tabulku:

// 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");

Následující příklad kódu ukazuje, jak vytvořit tabulku se všemi povolenými okraji (mřížka):

// 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");

Formátování Úrovně Řádku

Úroveň řádku

Obrázky níže ukazují reprezentaci funkcí formátování Row v Microsoft Word a jejich odpovídajících vlastností v Aspose.Words.

formatting-row-level-aspose-words-cpp

Následující příklad kódu ukazuje, jak upravit formátování řádku tabulky:

// 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);

Formátování Na Úrovni Buněk

Formátování na úrovni buněk je řízeno třídami Cell, CellFormat a CellCollection.

Obrázky níže ukazují reprezentaci funkcí formátování Cell v Microsoft Word a jejich odpovídajících vlastností v Aspose.Words.

formatting-cell-level-aspose-words-cpp

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

Následující příklad kódu ukazuje, jak upravit formátování buňky tabulky:

// 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());

Následující příklad kódu ukazuje, jak nastavit velikost prostoru (v bodech), který se má přidat do levé / horní / pravé / dolní části obsahu buňky:

// 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

Určete Výšky Řádků

Nejjednodušší způsob, jak nastavit výšku řádku, je použít DocumentBuilder. Pomocí příslušných vlastností RowFormat můžete nastavit výchozí nastavení výšky nebo použít jinou výšku pro každý řádek v tabulce.

V Aspose.Words je výška řádku tabulky řízena:

  • vlastnost výška řádku - Height
  • vlastnost pravidla výšky pro daný řádek - HeightRule

Současně lze pro každý řádek nastavit jinou výšku-to vám umožní široce ovládat nastavení tabulky.

Následující příklad kódu ukazuje, jak vytvořit tabulku obsahující jednu buňku a použít formátování řádků:

// 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");

Určení šířky tabulky a buněk

Tabulka v dokumentu Microsoft Word poskytuje několik různých způsobů, jak změnit velikost tabulky a jednotlivých buněk. Tyto vlastnosti umožňují značnou kontrolu nad vzhledem a chováním tabulky, takže Aspose.Words podporuje chování tabulek, jako v Microsoft Word.

Je důležité vědět, že prvky tabulky mají několik různých vlastností, které mohou ovlivnit způsob výpočtu šířky celkové tabulky i jednotlivých buněk:

  • Preferovaná šířka na stole
  • Preferovaná šířka na jednotlivých buňkách
  • Povolení automatického přizpůsobení na stole

Tento článek podrobně popisuje, jak různé vlastnosti výpočtu šířky tabulky fungují a jak získat plnou kontrolu nad výpočtem šířky tabulky. Tohle je zvláště užitečné vědět v takových případech, kdy se rozložení tabulky nezobrazí podle očekávání.

Jak používat preferovanou šířku

Požadovaná šířka tabulky nebo jednotlivých buněk je definována pomocí vlastnosti preferovaná šířka, což je velikost, kterou se prvek snaží přizpůsobit. To znamená, že preferovanou šířku lze zadat pro celou tabulku nebo pro jednotlivé buňky. V některých situacích nemusí být možné tuto šířku přesně přizpůsobit, ale skutečná šířka bude ve většině případů této hodnotě blízká.

Příslušný preferovaný typ šířky a hodnota se nastavují pomocí metod třídy PreferredWidth:

  • Auto metoda pro zadání auto nebo"no preferred width"
  • metoda FromPercent pro určení procentuální šířky
  • metoda FromPoints pro určení šířky v bodech

Obrázky níže ukazují reprezentaci preferred width setting features v Microsoft Word a jejich odpovídající vlastnosti v Aspose.Words.

formatting-table-properties-aspose-words-cpp

Příklad, jak jsou tyto možnosti použity na skutečnou tabulku v dokumentu, lze vidět na obrázku níže.

todo:image_alt_text

Určete preferovanou šířku tabulky nebo buňky

V Aspose.Words jsou šířky tabulky a buněk nastaveny pomocí vlastnosti Table.PreferredWidth a vlastnosti CellFormat.PreferredWidth s možnostmi dostupnými ve výčtu PreferredWidthType:

  • Auto, což odpovídá žádné preferované sadě šířky
  • Percent, který odpovídá prvku vzhledem k dostupnému prostoru ve velikosti okna nebo kontejneru, a přepočítá hodnotu, když se změní dostupná šířka
  • Points, což odpovídá prvku zadané šířky v bodech

Použití vlastnosti Table.PreferredWidth upraví její preferovanou šířku vzhledem k jejímu kontejneru: stránka, textový sloupec nebo vnější buňka tabulky, pokud se jedná o vnořenou tabulku.

Následující příklad kódu ukazuje, jak nastavit tabulku na automatické přizpůsobení na 50% šířky stránky:

// 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");

Použití vlastnosti CellFormat.PreferredWidth v dané buňce upraví její preferovanou šířku.

Následující příklad kódu ukazuje, jak nastavit různá preferovaná nastavení šířky:

// 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");

Najděte preferovaný typ a hodnotu šířky

Pomocí vlastností Type a Value můžete najít preferované podrobnosti o šířce požadované tabulky nebo buňky.

Následující příklad kódu ukazuje, jak načíst preferovaný typ šířky buňky tabulky:

// 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();

Jak nastavit Autofit

Vlastnost AllowAutoFit umožňuje buňkám v tabulce růst a zmenšovat se podle vybraného kritéria. Můžete například použít možnost AutoFit to Window, aby se tabulka přizpůsobila šířce stránky, a možnost AutoFit to Content, aby každá buňka mohla růst nebo zmenšovat podle jejího obsahu.

Ve výchozím nastavení Aspose.Words vloží novou tabulku pomocí AutoFit to Window. Tabulka bude dimenzována podle dostupné šířky stránky. Chcete-li změnit velikost tabulky, můžete zavolat metodu AutoFit. Tato metoda přijímá výčet AutoFitBehavior, který určuje, jaký typ automatického přizpůsobení se použije na tabulku.

Je důležité vědět, že metoda autofit je ve skutečnosti zkratka, která současně aplikuje různé vlastnosti tabulky. Jedná se o vlastnosti, které ve skutečnosti dávají tabulce pozorované chování. Tyto vlastnosti probereme pro každou možnost automatického přizpůsobení.

Následující příklad kódu ukazuje, jak nastavit tabulku pro zmenšení nebo růst každé buňky podle jejího obsahu:

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

AutoFit tabulka do okna

Když se na tabulku použije automatické přizpůsobení okna, v zákulisí se skutečně provádějí následující operace:

  1. Vlastnost Table.AllowAutoFit je povolena pro automatickou změnu velikosti sloupců tak, aby odpovídaly dostupnému obsahu, pomocí hodnoty Table.PreferredWidth 100%
  2. CellFormat.PreferredWidth je odstraněn ze všech buněk tabulky
  3. Šířky sloupců se přepočítávají pro aktuální obsah tabulky – konečným výsledkem je tabulka, která zabírá celou dostupnou šířku
  4. Šířka sloupců v tabulce se automaticky mění, když uživatel upravuje text

Následující příklad kódu ukazuje, jak automaticky nastavit tabulku na šířku stránky:

// 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 tabulka k obsahu

Když je tabulka automaticky vybavena obsahem, v zákulisí se skutečně provádějí následující kroky:

  1. Vlastnost Table.AllowAutoFit je povolena pro automatickou změnu velikosti každé buňky podle jejího obsahu

  2. Preferovaná šířka tabulky je odstraněna z Table.PreferredWidth, CellFormat.PreferredWidth je odstraněna pro každou buňku tabulky

  3. Šířky sloupců se přepočítávají pro aktuální obsah tabulky – konečným výsledkem je tabulka, kde se šířky sloupců a šířka celé tabulky automaticky mění tak, aby co nejlépe odpovídaly obsahu, když uživatel upravuje text

Následující příklad kódu ukazuje, jak automaticky přizpůsobit tabulku jejímu obsahu:

// 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");

Zakázat AutoFit v tabulce a použít pevné šířky sloupců

Pokud je v tabulce zakázáno automatické přizpůsobení a místo toho se použijí pevné šířky sloupců, provedou se následující kroky:

  1. Vlastnost Table.AllowAutoFit je zakázána, takže sloupce nerostou ani se nezmenšují na svůj obsah
  2. Preferovaná šířka celé tabulky je odstraněna z Table.PreferredWidth, CellFormat.PreferredWidth je odstraněna ze všech buněk tabulky
  3. Konečným výsledkem je tabulka, jejíž šířky sloupců jsou určeny vlastností CellFormat.Width a jejíž velikost sloupců se automaticky nezmění, když uživatel zadá text nebo když se změní velikost stránky

Následující příklad kódu ukazuje, jak zakázat automatické přizpůsobení a povolit pevnou šířku pro zadanou tabulku:

// 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");

Pořadí priority při výpočtu šířky buňky

Aspose.Words umožňuje uživatelům definovat šířku tabulky nebo buňky prostřednictvím více objektů, včetně CellFormat – jeho vlastnost Width většinou zbyla z předchozích verzí, nicméně je stále užitečná pro zjednodušení nastavení šířky buňky.

Je důležité vědět, že vlastnost CellFormat.Width funguje odlišně v závislosti na tom, která z ostatních vlastností šířky již v tabulce existuje.

Aspose.Words používá následující pořadí pro výpočet šířky buněk:

Objednávka Vlastnost Popis
AllowAutoFit je určeno Pokud je povoleno AutoFit:
- tabulka může růst přes preferovanou šířku, aby se přizpůsobila obsahu-obvykle se nesnižuje pod preferovanou šířku
- jakákoli změna hodnoty CellFormat.Width je ignorována a buňka se místo toho vejde do jejího obsahu
PreferredWidthType s hodnotou Points nebo Percent CellFormat.Width je ignorován
PreferredWidthType s hodnotou Auto Hodnota z CellFormat.Width se zkopíruje a stane se preferovanou šířkou buňky (v bodech)

Povolit Mezery Mezi Buňkami

Mezi buňkami tabulky můžete získat nebo nastavit libovolný další prostor podobný možnosti “mezery mezi buňkami” v Microsoft Word. To lze provést pomocí vlastnosti AllowCellSpacing.

Příklad, jak jsou tyto možnosti použity na skutečnou tabulku v dokumentu, lze vidět na obrázku níže.

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

Následující příklad kódu ukazuje, jak nastavit mezery mezi buňkami:

// 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");

Použít ohraničení a stínování

Ohraničení a stínování lze použít buď na celou tabulku pomocí Table.SetBorder, Table.SetBorders a Table.SetShading, nebo pouze na konkrétní buňky pomocí CellFormat.Borders a CellFormat.Shading. Okraje řádků lze navíc nastavit pomocí RowFormat.Borders, ale stínování nelze použít tímto způsobem.

Níže uvedené obrázky ukazují nastavení ohraničení a stínů v Microsoft Word a jejich odpovídající vlastnosti v Aspose.Words.

formatting-border-line-aspose-words-cpp

formatting-cell-color-aspose-words-cpp

Následující příklad kódu ukazuje, jak formátovat tabulku a buňku s různými okraji a stínováním:

// 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");