Управление таблицами презентаций в Java
Таблица в PowerPoint — эффективный способ отображения и представления информации. Информация в сетке ячеек (расположенных в строках и столбцах) проста и легко понятна.
Aspose.Slides предоставляет класс Table, интерфейс ITable, класс Cell , интерфейс ICell и другие типы, позволяющие создавать, обновлять и управлять таблицами во всех типах презентаций.
Создать таблицу с нуля
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Определите массив
columnWidth. - Определите массив
rowHeight. - Добавьте объект ITable на слайд с помощью метода addTable.
- Пройдитесь по каждому ICell , чтобы применить форматирование к верхней, нижней, правой и левой границам.
- Объедините первые две ячейки первой строки таблицы.
- Получите доступ к TextFrame ячейки ICell.
- Добавьте некоторый текст в TextFrame.
- Сохраните изменённую презентацию.
Этот Java‑код демонстрирует, как создать таблицу в презентации:
// Создает экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Определяет столбцы с ширинами и строки с высотами
double[] dblCols = {50, 50, 50};
double[] dblRows = {50, 30, 30, 30, 30};
// Добавляет форму таблицы на слайд
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// Устанавливает формат границы для каждой ячейки
for (int row = 0; row < tbl.getRows().size(); row++)
{
for (int cell = 0; cell < tbl.getRows().get_Item(row).size(); cell++)
{
ICellFormat cellFormat = tbl.getRows().get_Item(row).get_Item(cell).getCellFormat();
cellFormat.getBorderTop().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderTop().setWidth(5);
cellFormat.getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderBottom().setWidth(5);
cellFormat.getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderLeft().setWidth(5);
cellFormat.getBorderRight().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderRight().setWidth(5);
}
}
// Объединяет ячейки 1 и 2 первой строки
tbl.mergeCells(tbl.getRows().get_Item(0).get_Item(0), tbl.getRows().get_Item(1).get_Item(1), false);
// Добавляет текст в объединённую ячейку
tbl.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells");
// Сохраняет презентацию на диск
pres.save("table.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Нумерация в стандартной таблице
В стандартной таблице нумерация ячеек проста и начинается с нуля. Первая ячейка в таблице имеет индексы 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) |
Этот Java‑код показывает, как задать нумерацию ячеек в таблице:
// Создает экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Определяет столбцы с ширинами и строки с высотами
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// Добавляет форму таблицы на слайд
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// Устанавливает формат границы для каждой ячейки
for (IRow row : tbl.getRows())
{
for (ICell cell : row)
{
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderRight().setWidth(5);
}
}
// Сохраняет презентацию на диск
pres.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Доступ к существующей таблице
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд, содержащий таблицу, по его индексу.
- Создайте объект ITable и установите его в null.
- Пройдитесь по всем объектам IShape , пока не найдёте таблицу.
Если вы подозреваете, что рассматриваемый слайд содержит одну таблицу, вы можете просто проверить все его фигуры. Когда фигура идентифицируется как таблица, её можно привести к типу объекта Table. Но если слайд содержит несколько таблиц, лучше искать нужную таблицу по её методу setAlternativeText(String value). - Используйте объект ITable , чтобы работать с таблицей. В приведённом примере мы добавили новую строку в таблицу.
- Сохраните изменённую презентацию.
Этот Java‑код показывает, как получить доступ к существующей таблице и работать с ней:
// Создает экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation("UpdateExistingTable.pptx");
try {
// Получает первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Инициализирует null TableEx
ITable tbl = null;
// Итерация по фигурам и установка ссылки на найденную таблицу
for (IShape shp : sld.getShapes())
{
if (shp instanceof ITable)
{
tbl = (ITable) shp;
// Устанавливает текст для первого столбца второй строки
tbl.get_Item(0, 1).getTextFrame().setText("New");
}
}
// Сохраняет изменённую презентацию на диск
pres.save("table1_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Выравнивание текста в таблице
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Добавьте объект ITable на слайд.
- Получите объект ITextFrame из таблицы.
- Получите IParagraph из ITextFrame .
- Выравнивайте текст по вертикали.
- Сохраните изменённую презентацию.
Этот Java‑код демонстрирует, как выровнять текст в таблице:
// Создает экземпляр класса Presentation
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide slide = pres.getSlides().get_Item(0);
// Определяет столбцы с ширинами и строки с высотами
double[] dblCols = { 120, 120, 120, 120 };
double[] dblRows = { 100, 100, 100, 100 };
// Добавляет форму таблицы на слайд
ITable tbl = slide.getShapes().addTable(100, 50, dblCols, dblRows);
tbl.get_Item(1, 0).getTextFrame().setText("10");
tbl.get_Item(2, 0).getTextFrame().setText("20");
tbl.get_Item(3, 0).getTextFrame().setText("30");
// Получает текстовый фрейм
ITextFrame txtFrame = tbl.get_Item(0, 0).getTextFrame();
// Создает объект Paragraph для текстового фрейма
IParagraph paragraph = txtFrame.getParagraphs().get_Item(0);
// Создает объект Portion для абзаца
IPortion portion = paragraph.getPortions().get_Item(0);
portion.setText("Text here");
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Выравнивает текст вертикально
ICell cell = tbl.get_Item(0, 0);
cell.setTextAnchorType(TextAnchorType.Center);
cell.setTextVerticalType(TextVerticalType.Vertical270);
// Сохраняет презентацию на диск
pres.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Установка форматирования текста на уровне таблицы
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Получите объект ITable со слайда.
- Установите setFontHeight(float value) для текста.
- Установите setAlignment(int value) и setMarginRight(float value).
- Установите setTextVerticalType(byte value).
- Сохраните изменённую презентацию.
Этот Java‑код показывает, как применить желаемые параметры форматирования к тексту в таблице:
// Создает экземпляр класса Presentation
Presentation pres = new Presentation("simpletable.pptx");
try {
// Предположим, что первая фигура на первом слайде является таблицей
ITable someTable = (ITable) pres.getSlides().get_Item(0).getShapes().get_Item(0);
// Устанавливает высоту шрифта ячеек таблицы
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(25);
someTable.setTextFormat(portionFormat);
// Устанавливает выравнивание текста ячеек таблицы и правый отступ одним вызовом
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
someTable.setTextFormat(paragraphFormat);
// Устанавливает вертикальный тип текста ячеек таблицы
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
someTable.setTextFormat(textFrameFormat);
pres.save("result.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Получить свойства стиля таблицы
Aspose.Slides позволяет получить свойства стиля таблицы, чтобы использовать эти данные для другой таблицы или в другом месте. Этот Java‑код показывает, как получить свойства стиля из предустановленного стиля таблицы:
Presentation pres = new Presentation();
try {
ITable table = pres.getSlides().get_Item(0).getShapes().addTable(10, 10, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
table.setStylePreset(TableStylePreset.DarkStyle1); // изменить тему предустановленного стиля по умолчанию
pres.save("table.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Блокировать коэффициент пропорций таблицы
Коэффициент пропорций геометрической формы — это отношение её размеров по разным измерениям. Aspose.Slides предоставляет свойство setAspectRatioLocked , позволяющее блокировать настройку коэффициента пропорций для таблиц и других фигур.
Этот Java‑код показывает, как заблокировать коэффициент пропорций для таблицы:
Presentation pres = new Presentation("pres.pptx");
try {
ITable table = (ITable)pres.getSlides().get_Item(0).getShapes().get_Item(0);
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
table.getGraphicalObjectLock().setAspectRatioLocked(!table.getGraphicalObjectLock().getAspectRatioLocked()); // инвертировать
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
pres.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
Могу ли я включить направление чтения справа налево (RTL) для всей таблицы и текста в её ячейках?
Да. Таблица предоставляет метод setRightToLeft, а абзацы имеют ParagraphFormat.setRightToLeft. Использование обоих гарантирует правильный порядок RTL и корректный рендеринг внутри ячеек.
Как предотвратить перемещение или изменение размера таблицы пользователями в конечном файле?
Используйте shape locks для отключения перемещения, изменения размера, выбора и т.д. Эти блокировки также применяются к таблицам.
Поддерживается ли вставка изображения в ячейку в качестве фона?
Да. Вы можете задать picture fill для ячейки; изображение будет покрывать область ячейки в соответствии с выбранным режимом (растяжка или плитка).