Работа с таблицами
Работа с таблицами
Aspose.Cells FOSS for Java поддерживает таблицы Excel (также известные как ListObjects или структурированные ссылки). Вы можете создавать новые таблицы из диапазонов ячеек, просматривать существующие таблицы, настраивать строки заголовка и итогов, применять встроенные стили таблиц, получать доступ к отдельным столбцам и преобразовывать таблицы обратно в обычные диапазоны. Основная точка входа — ListObjectCollection, доступная через Worksheet.getListObjects().
Обзор
Таблицы на листе управляются через ListObjectCollection, возвращаемый Worksheet.getListObjects(). Каждый ListObject представляет одну таблицу Excel и предоставляет её отображаемое имя, комментарий, границы диапазона ячеек, коллекцию столбцов, параметры стиля и видимость строк заголовка/итогов.
Новая таблица создаётся с помощью ListObjectCollection.add(startRow, startColumn, endRow, endColumn, hasHeaders), который возвращает нулевой индекс вновь созданной таблицы. Альтернативная перегрузка принимает строки с именами ячеек: ListObjectCollection.add(startCellName, endCellName, hasHeaders).
Ключевые классы
| Класс | Описание: |
|---|---|
ListObject | Представляет одну таблицу Excel. Предоставляет getDisplayName(), getComment(), координаты диапазона, коллекцию столбцов, тип стиля и видимость строк заголовка/итогов. |
ListObjectCollection | Коллекция всех таблиц на листе. Поддерживает getCount(), индексированный и именованный поиск через get(), add(), remove(), а также вспомогательные функции преобразования типа стиля. |
ListColumn | Представляет один столбец в таблице. Предоставляет идентификатор столбца, имя и настройки вычислений в строке итогов. |
ListColumnCollection | Упорядоченная коллекция столбцов в таблице. Итерируемая с возможностью получения количества и доступа по индексу. |
TableStyleType | Перечисление, идентифицирующее встроенный стиль таблицы Excel (Light 1–21, Medium 1–28, Dark 1–11, или Custom/None). |
TotalsCalculation | Перечисление функции агрегирования в строке итогов таблицы (SUM, COUNT, AVERAGE, MAX, MIN, STD_DEV, VAR, COUNT_NUMS, CUSTOM, NONE). |
Доступ к таблицам на листе
Получите ListObjectCollection из любого Worksheet через Worksheet.getListObjects(). Используйте ListObjectCollection.getCount(), чтобы определить количество существующих таблиц. Доступ к отдельным таблицам осуществляется по нулевому индексу через ListObjectCollection.get(index) или по отображаемому имени через ListObjectCollection.get(name).
Workbook wb = new Workbook("input.xlsx");
WorksheetCollection sheets = wb.getWorksheets();
Worksheet ws = sheets.get(0);
ListObjectCollection tables = ws.getListObjects();
for (int i = 0; i < tables.getCount(); i++) {
ListObject table = tables.get(i);
System.out.println("Table: " + table.getDisplayName()
+ " rows: " + table.getStartRow() + "-" + table.getEndRow());
}Создание новой таблицы
Используйте ListObjectCollection.add(), чтобы вставить таблицу в диапазон ячеек. Параметр hasHeaders указывает, содержит ли первая строка диапазона заголовки столбцов.
Workbook wb = new Workbook();
WorksheetCollection sheets = wb.getWorksheets();
Worksheet ws = sheets.get(0);
// Populate data
ws.getCells().get("A1").putValue("Product");
ws.getCells().get("B1").putValue("Quantity");
ws.getCells().get("A2").putValue("Widget");
ws.getCells().get("B2").putValue(100);
// Create table over A1:B2 with headers in row 0
int tableIndex = ws.getListObjects().add(0, 0, 1, 1, true);
ListObject table = ws.getListObjects().get(tableIndex);
table.setDisplayName("SalesTable");Просмотр свойств таблицы
После получения ссылки ListObject вы можете прочитать:
ListObject.getDisplayName()— строка отображаемого имени таблицы.ListObject.getComment()— необязательный комментарий, связанный с таблицей.ListObject.getStartRow()/ListObject.getStartColumn()— ячейка в левом верхнем углу диапазона таблицы.ListObject.getEndRow()/ListObject.getEndColumn()— ячейка в правом нижнем углу диапазона таблицы.ListObject.isShowHeaderRow()— отображается ли строка заголовка.ListObject.isShowTotals()— отображается ли строка итогов.ListObject.getListColumns()—ListColumnCollectionдля таблицы.
Оформление таблиц
Примените встроенный стиль таблицы с помощью ListObject.setTableStyleType(TableStyleType). Перечисление TableStyleType включает варианты Light (1–21), Medium (1–28) и Dark (1–11), а также NONE и CUSTOM.
ListObject table = ws.getListObjects().get(0);
table.setTableStyleType(TableStyleType.TABLE_STYLE_MEDIUM_2);Дополнительные переключатели стилей управляют чередующимися строками, чередующимися столбцами и выделением первой/последней колонки:
ListObject.setShowTableStyleRowStripes(boolean)ListObject.setShowTableStyleColumnStripes(boolean)ListObject.setShowTableStyleFirstColumn(boolean)ListObject.setShowTableStyleLastColumn(boolean)
Вы также можете задать пользовательское имя стиля с помощью ListObject.setTableStyleName(String).
Вспомогательные методы ListObjectCollection.parseTableStyleType(String) и ListObjectCollection.tableStyleTypeName(TableStyleType) преобразуют между перечислением и его строковым представлением.
Работа с колонками таблицы
Доступ к отдельным колонкам осуществляется через ListObject.getListColumns(), который возвращает ListColumnCollection. Каждый ListColumn предоставляет:
ListColumn.getId()— идентификатор колонки OOXML, начинающийся с 1.ListColumn.getName()/ListColumn.setName(String)— текст заголовка колонки.ListColumn.getTotalsCalculation()/ListColumn.setTotalsCalculation(TotalsCalculation)— функция агрегирования для строки итогов.ListColumn.getTotalsRowLabel()/ListColumn.setTotalsRowLabel(String)— пользовательская метка в строке итогов.ListColumn.getTotalsRowFormula()/ListColumn.setTotalsRowFormula(String)— пользовательская формула для строки итогов.
ListObject table = ws.getListObjects().get(0);
ListColumnCollection columns = table.getListColumns();
for (int i = 0; i < columns.getCount(); i++) {
ListColumn col = columns.get(i);
System.out.println("Column " + col.getId() + ": " + col.getName());
}Настройка строки итогов
Включите строку итогов с помощью ListObject.setShowTotals(true), затем задайте функции агрегирования для каждого столбца, используя перечисление TotalsCalculation.
ListObject table = ws.getListObjects().get(0);
table.setShowTotals(true);
ListColumn qtyColumn = table.getListColumns().get(1);
qtyColumn.setTotalsCalculation(TotalsCalculation.SUM);
ListColumn labelColumn = table.getListColumns().get(0);
labelColumn.setTotalsRowLabel("Total");Изменение размеров и преобразование таблиц
Измените размер таблицы, чтобы охватить другой диапазон ячеек, используя ListObject.resize(startRow, startColumn, endRow, endColumn, hasHeaders).
Преобразуйте таблицу обратно в обычный диапазон ячеек с помощью ListObject.convertToRange(). Это удалит структуру таблицы, сохранив данные ячеек и их форматирование.
Полностью удалить таблицу из коллекции с помощью ListObjectCollection.removeAt(index).
AutoFilter на таблицах
Показать или скрыть стрелки автоподборки фильтра в раскрывающемся списке столбца в таблице:
ListObject.showAutoFilter()— отображать стрелки фильтра в строке заголовка.ListObject.removeAutoFilter()— скрыть стрелки фильтра.
Сводка API Reference
ListObject
| Метод | Тип возврата | Описание: |
|---|---|---|
getDisplayName() | String | Отображаемое имя таблицы. |
setDisplayName(name) | void | Устанавливает отображаемое имя. |
getComment() | String | Необязательный комментарий к таблице. |
setComment(comment) | void | Устанавливает комментарий таблицы. |
getStartRow() | int | Начальный индекс строки диапазона таблицы. |
getStartColumn() | int | Начальный индекс столбца диапазона таблицы. |
getEndRow() | int | Конечный индекс строки диапазона таблицы. |
getEndColumn() | int | Индекс конечного столбца диапазона таблицы. |
isShowHeaderRow() | boolean | Отображается ли строка заголовка. |
setShowHeaderRow(show) | void | Показывает или скрывает строку заголовка. |
isShowTotals() | boolean | Отображается ли строка итогов. |
setShowTotals(show) | void | Показывает или скрывает строку итогов. |
getTableStyleType() | TableStyleType | Встроенный стиль таблицы. |
setTableStyleType(type) | void | Применяет встроенный стиль таблицы. |
getTableStyleName() | String | Имя пользовательского стиля таблицы. |
setTableStyleName(name) | void | Устанавливает пользовательское имя стиля таблицы. |
getListColumns() | ListColumnCollection | Коллекция столбцов таблицы. |
resize(...) | void | Изменяет размер таблицы до нового диапазона. |
convertToRange() | void | Преобразует таблицу в обычный диапазон. |
showAutoFilter() | void | Отображает стрелки автофильтра. |
removeAutoFilter() | void | Скрывает стрелки автофильтра. |
ListObjectCollection
| Метод | Тип возврата | Описание: |
|---|---|---|
getCount() | int | Количество таблиц на листе. |
get(index) | ListObject | Возвращает таблицу по заданному нулевому индексу. |
get(name) | ListObject | Возвращает таблицу с данным отображаемым именем. |
add(startRow, startColumn, endRow, endColumn, hasHeaders) | int | Создаёт новую таблицу; возвращает её индекс. |
add(startCellName, endCellName, hasHeaders) | int | Создаёт новую таблицу из имён ячеек; возвращает её индекс. |
removeAt(index) | void | Удаляет таблицу по заданному индексу. |
parseTableStyleType(name) | TableStyleType | Преобразует строку в значение перечисления TableStyleType. |
tableStyleTypeName(type) | String | Преобразует перечисление TableStyleType в его строковое имя. |
ListColumn
| Метод | Тип возврата | Описание: |
|---|---|---|
getId() | int | Идентификатор столбца OOXML, начинающийся с1. |
getName() | String | Текст заголовка столбца. |
setName(name) | void | Устанавливает текст заголовка столбца. |
getTotalsCalculation() | TotalsCalculation | Функция агрегирования строки итогов. |
setTotalsCalculation(calc) | void | Устанавливает агрегирование строки итогов. |
getTotalsRowLabel() | String | Пользовательская метка в строке итогов. |
setTotalsRowLabel(label) | void | Устанавливает метку строки итогов. |
getTotalsRowFormula() | String | Пользовательская формула для строки итогов. |
setTotalsRowFormula(formula) | void | Устанавливает формулу строки итогов. |
Ограничения
- Привязки данных таблицы нельзя изменять отдельно; таблица охватывает диапазон, указанный при её создании. Используйте
resize(), чтобы скорректировать охватываемый диапазон. - Пользовательские стили таблиц должны быть определены в рабочей книге до их обращения по имени через
setTableStyleName().