Структура
Функция структуры (также известная как группировка или структура измерений) позволяет объединять строки или столбцы листа в группы. С её помощью удобно упорядочивать и обобщать большие наборы данных, создавая сворачиваемые разделы.
Введение
В Univer Sheets функция структуры позволяет:
- Группировать строки или столбцы: создавать иерархические группы строк или столбцов для упорядочивания данных.
- Сворачивать и разворачивать группы: показывать или скрывать сгруппированные строки и столбцы одним щелчком.
- Создавать вложенные группы: добавлять несколько уровней группировки для сложных иерархий данных.
Группы структуры обычно используются в следующих случаях:
- Обобщение детализированных данных: подробные строки группируются под итоговыми, чтобы сделать представление компактнее.
- Упорядочивание больших наборов данных: связанные столбцы или строки объединяются для более удобной навигации.
- Создание сворачиваемых отчётов: пользователи могут разворачивать и сворачивать разделы отчёта по мере необходимости.
Режим плагинов
Установка
pnpm add @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-uinpm install @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-uiyarn add @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-uibun add @univerjs-pro/sheets-outline @univerjs-pro/sheets-outline-uiИспользование
import { UniverSheetsOutlinePlugin } from '@univerjs-pro/sheets-outline'import { UniverSheetsOutlineUIPlugin } from '@univerjs-pro/sheets-outline-ui'import SheetsOutlineUIEnUS from '@univerjs-pro/sheets-outline-ui/locale/en-US'import { LocaleType, mergeLocales, Univer } from '@univerjs/core'import '@univerjs-pro/sheets-outline/facade'import '@univerjs-pro/sheets-outline-ui/lib/index.css'const univer = new Univer({ locale: LocaleType.EN_US, locales: { [LocaleType.EN_US]: mergeLocales( SheetsOutlineUIEnUS, ), },})univer.registerPlugin(UniverSheetsOutlinePlugin)univer.registerPlugin(UniverSheetsOutlineUIPlugin)Если у вас есть коммерческая лицензия Univer, инструкции по настройке см. в разделе Использование лицензии в клиенте.
Поддержка мобильных устройств
Сначала настройте мобильный редактор. В коде инициализации режима плагинов на этой странице замените указанные настольные регистрации мобильными экспортами тех же пакетов до открытия документа. Сохраните модели, стили, локализации и импорты Facade; не регистрируйте оба варианта.
| Пакет | Настольная регистрация | Мобильная регистрация |
|---|---|---|
@univerjs-pro/sheets-outline-ui | UniverSheetsOutlineUIPlugin | UniverSheetsOutlineMobileUIPlugin |
Режим предустановки
Функция структуры входит в предустановку @univerjs/preset-sheets-advanced.
Установка
pnpm add @univerjs/preset-sheets-advancednpm install @univerjs/preset-sheets-advancedyarn add @univerjs/preset-sheets-advancedbun add @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 { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'import '@univerjs/preset-sheets-core/lib/index.css'import '@univerjs/preset-sheets-advanced/lib/index.css'const { univerAPI } = createUniver({ locale: LocaleType.EN_US, locales: { [LocaleType.EN_US]: mergeLocales( UniverPresetSheetsCoreEnUS, UniverPresetSheetsAdvancedEnUS, ), }, presets: [ UniverSheetsCorePreset(), UniverSheetsAdvancedPreset(), ],})Если у вас есть коммерческая лицензия Univer, инструкции по настройке см. в разделе Использование лицензии в клиенте.
Facade API
Полные определения типов Facade API доступны в разделе FacadeAPI.
Импорт
Примечание о режиме плагинов
Импортировать пакет Facade вручную нужно только в режиме плагинов. В режиме предустановки соответствующий пакет Facade уже включён, поэтому дополнительный импорт не требуется.
import '@univerjs-pro/sheets-outline/facade'Создание структуры строк
С помощью Facade API можно создать группу строк:
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()// Group rows 2 to 6 (0-based index: startRow=1, numRows=5)fWorksheet.addRowOutline(1, 5)Создание структуры столбцов
Аналогичным образом можно создать группу столбцов:
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()// Group columns B to E (0-based index: startColumn=1, numColumns=4)fWorksheet.addColumnOutline(1, 4)Сворачивание и разворачивание структуры
Группу структуры можно программно свернуть или развернуть:
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)if (rowOutlines.length > 0) { // Collapse the first row outline group fWorksheet.setDimensionOutlineCollapsed(rowOutlines[0].id, true) // Expand it later fWorksheet.setDimensionOutlineCollapsed(rowOutlines[0].id, false)}Удаление групп структуры
Определённую группу структуры можно удалить по её идентификатору:
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()const rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)if (rowOutlines.length > 0) { fWorksheet.removeDimensionOutline(rowOutlines[0].id)}Очистка структуры в диапазоне
В указанном диапазоне можно удалить все группы структуры:
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()// Remove all row outline groups fully contained in rows 2 to 10fWorksheet.clearDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW, 1, 9)Получение групп структуры
Можно получить все группы структуры на листе:
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()// Get all row outlinesconst rowOutlines = fWorksheet.getDimensionOutlines(univerAPI.Enum.DimensionOutlineAxis.ROW)rowOutlines.forEach((outline) => { console.log(outline.id, outline.start, outline.end, outline.collapsed)})// Get all outlines (both row and column)const allOutlines = fWorksheet.getDimensionOutlines()Структура данных группировки
Каждая группа структуры имеет следующие свойства:
| Свойство | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор группы структуры |
unitId | string | Идентификатор книги |
subUnitId | string | Идентификатор листа |
axis | DimensionOutlineAxis | Ось структуры (row или column) |
start | number | Начальный индекс с нуля, включительно |
end | number | Конечный индекс с нуля, включительно |
collapsed | boolean | Свёрнута ли группа в данный момент |
Проверка и ошибки
При создании групп структуры выполняются следующие проверки:
- Недопустимый диапазон: диапазон должен быть корректным (неотрицательное начало и ненулевое количество элементов).
- Выход за границы: диапазон должен находиться в пределах листа.
- Пересечение групп: новые группы не могут пересекать существующие.
- Максимальная глубина: для групп структуры задана максимальная глубина вложенности.
Диапазон разгруппировки должен полностью охватывать диапазон группы структуры, иначе проверка завершится ошибкой.
Если проверка завершится ошибкой, команда не будет выполнена, а ошибка будет передана через SheetsOutlineErrorService.
Насколько полезно это руководство?