@visactor/vtable-sheet 1.21.1 → 1.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/vtable-sheet.d.ts +2 -2
- package/cjs/components/vtable-sheet.js +28 -2
- package/cjs/components/vtable-sheet.js.map +1 -1
- package/cjs/core/WorkSheet.d.ts +5 -1
- package/cjs/core/WorkSheet.js +68 -12
- package/cjs/core/WorkSheet.js.map +1 -1
- package/cjs/core/table-plugins.js +1 -2
- package/cjs/core/table-plugins.js.map +1 -1
- package/cjs/formula/__tests__/formula-case-correction.test.d.ts +1 -0
- package/cjs/formula/__tests__/formula-case-correction.test.js +70 -0
- package/cjs/formula/__tests__/formula-case-correction.test.js.map +1 -0
- package/cjs/formula/formula-engine.d.ts +25 -1
- package/cjs/formula/formula-engine.js +485 -29
- package/cjs/formula/formula-engine.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/managers/formula-manager.d.ts +8 -6
- package/cjs/managers/formula-manager.js +90 -8
- package/cjs/managers/formula-manager.js.map +1 -1
- package/cjs/ts-types/index.d.ts +2 -2
- package/cjs/ts-types/index.js.map +1 -1
- package/cjs/ts-types/sheet.d.ts +0 -1
- package/cjs/ts-types/sheet.js.map +1 -1
- package/dist/vtable-sheet.js +1560 -338
- package/dist/vtable-sheet.min.js +1 -1
- package/es/components/vtable-sheet.d.ts +2 -2
- package/es/components/vtable-sheet.js +29 -3
- package/es/components/vtable-sheet.js.map +1 -1
- package/es/core/WorkSheet.d.ts +5 -1
- package/es/core/WorkSheet.js +68 -12
- package/es/core/WorkSheet.js.map +1 -1
- package/es/core/table-plugins.js +1 -2
- package/es/core/table-plugins.js.map +1 -1
- package/es/formula/__tests__/formula-case-correction.test.d.ts +1 -0
- package/es/formula/__tests__/formula-case-correction.test.js +64 -0
- package/es/formula/__tests__/formula-case-correction.test.js.map +1 -0
- package/es/formula/formula-engine.d.ts +25 -1
- package/es/formula/formula-engine.js +485 -29
- package/es/formula/formula-engine.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/managers/formula-manager.d.ts +8 -6
- package/es/managers/formula-manager.js +90 -8
- package/es/managers/formula-manager.js.map +1 -1
- package/es/ts-types/index.d.ts +2 -2
- package/es/ts-types/index.js.map +1 -1
- package/es/ts-types/sheet.d.ts +0 -1
- package/es/ts-types/sheet.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/WorkSheet.ts"],"names":[],"mappings":"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","file":"WorkSheet.js","sourcesContent":["import type { ColumnDefine, ListTableConstructorOptions } from '@visactor/vtable';\nimport { ListTable } from '@visactor/vtable';\nimport { isValid, type EventEmitter } from '@visactor/vutils';\nimport { EventTarget } from '../event/event-target';\nimport type {\n IWorkSheetOptions,\n IWorkSheetAPI,\n CellCoord,\n CellRange,\n CellValue,\n CellValueChangedEvent,\n CellClickEvent,\n SelectionChangedEvent,\n IFormulaManagerOptions\n} from '../ts-types';\nimport { WorkSheetEventType } from '../ts-types';\nimport type { TYPES, VTableSheet } from '..';\nimport { isPropertyWritable } from '../tools';\nimport { VTableThemes } from '../ts-types';\nimport { detectFunctionParameterPosition } from '../formula/formula-helper';\n\n/**\n * Sheet constructor options. 内部类型Sheet的构造函数参数类型\n */\nexport type WorkSheetConstructorOptions = {\n /** 表格数据 */\n data?: any[][];\n /** 公式计算选项 */\n formula?: IFormulaManagerOptions;\n /** Sheet 唯一标识 */\n sheetKey: string;\n /** Sheet 标题 */\n sheetTitle: string;\n} & Omit<ListTableConstructorOptions, 'records'>;\n\nexport class WorkSheet extends EventTarget implements IWorkSheetAPI {\n /** 选项 */\n options: IWorkSheetOptions;\n /** 容器 */\n container: HTMLElement;\n /** 表格实例 */\n tableInstance?: ListTable;\n /** 元素 */\n element: HTMLElement;\n /** 选择范围 */\n private selection: CellRange | null = null;\n /** Sheet 唯一标识 */\n private sheetKey: string;\n /** Sheet 标题 */\n private sheetTitle: string;\n\n /** 事件总线 */\n private eventBus: EventEmitter;\n\n private vtableSheet: VTableSheet;\n\n editingCell: { sheet: string; row: number; col: number } | null = null;\n\n constructor(sheet: VTableSheet, options: IWorkSheetOptions) {\n super();\n this.options = options;\n this.container = options.container;\n\n // 初始化基本属性\n this.sheetKey = options.sheetKey;\n this.sheetTitle = options.sheetTitle;\n this.vtableSheet = sheet;\n\n // 创建表格元素\n this.element = this._createRootElement();\n this.container.appendChild(this.element);\n\n // 初始化表格\n this._initializeTable();\n\n // 设置事件监听\n this._setupEventListeners();\n }\n\n /**\n * 获取行数\n */\n get rowCount(): number {\n const data = this.getData();\n return data ? data.length : 0;\n }\n\n /**\n * 获取列数\n */\n get colCount(): number {\n const data = this.getData();\n return data && data.length > 0 ? data[0].length : 0;\n }\n\n /**\n * 获取行数\n */\n getRowCount(): number {\n return this.tableInstance.rowCount;\n }\n\n /**\n * 获取列数\n */\n getColumnCount(): number {\n return this.tableInstance.colCount;\n }\n\n /**\n * 获取表格数据\n */\n get records(): any {\n return this.getData();\n }\n\n /**\n * 获取列定义\n */\n get columns(): any {\n return this.options.columns || [];\n }\n\n /**\n * 创建根元素\n */\n private _createRootElement(): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('sheet-key', `${this.sheetKey}`);\n element.classList.add('vtable-sheet');\n element.style.outline = 'none';\n element.style.position = 'relative';\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n\n return element;\n }\n\n /**\n * 初始化表格实例\n */\n private _initializeTable(): void {\n // 这里应该是实际的表格初始化逻辑\n const tableOptions = this._generateTableOptions();\n this.tableInstance = new ListTable(tableOptions);\n this.element.classList.add('vtable-excel-cursor');\n // 获取事件总线\n this.eventBus = (this.tableInstance as any).eventBus;\n }\n\n /**\n * 生成VTable选项\n */\n private _generateTableOptions(): ListTableConstructorOptions {\n let isShowTableHeader = this.options.showHeader;\n // 转换为ListTable的选项\n if (!this.options.columns) {\n isShowTableHeader = isValid(isShowTableHeader) ? isShowTableHeader : false;\n this.options.columns = [];\n } else {\n for (let i = 0; i < this.options.columns.length; i++) {\n this.options.columns[i].field = i;\n }\n }\n if (!this.options.data) {\n this.options.data = [];\n } else if (this.options.columns.length === 0 && this.options.firstRowAsHeader) {\n const data = this.options.data;\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i],\n filter: !!this.options.filter\n };\n }\n }\n data.shift();\n isShowTableHeader = true;\n }\n const keyboardOptions = {\n ...this.options.keyboardOptions,\n copySelected: true,\n pasteValueToCell: true,\n showCopyCellBorder: true,\n cutSelected: true\n };\n\n //更改theme 的frameStyle\n let changedTheme: TYPES.VTableThemes.ITableThemeDefine;\n if (!this.options?.theme) {\n this.options.theme = VTableThemes.DEFAULT;\n }\n this.options.theme = this.options.theme;\n if (this.options.theme.bodyStyle && !isPropertyWritable(this.options.theme, 'bodyStyle')) {\n //测试是否使用了主题 使用了主题配置项不可写。\n changedTheme = (this.options.theme as TYPES.VTableThemes.TableTheme).extends(\n (this.options.theme as TYPES.VTableThemes.TableTheme).getExtendTheme()\n ); //防止将原主题如DARK ARCO的属性改掉\n const extendThemeOption = (changedTheme as TYPES.VTableThemes.TableTheme).getExtendTheme();\n\n extendThemeOption.frameStyle = Object.assign({}, extendThemeOption.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n } else {\n changedTheme = this.options.theme;\n changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n }\n return {\n ...this.options,\n addRecordRule: 'Array',\n defaultCursor: 'cell',\n records: this.options.data,\n sortState: this.options.sortState,\n container: this.element,\n showHeader: isShowTableHeader,\n keyboardOptions,\n theme: changedTheme,\n excelOptions: {\n fillHandle: true\n },\n customConfig: {\n selectCellWhenCellEditorNotExists: true\n }\n // maintainedColumnCount: 120\n // 其他特定配置\n };\n }\n\n /**\n * 设置事件监听\n */\n private _setupEventListeners(): void {\n if (this.tableInstance) {\n // 监听单元格选择事件 - 优化:移除console.log调试代码\n this.tableInstance.on('mousedown_cell', (event: any) => {\n if (this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n //防止公式输入状态下,原本的input元素blur掉,导致公式输入框无法输入\n event.event.preventDefault();\n }\n });\n\n // 监听选择变化事件(多选时)\n this.tableInstance.on('selected_changed' as any, (event: any) => {\n // 判断是drag过程中的选中单元格变化\n if (!this.tableInstance.eventManager.isDraging) {\n if (!this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n this.editingCell = {\n sheet: this.getKey(),\n row: event.row,\n col: event.col\n };\n }\n this.handleCellSelected(event);\n }\n this.handleSelectionChanged(event);\n });\n\n // 监听拖拽选择结束事件 - 优化:移除console.log和debugger调试代码\n this.tableInstance.on('drag_select_end' as any, (event: any) => {\n this.handleDragSelectEnd(event);\n });\n\n // 监听单元格值变更事件\n this.tableInstance.on('change_cell_value', (event: any) => {\n this.handleCellValueChanged(event);\n });\n\n // 监听编辑结束事件,恢复十字光标\n this.tableInstance.on('click_cell', () => {\n this.element.classList.add('vtable-excel-cursor');\n });\n }\n }\n\n /**\n * 处理单元格选择事件\n * @param event 选择事件\n */\n private handleCellSelected(event: any): void {\n // 更新选择范围\n this.selection = {\n startRow: event.row,\n startCol: event.col,\n endRow: event.row,\n endCol: event.col\n };\n\n // 使用事件类型枚举触发事件给父组件\n const cellSelectedEvent: CellClickEvent = {\n row: event.row,\n col: event.col,\n value: event.value,\n cellElement: event.cellElement,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.CELL_CLICK, cellSelectedEvent);\n }\n\n /**\n * 处理选择变化事件\n * @param event 选择变化事件\n */\n private handleSelectionChanged(event: any): void {\n if (event?.ranges?.length) {\n const r = event.ranges[event.ranges.length - 1];\n this.selection = {\n startRow: r.start.row,\n startCol: r.start.col,\n endRow: r.end.row,\n endCol: r.end.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionChangedEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_CHANGED, selectionChangedEvent);\n }\n\n /**\n * 处理拖拽选择结束事件\n * @param event 拖拽选择结束事件\n */\n private handleDragSelectEnd(event: any): void {\n if (event?.cells?.length) {\n const first = event.cells[0][0];\n const lastRow = event.cells[event.cells.length - 1];\n const last = lastRow[lastRow.length - 1];\n this.selection = {\n startRow: first.row,\n startCol: first.col,\n endRow: last.row,\n endCol: last.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionEndEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_END, selectionEndEvent);\n }\n\n /**\n * 处理单元格值变更事件\n * @param event 值变更事件\n */\n private handleCellValueChanged(event: any): void {\n const cellValueChangedEvent: CellValueChangedEvent = {\n row: event.row,\n col: event.col,\n oldValue: event.rawValue,\n newValue: event.changedValue\n };\n this.fire(WorkSheetEventType.CELL_VALUE_CHANGED, cellValueChangedEvent);\n }\n\n /**\n * 触发事件\n * @param eventName 事件名称\n * @param eventData 事件数据\n */\n protected fireEvent(eventName: string, eventData: any): void {\n this.fire(eventName, eventData);\n }\n\n /**\n * 监听事件\n * @param eventName 事件名称\n * @param handler 事件处理函数\n */\n on(eventName: string, handler: (...args: any[]) => void): this {\n return super.on(eventName, handler);\n }\n\n // 用于防止短时间内多次调用resize的节流变量\n private resizeTimer: number | null = null;\n private isResizing = false;\n\n /**\n * 更新Sheet大小\n * 使用节流方式避免频繁调用resize\n */\n resize(): void {\n if (!this.element) {\n return;\n }\n\n // 如果正在进行调整,清除之前的定时器\n if (this.resizeTimer !== null) {\n window.clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n\n // 如果已经在执行resize,设置一个短期延迟\n if (this.isResizing) {\n this.resizeTimer = window.setTimeout(() => {\n this.doResize();\n this.resizeTimer = null;\n }, 50);\n return;\n }\n\n // 否则直接执行resize\n this.doResize();\n }\n\n /**\n * 实际执行调整大小的操作\n * @private\n */\n private doResize(): void {\n try {\n this.isResizing = true;\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n // 只有尺寸确实变化时才更新样式和触发表格实例的resize\n if (parseInt(this.element.style.width, 10) !== width || parseInt(this.element.style.height, 10) !== height) {\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n\n // 更新表格实例大小\n if (this.tableInstance) {\n // 触发VTable的resize\n this.tableInstance.resize();\n }\n }\n } catch (error) {\n console.error('Error during resize:', error);\n } finally {\n this.isResizing = false;\n }\n }\n\n /**\n * 获取Sheet元素\n */\n getElement(): HTMLElement {\n return this.element;\n }\n\n /**\n * 获取Sheet容器\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取Sheet的key\n */\n getKey(): string {\n return this.sheetKey;\n }\n\n /**\n * 获取Sheet的标题\n */\n getTitle(): string {\n return this.sheetTitle;\n }\n\n /**\n * 设置Sheet的标题\n */\n setTitle(title: string): void {\n this.sheetTitle = title;\n this.options.sheetTitle = title;\n }\n\n /**\n * 获取列定义\n */\n getColumns(): ColumnDefine[] {\n return this.options.columns || [];\n }\n\n /**\n * 获取表格数据\n */\n getData(): any[][] {\n // 从表格实例获取数据\n return this.options.data || [];\n }\n\n getCopiedData(): any[][] {\n // 为了避免影响当前数据,所以需要复制一份数据\n return this.getData().map(row => (Array.isArray(row) ? row.slice() : []));\n }\n\n /**\n * 设置表格数据\n * @param data 表格数据\n */\n setData(data: any[][]): void {\n this.options.data = data;\n // 更新表格实例数据\n if (this.tableInstance) {\n this.tableInstance.updateOption({\n records: data\n });\n // 更新公式引擎中的数据\n if (this.vtableSheet?.formulaManager) {\n try {\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(data, this.tableInstance);\n this.vtableSheet.formulaManager.setSheetContent(this.sheetKey, normalizedData);\n } catch (e) {\n console.warn('Failed to update formula data:', e);\n }\n }\n }\n }\n /**\n * 获取指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n */\n getCellValue(row: number, col: number): any {\n if (this.tableInstance) {\n try {\n const value = this.tableInstance.getCellValue(col, row);\n return value;\n } catch (error) {\n console.warn('Failed to get cell value from VTable:', error);\n }\n }\n\n const data = this.getData();\n if (data && data[row] && data[row][col] !== undefined) {\n return data[row][col];\n }\n return null;\n }\n\n /**\n * 设置指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n * @param value 新值\n */\n setCellValue(row: number, col: number, value: any): void {\n const data = this.getData();\n if (data && data[row]) {\n const oldValue = data[row][col];\n data[row][col] = value;\n\n // 更新表格实例\n if (this.tableInstance) {\n this.tableInstance.changeCellValue(col, row, value);\n }\n\n // 触发事件\n const event: CellValueChangedEvent = {\n row,\n col,\n oldValue,\n newValue: value\n };\n\n this.fire('cellValueChanged', event);\n }\n }\n\n /**\n * 根据A1地址获取单元格信息\n * @param address A1地址\n */\n getCellByAddress(address: string): { coord: CellCoord; value: CellValue } {\n const coord = this.coordFromAddress(address);\n return {\n coord,\n value: this.getCellValue(coord.row, coord.col)\n };\n }\n\n /**\n * 将行/列坐标转换为A1格式\n * @param coord 坐标\n */\n addressFromCoord(coord: CellCoord): string;\n addressFromCoord(row: number, col: number): string;\n addressFromCoord(coordOrRow: CellCoord | number, col?: number): string {\n let row: number;\n let colNum: number;\n\n if (typeof coordOrRow === 'object') {\n row = coordOrRow.row;\n colNum = coordOrRow.col;\n } else {\n row = coordOrRow;\n colNum = col!;\n }\n\n let colStr = '';\n let tempCol = colNum + 1;\n\n do {\n tempCol -= 1;\n colStr = String.fromCharCode(65 + (tempCol % 26)) + colStr;\n tempCol = Math.floor(tempCol / 26);\n } while (tempCol > 0);\n\n return `${colStr}${row + 1}`;\n }\n\n /**\n * 将A1格式转换为行/列坐标\n * @param address A1地址\n */\n coordFromAddress(address: string): CellCoord {\n const match = address.match(/^([A-Z]+)([0-9]+)$/);\n if (!match) {\n throw new Error(`Invalid cell address: ${address}`);\n }\n\n const colStr = match[1];\n const rowStr = match[2];\n\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n\n return {\n row: parseInt(rowStr, 10) - 1,\n col: col - 1\n };\n }\n\n /**\n * 获取当前选择\n */\n getSelection(): CellRange | null {\n return this.selection;\n }\n\n /**\n * 获取多个选择范围(支持Ctrl/Cmd多选)\n */\n getMultipleSelections(): CellRange[] {\n if (!this.tableInstance) {\n return this.selection ? [this.selection] : [];\n }\n\n // 从底层VTable获取所有选择范围\n const vtableRanges = this.tableInstance.getSelectedCellRanges();\n\n if (vtableRanges.length === 0) {\n return this.selection ? [this.selection] : [];\n }\n\n // 转换VTable的坐标格式到WorkSheet格式\n return vtableRanges.map(range => ({\n startRow: range.start.row,\n startCol: range.start.col,\n endRow: range.end.row,\n endCol: range.end.col\n }));\n }\n\n /**\n * 将第一行设置为表头\n */\n setFirstRowAsHeader(): void {\n const data = this.getData();\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n if (!this.options.columns[i]) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i]\n };\n } else {\n this.options.columns[i].title = data[0][i];\n this.options.columns[i].field = i;\n }\n }\n }\n data.shift();\n this.tableInstance.updateOption({\n ...this.options,\n columns: this.options.columns,\n showHeader: true,\n records: data\n });\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // 清理事件监听器\n\n // 释放表格实例\n if (this.tableInstance) {\n this.tableInstance.release();\n }\n\n // 从DOM中移除元素\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n\n // 清除引用\n this.tableInstance?.release();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/WorkSheet.ts"],"names":[],"mappings":"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","file":"WorkSheet.js","sourcesContent":["import type { ColumnDefine, ListTableConstructorOptions, ColumnsDefine } from '@visactor/vtable';\nimport { ListTable } from '@visactor/vtable';\nimport { isValid, type EventEmitter } from '@visactor/vutils';\nimport { EventTarget } from '../event/event-target';\nimport type {\n IWorkSheetOptions,\n IWorkSheetAPI,\n CellCoord,\n CellRange,\n CellValue,\n CellValueChangedEvent,\n CellClickEvent,\n SelectionChangedEvent,\n IFormulaManagerOptions\n} from '../ts-types';\nimport { WorkSheetEventType } from '../ts-types';\nimport type { TYPES, VTableSheet } from '..';\nimport { isPropertyWritable } from '../tools';\nimport { VTableThemes } from '../ts-types';\nimport { detectFunctionParameterPosition } from '../formula/formula-helper';\n\n/**\n * Sheet constructor options. 内部类型Sheet的构造函数参数类型\n */\nexport type WorkSheetConstructorOptions = {\n /** 表格数据 */\n data?: any[][];\n /** 公式计算选项 */\n formula?: IFormulaManagerOptions;\n /** Sheet 唯一标识 */\n sheetKey: string;\n /** Sheet 标题 */\n sheetTitle: string;\n} & Omit<ListTableConstructorOptions, 'records'>;\n\nexport class WorkSheet extends EventTarget implements IWorkSheetAPI {\n /** 选项 */\n options: IWorkSheetOptions;\n /** 容器 */\n container: HTMLElement;\n /** 表格实例 */\n tableInstance?: ListTable;\n /** 元素 */\n element: HTMLElement;\n /** 选择范围 */\n private selection: CellRange | null = null;\n /** Sheet 唯一标识 */\n private sheetKey: string;\n /** Sheet 标题 */\n private sheetTitle: string;\n\n /** 事件总线 */\n private eventBus: EventEmitter;\n\n private vtableSheet: VTableSheet;\n\n editingCell: { sheet: string; row: number; col: number } | null = null;\n\n constructor(sheet: VTableSheet, options: IWorkSheetOptions) {\n super();\n this.options = options;\n this.container = options.container;\n\n // 初始化基本属性\n this.sheetKey = options.sheetKey;\n this.sheetTitle = options.sheetTitle;\n this.vtableSheet = sheet;\n\n // 创建表格元素\n this.element = this._createRootElement();\n this.container.appendChild(this.element);\n\n // 初始化表格\n this._initializeTable();\n\n // 设置事件监听\n this._setupEventListeners();\n }\n\n /**\n * 获取行数\n */\n get rowCount(): number {\n const data = this.getData();\n return data ? data.length : 0;\n }\n\n /**\n * 获取列数\n */\n get colCount(): number {\n const data = this.getData();\n return data && data.length > 0 ? data[0].length : 0;\n }\n\n /**\n * 获取行数\n */\n getRowCount(): number {\n return this.tableInstance.rowCount;\n }\n\n /**\n * 获取列数\n */\n getColumnCount(): number {\n return this.tableInstance.colCount;\n }\n\n /**\n * 获取表格数据\n */\n get records(): any {\n return this.getData();\n }\n\n /**\n * 获取列定义\n */\n get columns(): any {\n return this.options.columns || [];\n }\n\n /**\n * 创建根元素\n */\n private _createRootElement(): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('sheet-key', `${this.sheetKey}`);\n element.classList.add('vtable-sheet');\n element.style.outline = 'none';\n element.style.position = 'relative';\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n\n return element;\n }\n\n /**\n * 初始化表格实例\n */\n private _initializeTable(): void {\n // 这里应该是实际的表格初始化逻辑\n const tableOptions = this._generateTableOptions();\n this.tableInstance = new ListTable(tableOptions);\n this.element.classList.add('vtable-excel-cursor');\n // 获取事件总线\n this.eventBus = (this.tableInstance as any).eventBus;\n }\n\n /**\n * 生成VTable选项\n */\n private _generateTableOptions(): ListTableConstructorOptions {\n let isShowTableHeader = this.options.showHeader;\n // 转换为ListTable的选项\n if (!this.options.columns) {\n isShowTableHeader = isValid(isShowTableHeader) ? isShowTableHeader : false;\n this.options.columns = [];\n } else {\n for (let i = 0; i < this.options.columns.length; i++) {\n this.options.columns[i].field = i;\n }\n }\n if (!this.options.data) {\n this.options.data = [];\n } else if (this.options.columns.length === 0 && this.options.firstRowAsHeader) {\n const data = this.options.data;\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i],\n filter: !!this.options.filter\n };\n }\n }\n data.shift();\n isShowTableHeader = true;\n }\n const keyboardOptions = {\n ...this.options.keyboardOptions,\n copySelected: true,\n pasteValueToCell: true,\n showCopyCellBorder: true,\n cutSelected: true\n };\n\n //更改theme 的frameStyle\n let changedTheme: TYPES.VTableThemes.ITableThemeDefine;\n if (!this.options?.theme) {\n this.options.theme = VTableThemes.DEFAULT;\n }\n this.options.theme = this.options.theme;\n if (this.options.theme.bodyStyle && !isPropertyWritable(this.options.theme, 'bodyStyle')) {\n //测试是否使用了主题 使用了主题配置项不可写。\n changedTheme = (this.options.theme as TYPES.VTableThemes.TableTheme).extends(\n (this.options.theme as TYPES.VTableThemes.TableTheme).getExtendTheme()\n ); //防止将原主题如DARK ARCO的属性改掉\n const extendThemeOption = (changedTheme as TYPES.VTableThemes.TableTheme).getExtendTheme();\n\n extendThemeOption.frameStyle = Object.assign({}, extendThemeOption.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n } else {\n // 确保theme是一个对象而不是字符串\n if (typeof this.options.theme === 'string') {\n console.warn('theme is a string, it will be ignored');\n } else {\n changedTheme = this.options.theme;\n changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n }\n }\n return {\n ...(this.options as any),\n dragOrder: {\n maintainArrayDataOrder: true\n },\n addRecordRule: 'Array',\n defaultCursor: 'cell',\n records: this.options.data,\n sortState: this.options.sortState,\n container: this.element,\n showHeader: isShowTableHeader,\n keyboardOptions,\n theme: changedTheme,\n excelOptions: {\n fillHandle: true\n },\n customConfig: {\n selectCellWhenCellEditorNotExists: true\n }\n // maintainedColumnCount: 120\n // 其他特定配置\n };\n }\n\n /**\n * 设置事件监听\n */\n private _setupEventListeners(): void {\n if (this.tableInstance) {\n // 监听单元格选择事件 - 优化:移除console.log调试代码\n this.tableInstance.on('mousedown_cell', (event: any) => {\n if (this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n //防止公式输入状态下,原本的input元素blur掉,导致公式输入框无法输入\n event.event.preventDefault();\n }\n });\n\n // 监听选择变化事件(多选时)\n this.tableInstance.on('selected_changed' as any, (event: any) => {\n // 判断是drag过程中的选中单元格变化\n if (!this.tableInstance.eventManager.isDraging) {\n if (!this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n this.editingCell = {\n sheet: this.getKey(),\n row: event.row,\n col: event.col\n };\n }\n this.handleCellSelected(event);\n }\n this.handleSelectionChanged(event);\n });\n\n // 监听拖拽选择结束事件 - 优化:移除console.log和debugger调试代码\n this.tableInstance.on('drag_select_end' as any, (event: any) => {\n this.handleDragSelectEnd(event);\n });\n\n // 监听单元格值变更事件\n this.tableInstance.on('change_cell_value', (event: any) => {\n this.handleCellValueChanged(event);\n });\n\n // 监听数据记录变更事件 - 用于调整公式引用\n // 注意:'add_record' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('add_record', (event: any) => {\n this.handleDataRecordsChanged('add', event);\n });\n\n // 注意:'delete_record' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('delete_record', (event: any) => {\n this.handleDataRecordsChanged('delete', event);\n });\n // 注意:'add_column' 事件类型尚未在 VTable 中定义,这里使用 as any 绕过类型检查\n (this.tableInstance as any).on('add_column', (event: any) => {\n this.handleColumnsChanged('add', event);\n });\n\n // 注意:'delete_column' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('delete_column', (event: any) => {\n this.handleColumnsChanged('delete', event);\n });\n\n // 监听编辑结束事件,恢复十字光标\n this.tableInstance.on('click_cell', () => {\n this.element.classList.add('vtable-excel-cursor');\n });\n // 监听编辑结束事件,恢复十字光标\n this.tableInstance.on('change_header_position', (event: any) => {\n this.handleChangeHeaderPosition(event);\n });\n }\n }\n\n /**\n * 处理单元格选择事件\n * @param event 选择事件\n */\n private handleCellSelected(event: any): void {\n // 更新选择范围\n this.selection = {\n startRow: event.row,\n startCol: event.col,\n endRow: event.row,\n endCol: event.col\n };\n\n // 使用事件类型枚举触发事件给父组件\n const cellSelectedEvent: CellClickEvent = {\n row: event.row,\n col: event.col,\n value: event.value,\n cellElement: event.cellElement,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.CELL_CLICK, cellSelectedEvent);\n }\n\n /**\n * 处理选择变化事件\n * @param event 选择变化事件\n */\n private handleSelectionChanged(event: any): void {\n if (event?.ranges?.length) {\n const r = event.ranges[event.ranges.length - 1];\n this.selection = {\n startRow: r.start.row,\n startCol: r.start.col,\n endRow: r.end.row,\n endCol: r.end.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionChangedEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_CHANGED, selectionChangedEvent);\n }\n\n /**\n * 处理拖拽选择结束事件\n * @param event 拖拽选择结束事件\n */\n private handleDragSelectEnd(event: any): void {\n if (event?.cells?.length) {\n const first = event.cells[0][0];\n const lastRow = event.cells[event.cells.length - 1];\n const last = lastRow[lastRow.length - 1];\n this.selection = {\n startRow: first.row,\n startCol: first.col,\n endRow: last.row,\n endCol: last.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionEndEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_END, selectionEndEvent);\n }\n\n /**\n * 处理单元格值变更事件\n * @param event 值变更事件\n */\n private handleCellValueChanged(event: any): void {\n const cellValueChangedEvent: CellValueChangedEvent = {\n row: event.row,\n col: event.col,\n oldValue: event.rawValue,\n newValue: event.changedValue\n };\n this.fire(WorkSheetEventType.CELL_VALUE_CHANGED, cellValueChangedEvent);\n }\n\n /**\n * 处理数据记录变更事件 - 用于调整公式引用\n * @param type 变更类型 ('add' | 'delete')\n * @param event 数据变更事件\n */\n private handleDataRecordsChanged(type: 'add' | 'delete', event: any): void {\n try {\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n if (type === 'add') {\n // 处理添加记录事件\n const { recordIndex, recordCount } = event;\n if (recordIndex !== undefined && recordCount > 0) {\n // 在指定位置插入行,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.addRows(sheetKey, recordIndex, recordCount);\n } else {\n // 默认在末尾添加\n const currentRowCount = this.getRowCount();\n this.vtableSheet.formulaManager.addRows(sheetKey, currentRowCount, recordCount);\n }\n } else if (type === 'delete') {\n // 处理删除记录事件\n const { rowIndexs, deletedCount } = event;\n if (rowIndexs && rowIndexs.length > 0) {\n // 为了简化,我们假设删除的是连续的行,从最小的索引开始\n const minIndex = Math.min(...rowIndexs.flat());\n this.vtableSheet.formulaManager.removeRows(sheetKey, minIndex, deletedCount);\n }\n }\n // update 事件不需要调整引用,因为只是数据内容变更\n } catch (error) {\n console.error(`Failed to handle data records changed (${type}):`, error);\n }\n }\n /**\n * 处理列变更事件 - 用于调整公式引用\n * @param type 变更类型 ('add' | 'delete')\n * @param event 列变更事件\n */\n private handleColumnsChanged(type: 'add' | 'delete', event: any): void {\n try {\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n if (type === 'add') {\n // 处理添加列事件\n const { columnIndex, columnCount } = event;\n if (columnIndex !== undefined && columnCount > 0) {\n // 在指定位置插入列,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.addColumns(sheetKey, columnIndex, columnCount);\n } else {\n // 默认在末尾添加\n const currentColumnCount = this.getColumnCount();\n this.vtableSheet.formulaManager.addColumns(sheetKey, currentColumnCount, columnCount);\n }\n } else if (type === 'delete') {\n // 处理删除列事件\n const { deleteColIndexs } = event;\n if (deleteColIndexs && deleteColIndexs.length > 0) {\n // 为了简化,我们假设删除的是连续的列,从最小的索引开始\n const minIndex = Math.min(...deleteColIndexs.flat());\n const deletedCount = deleteColIndexs.length;\n this.vtableSheet.formulaManager.removeColumns(sheetKey, minIndex, deletedCount);\n }\n }\n // update 事件不需要调整引用,因为只是数据内容变更\n } catch (error) {\n console.error(`Failed to handle columns changed (${type}):`, error);\n }\n }\n /**\n * 处理表头位置变更事件\n * @param event 表头位置变更事件\n */\n private handleChangeHeaderPosition(event: any): void {\n console.log('handleChangeHeaderPosition', event);\n if (event.movingColumnOrRow === 'column') {\n this.handleChangeColumnHeaderPosition(event);\n } else {\n this.handleChangeRowHeaderPosition(event);\n }\n }\n /**\n * 处理列表头位置变更事件\n * @param event 列表头位置变更事件\n */\n private handleChangeColumnHeaderPosition(event: any): void {\n console.log('handleChangeColumnHeaderPosition', event);\n // 注意:tableInstance.options.columns 中的顺序并未更新(和其他操作如delete/add等操作不同)需要注意后续是否有什么问题\n const { source, target } = event;\n const { col: sourceCol, row: sourceRow } = source;\n const { col: targetCol, row: targetRow } = target;\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n // 在指定位置插入列,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.changeColumnHeaderPosition(sheetKey, sourceCol, targetCol);\n }\n /**\n * 处理行表头位置变更事件\n * @param event 行表头位置变更事件\n */\n handleChangeRowHeaderPosition(event: any): void {\n // 注意:tableInstance.options.columns 中的顺序并未更新(和其他操作如delete/add等操作不同)需要注意后续是否有什么问题\n const { source, target } = event;\n const { row: sourceRow } = source;\n const { row: targetRow } = target;\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n // 在指定位置插入行,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.changeRowHeaderPosition(sheetKey, sourceRow, targetRow);\n }\n\n /**\n * 触发事件\n * @param eventName 事件名称\n * @param eventData 事件数据\n */\n protected fireEvent(eventName: string, eventData: any): void {\n this.fire(eventName, eventData);\n }\n\n /**\n * 监听事件\n * @param eventName 事件名称\n * @param handler 事件处理函数\n */\n on(eventName: string, handler: (...args: any[]) => void): this {\n return super.on(eventName, handler);\n }\n\n // 用于防止短时间内多次调用resize的节流变量\n private resizeTimer: number | null = null;\n private isResizing = false;\n\n /**\n * 更新Sheet大小\n * 使用节流方式避免频繁调用resize\n */\n resize(): void {\n if (!this.element) {\n return;\n }\n\n // 如果正在进行调整,清除之前的定时器\n if (this.resizeTimer !== null) {\n window.clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n\n // 如果已经在执行resize,设置一个短期延迟\n if (this.isResizing) {\n this.resizeTimer = window.setTimeout(() => {\n this.doResize();\n this.resizeTimer = null;\n }, 50);\n return;\n }\n\n // 否则直接执行resize\n this.doResize();\n }\n\n /**\n * 实际执行调整大小的操作\n * @private\n */\n private doResize(): void {\n try {\n this.isResizing = true;\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n // 只有尺寸确实变化时才更新样式和触发表格实例的resize\n if (parseInt(this.element.style.width, 10) !== width || parseInt(this.element.style.height, 10) !== height) {\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n\n // 更新表格实例大小\n if (this.tableInstance) {\n // 触发VTable的resize\n this.tableInstance.resize();\n }\n }\n } catch (error) {\n console.error('Error during resize:', error);\n } finally {\n this.isResizing = false;\n }\n }\n\n /**\n * 获取Sheet元素\n */\n getElement(): HTMLElement {\n return this.element;\n }\n\n /**\n * 获取Sheet容器\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取Sheet的key\n */\n getKey(): string {\n return this.sheetKey;\n }\n\n /**\n * 获取Sheet的标题\n */\n getTitle(): string {\n return this.sheetTitle;\n }\n\n /**\n * 设置Sheet的标题\n */\n setTitle(title: string): void {\n this.sheetTitle = title;\n this.options.sheetTitle = title;\n }\n\n /**\n * 获取列定义\n */\n getColumns(): ColumnDefine[] {\n return this.tableInstance.columns || [];\n }\n\n /**\n * 获取表格数据\n */\n getData(): any[][] {\n // 从表格实例获取数据\n return this.options.data || [];\n }\n\n getCopiedData(): any[][] {\n // 为了避免影响当前数据,所以需要复制一份数据\n return this.getData().map(row => (Array.isArray(row) ? row.slice() : []));\n }\n /**\n * 获取指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n */\n getCellValue(row: number, col: number): any {\n if (this.tableInstance) {\n try {\n const value = this.tableInstance.getCellValue(col, row);\n return value;\n } catch (error) {\n console.warn('Failed to get cell value from VTable:', error);\n }\n }\n\n const data = this.getData();\n if (data && data[row] && data[row][col] !== undefined) {\n return data[row][col];\n }\n return null;\n }\n\n /**\n * 设置指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n * @param value 新值\n */\n setCellValue(row: number, col: number, value: any): void {\n const data = this.getData();\n if (data && data[row]) {\n const oldValue = data[row][col];\n data[row][col] = value;\n\n // 更新表格实例\n if (this.tableInstance) {\n this.tableInstance.changeCellValue(col, row, value);\n }\n\n // 触发事件\n const event: CellValueChangedEvent = {\n row,\n col,\n oldValue,\n newValue: value\n };\n\n this.fire('cellValueChanged', event);\n }\n }\n\n /**\n * 根据A1地址获取单元格信息\n * @param address A1地址\n */\n getCellByAddress(address: string): { coord: CellCoord; value: CellValue } {\n const coord = this.coordFromAddress(address);\n return {\n coord,\n value: this.getCellValue(coord.row, coord.col)\n };\n }\n\n /**\n * 将行/列坐标转换为A1格式\n * @param coord 坐标\n */\n addressFromCoord(coord: CellCoord): string;\n addressFromCoord(row: number, col: number): string;\n addressFromCoord(coordOrRow: CellCoord | number, col?: number): string {\n let row: number;\n let colNum: number;\n\n if (typeof coordOrRow === 'object') {\n row = coordOrRow.row;\n colNum = coordOrRow.col;\n } else {\n row = coordOrRow;\n colNum = col!;\n }\n\n let colStr = '';\n let tempCol = colNum + 1;\n\n do {\n tempCol -= 1;\n colStr = String.fromCharCode(65 + (tempCol % 26)) + colStr;\n tempCol = Math.floor(tempCol / 26);\n } while (tempCol > 0);\n\n return `${colStr}${row + 1}`;\n }\n\n /**\n * 将A1格式转换为行/列坐标\n * @param address A1地址\n */\n coordFromAddress(address: string): CellCoord {\n const match = address.match(/^([A-Z]+)([0-9]+)$/);\n if (!match) {\n throw new Error(`Invalid cell address: ${address}`);\n }\n\n const colStr = match[1];\n const rowStr = match[2];\n\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n\n return {\n row: parseInt(rowStr, 10) - 1,\n col: col - 1\n };\n }\n\n /**\n * 获取当前选择\n */\n getSelection(): CellRange | null {\n return this.selection;\n }\n\n /**\n * 获取多个选择范围(支持Ctrl/Cmd多选)\n */\n getMultipleSelections(): CellRange[] {\n if (!this.tableInstance) {\n return this.selection ? [this.selection] : [];\n }\n\n // 从底层VTable获取所有选择范围\n const vtableRanges = this.tableInstance.getSelectedCellRanges();\n\n if (vtableRanges.length === 0) {\n return this.selection ? [this.selection] : [];\n }\n\n // 转换VTable的坐标格式到WorkSheet格式\n return vtableRanges.map((range: any) => ({\n startRow: range.start.row,\n startCol: range.start.col,\n endRow: range.end.row,\n endCol: range.end.col\n }));\n }\n\n /**\n * 将第一行设置为表头\n */\n setFirstRowAsHeader(): void {\n const data = this.getData();\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n if (!this.options.columns[i]) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i]\n };\n } else {\n this.options.columns[i].title = data[0][i];\n this.options.columns[i].field = i;\n }\n }\n }\n data.shift();\n this.tableInstance.updateOption({\n ...this.options,\n columns: this.options.columns as any as ColumnsDefine,\n showHeader: true,\n records: data\n });\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // 清理事件监听器\n\n // 释放表格实例\n if (this.tableInstance) {\n this.tableInstance.release();\n }\n\n // 从DOM中移除元素\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n\n // 清除引用\n this.tableInstance?.release();\n }\n}\n"]}
|
|
@@ -45,8 +45,7 @@ function getTablePlugins(sheetDefine, options) {
|
|
|
45
45
|
plugins.push(autoFillPlugin);
|
|
46
46
|
}
|
|
47
47
|
return (null == options ? void 0 : options.VTablePluginModules) && options.VTablePluginModules.forEach((module => {
|
|
48
|
-
|
|
49
|
-
plugins.push(new module.module(module.moduleOptions));
|
|
48
|
+
"function" == typeof (null == module ? void 0 : module.module) && plugins.push(new module.module(module.moduleOptions));
|
|
50
49
|
})), plugins;
|
|
51
50
|
}
|
|
52
51
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/table-plugins.ts"],"names":[],"mappings":"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","file":"table-plugins.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\nimport {\n FilterPlugin,\n AddRowColumnPlugin,\n TableSeriesNumber,\n HighlightHeaderWhenSelectCellPlugin,\n ContextMenuPlugin,\n ExcelEditCellKeyboardPlugin,\n AutoFillPlugin,\n DEFAULT_HEADER_MENU_ITEMS,\n DEFAULT_BODY_MENU_ITEMS,\n DEFAULT_COLUMN_SERIES_MENU_ITEMS\n} from '@visactor/vtable-plugins';\nimport type {\n FilterOptions,\n MenuItemOrSeparator,\n MenuClickEventArgs,\n AddRowColumnOptions,\n TableSeriesNumberOptions,\n IHighlightHeaderWhenSelectCellPluginOptions,\n ContextMenuOptions\n} from '@visactor/vtable-plugins';\nimport type { ISheetDefine, IColumnDefine, IVTableSheetOptions } from '../ts-types';\nimport { isValid } from '@visactor/vutils';\n\n/**\n * 获取表格插件列表\n * @param sheetDefine Sheet配置定义\n * @returns 插件数组\n */\nexport function getTablePlugins(\n sheetDefine?: ISheetDefine,\n options?: IVTableSheetOptions\n): VTable.plugins.IVTablePlugin[] {\n const plugins: VTable.plugins.IVTablePlugin[] = [];\n // 结合options.VTablePluginModules,来判断是否禁用插件\n const disabledPlugins = options?.VTablePluginModules?.filter(module => module.disabled);\n const enabledPlugins = options?.VTablePluginModules?.filter(module => !module.disabled);\n if (!disabledPlugins?.some(module => module.module === FilterPlugin)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === FilterPlugin)\n ?.moduleOptions as FilterOptions;\n const filterPlugin = createFilterPlugin(sheetDefine, userPluginOptions);\n plugins.push(filterPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === AddRowColumnPlugin)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === AddRowColumnPlugin)\n ?.moduleOptions as AddRowColumnOptions;\n const addRowColumnPlugin = new AddRowColumnPlugin({\n addRowCallback: (row: number, tableInstance: VTable.ListTable) => {\n tableInstance.addRecord([], row - tableInstance.columnHeaderLevelCount);\n },\n ...userPluginOptions\n });\n plugins.push(addRowColumnPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === TableSeriesNumber)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === TableSeriesNumber)\n ?.moduleOptions as TableSeriesNumberOptions;\n const tableSeriesNumberPlugin = new TableSeriesNumber({\n rowCount: sheetDefine?.rowCount || 100,\n colCount: sheetDefine?.columnCount || 100,\n rowSeriesNumberWidth: 30,\n colSeriesNumberHeight: 30,\n rowSeriesNumberCellStyle:\n sheetDefine?.theme?.rowSeriesNumberCellStyle || options?.theme?.rowSeriesNumberCellStyle,\n colSeriesNumberCellStyle:\n sheetDefine?.theme?.colSeriesNumberCellStyle || options?.theme?.colSeriesNumberCellStyle,\n ...userPluginOptions\n });\n plugins.push(tableSeriesNumberPlugin);\n }\n // 这个插件有个bug 先不启用 #4447\n // if (!disabledPlugins?.some(module => module.module === HighlightHeaderWhenSelectCellPlugin)) {\n // const userPluginOptions = enabledPlugins?.find(module => module.module === HighlightHeaderWhenSelectCellPlugin)\n // ?.moduleOptions as IHighlightHeaderWhenSelectCellPluginOptions;\n // const highlightHeaderWhenSelectCellPlugin = new HighlightHeaderWhenSelectCellPlugin({\n // colHighlight: true,\n // rowHighlight: true,\n // ...userPluginOptions\n // });\n // plugins.push(highlightHeaderWhenSelectCellPlugin); // 这个插件有个bug 先不启用 #4447\n // }\n if (!disabledPlugins?.some(module => module.module === ContextMenuPlugin)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === ContextMenuPlugin)?.moduleOptions;\n const contextMenuPlugin = createContextMenuItems(sheetDefine, userPluginOptions);\n plugins.push(contextMenuPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === ExcelEditCellKeyboardPlugin)) {\n const userPluginOptions = enabledPlugins?.find(\n module => module.module === ExcelEditCellKeyboardPlugin\n )?.moduleOptions;\n const excelEditCellKeyboardPlugin = new ExcelEditCellKeyboardPlugin(userPluginOptions);\n plugins.push(excelEditCellKeyboardPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === AutoFillPlugin)) {\n // const userPluginOptions = enabledPlugins?.find(\n // module => module.module === VTablePlugins.AutoFillPlugin\n // )?.moduleOptions;\n const autoFillPlugin = new AutoFillPlugin();\n plugins.push(autoFillPlugin);\n }\n if (options?.VTablePluginModules) {\n options.VTablePluginModules.forEach(\n (module: { module: new (options: any) => VTable.plugins.IVTablePlugin; moduleOptions: any }) => {\n if (typeof module.module === 'function') {\n // 检查是否为构造函数\n plugins.push(new module.module(module.moduleOptions));\n } else {\n throw new Error(`Invalid plugin: ${module.module}`);\n }\n }\n );\n }\n return plugins;\n}\n\n/**\n * 创建筛选插件(如果需要)\n * @param sheetDefine Sheet配置\n * @returns 筛选插件实例或null\n */\nfunction createFilterPlugin(sheetDefine?: ISheetDefine, userPluginOptions?: FilterOptions): FilterPlugin | null {\n // // 对象配置\n // if (typeof sheetDefine.filter === 'object') {\n // return new VTablePlugins.FilterPlugin({\n // filterIcon: sheetDefine.filter.filterIcon,\n // filteringIcon: sheetDefine.filter.filteringIcon,\n // enableFilter: createColumnFilterChecker(sheetDefine),\n // filterModes: sheetDefine.filter.filterModes\n // });\n // }\n return new FilterPlugin({\n enableFilter: createColumnFilterChecker(sheetDefine),\n ...userPluginOptions\n });\n}\n\n/**\n * 创建列级别筛选检查函数\n * @param sheetDefine Sheet配置\n * @returns 筛选检查函数\n */\nfunction createColumnFilterChecker(sheetDefine: ISheetDefine) {\n return (columnIndex: number, column: VTable.TYPES.ColumnDefine): boolean => {\n // 由于在 vtable-sheet,把列索引作为列的唯一标识 field,因此这里直接使用列索引\n if (columnIndex < 0 || !sheetDefine.columns || columnIndex >= sheetDefine.columns.length) {\n return false; // 默认启用,保持向后兼容\n }\n\n // 获取列定义配置\n const columnDefine = sheetDefine.columns[columnIndex] as IColumnDefine;\n const filter = !!(columnDefine?.filter ?? sheetDefine.filter);\n // 明确禁用检查\n return filter;\n };\n}\n\nfunction createContextMenuItems(sheetDefine: ISheetDefine, userPluginOptions?: ContextMenuOptions) {\n return new ContextMenuPlugin({\n headerCellMenuItems: [\n ...DEFAULT_HEADER_MENU_ITEMS,\n {\n text: '设置筛选器',\n menuKey: 'set_filter'\n },\n {\n text: '取消筛选器',\n menuKey: 'cancel_filter'\n },\n {\n text: '首行表头',\n menuKey: 'enable_first_row_as_header'\n },\n {\n text: '取消表头',\n menuKey: 'disable_first_row_as_header'\n }\n ],\n bodyCellMenuItems: [\n ...DEFAULT_BODY_MENU_ITEMS,\n {\n text: '启用首行表头',\n menuKey: 'enable_first_row_as_header'\n }\n ],\n columnSeriesNumberMenuItems: [\n ...DEFAULT_COLUMN_SERIES_MENU_ITEMS,\n {\n text: '首行表头',\n menuKey: 'enable_first_row_as_header'\n },\n {\n text: '取消表头',\n menuKey: 'disable_first_row_as_header'\n }\n ],\n beforeShowAdjustMenuItems: (\n menuItems: MenuItemOrSeparator[],\n table: VTable.ListTable,\n col: number,\n row: number\n ) => {\n let isColumnSeriesNumber = false;\n let isHeaderCell = false;\n let isBodyCell = false;\n\n if (!isValid(row)) {\n isColumnSeriesNumber = true;\n }\n if (isValid(col) && isValid(row)) {\n if (table.isHeader(col, row)) {\n isHeaderCell = true;\n } else {\n isBodyCell = true;\n }\n }\n if (isHeaderCell) {\n const column = table.options.columns[col] as IColumnDefine;\n if (column.filter ?? sheetDefine?.filter) {\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'set_filter');\n } else {\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'cancel_filter');\n }\n }\n\n if (isHeaderCell) {\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'enable_first_row_as_header');\n } else if (isBodyCell) {\n if (row === 0) {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'disable_first_row_as_header'\n );\n } else {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'enable_first_row_as_header'\n );\n }\n } else if (isColumnSeriesNumber) {\n if (table.isHeader(col, 0)) {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'enable_first_row_as_header'\n );\n } else {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'disable_first_row_as_header'\n );\n }\n }\n return menuItems;\n },\n menuClickCallback: {\n set_filter: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n // 更新 sheetDefine 配置\n sheetDefine.columns[args.colIndex].filter = true;\n\n // 创建新的 options 对象,确保配置变化被正确传递\n const newOptions = {\n ...table.options,\n columns: table.options.columns.map((col: VTable.ColumnDefine, index: number) => {\n if (index === args.colIndex) {\n return { ...col, filter: true };\n }\n return col;\n })\n };\n // 更新表格配置\n table.updateOption(newOptions, { clearColWidthCache: false, clearRowHeightCache: false });\n },\n cancel_filter: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n // 更新 sheetDefine 配置\n sheetDefine.columns[args.colIndex].filter = false;\n\n // 创建新的 options 对象,确保配置变化被正确传递\n const newOptions = {\n ...table.options,\n columns: table.options.columns.map((col: VTable.ColumnDefine, index: number) => {\n if (index === args.colIndex) {\n return { ...col, filter: false };\n }\n return col;\n })\n };\n\n // 更新表格配置\n table.updateOption(newOptions, { clearColWidthCache: false, clearRowHeightCache: false });\n },\n enable_first_row_as_header: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n handleEnableFirstRowAsHeader(table);\n },\n disable_first_row_as_header: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n handleDisableFirstRowAsHeader(table);\n }\n },\n ...userPluginOptions\n });\n}\n\n/**\n * 处理启用第一行作为表头\n */\nfunction handleEnableFirstRowAsHeader(table: VTable.ListTable): void {\n // 获取第一行数据\n const firstRecord = table.records[0] as string[];\n // 获取剩余数据\n const new_records = table.records.slice(1);\n //获取当前column\n const columns = table.columns;\n // 设置第一行为表头\n firstRecord.forEach((item, index) => {\n columns[index].title = item;\n });\n table.updateOption(Object.assign({}, table.options, { records: new_records, columns, showHeader: true }), {\n clearColWidthCache: false,\n clearRowHeightCache: false\n });\n // 更新渲染\n table.scenegraph.updateNextFrame();\n}\n\n/**\n * 处理禁用第一行作为表头\n */\nfunction handleDisableFirstRowAsHeader(table: VTable.ListTable): void {\n const columns = table.columns;\n const firstRecord: (string | number)[] = [];\n columns.forEach((col, index) => {\n firstRecord.push(col.title as string);\n });\n //像records中添加第一行\n const new_records = [firstRecord, ...table.records];\n table.updateOption(Object.assign({}, table.options, { records: new_records, columns, showHeader: false }), {\n clearColWidthCache: false,\n clearRowHeightCache: false\n });\n table.scenegraph.updateNextFrame();\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/table-plugins.ts"],"names":[],"mappings":"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","file":"table-plugins.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\nimport {\n FilterPlugin,\n AddRowColumnPlugin,\n TableSeriesNumber,\n HighlightHeaderWhenSelectCellPlugin,\n ContextMenuPlugin,\n ExcelEditCellKeyboardPlugin,\n AutoFillPlugin,\n DEFAULT_HEADER_MENU_ITEMS,\n DEFAULT_BODY_MENU_ITEMS,\n DEFAULT_COLUMN_SERIES_MENU_ITEMS\n} from '@visactor/vtable-plugins';\nimport type {\n FilterOptions,\n MenuItemOrSeparator,\n MenuClickEventArgs,\n AddRowColumnOptions,\n TableSeriesNumberOptions,\n IHighlightHeaderWhenSelectCellPluginOptions,\n ContextMenuOptions\n} from '@visactor/vtable-plugins';\nimport type { ISheetDefine, IColumnDefine, IVTableSheetOptions } from '../ts-types';\nimport { isValid } from '@visactor/vutils';\n\n/**\n * 获取表格插件列表\n * @param sheetDefine Sheet配置定义\n * @returns 插件数组\n */\nexport function getTablePlugins(\n sheetDefine?: ISheetDefine,\n options?: IVTableSheetOptions\n): VTable.plugins.IVTablePlugin[] {\n const plugins: VTable.plugins.IVTablePlugin[] = [];\n // 结合options.VTablePluginModules,来判断是否禁用插件\n const disabledPlugins = options?.VTablePluginModules?.filter(module => module.disabled);\n const enabledPlugins = options?.VTablePluginModules?.filter(module => !module.disabled);\n if (!disabledPlugins?.some(module => module.module === FilterPlugin)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === FilterPlugin)\n ?.moduleOptions as FilterOptions;\n const filterPlugin = createFilterPlugin(sheetDefine, userPluginOptions);\n plugins.push(filterPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === AddRowColumnPlugin)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === AddRowColumnPlugin)\n ?.moduleOptions as AddRowColumnOptions;\n const addRowColumnPlugin = new AddRowColumnPlugin({\n addRowCallback: (row: number, tableInstance: VTable.ListTable) => {\n tableInstance.addRecord([], row - tableInstance.columnHeaderLevelCount);\n },\n ...userPluginOptions\n });\n plugins.push(addRowColumnPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === TableSeriesNumber)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === TableSeriesNumber)\n ?.moduleOptions as TableSeriesNumberOptions;\n const tableSeriesNumberPlugin = new TableSeriesNumber({\n rowCount: sheetDefine?.rowCount || 100,\n colCount: sheetDefine?.columnCount || 100,\n rowSeriesNumberWidth: 30,\n colSeriesNumberHeight: 30,\n rowSeriesNumberCellStyle:\n sheetDefine?.theme?.rowSeriesNumberCellStyle || options?.theme?.rowSeriesNumberCellStyle,\n colSeriesNumberCellStyle:\n sheetDefine?.theme?.colSeriesNumberCellStyle || options?.theme?.colSeriesNumberCellStyle,\n ...userPluginOptions\n });\n plugins.push(tableSeriesNumberPlugin);\n }\n // 这个插件有个bug 先不启用 #4447\n // if (!disabledPlugins?.some(module => module.module === HighlightHeaderWhenSelectCellPlugin)) {\n // const userPluginOptions = enabledPlugins?.find(module => module.module === HighlightHeaderWhenSelectCellPlugin)\n // ?.moduleOptions as IHighlightHeaderWhenSelectCellPluginOptions;\n // const highlightHeaderWhenSelectCellPlugin = new HighlightHeaderWhenSelectCellPlugin({\n // colHighlight: true,\n // rowHighlight: true,\n // ...userPluginOptions\n // });\n // plugins.push(highlightHeaderWhenSelectCellPlugin); // 这个插件有个bug 先不启用 #4447\n // }\n if (!disabledPlugins?.some(module => module.module === ContextMenuPlugin)) {\n const userPluginOptions = enabledPlugins?.find(module => module.module === ContextMenuPlugin)?.moduleOptions;\n const contextMenuPlugin = createContextMenuItems(sheetDefine, userPluginOptions);\n plugins.push(contextMenuPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === ExcelEditCellKeyboardPlugin)) {\n const userPluginOptions = enabledPlugins?.find(\n module => module.module === ExcelEditCellKeyboardPlugin\n )?.moduleOptions;\n const excelEditCellKeyboardPlugin = new ExcelEditCellKeyboardPlugin(userPluginOptions);\n plugins.push(excelEditCellKeyboardPlugin);\n }\n if (!disabledPlugins?.some(module => module.module === AutoFillPlugin)) {\n // const userPluginOptions = enabledPlugins?.find(\n // module => module.module === VTablePlugins.AutoFillPlugin\n // )?.moduleOptions;\n const autoFillPlugin = new AutoFillPlugin();\n plugins.push(autoFillPlugin);\n }\n if (options?.VTablePluginModules) {\n options.VTablePluginModules.forEach(\n (module: { module: new (options: any) => VTable.plugins.IVTablePlugin; moduleOptions: any }) => {\n if (typeof module?.module === 'function') {\n // 检查是否为构造函数\n plugins.push(new module.module(module.moduleOptions));\n } else {\n console.error(`Invalid plugin: ${module.module}`);\n }\n }\n );\n }\n return plugins;\n}\n\n/**\n * 创建筛选插件(如果需要)\n * @param sheetDefine Sheet配置\n * @returns 筛选插件实例或null\n */\nfunction createFilterPlugin(sheetDefine?: ISheetDefine, userPluginOptions?: FilterOptions): FilterPlugin | null {\n // // 对象配置\n // if (typeof sheetDefine.filter === 'object') {\n // return new VTablePlugins.FilterPlugin({\n // filterIcon: sheetDefine.filter.filterIcon,\n // filteringIcon: sheetDefine.filter.filteringIcon,\n // enableFilter: createColumnFilterChecker(sheetDefine),\n // filterModes: sheetDefine.filter.filterModes\n // });\n // }\n return new FilterPlugin({\n enableFilter: createColumnFilterChecker(sheetDefine),\n ...userPluginOptions\n });\n}\n\n/**\n * 创建列级别筛选检查函数\n * @param sheetDefine Sheet配置\n * @returns 筛选检查函数\n */\nfunction createColumnFilterChecker(sheetDefine: ISheetDefine) {\n return (columnIndex: number, column: VTable.TYPES.ColumnDefine): boolean => {\n // 由于在 vtable-sheet,把列索引作为列的唯一标识 field,因此这里直接使用列索引\n if (columnIndex < 0 || !sheetDefine.columns || columnIndex >= sheetDefine.columns.length) {\n return false; // 默认启用,保持向后兼容\n }\n\n // 获取列定义配置\n const columnDefine = sheetDefine.columns[columnIndex] as IColumnDefine;\n const filter = !!(columnDefine?.filter ?? sheetDefine.filter);\n // 明确禁用检查\n return filter;\n };\n}\n\nfunction createContextMenuItems(sheetDefine: ISheetDefine, userPluginOptions?: ContextMenuOptions) {\n return new ContextMenuPlugin({\n headerCellMenuItems: [\n ...DEFAULT_HEADER_MENU_ITEMS,\n {\n text: '设置筛选器',\n menuKey: 'set_filter'\n },\n {\n text: '取消筛选器',\n menuKey: 'cancel_filter'\n },\n {\n text: '首行表头',\n menuKey: 'enable_first_row_as_header'\n },\n {\n text: '取消表头',\n menuKey: 'disable_first_row_as_header'\n }\n ],\n bodyCellMenuItems: [\n ...DEFAULT_BODY_MENU_ITEMS,\n {\n text: '启用首行表头',\n menuKey: 'enable_first_row_as_header'\n }\n ],\n columnSeriesNumberMenuItems: [\n ...DEFAULT_COLUMN_SERIES_MENU_ITEMS,\n {\n text: '首行表头',\n menuKey: 'enable_first_row_as_header'\n },\n {\n text: '取消表头',\n menuKey: 'disable_first_row_as_header'\n }\n ],\n beforeShowAdjustMenuItems: (\n menuItems: MenuItemOrSeparator[],\n table: VTable.ListTable,\n col: number,\n row: number\n ) => {\n let isColumnSeriesNumber = false;\n let isHeaderCell = false;\n let isBodyCell = false;\n\n if (!isValid(row)) {\n isColumnSeriesNumber = true;\n }\n if (isValid(col) && isValid(row)) {\n if (table.isHeader(col, row)) {\n isHeaderCell = true;\n } else {\n isBodyCell = true;\n }\n }\n if (isHeaderCell) {\n const column = table.options.columns[col] as IColumnDefine;\n if (column.filter ?? sheetDefine?.filter) {\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'set_filter');\n } else {\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'cancel_filter');\n }\n }\n\n if (isHeaderCell) {\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'enable_first_row_as_header');\n } else if (isBodyCell) {\n if (row === 0) {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'disable_first_row_as_header'\n );\n } else {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'enable_first_row_as_header'\n );\n }\n } else if (isColumnSeriesNumber) {\n if (table.isHeader(col, 0)) {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'enable_first_row_as_header'\n );\n } else {\n menuItems = menuItems.filter(\n item => typeof item === 'string' || item.menuKey !== 'disable_first_row_as_header'\n );\n }\n }\n return menuItems;\n },\n menuClickCallback: {\n set_filter: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n // 更新 sheetDefine 配置\n sheetDefine.columns[args.colIndex].filter = true;\n\n // 创建新的 options 对象,确保配置变化被正确传递\n const newOptions = {\n ...table.options,\n columns: table.options.columns.map((col: VTable.ColumnDefine, index: number) => {\n if (index === args.colIndex) {\n return { ...col, filter: true };\n }\n return col;\n })\n };\n // 更新表格配置\n table.updateOption(newOptions, { clearColWidthCache: false, clearRowHeightCache: false });\n },\n cancel_filter: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n // 更新 sheetDefine 配置\n sheetDefine.columns[args.colIndex].filter = false;\n\n // 创建新的 options 对象,确保配置变化被正确传递\n const newOptions = {\n ...table.options,\n columns: table.options.columns.map((col: VTable.ColumnDefine, index: number) => {\n if (index === args.colIndex) {\n return { ...col, filter: false };\n }\n return col;\n })\n };\n\n // 更新表格配置\n table.updateOption(newOptions, { clearColWidthCache: false, clearRowHeightCache: false });\n },\n enable_first_row_as_header: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n handleEnableFirstRowAsHeader(table);\n },\n disable_first_row_as_header: (args: MenuClickEventArgs, table: VTable.ListTable) => {\n handleDisableFirstRowAsHeader(table);\n }\n },\n ...userPluginOptions\n });\n}\n\n/**\n * 处理启用第一行作为表头\n */\nfunction handleEnableFirstRowAsHeader(table: VTable.ListTable): void {\n // 获取第一行数据\n const firstRecord = table.records[0] as string[];\n // 获取剩余数据\n const new_records = table.records.slice(1);\n //获取当前column\n const columns = table.columns;\n // 设置第一行为表头\n firstRecord.forEach((item, index) => {\n columns[index].title = item;\n });\n table.updateOption(Object.assign({}, table.options, { records: new_records, columns, showHeader: true }), {\n clearColWidthCache: false,\n clearRowHeightCache: false\n });\n // 更新渲染\n table.scenegraph.updateNextFrame();\n}\n\n/**\n * 处理禁用第一行作为表头\n */\nfunction handleDisableFirstRowAsHeader(table: VTable.ListTable): void {\n const columns = table.columns;\n const firstRecord: (string | number)[] = [];\n columns.forEach((col, index) => {\n firstRecord.push(col.title as string);\n });\n //像records中添加第一行\n const new_records = [firstRecord, ...table.records];\n table.updateOption(Object.assign({}, table.options, { records: new_records, columns, showHeader: false }), {\n clearColWidthCache: false,\n clearRowHeightCache: false\n });\n table.scenegraph.updateNextFrame();\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
const formula_engine_1 = require("../formula-engine");
|
|
8
|
+
|
|
9
|
+
describe("Formula Case Correction", (() => {
|
|
10
|
+
let engine;
|
|
11
|
+
beforeEach((() => {
|
|
12
|
+
engine = new formula_engine_1.FormulaEngine, engine.addSheet("Sheet1", [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]);
|
|
13
|
+
})), afterEach((() => {
|
|
14
|
+
engine.release();
|
|
15
|
+
})), test("should correct lowercase function names to uppercase", (() => {
|
|
16
|
+
const result = engine.calculateFormula("=sum(a1:c1)");
|
|
17
|
+
expect(result.value).toBe(6), expect(result.error).toBeUndefined();
|
|
18
|
+
})), test("should correct mixed case function names to uppercase", (() => {
|
|
19
|
+
const result = engine.calculateFormula("=SuM(a1:c1)");
|
|
20
|
+
expect(result.value).toBe(6), expect(result.error).toBeUndefined();
|
|
21
|
+
})), test("should correct lowercase cell references to uppercase", (() => {
|
|
22
|
+
const result = engine.calculateFormula("=SUM(f4)");
|
|
23
|
+
expect(result.value).toBe(0), expect(result.error).toBeUndefined();
|
|
24
|
+
})), test("should correct mixed case cell references to uppercase", (() => {
|
|
25
|
+
const result = engine.calculateFormula("=SUM(a1:b2)");
|
|
26
|
+
expect(result.value).toBe(12), expect(result.error).toBeUndefined();
|
|
27
|
+
})), test("should correct complex formula with multiple case issues", (() => {
|
|
28
|
+
const result = engine.calculateFormula("=sum(a1:c1) + average(a2:c2)");
|
|
29
|
+
expect(result.value).toBe(11), expect(result.error).toBeUndefined();
|
|
30
|
+
})), test("should handle nested functions with case issues", (() => {
|
|
31
|
+
const result = engine.calculateFormula("=sum(max(a1:b1), min(a2:b2))");
|
|
32
|
+
expect(result.value).toBe(6), expect(result.error).toBeUndefined();
|
|
33
|
+
})), test("should preserve string literals while correcting case", (() => {
|
|
34
|
+
const result = engine.calculateFormula('=IF(a1>0, "lowercase", "UPPERCASE")');
|
|
35
|
+
expect(result.value).toBe("lowercase"), expect(result.error).toBeUndefined();
|
|
36
|
+
})), test("should correct formula when setting cell content", (() => {
|
|
37
|
+
engine.setCellContent({
|
|
38
|
+
sheet: "Sheet1",
|
|
39
|
+
row: 0,
|
|
40
|
+
col: 3
|
|
41
|
+
}, "=sum(a1:c1)");
|
|
42
|
+
const result = engine.getCellValue({
|
|
43
|
+
sheet: "Sheet1",
|
|
44
|
+
row: 0,
|
|
45
|
+
col: 3
|
|
46
|
+
});
|
|
47
|
+
expect(result.value).toBe(6), expect(result.error).toBeUndefined();
|
|
48
|
+
})), test("should handle single letter column references", (() => {
|
|
49
|
+
const result = engine.calculateFormula("=sum(f1:h1)");
|
|
50
|
+
expect(result.value).toBe(0), expect(result.error).toBeUndefined();
|
|
51
|
+
})), test("should handle multi-letter column references", (() => {
|
|
52
|
+
const result = engine.calculateFormula("=sum(aa1:ab1)");
|
|
53
|
+
expect(result.error).toBeUndefined();
|
|
54
|
+
})), test("should not affect non-formula strings", (() => {
|
|
55
|
+
const result = engine.calculateFormula("just a regular string");
|
|
56
|
+
expect(result.value).toBe("just a regular string"), expect(result.error).toBeUndefined();
|
|
57
|
+
})), test("should handle empty formula", (() => {
|
|
58
|
+
const result = engine.calculateFormula("=");
|
|
59
|
+
expect(result.value).toBe(""), expect(result.error).toBeUndefined();
|
|
60
|
+
})), test("should preserve sheet names while correcting cell references", (() => {
|
|
61
|
+
engine.addSheet("Sheet2", [ [ 10, 20 ], [ 30, 40 ] ]);
|
|
62
|
+
const result = engine.calculateFormula("=sum(sheet2!a1:b1)");
|
|
63
|
+
expect(result.value).toBe(30), expect(result.error).toBeUndefined();
|
|
64
|
+
})), test("should preserve mixed case sheet names", (() => {
|
|
65
|
+
engine.addSheet("MySheet", [ [ 5, 15 ], [ 25, 35 ] ]);
|
|
66
|
+
const result = engine.calculateFormula("=sum(MySheet!a1:b1)");
|
|
67
|
+
expect(result.value).toBe(20), expect(result.error).toBeUndefined();
|
|
68
|
+
}));
|
|
69
|
+
}));
|
|
70
|
+
//# sourceMappingURL=formula-case-correction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/formula/__tests__/formula-case-correction.test.ts"],"names":[],"mappings":"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","file":"formula-case-correction.test.js","sourcesContent":["import { FormulaEngine } from '../formula-engine';\n\ndescribe('Formula Case Correction', () => {\n let engine: FormulaEngine;\n\n beforeEach(() => {\n engine = new FormulaEngine();\n engine.addSheet('Sheet1', [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9]\n ]);\n });\n\n afterEach(() => {\n engine.release();\n });\n\n test('should correct lowercase function names to uppercase', () => {\n const result = engine.calculateFormula('=sum(a1:c1)');\n expect(result.value).toBe(6); // 1+2+3\n expect(result.error).toBeUndefined();\n });\n\n test('should correct mixed case function names to uppercase', () => {\n const result = engine.calculateFormula('=SuM(a1:c1)');\n expect(result.value).toBe(6); // 1+2+3\n expect(result.error).toBeUndefined();\n });\n\n test('should correct lowercase cell references to uppercase', () => {\n const result = engine.calculateFormula('=SUM(f4)');\n // F4 doesn't exist in our test data, so it should return 0\n expect(result.value).toBe(0);\n expect(result.error).toBeUndefined();\n });\n\n test('should correct mixed case cell references to uppercase', () => {\n const result = engine.calculateFormula('=SUM(a1:b2)');\n expect(result.value).toBe(12); // 1+2+4+5\n expect(result.error).toBeUndefined();\n });\n\n test('should correct complex formula with multiple case issues', () => {\n const result = engine.calculateFormula('=sum(a1:c1) + average(a2:c2)');\n expect(result.value).toBe(11); // (1+2+3) + (5) = 6 + 5 = 11\n expect(result.error).toBeUndefined();\n });\n\n test('should handle nested functions with case issues', () => {\n const result = engine.calculateFormula('=sum(max(a1:b1), min(a2:b2))');\n expect(result.value).toBe(6); // max(1,2) + min(4,5) = 2 + 4 = 6 (min of 4,5 is 4)\n expect(result.error).toBeUndefined();\n });\n\n test('should preserve string literals while correcting case', () => {\n const result = engine.calculateFormula('=IF(a1>0, \"lowercase\", \"UPPERCASE\")');\n expect(result.value).toBe('lowercase');\n expect(result.error).toBeUndefined();\n });\n\n test('should correct formula when setting cell content', () => {\n engine.setCellContent({ sheet: 'Sheet1', row: 0, col: 3 }, '=sum(a1:c1)');\n const result = engine.getCellValue({ sheet: 'Sheet1', row: 0, col: 3 });\n expect(result.value).toBe(6); // 1+2+3\n expect(result.error).toBeUndefined();\n });\n\n test('should handle single letter column references', () => {\n const result = engine.calculateFormula('=sum(f1:h1)');\n // F1, G1, H1 don't exist, so should return 0\n expect(result.value).toBe(0);\n expect(result.error).toBeUndefined();\n });\n\n test('should handle multi-letter column references', () => {\n // Test with AA, AB, etc. (though they don't exist in our test data)\n const result = engine.calculateFormula('=sum(aa1:ab1)');\n // The engine might be treating AA1:AB1 as a valid range even if it doesn't exist\n // Let's just verify it doesn't crash and returns some value\n expect(result.error).toBeUndefined();\n });\n\n test('should not affect non-formula strings', () => {\n const result = engine.calculateFormula('just a regular string');\n expect(result.value).toBe('just a regular string');\n expect(result.error).toBeUndefined();\n });\n\n test('should handle empty formula', () => {\n const result = engine.calculateFormula('=');\n // Empty formula should return empty value, not an error\n expect(result.value).toBe('');\n expect(result.error).toBeUndefined();\n });\n\n test('should preserve sheet names while correcting cell references', () => {\n // Add another sheet for testing\n engine.addSheet('Sheet2', [\n [10, 20],\n [30, 40]\n ]);\n\n const result = engine.calculateFormula('=sum(sheet2!a1:b1)');\n expect(result.value).toBe(30); // 10 + 20\n expect(result.error).toBeUndefined();\n });\n\n test('should preserve mixed case sheet names', () => {\n // Add a sheet with mixed case name\n engine.addSheet('MySheet', [\n [5, 15],\n [25, 35]\n ]);\n\n const result = engine.calculateFormula('=sum(MySheet!a1:b1)');\n expect(result.value).toBe(20); // 5 + 15\n expect(result.error).toBeUndefined();\n });\n});\n"]}
|
|
@@ -24,8 +24,12 @@ export declare class FormulaEngine {
|
|
|
24
24
|
setActiveSheet(sheetKey: string): void;
|
|
25
25
|
getActiveSheet(): string | null;
|
|
26
26
|
addSheet(sheetKey: string, data?: unknown[][]): number;
|
|
27
|
+
updateSheetData(sheetKey: string, data: unknown[][]): void;
|
|
27
28
|
private normalizeData;
|
|
28
29
|
getSheetId(sheetKey: string): number;
|
|
30
|
+
getFormulaString(cell: FormulaCell): string | null;
|
|
31
|
+
private clearDependencies;
|
|
32
|
+
private setCellContentWithoutDependencyUpdate;
|
|
29
33
|
setCellContent(cell: FormulaCell, value: unknown): void;
|
|
30
34
|
private getCellKey;
|
|
31
35
|
private getA1Notation;
|
|
@@ -35,6 +39,8 @@ export declare class FormulaEngine {
|
|
|
35
39
|
value: unknown;
|
|
36
40
|
error?: string;
|
|
37
41
|
};
|
|
42
|
+
private correctFormulaCase;
|
|
43
|
+
private findOriginalSheetName;
|
|
38
44
|
private parseExpression;
|
|
39
45
|
private tryParseComparison;
|
|
40
46
|
private parseArithmetic;
|
|
@@ -65,7 +71,6 @@ export declare class FormulaEngine {
|
|
|
65
71
|
private flattenArgsWithRanges;
|
|
66
72
|
private isTruthy;
|
|
67
73
|
private evaluateArithmeticWithFunctions;
|
|
68
|
-
private evaluateBasicArithmetic;
|
|
69
74
|
private getCellValueByA1;
|
|
70
75
|
private getRangeValuesFromExpr;
|
|
71
76
|
getCellValue(cell: FormulaCell): FormulaResult;
|
|
@@ -99,4 +104,23 @@ export declare class FormulaEngine {
|
|
|
99
104
|
private recalculateDependentsWithTracking;
|
|
100
105
|
private recalculateSingleCellWithTracking;
|
|
101
106
|
private sortCellsByDependency;
|
|
107
|
+
adjustFormulaReferences(sheetKey: string, type: 'insert' | 'delete', dimension: 'row' | 'column', index: number, count: number, totalColCount: number, totalRowCount: number): {
|
|
108
|
+
adjustedCells: FormulaCell[];
|
|
109
|
+
movedCells: FormulaCell[];
|
|
110
|
+
};
|
|
111
|
+
private adjustFormulaReference;
|
|
112
|
+
private columnLettersToIndex;
|
|
113
|
+
private indexToColumnLetters;
|
|
114
|
+
private rangeContainsDeletedCells;
|
|
115
|
+
private adjustRangeForDeletion;
|
|
116
|
+
adjustFormulaReferencesForColumnMove(sheetKey: string, sourceCol: number, targetCol: number, totalColCount: number, totalRowCount: number): {
|
|
117
|
+
adjustedCells: FormulaCell[];
|
|
118
|
+
movedCells: FormulaCell[];
|
|
119
|
+
};
|
|
120
|
+
private adjustFormulaWithColumnMapping;
|
|
121
|
+
adjustFormulaReferencesForRowMove(sheetKey: string, sourceRow: number, targetRow: number): {
|
|
122
|
+
adjustedCells: FormulaCell[];
|
|
123
|
+
movedCells: FormulaCell[];
|
|
124
|
+
};
|
|
125
|
+
private adjustFormulaWithRowMapping;
|
|
102
126
|
}
|