Применить стиль таблицы

Стиль таблицы определяет набор форматирования, который может быть легко применен к таблице. Форматирование, такое как границы, затенение, выравнивание и шрифт, может быть задано в стиле таблицы и применено ко многим таблицам для обеспечения единообразного внешнего вида.

Aspose.Words поддерживает применение табличного стиля к таблице, а также чтение свойств любого табличного стиля. Стили таблиц сохраняются при загрузке и сохранении следующими способами:

  • Стили таблиц в форматах DOCX и WordML сохраняются при загрузке и сохранении в этих форматах
  • Стили таблиц сохраняются при загрузке и сохранении в формате DOC (но не в каком-либо другом формате)
  • При экспорте в другие форматы, рендеринге или печати стили таблиц расширяются для прямого форматирования в таблице, поэтому все форматирование сохраняется

Создайте стиль таблицы

Пользователь может создать новый стиль и добавить его в коллекцию стилей. Метод Add используется для создания нового стиля таблицы.

В следующем примере кода показано, как создать новый пользовательский стиль таблицы:

// 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();
builder->Write(u"Name");
builder->InsertCell();
builder->Write(u"Value");
builder->EndRow();
builder->InsertCell();
builder->InsertCell();
builder->EndTable();
auto tableStyle = System::ExplicitCast<TableStyle>(doc->get_Styles()->Add(StyleType::Table, u"MyTableStyle1"));
tableStyle->get_Borders()->set_LineStyle(LineStyle::Double);
tableStyle->get_Borders()->set_LineWidth(1);
tableStyle->set_LeftPadding(18);
tableStyle->set_RightPadding(18);
tableStyle->set_TopPadding(12);
tableStyle->set_BottomPadding(12);
table->set_Style(tableStyle);
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.CreateTableStyle.docx");

Скопируйте существующий стиль таблицы

При необходимости вы можете скопировать стиль таблицы, который уже существует в определенном документе, в свою коллекцию стилей, используя метод AddCopy.

Важно знать, что при таком копировании также копируются связанные стили.

В следующем примере кода показано, как импортировать стиль из одного документа в другой:

Пример

Примените существующий стиль таблицы

Aspose.Words предоставляет класс TableStyle, унаследованный от класса Style. TableStyle позволяет пользователю применять различные параметры стиля, такие как затенение, отступы, CellSpacing и Font и т.д.

Кроме того, Aspose.Words предоставляет класс StyleCollection и несколько свойств класса Table, чтобы указать, с каким стилем таблицы мы будем работать: Style, StyleIdentifier, StyleName, и StyleOptions.

Aspose.Words также предоставляет класс ConditionalStyle, который представляет специальное форматирование, применяемое к некоторой области таблицы с назначенным стилем таблицы, и класс ConditionalStyleCollection, который представляет коллекцию объектов ConditionalStyle. Эта коллекция содержит постоянный набор элементов, представляющих по одному элементу для каждого значения типа перечисления ConditionalStyleType. Перечисление ConditionalStyleType определяет все возможные области таблицы, для которых может быть определено условное форматирование в табличном стиле.

В этом случае условное форматирование может быть определено для всех возможных областей таблицы, определенных в соответствии с типом перечисления ConditionalStyleType.

В следующем примере кода показано, как определить условное форматирование для строки заголовка таблицы:

// 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();
builder->Write(u"Name");
builder->InsertCell();
builder->Write(u"Value");
builder->EndRow();
builder->InsertCell();
builder->InsertCell();
builder->EndTable();
auto tableStyle = System::ExplicitCast<TableStyle>(doc->get_Styles()->Add(StyleType::Table, u"MyTableStyle1"));
tableStyle->get_ConditionalStyles()->get_FirstRow()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_GreenYellow());
tableStyle->get_ConditionalStyles()->get_FirstRow()->get_Shading()->set_Texture(TextureIndex::TextureNone);
table->set_Style(tableStyle);
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.DefineConditionalFormatting.docx");

Вы также можете выбрать, к каким частям таблицы применять стили, например, к первому столбцу, последнему столбцу, строкам с ограничениями. Они перечислены в перечислении TableStyleOptions и применяются с помощью свойства StyleOptions. Перечисление TableStyleOptions позволяет комбинировать эти функции побитово.

В следующем примере кода показано, как создать новую таблицу с примененным стилем таблицы:

// 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();
// We must insert at least one row first before setting any table formatting.
builder->InsertCell();
// Set the table style used based on the unique style identifier.
table->set_StyleIdentifier(StyleIdentifier::MediumShading1Accent1);
// Apply which features should be formatted by the style.
table->set_StyleOptions(TableStyleOptions::FirstColumn | TableStyleOptions::RowBands | TableStyleOptions::FirstRow);
table->AutoFit(AutoFitBehavior::AutoFitToContents);
builder->Writeln(u"Item");
builder->get_CellFormat()->set_RightPadding(40);
builder->InsertCell();
builder->Writeln(u"Quantity (kg)");
builder->EndRow();
builder->InsertCell();
builder->Writeln(u"Apples");
builder->InsertCell();
builder->Writeln(u"20");
builder->EndRow();
builder->InsertCell();
builder->Writeln(u"Bananas");
builder->InsertCell();
builder->Writeln(u"40");
builder->EndRow();
builder->InsertCell();
builder->Writeln(u"Carrots");
builder->InsertCell();
builder->Writeln(u"50");
builder->EndRow();
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.BuildTableWithStyle.docx");

На рисунках ниже показано представление Table Styles в Microsoft Word и соответствующие им свойства в Aspose.Words.

formatting-table-style-aspose-words-cpp

Возьмите форматирование из стиля таблицы и примените его как прямое форматирование

Aspose.Words также предоставляет метод ExpandTableStylesToDirectFormatting, позволяющий использовать форматирование, найденное в табличном стиле, и распространить его на строки и ячейки таблицы в качестве прямого форматирования. Попробуйте комбинировать форматирование со стилем таблицы и стилем ячеек.

В следующем примере кода показано, как перенести форматирование из стилей в строки таблицы и ячейки в качестве прямого форматирования:

// 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");
// Get the first cell of the first table in the document.
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
SharedPtr<Cell> firstCell = table->get_FirstRow()->get_FirstCell();
// First print the color of the cell shading.
// This should be empty as the current shading is stored in the table style.
System::Drawing::Color cellShadingBefore = firstCell->get_CellFormat()->get_Shading()->get_BackgroundPatternColor();
std::cout << (String(u"Cell shading before style expansion: ") + cellShadingBefore) << std::endl;
doc->ExpandTableStylesToDirectFormatting();
// Now print the cell shading after expanding table styles.
// A blue background pattern color should have been applied from the table style.
System::Drawing::Color cellShadingAfter = firstCell->get_CellFormat()->get_Shading()->get_BackgroundPatternColor();
std::cout << (String(u"Cell shading after style expansion: ") + cellShadingAfter) << std::endl;