Управление таблицами презентаций на Android
Введение
Таблицы в PowerPoint упорядочивают информацию в строки и столбцы, облегчая чтение и сравнение значений.
Aspose.Slides предоставляет класс Table , интерфейс ITable , класс Cell , интерфейс ICell , и другие типы, позволяющие создавать, обновлять и управлять таблицами в презентациях.
Создание таблицы с нуля
Создайте таблицу, указав её позицию, ширины столбцов и высоты строк. После добавления её на слайд вы можете задавать границы ячеек, объединять ячейки и вставлять текст.
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Определите массив ширин столбцов в пунктах.
- Определите массив высот строк в пунктах.
- Добавьте объект ITable на слайд с помощью метода addTable .
- Пройдитесь по каждому ICell , чтобы применить форматирование к верхней, нижней, правой и левой границам.
- Объедините первые две ячейки первой строки таблицы.
- Получите доступ к объединённой ячейке через её метод getTextFrame .
- Задайте текст в объединённой ячейке.
- Сохраните изменённую презентацию.
Пример ниже создаёт таблицу с тремя столбцами и пятью строками в точке (100, 50) пунктов. Он применяет красные границы шириной 5 пунктов, объединяет первые две ячейки в первой строке и сохраняет результат как table.pptx.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 50, 50, 50 };
double[] rowHeights = { 50, 30, 30, 30, 30 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
for (IRow row : table.getRows())
{
for (ICell cell : row)
{
ICellFormat cellFormat = 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);
}
}
table.mergeCells(table.get_Item(0, 0), table.get_Item(1, 0), false);
table.get_Item(0, 0).getTextFrame().setText("Merged Cells");
presentation.save("table.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Нумерация в стандартной таблице
В стандартной таблице индексы ячеек начинаются с нуля и используют порядок (столбец, строка). Первая ячейка имеет индекс (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) |
Этот пример создаёт таблицу 4 × 4, показанную выше, со шириной столбцов и высотой строк по 70 пунктов и красными границами ячеек шириной 5 пунктов. Координаты показывают индексы ячеек; пример оставляет ячейки пустыми и сохраняет таблицу как StandardTables_out.pptx.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 70, 70, 70, 70 };
double[] rowHeights = { 70, 70, 70, 70 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
for (IRow row : table.getRows())
{
for (ICell cell : row)
{
ICellFormat cellFormat = 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);
}
}
presentation.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Доступ к существующей таблице
Таблицы хранятся в коллекции фигур слайда. Пройдитесь по фигурам, чтобы найти таблицу, затем используйте интерфейс ITable для чтения или обновления её ячеек.
- Загрузите презентацию, используя класс Presentation .
- Получите ссылку на слайд, содержащий таблицу, по его индексу.
- Пройдитесь по объектам IShape , останавливаясь, когда найдёте таблицу. Если на слайде несколько таблиц, используйте getAlternativeText для идентификации нужной.
- Обновите текст в целевой ячейке.
- Сохраните изменённую презентацию.
Пример ниже открывает UpdateExistingTable.pptx и находит первую таблицу на первом слайде. Он задаёт ячейке в столбце 0, строке 1 значение New и сохраняет результат как table1_out.pptx. Входной файл должен содержать как минимум один слайд, а первая таблица на этом слайде должна иметь как минимум один столбец и две строки.
import com.aspose.slides.*;
Presentation presentation = new Presentation("UpdateExistingTable.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = null;
for (IShape shape : slide.getShapes()) {
if (shape instanceof ITable) {
table = (ITable) shape;
break;
}
}
if (table != null) {
table.get_Item(0, 1).getTextFrame().setText("New");
presentation.save("table1_out.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
To resize a row in an existing table and understand why its actual height can exceed the requested minimum, see Управление высотой строки.
Найти ячейку, владеющую текстовым фреймом
Когда универсальный код обработки текста получает ITextFrame из таблицы, используйте метод ITextFrame.getParentCell для получения владеющей ICell . Для текстового фрейма ячейки таблицы ITextFrame.getParentCell возвращает владельца, а ITextFrame.getParentShape возвращает null, несмотря на то, что сама таблица является фигурой.
Координаты ячейки доступны через только для чтения методы ICell.getFirstColumnIndex и ICell.getFirstRowIndex . Метод ITextFrame.getParentCell также предоставляет только для чтения навигацию: он возвращает владельца, но не меняет владельца. Всегда проверяйте возвращённую ячейку на null перед использованием.
For a complete example that identifies table-cell and shape owners, including shapes associated with SmartArt nodes, see Поиск и замена текста.
Выравнивание текста в таблице
Вы можете управлять вертикальной привязкой и направлением текста отдельных ячеек таблицы. Пример в этом разделе центрирует текст в первой ячейке и поворачивает его на 270 градусов.
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте объект ITable на слайд.
- Получите объект ITextFrame из таблицы.
- Получите первую IParagraph и задайте её текст и цвет.
- Задайте вертикальную привязку ячейки и направление текста с помощью setTextAnchorType и setTextVerticalType .
- Сохраните изменённую презентацию.
Этот пример создаёт таблицу 4 × 4 со шириной столбцов 120 пунктов и высотой строк 100 пунктов. Он форматирует текст в ячейке (0, 0), добавляет значения в оставшиеся ячейки первой строки и сохраняет результат как Vertical_Align_Text_out.pptx.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 120, 120, 120, 120 };
double[] rowHeights = { 100, 100, 100, 100 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
table.get_Item(1, 0).getTextFrame().setText("10");
table.get_Item(2, 0).getTextFrame().setText("20");
table.get_Item(3, 0).getTextFrame().setText("30");
ITextFrame textFrame = table.get_Item(0, 0).getTextFrame();
IParagraph paragraph = textFrame.getParagraphs().get_Item(0);
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 = table.get_Item(0, 0);
cell.setTextAnchorType(TextAnchorType.Center);
cell.setTextVerticalType(TextVerticalType.Vertical270);
presentation.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Установить форматирование текста на уровне таблицы
Используйте setTextFormat для применения форматирования текста ко всем ячейкам таблицы. Его перегрузки принимают форматирование части, абзаца и текстового фрейма, поэтому вы можете задавать эти свойства без перебора отдельных ячеек.
- Загрузите презентацию, используя класс Presentation .
- Получите ссылку на слайд по его индексу.
- Получите объект ITable со слайда.
- Задайте размер шрифта с помощью setFontHeight для текста.
- Задайте выравнивание абзаца и правый отступ с помощью setAlignment и setMarginRight .
- Задайте направление текста с помощью setTextVerticalType .
- Сохраните изменённую презентацию.
Пример ниже открывает table.pptx, который должен содержать как минимум один слайд с таблицей в качестве первой фигуры. Он задаёт размер шрифта 25 пунктов, выравнивает абзацы по правому краю с правым отступом 20 пунктов и делает текст вертикальным. Отформатированная презентация сохраняется как result.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);
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(25);
table.setTextFormat(portionFormat);
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
table.setTextFormat(paragraphFormat);
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
table.setTextFormat(textFrameFormat);
presentation.save("result.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Получить свойства стиля таблицы
Используйте getStylePreset для чтения предустановленного стиля таблицы и setStylePreset для его назначения. Этот пример применяет TableStylePreset.DarkStyle1 к одной таблице, выводит значение предустановки и назначает тот же предустановленный стиль второй таблице. Обе таблицы сохраняются в table-style.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 100, 150 };
double[] rowHeights = { 5, 5, 5 };
ITable table = slide.getShapes().addTable(10, 10, columnWidths, rowHeights);
table.setStylePreset(TableStylePreset.DarkStyle1);
int stylePreset = table.getStylePreset();
System.out.println("Table style preset: " + stylePreset);
ITable anotherTable = slide.getShapes().addTable(10, 100, columnWidths, rowHeights);
anotherTable.setStylePreset(stylePreset);
presentation.save("table-style.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Блокировать соотношение сторон таблицы
Соотношение сторон таблицы — это отношение её ширины к высоте. Используйте setAspectRatioLocked для блокировки этого соотношения у таблицы.
Пример ниже открывает pres.pptx, который должен содержать как минимум один слайд с таблицей в качестве первой фигуры. Он выводит текущее состояние блокировки, включает блокировку соотношения сторон, выводит обновлённое состояние (true) и сохраняет результат как pres-out.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation("pres.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable) slide.getShapes().get_Item(0);
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
table.getGraphicalObjectLock().setAspectRatioLocked(true);
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
presentation.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
FAQ
Могу ли я включить направление чтения справа налево (RTL) для всей таблицы и текста в её ячейках?
Да. Таблица предоставляет метод setRightToLeft , а абзацы имеют ParagraphFormat.setRightToLeft . Использование обоих гарантирует правильный RTL‑порядок и отображение внутри ячеек.
Как можно предотвратить перемещение или изменение размеров таблицы в конечном файле?
Используйте shape locks , чтобы отключить перемещение, изменение размера, выделение и т.д. Эти блокировки применимы и к таблицам.
Поддерживается ли вставка изображения в ячейку в качестве фона?
Да. Вы можете задать picture fill для ячейки; изображение будет покрывать область ячейки в соответствии с выбранным режимом (растягивание или заливка плиткой).