Сводная таблица
Сводные таблицы — мощный инструмент анализа данных, который позволяет быстро обобщать, анализировать и визуализировать большие объёмы информации. Они поддерживают различные операции с данными и параметры форматирования, помогая пользователям лучше понимать свои данные.
Введение
Сводные таблицы обычно используют в следующих случаях:
- Обобщение данных: сводные таблицы позволяют быстро подвести итоги и получить общее представление о данных.
- Анализ данных: сводные таблицы помогают выявлять закономерности и взаимосвязи.
- Исследование данных: сводные таблицы помогают находить правила и тенденции.
- Визуализация данных: сводные таблицы позволяют представить данные наглядно и упростить их восприятие.
Сводная таблица обычно включает следующие элементы:
- Метки строк: используются для группировки данных по строкам.
- Метки столбцов: используются для группировки данных по столбцам.
- Значения: используются для обобщения данных.
Чтобы точнее анализировать данные, можно по необходимости настраивать метки строк, метки столбцов и значения.
Источник данных
В Univer Sheets источником данных для сводной таблицы может быть лист или диапазон данных. Выберите подходящий источник в зависимости от задач анализа. По умолчанию первая строка источника используется как метки столбцов, а остальные строки — как данные. Поэтому источник следует организовать как можно аккуратнее, по возможности избегая пустых строк и столбцов. Для данных в одном столбце тип определяется автоматически, чтобы обеспечить корректную работу сводной таблицы. Если в столбце встречаются данные разных типов, тип этого столбца по умолчанию считается строковым.
Сводные таблицы в Univer Sheets автоматически реагируют на изменения данных. При изменении источника сводная таблица обновляется автоматически.
Фильтрация
Сводные таблицы поддерживают фильтрацию по меткам строк и столбцов. Также доступно поле фильтра: оно не участвует в основной классификации и итоговой компоновке сводной таблицы, но позволяет отбирать данные.
Сводные таблицы поддерживают два способа фильтрации:
- Фильтрация по меткам: применяется непосредственно к элементам текущего измерения меток. Например, в измерении по регионам можно исключить отдельные регионы.
- Фильтрация по значениям: сначала указывается измерение значений, после чего фильтруются итоговые результаты поля значений. Например, можно исключить данные, где объём продаж меньше 1000.
Сортировка
Сортировка в сводной таблице действует только для полей строк и столбцов и поддерживает порядок по возрастанию и убыванию. Для сортировки используется метод localCompare. В будущем появятся дополнительные способы сортировки, например по пиньиню.
Сводные таблицы поддерживают два способа сортировки:
- Сортировка по меткам: применяется непосредственно к элементам текущего измерения меток. Например, в измерении по регионам можно сортировать по названию региона.
- Сортировка по значениям: сначала указывается измерение значений, после чего сортируются итоговые результаты поля значений. Например, данные можно упорядочить по объёму продаж.
Агрегирование
Сводные таблицы поддерживают 11 методов агрегирования, совместимых с Excel: сумму, количество, количество данных, среднее, максимум, минимум, произведение, стандартное отклонение, дисперсию, стандартное отклонение генеральной совокупности и дисперсию генеральной совокупности.
Сводные таблицы поддерживают несколько измерений значений и позволяют настраивать область измерений значений (расположение значений) и их позицию (индекс значения).
Поскольку эта логика компоновки достаточно сложна, пока поддерживается только табличное представление. Другие представления будут добавляться по мере необходимости.
Детализация
Детализация позволяет дважды щёлкнуть ячейку в области значений сводной таблицы и просмотреть соответствующие ей исходные данные. Это упрощает переход от итогового значения к данным, на основе которых оно рассчитано.
Группировка
Сводные таблицы предусматривают группировку, однако в Univer Sheets эта функция пока не поддерживается.
Доступны следующие способы группировки:
- По датам: данные группируются по годам, месяцам, дням и т. д.
- По числам: числовые данные объединяются в заданные диапазоны.
- По элементам: элементы группируются по заданным правилам.
Режим плагинов
Установка
pnpm add @univerjs-pro/sheets-pivot @univerjs-pro/sheets-pivot-uinpm install @univerjs-pro/sheets-pivot @univerjs-pro/sheets-pivot-uiyarn add @univerjs-pro/sheets-pivot @univerjs-pro/sheets-pivot-uibun add @univerjs-pro/sheets-pivot @univerjs-pro/sheets-pivot-uiИспользование
import { UniverSheetsPivotTablePlugin } from '@univerjs-pro/sheets-pivot'import { UniverSheetsPivotTableUIPlugin } from '@univerjs-pro/sheets-pivot-ui'import SheetsPivotTableUIEnUS from '@univerjs-pro/sheets-pivot-ui/locale/en-US'import SheetsPivotTableEnUS from '@univerjs-pro/sheets-pivot/locale/en-US'import { LocaleType, mergeLocales, Univer } from '@univerjs/core'import '@univerjs-pro/sheets-pivot-ui/lib/index.css'import '@univerjs-pro/sheets-pivot/facade' // [!codeconst univer = new Univer({ locale: LocaleType.EN_US, locales: { [LocaleType.EN_US]: mergeLocales( SheetsPivotTableEnUS, SheetsPivotTableUIEnUS, ), },})Регистрация плагинов
Плагин сводных таблиц можно регистрировать по-разному в зависимости от сценария использования. Доступны два режима для различных вычислительных задач.
Регистрация только в основном процессе
Плагин сводных таблиц можно зарегистрировать только в основном процессе. Этот режим подходит для небольших задач и простых операций и не требует дополнительной настройки конфигурации плагина. Достаточно импортировать UniverSheetsPivotTablePlugin.
univer.registerPlugin(UniverSheetsPivotTablePlugin)univer.registerPlugin(UniverSheetsPivotTableUIPlugin)Регистрация в основном и рабочем процессах
Для сценариев с высокими требованиями к производительности плагин сводных таблиц можно зарегистрировать как в основном, так и в рабочем процессе. В этом режиме многопоточная архитектура эффективно распределяет данные и вычисления, заметно снижая нагрузку на основной процесс и повышая общую производительность.
В этом режиме основной процесс отвечает прежде всего за распределение данных, синхронизацию и отрисовку, а рабочий процесс выполняет сложные вычисления. Для использования режима необходимо точно настроить параметры при регистрации.
// main process file// Setting notExecuteFormula to true indicates that the main process does not perform calculations. It is only responsible for data distribution, synchronization, and rendering.univer.registerPlugin(UniverSheetsPivotTablePlugin, { notExecuteFormula: true })univer.registerPlugin(UniverSheetsPivotTableUIPlugin)// web worker process file// Setting notExecuteFormula to false indicates that the worker process performs the calculations.univer.registerPlugin(UniverSheetsPivotTablePlugin, { notExecuteFormula: false })Если у вас есть коммерческая лицензия Univer, инструкции по настройке см. в разделе Использование лицензии в клиенте.
Плагины и конфигурация
interface IUniverSheetsPivotConfig { /** * Define the maximum number of items that can be displayed in a single pivot table field. * @default 1000 */ maxLimitItemCount?: number}Поддержка мобильных устройств
Сначала настройте мобильный редактор. В коде инициализации режима плагинов на этой странице замените указанные настольные регистрации мобильными экспортами тех же пакетов до открытия документа. Сохраните модели, стили, локализации и импорты Facade; не регистрируйте оба варианта.
| Пакет | Настольная регистрация | Мобильная регистрация |
|---|---|---|
@univerjs-pro/sheets-pivot-ui | UniverSheetsPivotTableUIPlugin | UniverSheetsPivotTableMobileUIPlugin |
Режим предустановки
Функция сводных таблиц входит в предустановку @univerjs/preset-sheets-advanced, которая также включает другие расширенные возможности, например рисование и водяные знаки.
Установка
Во время выполнения предустановка UniverSheetsAdvancedPreset из @univerjs/preset-sheets-advanced зависит от UniverSheetsDrawingPreset. Сначала установите @univerjs/preset-sheets-drawing.
pnpm add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancednpm install @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancedyarn add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancedbun add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancedИспользование
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced'import UniverPresetSheetsAdvancedEnUS from '@univerjs/preset-sheets-advanced/locales/en-US'import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing'import UniverPresetSheetsDrawingEnUS from '@univerjs/preset-sheets-drawing/locales/en-US'import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'import '@univerjs/preset-sheets-core/lib/index.css'import '@univerjs/preset-sheets-drawing/lib/index.css'import '@univerjs/preset-sheets-advanced/lib/index.css'const { univerAPI } = createUniver({ locale: LocaleType.EN_US, locales: { [LocaleType.EN_US]: mergeLocales( UniverPresetSheetsCoreEnUS, UniverPresetSheetsDrawingEnUS, UniverPresetSheetsAdvancedEnUS, ), }, presets: [ UniverSheetsCorePreset(), UniverSheetsDrawingPreset(), UniverSheetsAdvancedPreset(), ],})Если у вас есть коммерческая лицензия Univer, инструкции по настройке см. в разделе Использование лицензии в клиенте.
Предустановки и конфигурация
interface IUniverSheetsAdvancedPresetConfig { pivot?: Pick<IUniverSheetsPivotConfig, 'maxLimitItemCount'>}interface IUniverSheetsPivotConfig { /** * Define the maximum number of items that can be displayed in a single pivot table field. * @default 1000 */ maxLimitItemCount?: number}Facade API
Полные определения типов Facade API доступны в справочнике Facade API.
Импорт
Примечание о режиме плагинов
Вручную импортировать пакет Facade нужно только в режиме плагинов. В режиме предустановки соответствующий пакет Facade уже подключён, поэтому дополнительный импорт не требуется.
import '@univerjs-pro/sheets-pivot/facade'Добавление сводной таблицы
Метод FWorkbook.addPivotTable добавляет сводную таблицу и при успешном выполнении возвращает экземпляр FPivotTable.
// should ensure the sheet range A1:G9 is not emptyconst fWorkbook = univerAPI.getActiveWorkbook()const unitId = fWorkbook.getId()const fSheet = fWorkbook.getActiveSheet()const subUnitId = fSheet.getSheetId()const sheetName = fSheet.getSheetName()const sourceInfo = { unitId, subUnitId, sheetName, range: { startRow: 0, startColumn: 0, endRow: 8, endColumn: 6, },}const anchorCellInfo = { unitId, subUnitId, row: 20, col: 8,}const fPivotTable = await fWorkbook.addPivotTable(sourceInfo, univerAPI.Enum.PositionTypeEnum.Existing, anchorCellInfo)const pivotTableId = fPivotTable.getPivotTableId()// add flag to avoid add pivot fields multiple timeslet hasAdded = false// the addPivotTable is async, you can add pivot fields after the pivot table is addeduniverAPI.addEvent(univerAPI.Event.PivotTableRendered, (params) => { if (!hasAdded && params.pivotTableId === pivotTableId) { fPivotTable.addField(1, univerAPI.Enum.PivotTableFiledAreaEnum.Row, 0) fPivotTable.addField(1, univerAPI.Enum.PivotTableFiledAreaEnum.Value, 0) hasAdded = true }})Получение сводной таблицы
Метод FWorkbook.getPivotTableByCell получает экземпляр сводной таблицы по опорной ячейке. Если целевая ячейка находится в сводной таблице, метод возвращает экземпляр FPivotTable.
const fWorkbook = univerAPI.getActiveWorkbook()const unitId = fWorkbook.getId()const fSheet = fWorkbook.getActiveSheet()const subUnitId = fSheet.getSheetId()// get pivot table by the cell in FWorkbook.const fPivotTable = fWorkbook.getPivotTableByCell(unitId, subUnitId, 0, 8)// get pivot table by the cell in FWorksheet.const pivotTable2 = fSheet.getPivotTableByCell(0, 8)Экземпляр FPivotTable предоставляет следующие методы для работы со сводной таблицей:
| Метод | Описание |
|---|---|
| remove | удалить сводную таблицу |
| getConfig | вернуть конфигурацию сводной таблицы, сведения об исходном диапазоне и опорной ячейке |
| addField | добавить поле в сводную таблицу |
| removeField | удалить поле из сводной таблицы |
| updateFieldPosition | изменить позицию поля в сводной таблице |
| updateValuePosition | управлять позицией ∑Значения |
| setSubtotalType | задать тип промежуточного итога для поля |
| setLabelSort | задать сортировку меток поля |
| setLabelManualFilter | задать фильтр меток поля |
| renameField | переименовать поле |
| setValueFilter | задать фильтр значений |
| reset | сбросить поля сводной таблицы |
| setFieldsConfig | задать конфигурацию полей сводной таблицы |
| getValueFilters | получить все фильтры значений сводной таблицы |
class FPivotTable {/** * @description Get the pivot table config by the pivot table id. * @typedef PivotTableConfig * @property {TargetInfo} targetCellInfo The target cell info of the pivot table. * @property {SourceInfo} sourceRangeInfo The source data range info of the pivot table. * @property {boolean} isEmpty The pivot table is empty or not. * @property {object} fieldsConfig The snapshot of the pivot table fields config. * @returns {PivotTableConfig|undefined} The pivot table config or undefined. */ getConfig(): IPivotTableConfig /** * @description Remove a pivot table from the workbook by pivot table id */ async remove(): void /** *@description Add a pivot field to the pivot table. * @param {string|number} dataFieldIdOrIndex The data field id. * @param {PivotTableFiledAreaEnum} fieldArea The area of the field. * @param {number} index The index of the field in the target area. * @returns {boolean} Whether the pivot field is added successfully. */ async addField(dataFieldIdOrIndex: string | number, fieldArea: PivotTableFiledAreaEnum, index: number): Promise<boolean> /** * @description Remove a pivot field from the pivot table * @param {string[]} fieldIds The deleted field ids. * @returns {boolean} Whether the pivot field is removed successfully. */ async removeField(fieldIds: string[]): Promise<boolean> /** * @description Update the pivot table field position. * @param {string} fieldId - The moved field id. * @param {PivotTableFiledAreaEnum} area - The target area of the field. * @param {number} index - The target index of the field, if the index is bigger than the field count in the target area, the field will be moved to the last, if the index is smaller than 0, the field will be moved to the first. * @returns {boolean} Whether the pivot field is moved successfully. */ async updateFieldPosition(fieldId: string, area: PivotTableFiledAreaEnum, index: number): Promise<boolean> /** * @description If there are multiple value fields in the pivot table, you can update the position of the value field, which only can be position in row or column. * @param {PivotTableValuePositionEnum} position - The position of the value field. * @param {number} index - The index of the value field. * @returns {boolean} Whether the pivot value field is moved successfully. */ async updateValuePosition(position: PivotTableValuePositionEnum, index: number): Promise<boolean> /** * @description Set the pivot table subtotal type for value field, it only works for the value field. * @param {string} fieldId - The field id. * @param {PivotSubtotalTypeEnum} subtotalType - The subtotal type of the field. * @returns {boolean} Whether the pivot table subtotal type is set successfully. */ async setSubtotalType(fieldId: string, subtotalType: PivotSubtotalTypeEnum): Promise<boolean> /** * @description Set the pivot table sort info. * @param {string} tableFieldId - The field id of the sort. * @param {PivotTableSortInfo} info - The sort info. * @typedef PivotTableSortInfo * @property {PivotDataFieldSortOperatorEnum} type The sort operator of the field items. * @returns {boolean} Whether the pivot table sort info is set successfully. */ async setLabelSort(tableFieldId: string, info: IPivotTableSortInfo): Promise<boolean> /** * @description Set the pivot table filter. * @param {string} tableFieldId - The field id of the filter. * @param {string[]} items - The items of the filter. * @returns {boolean} Whether the pivot table filter is set successfully. */ async setLabelFilter(tableFieldId: string, items: string[], isAll?: boolean): Promise<boolean> /** * @description Rename the pivot table field. * @param {string} fieldId - The field id. * @param {string} name - The new name of the field. * @returns {boolean} Whether the pivot table field is renamed successfully. */ async renameField(fieldId: string, name: string): Promise<boolean> /** * @description Set the pivot table value filter. A value filter is used to filter the data based on the value of a field. * @param {string} fieldId - The field id of the filter. Only one value filer can be set for a field. * @param {Omit<IPivotTableValueFilter, 'type'>} filterInfo - The filter info. The undefined value will be removed from the old filter. * @typedef filterInfo * @property {valueGreaterThan} operator - The filter operator is used to compare the value of the field with the expected value.Currently, The following operators are supported: valueBetween, valueEqual, valueGreaterThan, valueGreaterThanOrEqual, valueLessThan, valueLessThanOrEqual,valueNotBetween,valueNotEqual. * @property {number} expected - The expected value. * @property {string} valueFieldId - The value field id. * @returns {boolean} Whether the pivot table value filter is set successfully. */ async setValueFilter(fieldId: string, filterInfo: Omit<IPivotTableValueFilter, 'type'>): Promise<boolean> /** * @description Clear the fields by provided field area or clear all fields. * @param {PivotTableFiledAreaEnum} [resetArea] The area of the field to reset or undefined to reset all fields. * @returns {Promise<boolean>} Whether the pivot table fields are reset successfully. */ reset(resetArea?: PivotTableFiledAreaEnum): Promise<boolean> /** * @description Set the pivot table fields config.It will add fields to the pivot table from provided config.Before setting the fields config, you should ensure the pivot table is empty to avoid the conflict. * @param {IPivotTableConfig['fieldsConfig']} config The pivot table fields config. * @returns {Promise<boolean>} Whether the pivot table fields config is set successfully. */ setFieldsConfig(config: IPivotTableConfig['fieldsConfig']): Promise<boolean> /** * Get all value filters of the pivot table. In pivot table, the value filter must be applied in order.So the order of the value filter is important. * @returns {IValueFilterInfoItem[]} The value filter info list. */ getValueFilters(): IValueFilterInfoItem[]}Обработчики событий
Полные определения типов событий доступны в разделе События.
Событие univerAPI.Event.BeforePivotTableAdd срабатывает перед добавлением сводной таблицы.
const disposable = univerAPI.addEvent(univerAPI.Event.BeforePivotTableAdd, (params) => { const { positionType, targetCellInfo } = params if (positionType === univerAPI.Enum.PositionTypeEnum.Existing && targetCellInfo.sheetName === 'Sheet 1') { // Cancel the pivot table adding operation params.cancel = true console.log(`The pivot table can't be added to the sheet ${targetCellInfo.sheetName}`) }})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableAdded срабатывает после добавления сводной таблицы.
const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableAdded, (params) => { const { positionType, targetCellInfo } = params if (positionType === univerAPI.Enum.PositionTypeEnum.Existing) { console.log('A pivot table created in an existing sheet') console.log(` The target sheet name is ${targetCellInfo.sheetName}, the target row is ${targetCellInfo.row}, the target column is ${targetCellInfo.column} `) } else { console.log('A pivot table created in a new sheet') }})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.BeforePivotTableMove срабатывает перед перемещением сводной таблицы.
const disposable = univerAPI.addEvent(univerAPI.Event.BeforePivotTableMove, (params) => { const { pivotTableId, targetCellInfo } = params if (pivotTableId === 'pivotTable1' && targetCellInfo.sheetName === 'Sheet 1') { // Cancel the move pivot table operation params.cancel = true console.log(`The pivot table can't be moved to the sheet ${targetCellInfo.sheetName}`) }})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableMoved срабатывает после перемещения сводной таблицы.
const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableMoved, (params) => { const { pivotTableId, targetCellInfo, originTargetInfo } = params if (pivotTableId === 'pivotTable1') { console.log(` The pivot table moved from row: ${originTargetInfo.row} & column: ${originTargetInfo.column} to the sheet ${targetCellInfo.sheetName} row: ${targetCellInfo.row} & column: ${targetCellInfo.column} `) }})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableRendered срабатывает после отрисовки сводной таблицы.
// import { unionPivotViewRange } from '@univerjs-pro/sheets-pivot';const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableRendered, (params) => { const { pivotTableId, rangeInfo } = params console.log(`The pivot table ${pivotTableId} has been rendered`) if (rangeInfo) { console.log(unionPivotViewRange(rangeInfo)) }})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableRemoved срабатывает после удаления сводной таблицы.
const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableRemoved, (params) => { const { pivotTableId } = params console.log(`The pivot table ${pivotTableId} has been removed`)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldAdded срабатывает после добавления поля в сводную таблицу.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldAdded, (params) => { const { pivotTableId, fieldId, fieldArea, fieldIndex } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting('fieldId') console.log(fieldSetting)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldRemoved срабатывает после удаления поля из сводной таблицы.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldRemoved, (params) => { const { pivotTableId, fieldId } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting(fieldId) console.log(fieldSetting)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldMoved срабатывает после перемещения поля в сводной таблице.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldMoved, (params) => { const { pivotTableId, fieldId, fieldArea, fieldIndex } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting(fieldId) console.log(`The source name ${fieldSetting.sourceName} the display name ${fieldSetting.displayName}`)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldCollapseChanged срабатывает после разворачивания или сворачивания измерения в сводной таблице.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldCollapseChanged, (params) => { const { pivotTableId, fieldId, isCollapsed } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting(fieldId) console.log(`The source name ${fieldSetting.sourceName} the display name ${fieldSetting.displayName}`)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldFilterChanged срабатывает после фильтрации измерения в сводной таблице.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldFilterChanged, (params) => { const { pivotTableId, fieldId, filter } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting(fieldId) console.log(`The Checklist filter value is ${fieldSetting.filterInfo.checklist}`)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldSortChanged срабатывает после сортировки измерения в сводной таблице.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldSortChanged, (params) => { const { pivotTableId, fieldId, sort } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting(fieldId) console.log(`The sort info is ${fieldSetting.sortInfo}`)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableFieldSettingChanged срабатывает после изменения настройки измерения в сводной таблице.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableFieldSettingChanged, (params) => { const { pivotTableId, fieldId, setting } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const fieldSetting = pivotTable.getFieldSetting(fieldId) console.log(`The source name ${fieldSetting.sourceName} the display name ${fieldSetting.displayName}`)})// Remove the event listener, use `disposable.dispose()`Событие univerAPI.Event.PivotTableValuePositionChanged срабатывает после изменения позиции значения в сводной таблице.
const fWorkbook = univerAPI.getActiveWorkbook()const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableValuePositionChanged, (params) => { const { pivotTableId, valueId, position } = params const pivotTable = fWorkbook.getPivotTableById(pivotTableId) const valueSetting = pivotTable.getValueSetting(valueId) console.log(`The source name ${valueSetting.sourceName} the display name ${valueSetting.displayName}`)})// Remove the event listener, use `disposable.dispose()`Способ отображения значений
Используйте setShowDataAs() для поля значений, чтобы показать долю от итога строки, столбца или всей таблицы либо разницу с базовым элементом. Это меняет отображаемое вычисление, не заменяя исходные данные. getShowDataAs() читает настройки, а resetShowDataAs() возвращает обычный расчёт.
const valueId = fPivotTable.getFieldIdsByArea( univerAPI.Enum.PivotTableFiledAreaEnum.Value,)[0]if (valueId) { await fPivotTable.setShowDataAs(valueId, { type: univerAPI.Enum.PivotShowAsTypeEnum.percentOfGrandTotal, }) console.log(fPivotTable.getShowDataAs(valueId))}В примере fPivotTable — существующая сводная таблица. Укажите ID поля значений, а не исходного столбца или поля строк. Режимы разницы и накопительного итога также требуют настройки базового поля и элемента.
Копирование сводных таблиц вместе с листом
Если плагин сводных таблиц зарегистрирован, при дублировании листа также копируются его сводные таблицы и настройки полей. Каждая копия получает новый ID. Если источник данных находится на копируемом листе, ссылка перенаправляется на новый лист; ссылки на другие листы и книги сохраняются. Копии сводных таблиц участвуют в отмене и повторе операции копирования листа.
const workbook = univerAPI.getActiveWorkbook()if (!workbook) throw new Error('No active workbook')const copiedSheet = workbook.duplicateActiveSheet()console.log(copiedSheet.getSheetName())Насколько полезно это руководство?