Управление таблицей
Таблица в PowerPoint — это эффективный способ отображения и представления информации. Информация в сетке ячеек (расположенных в строках и столбцах) проста и легка для понимания.
Aspose.Slides предоставляет классы Table, ITable интерфейс, Cell класс, ICell интерфейс и другие типы, позволяющие создавать, обновлять и управлять таблицами во всех типах презентаций.
Создание таблицы с нуля
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд через его индекс.
- Определите массив
columnWidth
. - Определите массив
rowHeight
. - Добавьте объект ITable на слайд с помощью метода AddTable().
- Переберите каждую ICell, чтобы применить форматирование к верхнему, нижнему, правому и левому краям.
- Объедините первые две ячейки первой строки таблицы.
- Получите TextFrame ICell.
- Добавьте текст в TextFrame.
- Сохраните изменённую презентацию.
Этот код на C++ показывает, как создать таблицу в презентации:
// Создает экземпляр класса Presentation, представляющий файл PPTX
auto pres = System::MakeObject<Presentation>();
// Получает первый слайд
auto sld = pres->get_Slides()->idx_get(0);
// Определяет столбцы с шириной и строки с высотой
auto dblCols = System::MakeArray<double>({ 50, 50, 50 });
auto dblRows = System::MakeArray<double>({ 50, 30, 30, 30, 30 });
// Добавляет форму таблицы на слайд
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Устанавливает формат границ для каждой ячейки
for (int32_t row = 0; row < tbl->get_Rows()->get_Count(); row++)
{
for (int32_t cell = 0; cell < tbl->get_Rows()->idx_get(row)->get_Count(); cell++)
{
auto cellFormat = tbl->get_Rows()->idx_get(row)->idx_get(cell)->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType((FillType::Solid));
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Объединяет ячейки 1 и 2 строки 1
tbl->MergeCells(tbl->get_Rows()->idx_get(0)->idx_get(0), tbl->get_Rows()->idx_get(1)->idx_get(1), false);
// Добавляет текст в объединенную ячейку
tbl->get_Rows()->idx_get(0)->idx_get(0)->get_TextFrame()->set_Text(u"Объединенные ячейки");
// Сохраняет презентацию на диск
pres->Save(u"table.pptx", SaveFormat::Pptx);
Нумерация в обычной таблице
В стандартной таблице нумерация ячеек проста и основана на нулях. Первая ячейка в таблице индексируется как 0,0 (столбец 0, строка 0).
Например, ячейки в таблице с 4 столбцами и 4 строками нумеруются следующим образом:
(0, 0) | (1, 0) | (2, 0) | (3, 0) |
---|---|---|---|
(0, 1) | (1, 1) | (2, 1) | (3, 1) |
(0, 2) | (1, 2) | (2, 2) | (3, 2) |
(0, 3) | (1, 3) | (2, 3) | (3, 3) |
Этот код C++ показывает, как указать нумерацию для ячеек в таблице:
// Создает экземпляр класса Presentation, представляющий файл PPTX
auto pres = System::MakeObject<Presentation>();
// Получает первый слайд
auto sld = pres->get_Slides()->idx_get(0);
// Определяет столбцы с шириной и строки с высотой
auto dblCols = System::MakeArray<double>({ 70, 70, 70, 70 });
auto dblRows = System::MakeArray<double>({ 70, 70, 70, 70 });
// Добавляет форму таблицы на слайд
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Устанавливает формат границ для каждой ячейки
for (const auto& row : tbl->get_Rows())
{
for (const auto& cell : row)
{
auto cellFormat = cell->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Сохраняет презентацию на диск
pres->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);
Доступ к существующей таблице
-
Создайте экземпляр класса Presentation.
-
Получите ссылку на слайд, содержащий таблицу, через его индекс.
-
Создайте объект ITable и установите его в null.
-
Переберите все объекты IShape, пока таблица не будет найдена.
Если вы подозреваете, что слайд, с которым вы работаете, содержит единственную таблицу, вы можете просто проверить все формы, которые он содержит. Когда форма идентифицируется как таблица, вы можете привести ее к объекту Table. Но если слайд, с которым вы работаете, содержит несколько таблиц, то лучше всего искать нужную таблицу через set_AlternativeText().
-
Используйте объект ITable для работы с таблицей. В приведенном ниже примере мы добавили новую строку в таблицу.
-
Сохраните изменённую презентацию.
Этот код C++ показывает, как получить доступ и работать с существующей таблицей:
// Создает экземпляр класса Presentation, представляющий файл PPTX
auto pres = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");
// Получает первый слайд
auto sld = pres->get_Slides()->idx_get(0);
// Инициализирует null для таблицы
System::SharedPtr<ITable> tbl;
// Перебирает формы и устанавливает ссылку на найденную таблицу
for (const auto& shp : System::IterateOver(sld->get_Shapes()))
{
if (System::ObjectExt::Is<ITable>(shp))
{
tbl = System::ExplicitCast<ITable>(shp);
}
}
// Устанавливает текст для первого столбца второй строки
tbl->idx_get(0, 1)->get_TextFrame()->set_Text(u"Новый");
// Сохраняет изменённую презентацию на диск
pres->Save(u"table1_out.pptx", SaveFormat::Pptx);
Выравнивание текста в таблице
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд через его индекс.
- Добавьте объект ITable на слайд.
- Получите объект ITextFrame из таблицы.
- Получите ITextFrame IParagraph.
- Выравните текст по вертикали.
- Сохраните изменённую презентацию.
Этот код C++ показывает, как выровнять текст в таблице:
// Создает экземпляр класса Presentation
auto presentation = System::MakeObject<Presentation>();
// Получает первый слайд
auto slide = presentation->get_Slides()->idx_get(0);
// Определяет столбцы с шириной и строки с высотой
auto dblCols = System::MakeArray<double>({ 120, 120, 120, 120 });
auto dblRows = System::MakeArray<double>({ 100, 100, 100, 100 });
// Добавляет форму таблицы на слайд
auto tbl = slide->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
tbl->idx_get(1, 0)->get_TextFrame()->set_Text(u"10");
tbl->idx_get(2, 0)->get_TextFrame()->set_Text(u"20");
tbl->idx_get(3, 0)->get_TextFrame()->set_Text(u"30");
// Получает текстовый фрейм
auto txtFrame = tbl->idx_get(0, 0)->get_TextFrame();
// Создает объект абзаца для текстового фрейма
auto paragraph = txtFrame->get_Paragraphs()->idx_get(0);
// Создает объект Portion для абзаца
auto portion = paragraph->get_Portions()->idx_get(0);
portion->set_Text(u"Текст здесь");
portion->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
portion->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Black());
// Выравнивает текст по вертикали
auto cell = tbl->idx_get(0, 0);
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);
// Сохраняет презентацию на диск
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
Установка форматирования текста на уровне таблицы
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд через его индекс.
- Получите объект ITable из слайда.
- Установите set_FontHeight() для текста.
- Установите set_Alignment() и set_MarginRight().
- Установите set_TextVerticalType().
- Сохраните изменённую презентацию.
Этот код C++ показывает, как применить ваши предпочтительные параметры форматирования к тексту в таблице:
// Создает экземпляр класса Presentation
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Допустим, что первая форма на первом слайде — это таблица
auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Устанавливает высоту шрифта ячеек таблицы
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->SetTextFormat(portionFormat);
// Устанавливает выравнивание текста в ячейках таблицы и правый отступ за один раз
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->SetTextFormat(paragraphFormat);
// Устанавливает вертикальный тип текста в ячейках таблицы
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->SetTextFormat(textFrameFormat);
presentation->Save(u"result.pptx", SaveFormat::Pptx);
Получение свойств стиля таблицы
Aspose.Slides позволяет извлекать свойства стиля для таблицы, чтобы вы могли использовать эти детали для другой таблицы или в другом месте. Этот код C++ показывает, как получить свойства стиля из предустановленного стиля таблицы:
auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slide(0)->get_Shapes();
auto table = System::ExplicitCast<ITable>(shapes->AddTable(10, 10, System::MakeArray<double>({100, 150}), System::MakeArray<double>({5, 5, 5})));
table->set_StylePreset(TableStylePreset::DarkStyle1);
pres->Save(u"table.pptx", SaveFormat::Pptx);
Блокировка аспектного соотношения таблицы
Аспектное соотношение геометрической формы — это отношение её размеров в разных измерениях. Aspose.Slides предоставляет свойство AspectRatioLocked()
, чтобы вы могли заблокировать настройку аспектного со_ratio для таблиц и других форм.
Этот код C++ показывает, как заблокировать аспектное соотношение для таблицы:
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
auto table = System::ExplicitCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
Console::WriteLine(u"Блокировка аспектного соотношения установлена: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
table->get_GraphicalObjectLock()->set_AspectRatioLocked(!table->get_GraphicalObjectLock()->get_AspectRatioLocked());
Console::WriteLine(u"Блокировка аспектного соотношения установлена: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
pres->Save(u"pres-out.pptx", SaveFormat::Pptx);