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
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-uiUtilisation
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.
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.
// 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
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.
| Paquet | Inscription de bureau | Inscription mobile |
|---|---|---|
@univerjs-pro/sheets-pivot-ui | UniverSheetsPivotTableUIPlugin | UniverSheetsPivotTableMobileUIPlugin |
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.
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-advancedUtilisation
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
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.
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.
// 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.
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éthode | Description |
|---|---|
| remove | supprime le tableau croisé dynamique de l’instance |
| getConfig | renvoie la configuration, la plage source et la cellule d’ancrage |
| addField | ajoute un champ au tableau croisé dynamique |
| removeField | supprime un champ du tableau croisé dynamique |
| updateFieldPosition | met à jour la position d’un champ |
| updateValuePosition | contrôle la position de ∑Valeur |
| setSubtotalType | définit le type de sous-total du champ |
| setLabelSort | définit le tri par étiquette du champ |
| setLabelManualFilter | définit le filtre par étiquette du champ |
| renameField | renomme le champ |
| setValueFilter | définit le filtre par valeur |
| reset | réinitialise les champs du tableau croisé dynamique |
| setFieldsConfig | définit la configuration des champs |
| getValueFilters | obtient tous les filtres par valeur |
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.
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.
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.
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.
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.
// 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 ?