Работа с таблицами

Работа с таблицами

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().

См. также:

 Русский