Управление строками и столбцами в таблицах PowerPoint на Java
Введение
Aspose.Slides for Java позволяет управлять структурой таблицы и форматированием в презентациях PowerPoint через класс Таблица и интерфейс ITable. Вы можете обозначить строку заголовка, клонировать или удалять строки и столбцы, а также применять форматирование текста к целой строке или столбцу.
Эта статья объясняет эти операции с примерами на Java. Она также показывает, как получить предустановленный стиль таблицы, чтобы повторно использовать его. Индексы строк и столбцов таблицы нумеруются с нуля.
Управление высотой строки
Используйте IRow.setMinimalHeight чтобы установить минимальную высоту строки в пунктах. Это нижняя граница, а не фиксированная высота. IRow.getHeight возвращает фактическую высоту. Доступ к строке осуществляется через ITable.getRows.
Пример загружает row-height-input.pptx, в котором таблица является первой фигурой на первом слайде. Ее первая строка начинается с 70 пунктов. Ячейки используют текст Arial 18 пунктов, с переносом и отступами сверху и снизу по 6 пунктов; более длинный текст во втором столбце переносится на несколько линий. Пример увеличивает минимум до 100 пунктов, затем уменьшает его до 20 пунктов, выводит фактическую высоту после каждого изменения и сохраняет оба результата.
import com.aspose.slides.*;
Presentation presentation = new Presentation("row-height-input.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable)slide.getShapes().get_Item(0);
IRow row = table.getRows().get_Item(0);
row.setMinimalHeight(100);
System.out.printf("Increased: minimum = %.1f, actual = %.1f pt%n", row.getMinimalHeight(), row.getHeight());
presentation.save("row-height-increased.pptx", SaveFormat.Pptx);
row.setMinimalHeight(20);
System.out.printf("Decreased: minimum = %.1f, actual = %.1f pt%n", row.getMinimalHeight(), row.getHeight());
presentation.save("row-height-decreased.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
При использовании предоставленной презентации увеличение минимума добавляет пространство к строке. Уменьшение убирает это дополнительное пространство, но фактическая высота остаётся больше 20 пунктов, потому что текст и отступы ячеек требуют больше места. Сокращение только минимума не может заставить строку стать ниже пространства, требуемого её содержимым.
Несколько факторов влияют на фактическую высоту:
- Текст и размер шрифта: более длинный текст, явные разрывы строк или более крупный шрифт могут требовать больше вертикального пространства.
- Перенос и ширина столбца: при включённом переносе уменьшение ширины столбца с помощью IColumn.setWidth может привести к появлению дополнительных строк. Более широкий столбец может уменьшить требуемое вертикальное пространство.
- Отступы ячеек: ICell.setMarginTop и ICell.setMarginBottom добавляют вертикальное пространство. ICell.setMarginLeft и ICell.setMarginRight уменьшают ширину, доступную для текста, и могут вызвать дополнительный перенос.
Для этой таблицы без объединённых ячеек ячейка, требующая наибольшее вертикальное пространство, определяет нижний предел, задаваемый содержимым, для всей строки. Чтобы сделать строку короче, возможно, придётся сократить текст, уменьшить размер шрифта или отступы, либо расширить столбец.
Изображения ниже показывают одну и ту же таблицу в одинаковом масштабе. На иллюстрированных результатах фактические высоты составляли 70, 100 и 55,2 пункта: последняя строка оставалась выше минимального значения в 20 пунктов. Точные измерения текста могут варьироваться в зависимости от доступных в вашей среде шрифтов. Скачайте сохранённые результаты: увеличенный минимум и уменьшенный минимум.
| Исходный: минимум 70 pt, фактическая 70 pt | Увеличенный минимум: минимум 100 pt, фактическая 100 pt | Уменьшенный минимум: минимум 20 pt, фактическая 55.2 pt |
|---|---|---|
![]() |
![]() |
![]() |
Установить первую строку как заголовок
Используйте метод setFirstRow для пометки первой строки как заголовка. Её внешний вид зависит от стиля таблицы, применённого к таблице.
- Загрузите презентацию с помощью класса Presentation.
- Получите доступ к первому слайду.
- Получите доступ к таблице, хранящейся как первая фигура на слайде.
- Включите форматирование заголовка для её первой строки.
- Сохраните изменённую презентацию.
Пример требует файл table.pptx с таблицей в качестве первой фигуры на первом слайде. Он включает форматирование заголовка для первой строки и сохраняет First_row_header.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation("table.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable)slide.getShapes().get_Item(0);
table.setFirstRow(true);
presentation.save("First_row_header.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Клонировать строку или столбец таблицы
Клонируйте строки или столбцы, чтобы переиспользовать их содержимое и форматирование. Вы можете добавить копию в конец таблицы или вставить её в определённую позицию.
- Загрузите презентацию с помощью класса Presentation.
- Получите доступ к первому слайду.
- Задайте ширины столбцов и высоты строк.
- Добавьте таблицу с помощью метода addTable.
- Клонируйте необходимые строки.
- Клонируйте необходимые столбцы.
- Сохраните изменённую презентацию.
Пример требует файл Test.pptx с как минимум одним слайдом. Он создаёт таблицу с тремя столбцами и пятью строками, задавая размеры в пунктах. Затем он добавляет копии первой строки и первого столбца, после чего вставляет копии второй строки и второго столбца в индекс 3 (четвёртая позиция). Получившаяся таблица содержит семь строк и пять столбцов. Аргумент false отключает клонирование в соседние объединённые строки или столбцы; в этой таблице нет объединённых ячеек.
import com.aspose.slides.*;
Presentation presentation = new Presentation("Test.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = new double[] { 50, 50, 50 };
double[] rowHeights = new double[] { 50, 30, 30, 30, 30 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
table.get_Item(0, 0).getTextFrame().setText("Row 1 Cell 1");
table.get_Item(1, 0).getTextFrame().setText("Row 1 Cell 2");
table.getRows().addClone(table.getRows().get_Item(0), false);
table.get_Item(0, 1).getTextFrame().setText("Row 2 Cell 1");
table.get_Item(1, 1).getTextFrame().setText("Row 2 Cell 2");
table.getRows().insertClone(3, table.getRows().get_Item(1), false);
table.getColumns().addClone(table.getColumns().get_Item(0), false);
table.getColumns().insertClone(3, table.getColumns().get_Item(1), false);
presentation.save("table_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Удалить строку или столбец из таблицы
Удалите строки или столбцы, которые больше не нужны в таблице. Удаление элемента сдвигает индексы последующих строк или столбцов.
- Создайте презентацию с помощью класса Presentation.
- Получите доступ к первому слайду.
- Задайте ширины столбцов и высоты строк.
- Добавьте таблицу с помощью метода addTable.
- Удалите вторую строку и второй столбец.
- Сохраните изменённую презентацию.
Этот пример создаёт таблицу 3×3 и удаляет строку и столбец с индексом 1, оставляя таблицу 2×2 в файле TestTable_out.pptx. Размеры указаны в пунктах. Аргумент false отключает удаление соседних объединённых строк или столбцов; в этой таблице нет объединённых ячеек.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = new double[] { 100, 50, 30 };
double[] rowHeights = new double[] { 30, 50, 30 };
ITable table = slide.getShapes().addTable(100, 100, columnWidths, rowHeights);
table.getRows().removeAt(1, false);
table.getColumns().removeAt(1, false);
presentation.save("TestTable_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Установить форматирование текста на уровне строки таблицы
Применяйте форматирование текста к целой строке, чтобы ячейки оставались согласованными. Можно задать свойства шрифта, форматирование абзаца и направление текста без необходимости форматировать каждую ячейку отдельно.
- Загрузите презентацию с помощью класса Presentation.
- Получите доступ к таблице на первом слайде.
- Используйте setFontHeight для первой строки.
- Используйте setAlignment и setMarginRight для первой строки.
- Используйте setTextVerticalType для второй строки.
- Сохраните изменённую презентацию.
Пример требует файл table.pptx с таблицей в качестве первой фигуры на первом слайде и как минимум двумя строками. Он применяет к первой строке текст 25 пунктов, правое выравнивание и правый отступ абзаца 20 пунктов, затем задаёт вертикальный текст во второй строке.
import com.aspose.slides.*;
Presentation presentation = new Presentation("table.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable)slide.getShapes().get_Item(0);
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(25);
table.getRows().get_Item(0).setTextFormat(portionFormat);
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
table.getRows().get_Item(0).setTextFormat(paragraphFormat);
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
table.getRows().get_Item(1).setTextFormat(textFrameFormat);
presentation.save("row_formatting.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Установить форматирование текста на уровне столбца таблицы
Применяйте форматирование текста к целому столбцу, чтобы ячейки оставались согласованными. Можно задать свойства шрифта, форматирование абзаца и направление текста без необходимости форматировать каждую ячейку отдельно.
- Загрузите презентацию с помощью класса Presentation.
- Получите доступ к таблице на первом слайде.
- Используйте setFontHeight для первого столбца.
- Используйте setAlignment и setMarginRight для первого столбца.
- Используйте setTextVerticalType для второго столбца.
- Сохраните изменённую презентацию.
Пример требует файл table.pptx с таблицей в качестве первой фигуры на первом слайде и как минимум двумя столбцами. Он применяет к первому столбцу текст 25 пунктов, правое выравнивание и правый отступ абзаца 20 пунктов, затем задаёт вертикальный текст во втором столбце.
import com.aspose.slides.*;
Presentation presentation = new Presentation("table.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable)slide.getShapes().get_Item(0);
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(25);
table.getColumns().get_Item(0).setTextFormat(portionFormat);
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
table.getColumns().get_Item(0).setTextFormat(paragraphFormat);
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
table.getColumns().get_Item(1).setTextFormat(textFrameFormat);
presentation.save("column_formatting.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Получить свойства стиля таблицы
Используйте метод getStylePreset для получения предустановленного стиля, применённого к таблице, и повторного его использования в другой таблице. Это определяет предустановку, а не отдельные переопределения форматирования ячеек.
Пример создаёт таблицу, применяет TableStylePreset.DarkStyle1 и считывает предустановку обратно. Он выводит целочисленное значение, соответствующее DarkStyle1, и сохраняет таблицу в table.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = new double[] { 100, 150 };
double[] rowHeights = new double[] { 5, 5, 5 };
ITable table = slide.getShapes().addTable(10, 10, columnWidths, rowHeights);
table.setStylePreset(TableStylePreset.DarkStyle1);
int stylePreset = table.getStylePreset();
System.out.println(stylePreset);
presentation.save("table.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
FAQ
Можно ли применить темы/стили PowerPoint к уже созданной таблице?
Да. Таблица наследует тему слайда/макета/шаблона, и вы всё ещё можете переопределять заливки, границы и цвета текста поверх этой темы.
Можно ли сортировать строки таблицы как в Excel?
Нет, у таблиц Aspose.Slides нет встроенной сортировки или фильтров. Сначала отсортируйте данные в памяти, а затем заново заполните строки таблицы в нужном порядке.
Можно ли иметь чередующиеся (полосатые) столбцы, сохраняя пользовательские цвета в отдельных ячейках?
Да. Включите чередование столбцов, затем переопределите отдельные ячейки локальным форматированием; форматирование на уровне ячейки имеет приоритет перед стилем таблицы.


