UNPKG

@univerjs-pro/sheets-pivot

Version:

Univer Sheets Pivot Table

271 lines (270 loc) 13.4 kB
import { IDataFieldValue, IPivotTableOptions, IPivotViewValueType, PivotTable, PivotTableLabelField, PivotTableValueField, DataFieldManager, PivotDataFieldDataTypeEnum, PivotTableFiledAreaEnum } from '@univerjs-pro/engine-pivot'; import { Injector } from '@univerjs/core'; import { IDataFieldDataArray, IDimensionInfo, IFGenericPivotFilterOptions, IPivotTableCubeConfig, IPivotTableValueOptions } from './type'; /** * Pivot table class (not dependent on workbook) * @hideconstructor */ export declare class FGenericPivotTable { private _pivot; private _sourceData; private _injector; private _isZhCN; private _id; constructor(injector: Injector, pivot: PivotTable, sourceData: IDataFieldDataArray, id: string); private _getSourceIdByName; /** * Adds a field to the pivot table by its name and assigns it to the specified area. * @param {string} name - The display name of the field to be added to the pivot table. * @param {PivotTableFiledAreaEnum} area - The target area in the pivot table where the field should be added. * @returns {PivotTableLabelField | PivotTableValueField} The field instance that has been added to the pivot table. * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * // The returned labelField can be used to call settings for filtering, sorting, etc. * const labelField = pivot.addFieldWithName('区域', PivotTableFiledAreaEnum.Row); * // The returned valueField can be used to set the summary mode, display mode, etc. * const valueField = pivot.addFieldWithName('数量', PivotTableFiledAreaEnum.Value); * ``` */ addFieldWithName(name: string, area: PivotTableFiledAreaEnum): PivotTableLabelField | PivotTableValueField; /** * Adds a field to the pivot table by its name and assigns it to the filter dimension. * @param {string} name - The display name of the field to be added to the pivot table. * @param {IFGenericPivotFilterOptions} options The filter configuration * @returns {PivotTableLabelField} The field instance that has been added to the pivot table. * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * pivot.addFilterFieldWithName('数量',{ * type: PivotFilterTypeEnum.CustomFilter, * operator: NumberFilterEnum.valueEqual, * expected: 38, * }); * pivot.addFieldWithName('区域',PivotTableFiledAreaEnum.Row); * pivot.addFieldWithName('数量',PivotTableFiledAreaEnum.Value); * // At this time, there will only be one data with a value equal to 38 * const res = pivot.getResultByCalculate().dataArr; * console.log('debugger res',res); * * pivot.reset(); * pivot.addFieldWithName('区域',PivotTableFiledAreaEnum.Row); * pivot.addFieldWithName('数量',PivotTableFiledAreaEnum.Value); * // There will only be two pieces of data at this time * const resNew = pivot.getResultByCalculate().dataArr; * console.log('debugger res new',resNew); * ``` */ addFilterFieldWithName(name: string, options: IFGenericPivotFilterOptions): PivotTableLabelField; /** * Adds a field to the pivot table by its name and assigns it to the value measure. * @param {string} name - The display name of the field to be added to the pivot table. * @param {IPivotTableValueOptions} options The value configuration * @returns {PivotTableValueField} The field instance that has been added to the pivot table. * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * pivot.addFieldWithName('区域',PivotTableFiledAreaEnum.Row); * pivot.addValueFieldWithName('数量',{subtotal: PivotSubtotalTypeEnum.average}); * const res = pivot.getResultByCalculate().dataArr; * console.log('debugger res',res); * ``` */ addValueFieldWithName(name: string, options?: IPivotTableValueOptions): PivotTableValueField; /** * Removes the field from the pivot table by its name. * @param {string} name - The display name of the field to be removed from the pivot table. * @returns {void} * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const labelField = pivot.addFieldWithName('区域', PivotTableFiledAreaEnum.Row); * // There is a `区域` in the row dimension of the pivot table * const dimensionInfo = pivot.getDimensionInfo(); * pivot.removeFieldWithName('区域'); * // The new dimension information is returned as undefined. * const newDimensionInfo = pivot.getDimensionInfo(); * ``` */ removeFieldWithName(name: string): void; /** * Gets the result of the pivot table calculation. * The return value is a two-dimensional array after the pivot table calculation. * You can configure whether to display subTotal, grandTotal, etc. according to the input config. * @param {IPivotTableCubeConfig} config - The configuration of the pivot table cube. * @returns {IPivotViewValueType[][]} The result of the pivot table calculation. * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const rowField = pivot.addFieldWithName('区域', PivotTableFiledAreaEnum.Row); * const columnField = pivot.addFieldWithName('省份', PivotTableFiledAreaEnum.Row); * const valueField = pivot.addFieldWithName('数量', PivotTableFiledAreaEnum.Value); * const result = pivot.getResultByCalculate({showRowGrandTotal: true, showRowSubTotal: true}).dataArr; * console.log('debugger', result); * ``` */ getResultByCalculate(config?: IPivotTableCubeConfig): { dataArr: IPivotViewValueType[][]; dataArrWithSplit: IPivotViewValueType[][][]; }; /** * Returns the table header name corresponding to the column number * @param {number} index - The column number * @returns {string} The table header name corresponding to the column number */ getNameWithColumnIndex(index: number): string; /** * Reset all configurations of the pivot table * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const rowField = pivot.addFieldWithName('区域', PivotTableFiledAreaEnum.Row); * pivot.reset(); * // The dimension information returns empty because it is reset. * const newDimensionInfo = pivot.getDimensionInfo(); * console.log('debugger', newDimensionInfo); * ``` */ reset(): void; /** * Reset the pivot table configuration for a dimension * @param {PivotTableFiledAreaEnum} area - The target area in the pivot table where be reset * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const rowField = pivot.addFieldWithName('区域', PivotTableFiledAreaEnum.Row); * const valueField = pivot.addFieldWithName('数量', PivotTableFiledAreaEnum.Value); * pivot.reset(PivotTableFiledAreaEnum.Row); * // The returned dimension information only contains the value dimension because the row dimension is reset. * const newDimensionInfo = pivot.getDimensionInfo(); * console.log('debugger', newDimensionInfo) * ``` */ resetDimension(area: PivotTableFiledAreaEnum): void; /** * Get the data type of the field corresponding to the column number * @param {number} index The column number * @returns {PivotDataFieldDataTypeEnum | undefined} The data type of the field corresponding to the column number * * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const dataType = pivot.getFieldDataTypeByColumnIndex(4); * console.log('debugger', dataType); // PivotDataFieldDataTypeEnum.number * ``` */ getFieldDataTypeByColumnIndex(index: number): PivotDataFieldDataTypeEnum | undefined; /** * Get the data type of the field corresponding to the field name. * @param {string} name - The display name of the field. * @returns {PivotDataFieldDataTypeEnum | undefined} The data type of the field corresponding to the field name. * * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const dataType = pivot.getFieldDataTypeByFieldName('数量'); * console.log('debugger', dataType); // PivotDataFieldDataTypeEnum.number * ``` */ getFieldDataTypeByFieldName(name: string): PivotDataFieldDataTypeEnum | undefined; /** * Get the dimension information of the current pivot table * @returns {IDimensionInfo | undefined} The dimension information of the pivot table. * @example * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * pivot.addFieldWithName('商品', PivotTableFiledAreaEnum.Column); * pivot.addFieldWithName('区域', PivotTableFiledAreaEnum.Row); * const newDimensionInfo = pivot.getDimensionInfo(); * console.log('debugger', newDimensionInfo); * ``` */ getDimensionInfo(): IDimensionInfo | undefined; /** * Returns the source data used to generate the pivot table * @returns {IDataFieldDataArray} The source data used to generate the pivot table. * ```typescript * const sourceData = [ * ["区域", "省份", "城市", "类别", "商品", "数量", "销售日期"], * ["西部", "河南", "洛阳", "fruit", "葡萄", 38, "2021-06-30"], * ["北部", "辽宁", "沈阳", "fruit", "葡萄", 45, "2023-08-31"] * ] * const pivot = univerAPI.generatePivotTable(sourceData); * const originData = pivot.getPivotSourceData(); * console.log('debugger', originData === sourceData); * ``` */ getPivotSourceData(): IDataFieldDataArray; /** * Set the options of the pivot table. * @param {IPivotTableOptions} options - The options to be set. * @returns {void} * @example * ```typescript * const pivot = univerAPI.generatePivotTable(sourceData); * // With this setting, the pivot table will fill in the cell values of the row dimension * pivot.setOptions({repeatRowLabels: true}); * ``` */ setOptions(options: IPivotTableOptions): void; /** * Dispose the pivot table */ remove(): void; } export declare class DefaultDataFieldManager extends DataFieldManager { getRangeData(data: IDataFieldDataArray): { header: string[]; data: IDataFieldValue[][]; }; }