Tableau croisé dynamique

Les tableaux croisés dynamiques sont de puissants outils d’analyse qui permettent de synthétiser, d’analyser et de visualiser rapidement de grands volumes de données. Ils proposent différentes opérations et options de mise en forme pour faciliter la compréhension des données.

Introduction

Les tableaux croisés dynamiques sont généralement utilisés pour :

  • Synthétiser les données : ils permettent d’obtenir rapidement une vue d’ensemble des données.
  • Analyser les données : ils aident à repérer des tendances et des relations.
  • Explorer les données : ils facilitent la découverte de règles et de tendances.
  • Visualiser les données : ils permettent de mieux les comprendre grâce à leur représentation visuelle.

Un tableau croisé dynamique comprend généralement les éléments suivants :

  • Étiquettes de lignes : elles servent à regrouper les données.
  • Étiquettes de colonnes : elles servent également à regrouper les données.
  • Valeurs : elles servent à synthétiser les données.

Vous pouvez ajuster les étiquettes de lignes, les étiquettes de colonnes et les valeurs selon vos besoins afin de mieux analyser les données.

Source de données

Dans Univer Sheets, la source de données d’un tableau croisé dynamique peut être une feuille de calcul ou une plage de données. Choisissez la source la mieux adaptée à votre analyse. La première ligne de la source de données est utilisée par défaut comme étiquettes de colonnes ; les lignes restantes constituent les données. La source doit donc être aussi structurée que possible et comporter le moins possible de lignes ou de colonnes vides. Pour chaque colonne, Univer détecte automatiquement le type de données afin d’assurer le bon fonctionnement du tableau croisé dynamique. Si une colonne contient des types de données différents, son type est défini par défaut sur chaîne de caractères.

Dans Univer Sheets, les tableaux croisés dynamiques réagissent automatiquement aux modifications des données. Dès que la source change, le tableau croisé dynamique est actualisé.

Filtrage

Les tableaux croisés dynamiques permettent de filtrer les étiquettes de lignes et de colonnes. Ils proposent aussi un champ de filtre qui ne participe pas à la classification principale ni à la disposition des données synthétisées, mais qui permet néanmoins de filtrer les données.

Deux méthodes de filtrage sont disponibles :

  • Filtrage par étiquette : il s’applique directement aux éléments de la dimension d’étiquette active. Dans une dimension « province », par exemple, vous pouvez exclure certaines provinces.
  • Filtrage par valeur : il nécessite d’indiquer une dimension de valeur, puis filtre les résultats synthétisés du champ de valeur. Vous pouvez, par exemple, exclure les données dont le chiffre d’affaires est inférieur à 1 000.

Tri

Le tri d’un tableau croisé dynamique ne s’applique qu’aux champs de lignes et de colonnes. Il peut être croissant ou décroissant et repose sur la méthode localCompare. D’autres méthodes de tri, comme le tri pinyin, seront prises en charge ultérieurement.

Deux méthodes de tri sont disponibles :

  • Tri par étiquette : il s’applique directement aux éléments de la dimension d’étiquette active. Dans une dimension « province », par exemple, vous pouvez trier les provinces par nom.
  • Tri par valeur : il nécessite d’indiquer une dimension de valeur, puis trie les résultats synthétisés du champ de valeur. Vous pouvez, par exemple, effectuer un tri selon le chiffre d’affaires.

Agrégation

Les tableaux croisés dynamiques prennent en charge les 11 méthodes d’agrégation proposées par Excel : somme, nombre, nombre de données, moyenne, maximum, minimum, produit, écart type, variance, écart type de la population et variance de la population.

Ils prennent en charge plusieurs dimensions de valeur et permettent de personnaliser la zone de la dimension de valeur (position de la valeur) ainsi que sa position (indice de la valeur).

Cette logique de disposition étant complexe, seule la vue en tableau est actuellement disponible. D’autres vues seront ajoutées ultérieurement en fonction des besoins.

Exploration détaillée

L’exploration détaillée permet de double-cliquer sur une cellule de la zone de valeurs d’un tableau croisé dynamique pour afficher les données détaillées correspondantes. Il devient ainsi plus facile de remonter jusqu’aux données d’origine.

Regroupement

Les tableaux croisés dynamiques proposent une fonctionnalité de regroupement qui n’est pas encore prise en charge dans Univer Sheets.

Le regroupement peut prendre les formes suivantes :

  • Regroupement par date : les dates sont regroupées par année, mois, jour, etc.
  • Regroupement numérique : les valeurs numériques sont regroupées dans des plages définies.
  • Regroupement d’éléments : les éléments sont regroupés selon des règles précises.

Mode plugin

Installation

Shell
pnpm add @univerjs-pro/sheets-pivot @univerjs-pro/sheets-pivot-ui

Utilisation

TypeScript
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,     ),  },})

Enregistrement des plugins

Le plugin de tableau croisé dynamique offre un enregistrement flexible adapté à différents cas d’usage. Deux modes répondent aux divers besoins de calcul.

Enregistrement dans le processus principal uniquement

Le plugin de tableau croisé dynamique peut être enregistré uniquement dans le processus principal. Ce mode convient aux tâches légères et aux opérations simples, et ne nécessite aucune configuration supplémentaire. Il suffit d’importer UniverSheetsPivotTablePlugin.

TypeScript
univer.registerPlugin(UniverSheetsPivotTablePlugin)univer.registerPlugin(UniverSheetsPivotTableUIPlugin)

Enregistrement dans le processus principal et le processus worker

Pour les scénarios qui exigent des performances élevées, le plugin peut être enregistré à la fois dans le processus principal et dans le processus worker. Il bénéficie alors d’une architecture multithread qui distribue efficacement les données et les calculs, ce qui réduit considérablement la charge du processus principal et améliore les performances globales.

Dans ce mode, le processus principal assure surtout la distribution des données, la synchronisation et le rendu, tandis que le processus worker se charge des calculs complexes. Sa mise en œuvre nécessite d’ajuster la configuration lors de l’enregistrement.

TypeScript
// 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 })

Si vous disposez d’une licence commerciale Univer, consultez la page Utiliser une licence dans le client pour la configurer.

Plugins et configuration

TypeScript
interface IUniverSheetsPivotConfig {  /**   * Define the maximum number of items that can be displayed in a single pivot table field.   * @default 1000   */  maxLimitItemCount?: number}

Prise en charge mobile

Configurez d’abord l’éditeur mobile. Dans l’initialisation en mode plugin de cette page, remplacez les inscriptions de bureau ci-dessous par les exports mobiles des mêmes paquets avant d’ouvrir un document. Conservez modèles, styles, traductions et imports Facade ; n’enregistrez pas les deux variantes.

PaquetInscription de bureauInscription mobile
@univerjs-pro/sheets-pivot-uiUniverSheetsPivotTableUIPluginUniverSheetsPivotTableMobileUIPlugin

Mode prédéfini

La fonctionnalité de tableau croisé dynamique est incluse dans le preset @univerjs/preset-sheets-advanced, qui comprend également d’autres fonctionnalités avancées, comme le dessin et les filigranes.

Installation

Le preset UniverSheetsAdvancedPreset de @univerjs/preset-sheets-advanced dépend du preset UniverSheetsDrawingPreset lors de l’exécution. Installez d’abord @univerjs/preset-sheets-drawing.

Shell
pnpm add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced

Utilisation

TypeScript
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(),   ],})

Si vous disposez d’une licence commerciale Univer, consultez la page Utiliser une licence dans le client pour la configurer.

Presets et configuration

TypeScript
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

Vous trouverez les définitions de types complètes de la Facade API dans la FacadeAPI.

Importation

Remarque sur le mode plugin

Seul le mode plugin nécessite d’importer manuellement le package Facade. Le mode prédéfini inclut déjà le package Facade correspondant ; aucune importation supplémentaire n’est nécessaire.

TypeScript
import '@univerjs-pro/sheets-pivot/facade'

Ajouter un tableau croisé dynamique

La méthode FWorkbook.addPivotTable permet d’ajouter un tableau croisé dynamique. En cas de réussite, elle renvoie l’instance FPivotTable.

TypeScript
// 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  }})

Obtenir un tableau croisé dynamique

La méthode FWorkbook.getPivotTableByCell permet d’obtenir une instance de tableau croisé dynamique à partir de sa cellule d’ancrage. Elle renvoie l’instance FPivotTable si la cellule cible appartient à un tableau croisé dynamique.

TypeScript
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)

L’instance FPivotTable fournit plusieurs méthodes permettant de manipuler le tableau croisé dynamique.

MéthodeDescription
removesupprime le tableau croisé dynamique de l’instance
getConfigrenvoie la configuration, la plage source et la cellule d’ancrage
addFieldajoute un champ au tableau croisé dynamique
removeFieldsupprime un champ du tableau croisé dynamique
updateFieldPositionmet à jour la position d’un champ
updateValuePositioncontrôle la position de ∑Valeur
setSubtotalTypedéfinit le type de sous-total du champ
setLabelSortdéfinit le tri par étiquette du champ
setLabelManualFilterdéfinit le filtre par étiquette du champ
renameFieldrenomme le champ
setValueFilterdéfinit le filtre par valeur
resetréinitialise les champs du tableau croisé dynamique
setFieldsConfigdéfinit la configuration des champs
getValueFiltersobtient tous les filtres par valeur
TypeScript
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[]}

Écouteurs d’événements

Vous trouverez les définitions complètes des types d’événements dans la page Events.

L’événement univerAPI.Event.BeforePivotTableAdd est déclenché avant l’ajout d’un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableAdded est déclenché après l’ajout d’un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.BeforePivotTableMove est déclenché avant le déplacement d’un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableMoved est déclenché après le déplacement d’un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableRendered est déclenché après le rendu d’un tableau croisé dynamique.

TypeScript
// 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()`

L’événement univerAPI.Event.PivotTableRemoved est déclenché après la suppression d’un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldAdded est déclenché après l’ajout d’un champ à un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldRemoved est déclenché après la suppression d’un champ d’un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldMoved est déclenché après le déplacement d’un champ dans un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldCollapseChanged est déclenché après le développement ou la réduction d’une dimension dans un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldFilterChanged est déclenché après le filtrage d’une dimension dans un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldSortChanged est déclenché après le tri d’une dimension dans un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableFieldSettingChanged est déclenché après la modification du paramètre d’une dimension dans un tableau croisé dynamique.

TypeScript
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()`

L’événement univerAPI.Event.PivotTableValuePositionChanged est déclenché après la modification de la position d’une valeur dans un tableau croisé dynamique.

TypeScript
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()`

Afficher les valeurs sous forme de

Utilisez setShowDataAs() sur un champ de valeurs pour afficher sa part du total d’une ligne, d’une colonne ou du total général, ou un écart par rapport à un élément de base. Le calcul affiché change sans remplacer les données sources. getShowDataAs() lit le réglage et resetShowDataAs() rétablit le calcul normal.

TypeScript
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 désigne un tableau croisé existant. Utilisez l’ID d’un champ de valeurs, pas celui d’une colonne source ou d’un champ de lignes. Les modes d’écart et de cumul nécessitent aussi les paramètres du champ et de l’élément de base.

Copier les tableaux croisés dynamiques avec une feuille

Lorsque le plugin de tableaux croisés dynamiques est enregistré, la duplication d’une feuille copie aussi ses tableaux croisés dynamiques et leur configuration de champs. Chaque copie reçoit un nouvel identifiant. Si la source se trouve sur la feuille copiée, la référence pointe vers la nouvelle feuille ; une source située sur une autre feuille ou un autre classeur conserve sa référence. Les copies participent à l’annulation et au rétablissement de la duplication de la feuille.

TypeScript
const workbook = univerAPI.getActiveWorkbook()if (!workbook) throw new Error('No active workbook')const copiedSheet = workbook.duplicateActiveSheet()console.log(copiedSheet.getSheetName())

Que pensez-vous de ce guide ?

© 2026 DreamNum Co., Ltd.