ピボットテーブル

ピボットテーブルは強力なデータ分析ツールで、大量のデータを素早く要約・分析・可視化できます。多様なデータ操作や書式設定オプションをサポートし、ユーザーがデータをより深く理解し活用できるようにします。

概要

データピボットテーブルは一般的に次のような場面で使用されます。

  • データの要約: ピボットテーブルはデータを素早く要約し、全体像の把握に役立ちます。
  • データの分析: ピボットテーブルはデータを分析し、パターンや関連性を見つけるのに役立ちます。
  • データの探索: ピボットテーブルはデータを探索し、規則性やトレンドを発見するのに役立ちます。
  • データの可視化: ピボットテーブルはデータを可視化し、理解を助けます。

ピボットテーブルは通常、以下の要素で構成されます。

  • 行ラベル: データをグループ化するために使用します。
  • 列ラベル: データをグループ化するために使用します。
  • 値: データを集計するために使用します。

ピボットテーブルでは、必要に応じて行ラベル・列ラベル・値を調整し、より深い分析を行えます。

データソース

Univer Sheets では、ピボットテーブルのデータソースはワークシートまたはデータ範囲のいずれかを選択できます。必要に応じて異なるデータソースを選択し、データをより適切に分析できます。 データソースの最初の行をデフォルトの列ラベルとして、残りをデータソースとして扱います。したがって、データソースはできるだけ整理された状態であることが求められ、空の行や列はできるだけ避けるようにしてください。 同じ列のデータについては、ピボットテーブルの機能をより適切にサポートするために、データ型を自動的に認識します。列内のデータ型が不一致の場合、その列のデータ型は文字列にデフォルト設定されます。

Univer Sheets では、ピボットテーブルはデータの変更に自動的に対応します。データソースが変更されると、ピボットテーブルは自動的に更新され、データをより適切に分析できるようになります。

フィルター

データピボットテーブルは、行ラベルと列ラベルに対するフィルターをサポートします。さらに、ピボットテーブルの主要な分類・集計レイアウトには参加しないものの、データの絞り込みに利用できるフィルターフィールドも提供します。

データピボットテーブルは 2 種類のフィルター方法をサポートします。

  • ラベル フィルター: 現在のラベル次元の項目に直接適用されます。例えば、都道府県次元で特定の都道府県を除外できます。
  • 値フィルター: 値の次元を指定し、その値フィールドの集計結果に対してフィルターします。例えば、売上が 1000 未満のデータを除外できます。

並べ替え

データピボットテーブルの並べ替えは行/列フィールドにのみ有効で、昇順・降順をサポートします。ソートは localCompare メソッドを使用します。将来的には、ピンインソートなど、より多くのソート方法をサポートする予定です。

データピボットテーブルは 2 種類の並べ替え方法をサポートします。

  • ラベル ソート: 現在のラベル次元の項目に直接適用されます。例えば、都道府県名で並べ替えることができます。
  • 値ソート: 値の次元を指定し、その値フィールドの集計結果で並べ替えます。例えば、売上金額で並べ替えることができます。

集計

データピボットテーブルは、Excel がサポートする 11 種類の集計方法(合計、件数、データ件数、平均、最大、最小、階乗、標準偏差、分散、母標準偏差、母分散)をサポートします。

データピボットテーブルは複数の値次元をサポートし、値次元のエリア(値の位置)や値の順序(値のインデックス)をカスタマイズできます。

これは複雑なレイアウトロジックであるため、現時点では表ビューのみをサポートします。今後、要望に応じてより多くのビューをサポートする予定です。

ドリルダウン

ドリルダウンとは、ピボットテーブルの値エリア内のセルをダブルクリックして、そのセルに対応する詳細データを確認できる機能を指します。例えば、ピボットテーブル内のセルをクリックして、その裏にある元データを追跡できます。

グループ化

データピボットテーブルはグループ化機能をサポートしますが、Univer Sheets ではまだサポートされていません。

グループ化は次の方法で行えます。

  • 日付のグループ化: 年・月・日などで日付データをグループ化します。
  • 数値のグループ化: 数値データを指定した範囲にグループ化します。
  • 要素のグループ化: 特定のルールに従って要素データをグループ化します。

プラグイン モード

インストール

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

使い方

TypeScript
import { UniverSheetsPivotTablePlugin } from '@univerjs-pro/sheets-pivot'import { UniverSheetsPivotTableUIPlugin } from '@univerjs-pro/sheets-pivot-ui'import SheetsPivotTableUIJaJP from '@univerjs-pro/sheets-pivot-ui/locale/ja-JP'import SheetsPivotTableJaJP from '@univerjs-pro/sheets-pivot/locale/ja-JP'import { LocaleType, mergeLocales, Univer } from '@univerjs/core'import '@univerjs-pro/sheets-pivot-ui/lib/index.css'import '@univerjs-pro/sheets-pivot/facade'const univer = new Univer({  locale: LocaleType.JA_JP,  locales: {    [LocaleType.JA_JP]: mergeLocales(      SheetsPivotTableJaJP,       SheetsPivotTableUIJaJP,     ),  },})

プラグインの登録

ピボットテーブルプラグインは、用途に応じて柔軟に登録でき、さまざまな計算ニーズに対応する 2 つのモードを提供します。

メインプロセスのみで登録

ピボットテーブルプラグインはメインプロセスのみに登録できます。このモードは軽量なタスクや単純な操作に適しており、追加のプラグイン設定は不要です。開発者は UniverSheetsPivotTablePlugin をインポートするだけで利用できます。

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

メイン/ワーカー両方で登録

高いパフォーマンスが求められるシナリオでは、ピボットテーブルプラグインをメインプロセスとワーカー プロセスの両方に登録できます。これにより、マルチスレッド アーキテクチャを活用してデータ分配と計算処理を効率化し、メインプロセスの負荷を大幅に軽減して全体のパフォーマンスを向上させます。

このモードでは、メインプロセスが主にデータ分配・同期・レンダリングを担当し、ワーカー プロセスが複雑な計算タスクに専念します。このモードを実装するには、登録時に設定を微調整する必要があります。

TypeScript
// main process file// notExecuteFormula を true に設定すると、メインプロセスは計算を行いません。データ分配・同期・レンダリングのみを担当します。univer.registerPlugin(UniverSheetsPivotTablePlugin, { notExecuteFormula: true })univer.registerPlugin(UniverSheetsPivotTableUIPlugin)// web worker process file// notExecuteFormula を false に設定すると、ワーカー プロセスが計算を実行します。univer.registerPlugin(UniverSheetsPivotTablePlugin, { notExecuteFormula: false })

Univer の商用ライセンスをお持ちの場合は、設定方法について クライアントでのライセンス を参照してください。

プラグインと設定

TypeScript
interface IUniverSheetsPivotConfig {  /**   * 単一のピボットテーブル フィールドで表示できる最大項目数を定義します。   * @default 1000   */  maxLimitItemCount?: number}

モバイル対応

まずモバイルエディターを設定します。このページのプラグインモードの初期化コードで、以下のデスクトップ登録を同じパッケージのモバイル版に置き換え、文書を開く前に完了してください。モデル、スタイル、言語ファイル、Facade は維持し、両方を同時に登録しないでください。

パッケージデスクトップの登録モバイルの登録
@univerjs-pro/sheets-pivot-uiUniverSheetsPivotTableUIPluginUniverSheetsPivotTableMobileUIPlugin

プリセット モード

ピボットテーブル機能は @univerjs/preset-sheets-advanced のプリセットに含まれており、描画やウォーターマークなどの高度な機能も含まれます。

インストール

@univerjs/preset-sheets-advanced の UniverSheetsAdvancedPreset は実行時に UniverSheetsDrawingPreset に依存します。先に @univerjs/preset-sheets-drawing をインストールしてください。

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

使い方

TypeScript
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced'import UniverPresetSheetsAdvancedJaJP from '@univerjs/preset-sheets-advanced/locales/ja-JP'import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'import UniverPresetSheetsCoreJaJP from '@univerjs/preset-sheets-core/locales/ja-JP'import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing'import UniverPresetSheetsDrawingJaJP from '@univerjs/preset-sheets-drawing/locales/ja-JP'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.JA_JP,  locales: {    [LocaleType.JA_JP]: mergeLocales(      UniverPresetSheetsCoreJaJP,      UniverPresetSheetsDrawingJaJP,       UniverPresetSheetsAdvancedJaJP,     ),  },  presets: [    UniverSheetsCorePreset(),    UniverSheetsDrawingPreset(),     UniverSheetsAdvancedPreset(),   ],})

Univer の商用ライセンスをお持ちの場合は、設定方法について クライアントでのライセンス を参照してください。

プリセットと設定

TypeScript
interface IUniverSheetsAdvancedPresetConfig {  pivot?: Pick<IUniverSheetsPivotConfig, 'maxLimitItemCount'>}interface IUniverSheetsPivotConfig {  /**   * 単一のピボットテーブル フィールドで表示できる最大項目数を定義します。   * @default 1000   */  maxLimitItemCount?: number}

Facade API

完全な Facade API の型定義は FacadeAPI を参照してください。

インポート

プラグインモード注意

Facade パッケージの手動 import が必要なのはプラグインモードのみです。プリセットモードには対応する Facade パッケージが内蔵されているため、追加の import は不要です。

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

ピボットテーブルの追加

FWorkbook.addPivotTable メソッドはピボットテーブルを追加するために使用され、成功すると FPivotTable インスタンスを返します。

TypeScript
// シート範囲 A1:G9 が空でないことを確認してくださいconst 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()// 複数回フィールドを追加しないように制御するフラグlet hasAdded = false// addPivotTable は非同期のため、ピボットテーブル追加後にフィールドを追加できますuniverAPI.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 インスタンスを返します。

TypeScript
const fWorkbook = univerAPI.getActiveWorkbook()const unitId = fWorkbook.getId()const fSheet = fWorkbook.getActiveSheet()const subUnitId = fSheet.getSheetId()// FWorkbook でセルからピボットテーブルを取得const fPivotTable = fWorkbook.getPivotTableByCell(unitId, subUnitId, 0, 8)// FWorksheet でセルからピボットテーブルを取得const pivotTable2 = fSheet.getPivotTableByCell(0, 8)

FPivotTable インスタンスには、ピボットテーブルを操作するためのいくつかのメソッドがあります。

メソッド説明
removeピボットテーブルをインスタンスから削除します
getConfigピボットテーブルの設定(ソース範囲情報、アンカーセル情報、設定)を返します
addFieldピボットテーブルにフィールドを追加します
removeFieldピボットテーブルからフィールドを削除します
updateFieldPositionピボットテーブル内のフィールド位置を更新します
updateValuePosition∑ 値の位置を制御します
setSubtotalTypeフィールドの小計タイプを設定します
setLabelSortフィールドのラベル ソートを設定します
setLabelManualFilterフィールドのラベル フィルターを設定します
renameFieldフィールド名を変更します
setValueFilter値フィルターを設定します
resetピボットテーブルのフィールドをリセットします
setFieldsConfigピボットテーブルのフィールド構成を設定します
getValueFiltersピボットテーブルのすべての値フィルターを取得します
TypeScript
class FPivotTable {/** * @description ピボットテーブル ID で構成を取得します。 * @typedef PivotTableConfig * @property {TargetInfo} targetCellInfo ピボットテーブルの対象セル情報。 * @property {SourceInfo} sourceRangeInfo ピボットテーブルのソースデータ範囲情報。 * @property {boolean} isEmpty ピボットテーブルが空かどうか。 * @property {object} fieldsConfig ピボットテーブル フィールド設定のスナップショット。 * @returns {PivotTableConfig|undefined} ピボットテーブルの構成、または undefined。 */  getConfig(): IPivotTableConfig  /**   * @description ピボットテーブルをワークブックから削除します。   */  async remove(): void  /**   *@description ピボットテーブルにピボット フィールドを追加します。   * @param {string|number} dataFieldIdOrIndex データ フィールド ID またはインデックス。   * @param {PivotTableFiledAreaEnum} fieldArea フィールドのエリア。   * @param {number} index 対象エリア内でのフィールドの挿入位置。   * @returns {boolean} 追加に成功したかどうか。   */  async addField(dataFieldIdOrIndex: string | number, fieldArea: PivotTableFiledAreaEnum, index: number): Promise<boolean>  /**   * @description ピボットテーブルからピボット フィールドを削除します。   * @param {string[]} fieldIds 削除するフィールド ID の配列。   * @returns {boolean} 削除に成功したかどうか。   */  async removeField(fieldIds: string[]): Promise<boolean>  /**   * @description ピボットテーブルのフィールド位置を更新します。   * @param {string} fieldId - 移動するフィールド ID。   * @param {PivotTableFiledAreaEnum} area - 対象エリア。   * @param {number} index - 対象エリアでの目標インデックス。インデックスが対象エリアのフィールド数より大きい場合は最後に、0 未満の場合は先頭に移動します。   * @returns {boolean} フィールド移動に成功したかどうか。   */  async updateFieldPosition(fieldId: string, area: PivotTableFiledAreaEnum, index: number): Promise<boolean>  /**   * @description 複数の値フィールドがある場合に、値フィールドの位置(行または列)を更新できます。   * @param {PivotTableValuePositionEnum} position - 値フィールドの位置。   * @param {number} index - 値フィールドのインデックス。   * @returns {boolean} 値フィールド移動に成功したかどうか。   */  async updateValuePosition(position: PivotTableValuePositionEnum, index: number): Promise<boolean>  /**   * @description 値フィールドの小計タイプを設定します。値フィールドにのみ有効です。   * @param {string} fieldId - フィールド ID。   * @param {PivotSubtotalTypeEnum} subtotalType - 小計タイプ。   * @returns {boolean} 設定に成功したかどうか。   */  async setSubtotalType(fieldId: string, subtotalType: PivotSubtotalTypeEnum): Promise<boolean>  /**   * @description ピボットテーブルのソート情報を設定します。   * @param {string} tableFieldId - ソート対象のフィールド ID。   * @param {PivotTableSortInfo} info - ソート情報。   * @typedef PivotTableSortInfo   * @property {PivotDataFieldSortOperatorEnum} type フィールド項目のソート演算子。   * @returns {boolean} 設定に成功したかどうか。   */  async setLabelSort(tableFieldId: string, info: IPivotTableSortInfo): Promise<boolean>  /**   * @description ピボットテーブルのフィルターを設定します。   * @param {string} tableFieldId - フィルター対象のフィールド ID。   * @param {string[]} items - フィルターの項目。   * @returns {boolean} 設定に成功したかどうか。   */  async setLabelFilter(tableFieldId: string, items: string[], isAll?: boolean): Promise<boolean>  /**   * @description ピボットテーブルのフィールド名を変更します。   * @param {string} fieldId - フィールド ID。   * @param {string} name - 新しい名前。   * @returns {boolean} 変更に成功したかどうか。   */  async renameField(fieldId: string, name: string): Promise<boolean>  /**   * @description ピボットテーブルの値フィルターを設定します。値フィルターは、フィールドの値に基づいてデータをフィルタリングします。   * @param {string} fieldId - フィルター対象のフィールド ID。同一フィールドには 1 つの値フィルターのみ設定できます。   * @param {Omit<IPivotTableValueFilter, 'type'>} filterInfo - フィルター情報。undefined の値は既存のフィルターから削除されます。   * @typedef filterInfo   * @property {valueGreaterThan} operator - フィルター演算子。フィールドの値と期待値を比較します。現在サポートされている演算子: valueBetween, valueEqual, valueGreaterThan, valueGreaterThanOrEqual, valueLessThan, valueLessThanOrEqual, valueNotBetween, valueNotEqual。   * @property {number} expected - 期待値。   * @property {string} valueFieldId - 値フィールド ID。   * @returns {boolean} 設定に成功したかどうか。   */  async setValueFilter(fieldId: string, filterInfo: Omit<IPivotTableValueFilter, 'type'>): Promise<boolean>  /**   * @description 指定したフィールド エリアのフィールドをクリア、またはすべてのフィールドをクリアします。   * @param {PivotTableFiledAreaEnum} [resetArea] リセットするエリア。未指定の場合はすべてをリセットします。   * @returns {Promise<boolean>} リセットに成功したかどうか。   */  reset(resetArea?: PivotTableFiledAreaEnum): Promise<boolean>  /**   * @description ピボットテーブルのフィールド構成を設定します。指定の構成からフィールドを追加します。競合を避けるため、設定前にピボットテーブルが空であることを確認してください。   * @param {IPivotTableConfig['fieldsConfig']} config ピボットテーブルのフィールド構成。   * @returns {Promise<boolean>} 設定に成功したかどうか。   */  setFieldsConfig(config: IPivotTableConfig['fieldsConfig']): Promise<boolean>  /**   * ピボットテーブルのすべての値フィルターを取得します。値フィルターは順序通りに適用される必要があるため、順序が重要です。   * @returns {IValueFilterInfoItem[]} 値フィルター情報のリスト。   */  getValueFilters(): IValueFilterInfoItem[]}

イベントリスナー

完全なイベント型定義は Events を参照してください。

univerAPI.Event.BeforePivotTableAdd イベントは、ピボットテーブルを追加する前にトリガーされます。

TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforePivotTableAdd, (params) => {  const { positionType, targetCellInfo } = params  if (positionType === univerAPI.Enum.PositionTypeEnum.Existing && targetCellInfo.sheetName === 'Sheet 1') {  // ピボットテーブルの追加操作をキャンセル    params.cancel = true    console.log(`The pivot table can't be added to the sheet ${targetCellInfo.sheetName}`)  }})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableAdded イベントは、ピボットテーブルを追加した後にトリガーされます。

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')  }})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.BeforePivotTableMove イベントは、ピボットテーブルを移動する前にトリガーされます。

TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforePivotTableMove, (params) => {  const { pivotTableId, targetCellInfo } = params  if (pivotTableId === 'pivotTable1' && targetCellInfo.sheetName === 'Sheet 1') {  // ピボットテーブルの移動操作をキャンセル    params.cancel = true    console.log(`The pivot table can't be moved to the sheet ${targetCellInfo.sheetName}`)  }})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableMoved イベントは、ピボットテーブルを移動した後にトリガーされます。

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}    `)  }})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableRendered イベントは、ピボットテーブルをレンダリングした後にトリガーされます。

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))  }})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableRemoved イベントは、ピボットテーブルを削除した後にトリガーされます。

TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.PivotTableRemoved, (params) => {  const { pivotTableId } = params  console.log(`The pivot table ${pivotTableId} has been removed`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldAdded イベントは、ピボットテーブルにフィールドを追加した後にトリガーされます。

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)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldRemoved イベントは、ピボットテーブルからフィールドを削除した後にトリガーされます。

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)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldMoved イベントは、ピボットテーブル内でフィールドを移動した後にトリガーされます。

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}`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldCollapseChanged イベントは、ピボットテーブルで次元を展開/折りたたみした後にトリガーされます。

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}`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldFilterChanged イベントは、ピボットテーブルで次元をフィルタリングした後にトリガーされます。

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}`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldSortChanged イベントは、ピボットテーブルで次元を並べ替えた後にトリガーされます。

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}`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableFieldSettingChanged イベントは、ピボットテーブルで次元の設定を変更した後にトリガーされます。

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}`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

univerAPI.Event.PivotTableValuePositionChanged イベントは、ピボットテーブルの値の位置を変更した後にトリガーされます。

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}`)})// イベントリスナーを削除するには `disposable.dispose()` を使用します

値の表示方法

setShowDataAs() で値フィールドを行・列・総計に対する割合や基準項目との差として表示できます。表示上の計算を変更し、元データは置き換えません。getShowDataAs() で設定を取得し、resetShowDataAs() で通常の計算に戻します。

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 は既存のピボットテーブルです。元データの列や行フィールドではなく、値フィールドの ID を指定します。差分や累計のモードでは、対応する基準フィールドと基準項目の設定も必要です。

ワークシートと一緒にピボットテーブルをコピーする

ピボットプラグインを登録すると、ワークシートの複製時に、そのシート上のピボットテーブルとフィールド設定もコピーされます。各コピーには新しい ID が割り当てられます。データソースがコピー元のシートにある場合、参照先は新しいシートに変更されます。他のシートやブックにある場合は元の参照を維持します。コピーされたピボットテーブルも、シートの複製と一緒に元に戻す・やり直す操作の対象になります。

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

このガイドはいかがですか?

© 2026 DreamNum Co., Ltd.