Segmentaciones y líneas de tiempo
Las segmentaciones filtran tablas, tablas dinámicas y gráficos dinámicos por miembros del origen. Las líneas de tiempo filtran campos de fecha originales compatibles de un informe dinámico; no admiten columnas de tablas, campos de texto, campos calculados ni campos de agrupación derivados.
Modo de complemento
Instalación
pnpm add @univerjs-pro/sheets-slicer @univerjs-pro/sheets-slicer-uinpm install @univerjs-pro/sheets-slicer @univerjs-pro/sheets-slicer-uiyarn add @univerjs-pro/sheets-slicer @univerjs-pro/sheets-slicer-uibun add @univerjs-pro/sheets-slicer @univerjs-pro/sheets-slicer-uiUso
Añada lo siguiente a la configuración de Sheets, con el soporte de dibujo y el origen de tabla o tabla dinámica configurados. Cargue el idioma y registre los complementos antes de crear el libro.
import { UniverSheetsSlicerPlugin } from '@univerjs-pro/sheets-slicer'import { UniverSheetsSlicerUIPlugin } from '@univerjs-pro/sheets-slicer-ui'import SheetsSlicerUILocale from '@univerjs-pro/sheets-slicer-ui/locale/es-ES'import { LocaleType } from '@univerjs/core'import '@univerjs-pro/sheets-slicer/facade'import '@univerjs-pro/sheets-slicer-ui/lib/index.css'univerAPI.loadLocales(LocaleType.ES_ES, SheetsSlicerUILocale)univer.registerPlugin(UniverSheetsSlicerPlugin)univer.registerPlugin(UniverSheetsSlicerUIPlugin)Modo preestablecido
Instalación
pnpm add @univerjs/presets @univerjs/preset-sheets-core @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancednpm install @univerjs/presets @univerjs/preset-sheets-core @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancedyarn add @univerjs/presets @univerjs/preset-sheets-core @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancedbun add @univerjs/presets @univerjs/preset-sheets-core @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advancedUso
El preset avanzado incluye modelos, UI y API Facade de segmentadores y líneas de tiempo. Combínelo con los presets Core y Drawing y sus traducciones. Si ya lo usa, añada slicer a esa configuración sin registrarlo de nuevo. Configure la licencia según usar una licencia.
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced'import AdvancedLocale from '@univerjs/preset-sheets-advanced/locales/es-ES'import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'import CoreLocale from '@univerjs/preset-sheets-core/locales/es-ES'import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing'import DrawingLocale from '@univerjs/preset-sheets-drawing/locales/es-ES'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.ES_ES, locales: { [LocaleType.ES_ES]: mergeLocales(CoreLocale, DrawingLocale, AdvancedLocale), }, presets: [ UniverSheetsCorePreset({ container: 'app' }), UniverSheetsDrawingPreset(), UniverSheetsAdvancedPreset({ slicer: { maxMemberWindowSize: 200 } }), ],})Con un Worker, configure useWorker: true en el preset avanzado y registre UniverSheetsAdvancedWorkerPreset() en el Worker; también incluye el cálculo de segmentadores.
Crear una segmentación
Este ejemplo utiliza una tabla dinámica en I1 de la hoja activa con un campo de origen llamado Region. Obtenga su ID original estable con getSourceFieldsInfo(); no pase nombres visibles ni ID de campos del informe a newSlicer().
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook?.getActiveSheet()if (!fWorkbook || !fWorksheet) throw new Error('No active worksheet')const pivotTable = fWorkbook.getPivotTableByCell( fWorkbook.getId(), fWorksheet.getSheetId(), 0, 8,)const regionField = pivotTable?.getSourceFieldsInfo().find((field) => field.name === 'Region')if (!pivotTable || !regionField) throw new Error('Region source field not found')const slicer = await fWorksheet.insertSlicer( pivotTable.newSlicer(regionField.id) .setCaption(regionField.name) .setPosition('N2') .build(),)pivotTable.newSlicer() vincula el constructor a su origen. build() solo prepara la configuración; insertSlicer() crea el control. La hoja de destino puede ser distinta de la de origen, pero ambas deben pertenecer al mismo libro. Para un origen de tabla, use fWorksheet.newSlicer(columnId).setTableReference({ subUnitId, tableId }), donde columnId es el ID estable de la columna de la tabla.
Crear una línea de tiempo
El siguiente ejemplo continúa con la misma tabla dinámica y requiere un campo de fecha original llamado Date. newTimeline() valida el origen y rechaza los campos no compatibles. Las API de rangos de la línea de tiempo utilizan valores de serie de Excel según el sistema de fechas del libro, no objetos JavaScript Date.
const dateField = pivotTable.getSourceFieldsInfo().find((field) => field.name === 'Date')if (!dateField) throw new Error('Date source field not found')const timeline = await fWorksheet.insertTimeline( pivotTable.newTimeline(dateField.id) .setCaption(dateField.name) .setLevel(univerAPI.Enum.TimelineLevel.Month) .setPosition('N18') .build(),)Buscar controles y observar cambios
Use getSlicer(viewId) / getSlicers() y getTimeline(viewId) / getTimelines() en la hoja que contiene el control. viewId es el ID devuelto por getId() del control, no su ID de dibujo.
Suscríbase a SlicerAdded, SlicerChanged, SlicerRemoved, TimelineAdded, TimelineChanged y TimelineRemoved mediante univerAPI.addEvent(). Los eventos describen cambios locales confirmados, no el guardado remoto ni la finalización del renderizado. Llame a dispose() en la suscripción cuando ya no sea necesaria.
Referencia de API:
Consultar miembros y compartir filtros
Pase valores de origen tipados a setSelection(): el número 1, la cadena '1' y un valor en blanco son distintos. No pase etiquetas ni índices visibles. El filtro se comparte entre todas las vistas de la misma caché y los informes conectados. En una Table sustituye el filtro de esa columna y conserva los demás. Use clearFilter() para quitarlo.
import { FilterSelectionMode, RecordValueType } from '@univerjs/core'const accepted = await slicer.setSelection({ mode: FilterSelectionMode.Include, values: [{ type: RecordValueType.String, value: 'EMEA' }],})getItems({ start, count }) consulta una ventana sin cambiar la selección. Solicita 100 miembros de forma predeterminada, limitados por maxMemberWindowSize (entero positivo, 200 por defecto). Conserve las selecciones fuera de la ventana. setConnections() sustituye las conexiones de informes dinámicos; getConnectionCandidates() obtiene candidatos compatibles. La edición necesita permisos en las hojas correspondientes. Véase FSheetSlicer.
Condiciones de fecha de la línea de tiempo
setSelection({ startDate, endDate, useWholeDay: true }) amplía los límites fraccionarios a días completos y mantiene exclusivo el final entero. Sin useWholeDay, el intervalo es exactamente [startDate, endDate). Una condición fija compartida desde la tabla dinámica puede no ser continua: léala con getDateCondition(). En ese caso, getSelection() devuelve undefined, lo que por sí solo no indica ausencia de filtro.
¿Cómo es esta guía?