@visactor/vtable-sheet 1.23.1-alpha.2 → 1.23.2

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.
Files changed (75) hide show
  1. package/cjs/components/sheet-tab-event-handler.js +3 -2
  2. package/cjs/components/sheet-tab-event-handler.js.map +1 -1
  3. package/cjs/components/vtable-sheet.d.ts +4 -1
  4. package/cjs/components/vtable-sheet.js +115 -17
  5. package/cjs/components/vtable-sheet.js.map +1 -1
  6. package/cjs/core/WorkSheet.d.ts +3 -1
  7. package/cjs/core/WorkSheet.js +45 -21
  8. package/cjs/core/WorkSheet.js.map +1 -1
  9. package/cjs/core/table-plugins.d.ts +5 -0
  10. package/cjs/core/table-plugins.js +10 -9
  11. package/cjs/core/table-plugins.js.map +1 -1
  12. package/cjs/event/table-event-relay.js +1 -0
  13. package/cjs/event/table-event-relay.js.map +1 -1
  14. package/cjs/formula/formula-engine.js +0 -1
  15. package/cjs/formula/formula-engine.js.map +1 -1
  16. package/cjs/index.d.ts +3 -3
  17. package/cjs/index.js +1 -1
  18. package/cjs/index.js.map +1 -1
  19. package/cjs/managers/formula-manager.d.ts +3 -1
  20. package/cjs/managers/formula-manager.js +39 -15
  21. package/cjs/managers/formula-manager.js.map +1 -1
  22. package/cjs/managers/menu-manager.d.ts +2 -0
  23. package/cjs/managers/menu-manager.js +3 -0
  24. package/cjs/managers/menu-manager.js.map +1 -1
  25. package/cjs/managers/sheet-manager.d.ts +1 -0
  26. package/cjs/managers/sheet-manager.js +7 -0
  27. package/cjs/managers/sheet-manager.js.map +1 -1
  28. package/cjs/managers/tab-drag-manager.d.ts +2 -2
  29. package/cjs/managers/tab-drag-manager.js.map +1 -1
  30. package/cjs/sheet-helper.d.ts +2 -0
  31. package/cjs/sheet-helper.js +15 -3
  32. package/cjs/sheet-helper.js.map +1 -1
  33. package/cjs/ts-types/index.d.ts +2 -1
  34. package/cjs/ts-types/index.js.map +1 -1
  35. package/cjs/ts-types/sheet.d.ts +12 -7
  36. package/cjs/ts-types/sheet.js.map +1 -1
  37. package/dist/vtable-sheet.js +867 -225
  38. package/dist/vtable-sheet.min.js +1 -1
  39. package/es/components/sheet-tab-event-handler.js +3 -2
  40. package/es/components/sheet-tab-event-handler.js.map +1 -1
  41. package/es/components/vtable-sheet.d.ts +4 -1
  42. package/es/components/vtable-sheet.js +117 -16
  43. package/es/components/vtable-sheet.js.map +1 -1
  44. package/es/core/WorkSheet.d.ts +3 -1
  45. package/es/core/WorkSheet.js +44 -21
  46. package/es/core/WorkSheet.js.map +1 -1
  47. package/es/core/table-plugins.d.ts +5 -0
  48. package/es/core/table-plugins.js +8 -7
  49. package/es/core/table-plugins.js.map +1 -1
  50. package/es/event/table-event-relay.js +1 -0
  51. package/es/event/table-event-relay.js.map +1 -1
  52. package/es/formula/formula-engine.js +0 -1
  53. package/es/formula/formula-engine.js.map +1 -1
  54. package/es/index.d.ts +3 -3
  55. package/es/index.js +1 -1
  56. package/es/index.js.map +1 -1
  57. package/es/managers/formula-manager.d.ts +3 -1
  58. package/es/managers/formula-manager.js +39 -15
  59. package/es/managers/formula-manager.js.map +1 -1
  60. package/es/managers/menu-manager.d.ts +2 -0
  61. package/es/managers/menu-manager.js +3 -0
  62. package/es/managers/menu-manager.js.map +1 -1
  63. package/es/managers/sheet-manager.d.ts +1 -0
  64. package/es/managers/sheet-manager.js +7 -0
  65. package/es/managers/sheet-manager.js.map +1 -1
  66. package/es/managers/tab-drag-manager.d.ts +2 -2
  67. package/es/managers/tab-drag-manager.js.map +1 -1
  68. package/es/sheet-helper.d.ts +2 -0
  69. package/es/sheet-helper.js +11 -0
  70. package/es/sheet-helper.js.map +1 -1
  71. package/es/ts-types/index.d.ts +2 -1
  72. package/es/ts-types/index.js.map +1 -1
  73. package/es/ts-types/sheet.d.ts +12 -7
  74. package/es/ts-types/sheet.js.map +1 -1
  75. package/package.json +8 -7
@@ -1 +1 @@
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 } from '@visactor/vutils';\nimport type {\n IWorkSheetOptions,\n IWorkSheetAPI,\n CellCoord,\n CellRange,\n CellValue,\n IFormulaManagerOptions\n} from '../ts-types';\nimport type { TYPES, VTableSheet } from '..';\nimport { isPropertyWritable } from '../tools';\nimport { VTableThemes } from '../ts-types';\nimport { FormulaPasteProcessor } from '../formula/formula-paste-processor';\nimport { WorkSheetEventManager } from '../event/worksheet-event-manager';\nimport type { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';\nimport type { IWorksheetEventSource } from '../event/event-interfaces';\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 implements IWorkSheetAPI, IWorksheetEventSource {\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: VTableSheetEventBus;\n\n /** WorkSheet 事件管理器 */\n eventManager: WorkSheetEventManager;\n\n private vtableSheet: VTableSheet;\n\n editingCell: { sheet: string; row: number; col: number } | null = null;\n\n /**\n * 获取 Sheet Key\n */\n get sheetKey(): string {\n return this._sheetKey;\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): VTableSheetEventBus {\n if (!this.eventBus) {\n // If eventBus is not initialized yet, return the parent VTableSheet's event bus\n return this.vtableSheet.getEventBus();\n }\n return this.eventBus;\n }\n\n /**\n * 获取 Sheet 标题\n */\n get sheetTitle(): string {\n return this._sheetTitle;\n }\n\n /**\n * 设置 Sheet 标题\n */\n set sheetTitle(title: string) {\n this._sheetTitle = title;\n }\n\n constructor(sheet: VTableSheet, options: IWorkSheetOptions) {\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 return this.getRowCount();\n }\n\n /**\n * 获取列数\n */\n get colCount(): number {\n return this.getColumnCount();\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.vtableSheet.getEventBus();\n\n // 初始化 WorkSheet 事件管理器\n this.eventManager = new WorkSheetEventManager(this);\n // 在 tableInstance 上设置 VTableSheet 引用,方便插件访问\n (this.tableInstance as any).__vtableSheet = this.vtableSheet;\n\n // 通知 VTableSheet 的事件中转器绑定这个 sheet 的事件\n (this.vtableSheet as any).tableEventRelay.bindSheetEvents(this.sheetKey, this.tableInstance);\n\n // 触发工作表准备就绪事件\n if (this.eventManager) {\n // this.eventManager.emitReady();\n // 触发数据加载完成事件\n this.eventManager.emitDataLoaded(this.rowCount, this.colCount);\n }\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 this.options.columns[i].key = i as any;\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 key: i as any,\n title: data[0][i],\n filter: !!this.options.filter\n };\n }\n }\n data.shift();\n isShowTableHeader = true;\n }\n\n const keyboardOptions = {\n ...this.options.keyboardOptions,\n copySelected: true,\n getCopyCellValue: {\n html: this.getCellValueConsiderFormula.bind(this)\n },\n processFormulaBeforePaste: this.processFormulaPaste.bind(this),\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 if (this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n return;\n }\n\n // 重置公式栏显示标志,让公式栏显示选中单元格的值\n const formulaUIManager = this.vtableSheet.formulaUIManager;\n formulaUIManager.isFormulaBarShowingResult = false;\n formulaUIManager.clearFormula();\n formulaUIManager.updateFormulaBar();\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 this.vtableSheet.formulaManager.formulaRangeSelector.handleSelectionChangedForRangeMode();\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 this.vtableSheet.formulaManager.formulaRangeSelector.handleSelectionChangedForRangeMode();\n }\n\n /**\n * 处理单元格值变更事件\n * @param event 值变更事件\n */\n private handleCellValueChanged(event: any): void {\n this.vtableSheet.formulaManager.formulaRangeSelector.handleCellValueChanged(event);\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(\n sheetKey,\n recordIndex + this.tableInstance.columnHeaderLevelCount,\n recordCount\n );\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 // 与删除范围有重叠(startRow <= deleteEndIndex && endRow >= minIndex):\n // 起始行在删除范围内:移到 minIndex\n // 起始行在删除范围之前:保持不变\n // 结束行在删除范围内:移到 minIndex - 1\n // 结束行在删除范围之后:减去 deletedCount\n // 完全在删除范围之后(startRow > deleteEndIndex):起始行和结束行都减去 deletedCount\n if (Array.isArray(this.tableInstance.options.customMergeCell)) {\n const mergeCellsToRemove: number[] = [];\n const deleteEndIndex = minIndex + deletedCount - 1;\n const customMergeCellArray = this.tableInstance.options.customMergeCell;\n // 需要clone一份mergeCellArray,因为后续会修改mergeCellArray\n const cloneMergeCellArray = customMergeCellArray.map(mergeCell => ({\n ...mergeCell,\n range: {\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }\n }));\n customMergeCellArray.forEach((mergeCell, index) => {\n const startRow = mergeCell.range.start.row;\n const endRow = mergeCell.range.end.row;\n\n // 如果合并单元格完全在删除范围内,标记为删除\n if (startRow >= minIndex && endRow <= deleteEndIndex) {\n mergeCellsToRemove.push(index);\n return;\n }\n\n // 如果合并单元格与删除范围有重叠\n if (startRow <= deleteEndIndex && endRow >= minIndex) {\n // 如果起始行在删除范围内,将起始行移到删除范围的起始位置(删除后这个位置不存在,所以移到 minIndex)\n if (startRow >= minIndex) {\n mergeCell.range.start.row = minIndex;\n }\n // 如果起始行在删除范围之前,不需要调整(保持不变)\n\n // 如果结束行在删除范围内,将结束行移到删除范围之前\n if (endRow <= deleteEndIndex) {\n mergeCell.range.end.row = minIndex - 1;\n } else {\n // 结束行在删除范围之后,需要减去删除的行数\n mergeCell.range.end.row -= deletedCount;\n }\n\n // 如果调整后起始行大于结束行,标记为删除\n if (mergeCell.range.start.row > mergeCell.range.end.row) {\n mergeCellsToRemove.push(index);\n }\n }\n // 如果合并单元格完全在删除范围之后,只需要向前移动行索引\n else if (startRow > deleteEndIndex) {\n mergeCell.range.start.row -= deletedCount;\n mergeCell.range.end.row -= deletedCount;\n }\n });\n\n // 从后往前删除,避免索引变化影响\n mergeCellsToRemove\n .sort((a, b) => b - a)\n .forEach(index => {\n customMergeCellArray.splice(index, 1);\n });\n const updateRanges = cloneMergeCellArray.map(mergeCell => ({\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }));\n (this.tableInstance as any).updateCellContentRange(updateRanges);\n }\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 // 与删除范围有重叠(startCol <= deleteEndIndex && endCol >= minIndex):\n // 起始列在删除范围内:移到 minIndex\n // 起始列在删除范围之前:保持不变\n // 结束列在删除范围内:移到 minIndex - 1\n // 结束列在删除范围之后:减去 deletedCount\n // 完全在删除范围之后(startCol > deleteEndIndex):起始列和结束列都减去 deletedCount\n if (Array.isArray(this.tableInstance.options.customMergeCell)) {\n const mergeCellsToRemove: number[] = [];\n const deleteEndIndex = minIndex + deletedCount - 1;\n const customMergeCellArray = this.tableInstance.options.customMergeCell;\n // 需要clone一份mergeCellArray,因为后续会修改mergeCellArray\n const cloneMergeCellArray = customMergeCellArray.map(mergeCell => ({\n ...mergeCell,\n range: {\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }\n }));\n customMergeCellArray.forEach((mergeCell, index) => {\n const startCol = mergeCell.range.start.col;\n const endCol = mergeCell.range.end.col;\n\n // 如果合并单元格完全在删除范围内,标记为删除\n if (startCol >= minIndex && endCol <= deleteEndIndex) {\n mergeCellsToRemove.push(index);\n return;\n }\n\n // 如果合并单元格与删除范围有重叠\n if (startCol <= deleteEndIndex && endCol >= minIndex) {\n // 如果起始列在删除范围内,将起始列移到删除范围的起始位置(删除后这个位置不存在,所以移到 minIndex)\n if (startCol >= minIndex) {\n mergeCell.range.start.col = minIndex;\n }\n // 如果起始列在删除范围之前,不需要调整(保持不变)\n\n // 如果结束列在删除范围内,将结束列移到删除范围之前\n if (endCol <= deleteEndIndex) {\n mergeCell.range.end.col = minIndex - 1;\n } else {\n // 结束列在删除范围之后,需要减去删除的列数\n mergeCell.range.end.col -= deletedCount;\n }\n\n // 如果调整后起始列大于结束列,标记为删除\n if (mergeCell.range.start.col > mergeCell.range.end.col) {\n mergeCellsToRemove.push(index);\n }\n }\n // 如果合并单元格完全在删除范围之后,只需要向前移动列索引\n else if (startCol > deleteEndIndex) {\n mergeCell.range.start.col -= deletedCount;\n mergeCell.range.end.col -= deletedCount;\n }\n });\n\n // 从后往前删除,避免索引变化影响\n mergeCellsToRemove\n .sort((a, b) => b - a)\n .forEach(index => {\n customMergeCellArray.splice(index, 1);\n });\n\n const updateRanges = cloneMergeCellArray.map(mergeCell => ({\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }));\n (this.tableInstance as any).updateCellContentRange(updateRanges);\n }\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 } = source;\n const { col: targetCol } = 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 // 用于防止短时间内多次调用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 // // 触发工作表尺寸改变事件\n // if (this.eventManager) {\n // this.eventManager.emitResized(width, height);\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 col 列索引\n * @param row 行索引\n */\n getCellValue(col: number, row: 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 * @param col 列索引\n * @param row 行索引\n */\n getCellValueConsiderFormula(col: number, row: number): any {\n if (this.tableInstance) {\n try {\n if (\n this.vtableSheet.formulaManager.isCellFormula({\n sheet: this.getKey(),\n row,\n col\n })\n ) {\n return this.vtableSheet.formulaManager.getCellFormula({\n sheet: this.getKey(),\n row,\n col\n });\n }\n return this.getCellValue(col, row);\n } catch (error) {\n console.warn('Failed to get cell value from VTable:', error);\n }\n return null;\n }\n }\n\n /**\n * 设置指定坐标的单元格值\n * @param col 列索引\n * @param row 行索引\n * @param value 新值\n */\n setCellValue(col: number, row: number, value: any): void {\n const data = this.getData();\n if (data && data[row]) {\n data[row][col] = value;\n\n // 更新表格实例\n if (this.tableInstance) {\n this.tableInstance.changeCellValue(col, row, value);\n }\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.col, coord.row)\n };\n }\n\n /**\n * 将行/列坐标转换为A1格式\n * @param coord 坐标\n */\n addressFromCoord(coord: CellCoord): string;\n addressFromCoord(col: number, row: number): string;\n addressFromCoord(coordOrCol: CellCoord | number, row?: number): string {\n let col: number;\n let rowNum: number;\n\n if (typeof coordOrCol === 'object') {\n col = coordOrCol.col;\n rowNum = coordOrCol.row;\n } else {\n col = coordOrCol;\n rowNum = row!;\n }\n\n let colStr = '';\n let tempCol = col + 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}${rowNum + 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 * @param formulas 要粘贴的公式数组\n * @param sourceStartCol 源起始列\n * @param sourceStartRow 源起始行\n * @param targetStartCol 目标起始列\n * @param targetStartRow 目标起始行\n */\n processFormulaPaste(\n formulas: string[][],\n sourceStartCol: number,\n _sourceStartRow: number,\n targetStartCol: number,\n _targetStartRow: number\n ): string[][] {\n if (!formulas || formulas.length === 0) {\n return formulas;\n }\n\n // 计算整个范围的相对位移\n const colOffset = targetStartCol - sourceStartCol;\n const rowOffset = _targetStartRow - _sourceStartRow;\n\n // 使用计算出的位移来调整公式\n return FormulaPasteProcessor.adjustFormulasForPasteWithOffset(formulas, colOffset, rowOffset);\n }\n\n /**\n * 获取复制数据,包括公式处理\n */\n getCopyData(): (string | number)[][] {\n const selections = this.getMultipleSelections();\n if (selections.length === 0) {\n return [];\n }\n\n const data = this.getData();\n const result: string[][] = [];\n\n // 获取第一个选择范围\n const selection = selections[0];\n const rows = selection.endRow - selection.startRow + 1;\n const cols = selection.endCol - selection.startCol + 1;\n\n for (let row = 0; row < rows; row++) {\n const rowData: string[] = [];\n for (let col = 0; col < cols; col++) {\n const actualRow = selection.startRow + row;\n const actualCol = selection.startCol + col;\n\n if (data[actualRow] && data[actualRow][actualCol] !== undefined) {\n // 如果是公式,返回公式字符串;否则返回值\n if (\n this.vtableSheet.formulaManager.isCellFormula({\n sheet: this.getKey(),\n row: actualRow,\n col: actualCol\n })\n ) {\n const formula = this.vtableSheet.formulaManager.getCellFormula({\n sheet: this.getKey(),\n row: actualRow,\n col: actualCol\n });\n rowData.push(formula);\n } else {\n rowData.push(data[actualRow][actualCol]);\n }\n } else {\n rowData.push('');\n }\n }\n result.push(rowData);\n }\n\n return result;\n }\n\n /**\n * 粘贴数据,包括公式处理\n */\n pasteData(data: string[][], targetStartCol: number, targetStartRow: number): void {\n if (!data || data.length === 0) {\n return;\n }\n\n const selections = this.getMultipleSelections();\n if (selections.length === 0) {\n return;\n }\n\n // 获取源数据范围(从当前选择范围推断)\n const sourceSelection = selections[0];\n const sourceStartCol = sourceSelection.startCol;\n const sourceStartRow = sourceSelection.startRow;\n\n // 处理公式粘贴\n const processedData = this.processFormulaPaste(\n data,\n sourceStartCol,\n sourceStartRow,\n targetStartCol,\n targetStartRow\n );\n\n // 应用处理后的数据\n const dataArray = this.getData();\n for (let row = 0; row < processedData.length; row++) {\n for (let col = 0; col < processedData[row].length; col++) {\n const targetRow = targetStartRow + row;\n const targetCol = targetStartCol + col;\n\n if (targetRow < dataArray.length && targetCol < dataArray[targetRow].length) {\n const value = processedData[row][col];\n\n // 如果是公式,设置公式;否则设置普通值\n if (FormulaPasteProcessor.needsFormulaAdjustment(value)) {\n this.setCellFormula(targetRow, targetCol, value as string);\n } else {\n this.setCellValue(targetRow, targetCol, value);\n }\n }\n }\n }\n }\n\n /**\n * 设置单元格公式\n */\n setCellFormula(row: number, col: number, formula: string): void {\n if (this.vtableSheet.formulaManager) {\n this.vtableSheet.formulaManager.setCellContent(\n {\n sheet: this.getKey(),\n row,\n col\n },\n formula\n );\n\n // 事件触发移到 formula-manager 中处理,这里不再触发\n // 这样可以确保事件在正确的时机触发,并且只在操作成功时触发\n }\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // 清理事件监听器\n if (this.tableInstance) {\n (this.vtableSheet as any).tableEventRelay.unbindSheetEvents(this.sheetKey, this.tableInstance);\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 } from '@visactor/vutils';\nimport type {\n IWorkSheetOptions,\n IWorkSheetAPI,\n CellCoord,\n CellRange,\n CellValue,\n IFormulaManagerOptions,\n IThemeDefine,\n IFilterConfig,\n IFilterState,\n ISheetDefine,\n IVTableSheetUpdateOptions\n} from '../ts-types';\nimport type { TYPES, VTableSheet } from '..';\nimport { isPropertyWritable } from '../tools';\nimport { VTableThemes } from '../ts-types';\nimport { FormulaPasteProcessor } from '../formula/formula-paste-processor';\nimport { WorkSheetEventManager } from '../event/worksheet-event-manager';\nimport type { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';\nimport type { IWorksheetEventSource } from '../event/event-interfaces';\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\n/**\n * WorkSheet 增量更新配置项\n *\n * 仅涵盖与布局和交互相关的常用配置,不包含 records/columns 等结构性配置。\n */\ntype WorkSheetUpdateOptions = Pick<\n IVTableSheetUpdateOptions,\n 'defaultRowHeight' | 'defaultColWidth' | 'dragOrder' | 'VTablePluginModules'\n> & {\n theme?: TYPES.VTableThemes.ITableThemeDefine;\n};\n\nexport class WorkSheet implements IWorkSheetAPI, IWorksheetEventSource {\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: VTableSheetEventBus;\n\n /** WorkSheet 事件管理器 */\n eventManager: WorkSheetEventManager;\n\n private vtableSheet: VTableSheet;\n\n editingCell: { sheet: string; row: number; col: number } | null = null;\n\n /**\n * 获取 Sheet Key\n */\n get sheetKey(): string {\n return this._sheetKey;\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): VTableSheetEventBus {\n if (!this.eventBus) {\n // If eventBus is not initialized yet, return the parent VTableSheet's event bus\n return this.vtableSheet.getEventBus();\n }\n return this.eventBus;\n }\n\n /**\n * 获取 Sheet 标题\n */\n get sheetTitle(): string {\n return this._sheetTitle;\n }\n\n /**\n * 设置 Sheet 标题\n */\n set sheetTitle(title: string) {\n this._sheetTitle = title;\n }\n\n constructor(sheet: VTableSheet, options: IWorkSheetOptions) {\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 return this.getRowCount();\n }\n\n /**\n * 获取列数\n */\n get colCount(): number {\n return this.getColumnCount();\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.vtableSheet.getEventBus();\n\n // 初始化 WorkSheet 事件管理器\n this.eventManager = new WorkSheetEventManager(this);\n // 在 tableInstance 上设置 VTableSheet 引用,方便插件访问\n (this.tableInstance as any).__vtableSheet = this.vtableSheet;\n\n // 通知 VTableSheet 的事件中转器绑定这个 sheet 的事件\n (this.vtableSheet as any).tableEventRelay.bindSheetEvents(this.sheetKey, this.tableInstance);\n\n // 触发工作表准备就绪事件\n if (this.eventManager) {\n // this.eventManager.emitReady();\n // 触发数据加载完成事件\n this.eventManager.emitDataLoaded(this.rowCount, this.colCount);\n }\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 this.options.columns[i].key = i as any;\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 key: i as any,\n title: data[0][i],\n filter: !!this.options.filter\n };\n }\n }\n data.shift();\n isShowTableHeader = true;\n }\n\n const keyboardOptions = {\n ...this.options.keyboardOptions,\n copySelected: true,\n getCopyCellValue: {\n html: this.getCellValueConsiderFormula.bind(this)\n },\n processFormulaBeforePaste: this.processFormulaPaste.bind(this),\n pasteValueToCell: true,\n showCopyCellBorder: true,\n cutSelected: true\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: this._adjustTheme(this.options.theme),\n excelOptions: {\n fillHandle: true\n },\n customConfig: {\n selectCellWhenCellEditorNotExists: true\n }\n // maintainedColumnCount: 120\n // 其他特定配置\n };\n }\n\n _adjustTheme(theme: TYPES.VTableThemes.ITableThemeDefine): TYPES.VTableThemes.ITableThemeDefine {\n //更改theme 的frameStyle\n let changedTheme: TYPES.VTableThemes.ITableThemeDefine;\n if (!theme) {\n this.options.theme = VTableThemes.DEFAULT;\n } else {\n this.options.theme = theme;\n }\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 changedTheme;\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 if (this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n return;\n }\n\n // 重置公式栏显示标志,让公式栏显示选中单元格的值\n const formulaUIManager = this.vtableSheet.formulaUIManager;\n formulaUIManager.isFormulaBarShowingResult = false;\n formulaUIManager.clearFormula();\n formulaUIManager.updateFormulaBar();\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 this.vtableSheet.formulaManager.formulaRangeSelector.handleSelectionChangedForRangeMode();\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 this.vtableSheet.formulaManager.formulaRangeSelector.handleSelectionChangedForRangeMode();\n }\n\n /**\n * 处理单元格值变更事件\n * @param event 值变更事件\n */\n private handleCellValueChanged(event: any): void {\n this.vtableSheet.formulaManager.formulaRangeSelector.handleCellValueChanged(event);\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(\n sheetKey,\n recordIndex + this.tableInstance.columnHeaderLevelCount,\n recordCount\n );\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 // 与删除范围有重叠(startRow <= deleteEndIndex && endRow >= minIndex):\n // 起始行在删除范围内:移到 minIndex\n // 起始行在删除范围之前:保持不变\n // 结束行在删除范围内:移到 minIndex - 1\n // 结束行在删除范围之后:减去 deletedCount\n // 完全在删除范围之后(startRow > deleteEndIndex):起始行和结束行都减去 deletedCount\n if (Array.isArray(this.tableInstance.options.customMergeCell)) {\n const mergeCellsToRemove: number[] = [];\n const deleteEndIndex = minIndex + deletedCount - 1;\n const customMergeCellArray = this.tableInstance.options.customMergeCell;\n // 需要clone一份mergeCellArray,因为后续会修改mergeCellArray\n const cloneMergeCellArray = customMergeCellArray.map(mergeCell => ({\n ...mergeCell,\n range: {\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }\n }));\n customMergeCellArray.forEach((mergeCell, index) => {\n const startRow = mergeCell.range.start.row;\n const endRow = mergeCell.range.end.row;\n\n // 如果合并单元格完全在删除范围内,标记为删除\n if (startRow >= minIndex && endRow <= deleteEndIndex) {\n mergeCellsToRemove.push(index);\n return;\n }\n\n // 如果合并单元格与删除范围有重叠\n if (startRow <= deleteEndIndex && endRow >= minIndex) {\n // 如果起始行在删除范围内,将起始行移到删除范围的起始位置(删除后这个位置不存在,所以移到 minIndex)\n if (startRow >= minIndex) {\n mergeCell.range.start.row = minIndex;\n }\n // 如果起始行在删除范围之前,不需要调整(保持不变)\n\n // 如果结束行在删除范围内,将结束行移到删除范围之前\n if (endRow <= deleteEndIndex) {\n mergeCell.range.end.row = minIndex - 1;\n } else {\n // 结束行在删除范围之后,需要减去删除的行数\n mergeCell.range.end.row -= deletedCount;\n }\n\n // 如果调整后起始行大于结束行,标记为删除\n if (mergeCell.range.start.row > mergeCell.range.end.row) {\n mergeCellsToRemove.push(index);\n }\n }\n // 如果合并单元格完全在删除范围之后,只需要向前移动行索引\n else if (startRow > deleteEndIndex) {\n mergeCell.range.start.row -= deletedCount;\n mergeCell.range.end.row -= deletedCount;\n }\n });\n\n // 从后往前删除,避免索引变化影响\n mergeCellsToRemove\n .sort((a, b) => b - a)\n .forEach(index => {\n customMergeCellArray.splice(index, 1);\n });\n const updateRanges = cloneMergeCellArray.map(mergeCell => ({\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }));\n (this.tableInstance as any).updateCellContentRange(updateRanges);\n }\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 // 与删除范围有重叠(startCol <= deleteEndIndex && endCol >= minIndex):\n // 起始列在删除范围内:移到 minIndex\n // 起始列在删除范围之前:保持不变\n // 结束列在删除范围内:移到 minIndex - 1\n // 结束列在删除范围之后:减去 deletedCount\n // 完全在删除范围之后(startCol > deleteEndIndex):起始列和结束列都减去 deletedCount\n if (Array.isArray(this.tableInstance.options.customMergeCell)) {\n const mergeCellsToRemove: number[] = [];\n const deleteEndIndex = minIndex + deletedCount - 1;\n const customMergeCellArray = this.tableInstance.options.customMergeCell;\n // 需要clone一份mergeCellArray,因为后续会修改mergeCellArray\n const cloneMergeCellArray = customMergeCellArray.map(mergeCell => ({\n ...mergeCell,\n range: {\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }\n }));\n customMergeCellArray.forEach((mergeCell, index) => {\n const startCol = mergeCell.range.start.col;\n const endCol = mergeCell.range.end.col;\n\n // 如果合并单元格完全在删除范围内,标记为删除\n if (startCol >= minIndex && endCol <= deleteEndIndex) {\n mergeCellsToRemove.push(index);\n return;\n }\n\n // 如果合并单元格与删除范围有重叠\n if (startCol <= deleteEndIndex && endCol >= minIndex) {\n // 如果起始列在删除范围内,将起始列移到删除范围的起始位置(删除后这个位置不存在,所以移到 minIndex)\n if (startCol >= minIndex) {\n mergeCell.range.start.col = minIndex;\n }\n // 如果起始列在删除范围之前,不需要调整(保持不变)\n\n // 如果结束列在删除范围内,将结束列移到删除范围之前\n if (endCol <= deleteEndIndex) {\n mergeCell.range.end.col = minIndex - 1;\n } else {\n // 结束列在删除范围之后,需要减去删除的列数\n mergeCell.range.end.col -= deletedCount;\n }\n\n // 如果调整后起始列大于结束列,标记为删除\n if (mergeCell.range.start.col > mergeCell.range.end.col) {\n mergeCellsToRemove.push(index);\n }\n }\n // 如果合并单元格完全在删除范围之后,只需要向前移动列索引\n else if (startCol > deleteEndIndex) {\n mergeCell.range.start.col -= deletedCount;\n mergeCell.range.end.col -= deletedCount;\n }\n });\n\n // 从后往前删除,避免索引变化影响\n mergeCellsToRemove\n .sort((a, b) => b - a)\n .forEach(index => {\n customMergeCellArray.splice(index, 1);\n });\n\n const updateRanges = cloneMergeCellArray.map(mergeCell => ({\n start: { ...mergeCell.range.start },\n end: { ...mergeCell.range.end }\n }));\n (this.tableInstance as any).updateCellContentRange(updateRanges);\n }\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 } = source;\n const { col: targetCol } = 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 // 用于防止短时间内多次调用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 // // 触发工作表尺寸改变事件\n // if (this.eventManager) {\n // this.eventManager.emitResized(width, height);\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 col 列索引\n * @param row 行索引\n */\n getCellValue(col: number, row: 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 * @param col 列索引\n * @param row 行索引\n */\n getCellValueConsiderFormula(col: number, row: number): any {\n if (this.tableInstance) {\n try {\n if (\n this.vtableSheet.formulaManager.isCellFormula({\n sheet: this.getKey(),\n row,\n col\n })\n ) {\n return this.vtableSheet.formulaManager.getCellFormula({\n sheet: this.getKey(),\n row,\n col\n });\n }\n return this.getCellValue(col, row);\n } catch (error) {\n console.warn('Failed to get cell value from VTable:', error);\n }\n return null;\n }\n }\n\n /**\n * 设置指定坐标的单元格值\n * @param col 列索引\n * @param row 行索引\n * @param value 新值\n */\n setCellValue(col: number, row: number, value: any): void {\n const data = this.getData();\n if (data && data[row]) {\n data[row][col] = value;\n\n // 更新表格实例\n if (this.tableInstance) {\n this.tableInstance.changeCellValue(col, row, value);\n }\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.col, coord.row)\n };\n }\n\n /**\n * 将行/列坐标转换为A1格式\n * @param coord 坐标\n */\n addressFromCoord(coord: CellCoord): string;\n addressFromCoord(col: number, row: number): string;\n addressFromCoord(coordOrCol: CellCoord | number, row?: number): string {\n let col: number;\n let rowNum: number;\n\n if (typeof coordOrCol === 'object') {\n col = coordOrCol.col;\n rowNum = coordOrCol.row;\n } else {\n col = coordOrCol;\n if (row === undefined) {\n throw new Error('row is required when coordOrCol is a number');\n }\n rowNum = row;\n }\n\n let colStr = '';\n let tempCol = col + 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}${rowNum + 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 // Sheet 的 dragOrder 与 VTable ListTableConstructorOptions 的 dragOrder 类型不兼容,此处显式传入 VTable 所需格式\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- 仅用于从展开中排除,不传入 updateOption\n const { dragOrder: _omitSheetDragOrder, ...optionsRest } = this.options;\n this.tableInstance.updateOption({\n ...optionsRest,\n dragOrder: { maintainArrayDataOrder: true },\n columns: this.options.columns as any as ColumnsDefine,\n showHeader: true,\n records: data\n });\n }\n updateSheetOption(sheetOption: IWorkSheetOptions): void {\n this.options = {\n ...this.options,\n ...sheetOption\n };\n const tableOptions = this._generateTableOptions();\n this.tableInstance.updateOption(tableOptions);\n }\n // /**\n // * 增量更新当前工作表配置,并映射到底层 VTable 的细粒度 API。\n // *\n // * 该方法只负责从全局配置提取需要更新到工作表的配置,不是sheets中的sheetDefine的配置更新的情况。\n // */\n // updateGlobalOptionToSheet(option: WorkSheetUpdateOptions): void {\n // if (!this.tableInstance || !option) {\n // return;\n // }\n\n // const table = this.tableInstance;\n // const nextOptionPatch: Partial<ListTableConstructorOptions> = {};\n // // 主题(优先使用 updateTheme,而不是全量 updateOption)\n // if (option.theme) {\n // const tableTheme = option.theme;\n // if (tableTheme) {\n // this.options.theme = tableTheme;\n // nextOptionPatch.theme = this._adjustTheme(tableTheme);\n // }\n // }\n\n // // 默认行高/列宽(通过属性设置,并在最后触发一次重建渲染)\n // if (option.defaultRowHeight !== undefined) {\n // nextOptionPatch.defaultRowHeight = option.defaultRowHeight;\n // }\n // if (option.defaultColWidth !== undefined) {\n // nextOptionPatch.defaultColWidth = option.defaultColWidth;\n // }\n // // 如果需要通过 updateOption 合并部分配置(如 showHeader / filter / theme 等)\n // if (Object.keys(nextOptionPatch).length > 0) {\n // const mergedOptions: ListTableConstructorOptions = {\n // ...(table.options as ListTableConstructorOptions),\n // ...nextOptionPatch\n // };\n // table.updateOption(mergedOptions, {\n // // clearColWidthCache: false,\n // // clearRowHeightCache: false\n // });\n // }\n // }\n\n /**\n * 处理公式粘贴 - 调整公式中的单元格引用\n * @param formulas 要粘贴的公式数组\n * @param sourceStartCol 源起始列\n * @param sourceStartRow 源起始行\n * @param targetStartCol 目标起始列\n * @param targetStartRow 目标起始行\n */\n processFormulaPaste(\n formulas: string[][],\n sourceStartCol: number,\n _sourceStartRow: number,\n targetStartCol: number,\n _targetStartRow: number\n ): string[][] {\n if (!formulas || formulas.length === 0) {\n return formulas;\n }\n\n // 计算整个范围的相对位移\n const colOffset = targetStartCol - sourceStartCol;\n const rowOffset = _targetStartRow - _sourceStartRow;\n\n // 使用计算出的位移来调整公式\n return FormulaPasteProcessor.adjustFormulasForPasteWithOffset(formulas, colOffset, rowOffset);\n }\n\n /**\n * 获取复制数据,包括公式处理\n */\n getCopyData(): (string | number)[][] {\n const selections = this.getMultipleSelections();\n if (selections.length === 0) {\n return [];\n }\n\n const data = this.getData();\n const result: string[][] = [];\n\n // 获取第一个选择范围\n const selection = selections[0];\n const rows = selection.endRow - selection.startRow + 1;\n const cols = selection.endCol - selection.startCol + 1;\n\n for (let row = 0; row < rows; row++) {\n const rowData: string[] = [];\n for (let col = 0; col < cols; col++) {\n const actualRow = selection.startRow + row;\n const actualCol = selection.startCol + col;\n\n if (data[actualRow] && data[actualRow][actualCol] !== undefined) {\n // 如果是公式,返回公式字符串;否则返回值\n if (\n this.vtableSheet.formulaManager.isCellFormula({\n sheet: this.getKey(),\n row: actualRow,\n col: actualCol\n })\n ) {\n const formula = this.vtableSheet.formulaManager.getCellFormula({\n sheet: this.getKey(),\n row: actualRow,\n col: actualCol\n });\n rowData.push(formula);\n } else {\n rowData.push(data[actualRow][actualCol]);\n }\n } else {\n rowData.push('');\n }\n }\n result.push(rowData);\n }\n\n return result;\n }\n\n /**\n * 粘贴数据,包括公式处理\n */\n pasteData(data: string[][], targetStartCol: number, targetStartRow: number): void {\n if (!data || data.length === 0) {\n return;\n }\n\n const selections = this.getMultipleSelections();\n if (selections.length === 0) {\n return;\n }\n\n // 获取源数据范围(从当前选择范围推断)\n const sourceSelection = selections[0];\n const sourceStartCol = sourceSelection.startCol;\n const sourceStartRow = sourceSelection.startRow;\n\n // 处理公式粘贴\n const processedData = this.processFormulaPaste(\n data,\n sourceStartCol,\n sourceStartRow,\n targetStartCol,\n targetStartRow\n );\n\n // 应用处理后的数据\n const dataArray = this.getData();\n for (let row = 0; row < processedData.length; row++) {\n for (let col = 0; col < processedData[row].length; col++) {\n const targetRow = targetStartRow + row;\n const targetCol = targetStartCol + col;\n\n if (targetRow < dataArray.length && targetCol < dataArray[targetRow].length) {\n const value = processedData[row][col];\n\n // 如果是公式,设置公式;否则设置普通值\n if (FormulaPasteProcessor.needsFormulaAdjustment(value)) {\n this.setCellFormula(targetRow, targetCol, value as string);\n } else {\n this.setCellValue(targetRow, targetCol, value);\n }\n }\n }\n }\n }\n\n /**\n * 设置单元格公式\n */\n setCellFormula(row: number, col: number, formula: string): void {\n if (this.vtableSheet.formulaManager) {\n this.vtableSheet.formulaManager.setCellContent(\n {\n sheet: this.getKey(),\n row,\n col\n },\n formula\n );\n\n // 事件触发移到 formula-manager 中处理,这里不再触发\n // 这样可以确保事件在正确的时机触发,并且只在操作成功时触发\n }\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // 清理事件监听器\n if (this.tableInstance) {\n (this.vtableSheet as any).tableEventRelay.unbindSheetEvents(this.sheetKey, this.tableInstance);\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,3 +1,8 @@
1
1
  import type * as VTable from '@visactor/vtable';
2
2
  import type { ISheetDefine, IVTableSheetOptions } from '../ts-types';
3
3
  export declare function getTablePlugins(sheetDefine?: ISheetDefine, options?: IVTableSheetOptions, vtableSheet?: any): VTable.pluginsDefinition.IVTablePlugin[];
4
+ export declare function createFormulaDetectionOptions(sheetDefine?: ISheetDefine, options?: IVTableSheetOptions, vtableSheet?: any): {
5
+ isFormulaCell: (col: number, row: number, cellData: unknown, table: VTable.ListTable) => boolean;
6
+ getCellFormula: (col: number, row: number, cellData: unknown, table: VTable.ListTable) => string | undefined;
7
+ setCellFormula: (col: number, row: number, formula: string, table: VTable.ListTable) => void;
8
+ };
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.getTablePlugins = void 0;
5
+ }), exports.createFormulaDetectionOptions = exports.getTablePlugins = void 0;
6
6
 
7
7
  const vtable_plugins_1 = require("@visactor/vtable-plugins"), vutils_1 = require("@visactor/vutils");
8
8
 
@@ -192,11 +192,14 @@ function handleDisableFirstRowAsHeader(table) {
192
192
  }
193
193
 
194
194
  function createFormulaDetectionOptions(sheetDefine, options, vtableSheet) {
195
+ const getActiveSheetKey = () => {
196
+ var _a, _b, _c, _d, _e, _f;
197
+ return (null === (_c = null === (_b = null === (_a = null == vtableSheet ? void 0 : vtableSheet.getActiveSheet) || void 0 === _a ? void 0 : _a.call(vtableSheet)) || void 0 === _b ? void 0 : _b.getKey) || void 0 === _c ? void 0 : _c.call(_b)) || (null === (_f = null === (_e = null === (_d = null == vtableSheet ? void 0 : vtableSheet.sheetManager) || void 0 === _d ? void 0 : _d.getActiveSheet) || void 0 === _e ? void 0 : _e.call(_d)) || void 0 === _f ? void 0 : _f.sheetKey) || (null == sheetDefine ? void 0 : sheetDefine.sheetKey) || "Sheet1";
198
+ };
195
199
  return {
196
200
  isFormulaCell: (col, row, cellData, table) => {
197
- var _a;
198
201
  if (null == vtableSheet ? void 0 : vtableSheet.formulaManager) try {
199
- const sheetName = (null === (_a = vtableSheet.sheetManager) || void 0 === _a ? void 0 : _a._activeSheetKey) || "Sheet1";
202
+ const sheetName = getActiveSheetKey();
200
203
  return vtableSheet.formulaManager.isCellFormula({
201
204
  sheet: sheetName,
202
205
  row: row,
@@ -208,9 +211,8 @@ function createFormulaDetectionOptions(sheetDefine, options, vtableSheet) {
208
211
  return "string" == typeof cellValue && cellValue.startsWith("=");
209
212
  },
210
213
  getCellFormula: (col, row, cellData, table) => {
211
- var _a;
212
214
  if (null == vtableSheet ? void 0 : vtableSheet.formulaManager) try {
213
- const sheetName = (null === (_a = vtableSheet.sheetManager) || void 0 === _a ? void 0 : _a._activeSheetKey) || "Sheet1";
215
+ const sheetName = getActiveSheetKey();
214
216
  return vtableSheet.formulaManager.getCellFormula({
215
217
  sheet: sheetName,
216
218
  row: row,
@@ -221,9 +223,8 @@ function createFormulaDetectionOptions(sheetDefine, options, vtableSheet) {
221
223
  if ("string" == typeof cellValue && cellValue.startsWith("=")) return cellValue;
222
224
  },
223
225
  setCellFormula: (col, row, formula, table) => {
224
- var _a;
225
226
  if (null == vtableSheet ? void 0 : vtableSheet.formulaManager) try {
226
- const sheetName = (null === (_a = vtableSheet.sheetManager) || void 0 === _a ? void 0 : _a._activeSheetKey) || "Sheet1";
227
+ const sheetName = getActiveSheetKey();
227
228
  return void vtableSheet.formulaManager.setCellContent({
228
229
  sheet: sheetName,
229
230
  row: row,
@@ -235,5 +236,5 @@ function createFormulaDetectionOptions(sheetDefine, options, vtableSheet) {
235
236
  };
236
237
  }
237
238
 
238
- //# sourceMappingURL=table-plugins.js.map
239
- exports.getTablePlugins = getTablePlugins;
239
+ exports.getTablePlugins = getTablePlugins, exports.createFormulaDetectionOptions = createFormulaDetectionOptions;
240
+ //# sourceMappingURL=table-plugins.js.map
@@ -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 * @param options 配置选项\n * @param vtableSheet VTableSheet实例(可选,用于访问公式管理器)\n * @returns 插件数组\n */\nexport function getTablePlugins(\n sheetDefine?: ISheetDefine,\n options?: IVTableSheetOptions,\n vtableSheet?: any\n): VTable.pluginsDefinition.IVTablePlugin[] {\n const plugins: VTable.pluginsDefinition.IVTablePlugin[] = [];\n // 结合options.VTablePluginModules,来判断是否禁用插件\n const disabledPluginsUserSetted = options?.VTablePluginModules?.filter(module => module.disabled);\n let enabledPluginsUserSetted = options?.VTablePluginModules?.filter(module => !module.disabled);\n if (!disabledPluginsUserSetted?.some(module => module.module === FilterPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === FilterPlugin)\n ?.moduleOptions as FilterOptions;\n const filterPlugin = createFilterPlugin(sheetDefine, userPluginOptions);\n if (filterPlugin) {\n plugins.push(filterPlugin);\n }\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === AddRowColumnPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === AddRowColumnPlugin)\n ?.moduleOptions as AddRowColumnOptions;\n\n // Safety check for AddRowColumnPlugin availability\n if (!AddRowColumnPlugin) {\n console.warn('AddRowColumnPlugin is not available in @visactor/vtable-plugins');\n } else {\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 //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== AddRowColumnPlugin);\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === TableSeriesNumber)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === TableSeriesNumber)\n ?.moduleOptions as TableSeriesNumberOptions;\n\n // Safety check for TableSeriesNumber availability\n if (!TableSeriesNumber) {\n console.warn('TableSeriesNumber is not available in @visactor/vtable-plugins');\n } else {\n // 构建插件选项,包含dragOrder(即使类型定义中没有,插件实际支持)\n const pluginOptions: TableSeriesNumberOptions & { dragOrder?: any } = {\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\n // 如果sheet定义中有dragOrder,添加到插件选项中\n if (sheetDefine?.dragOrder) {\n pluginOptions.dragOrder = sheetDefine.dragOrder;\n }\n\n const tableSeriesNumberPlugin = new TableSeriesNumber(pluginOptions);\n plugins.push(tableSeriesNumberPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== TableSeriesNumber);\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 (!disabledPluginsUserSetted?.some(module => module.module === ContextMenuPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(\n module => module.module === ContextMenuPlugin\n )?.moduleOptions;\n\n // Safety check for ContextMenuPlugin availability\n if (!ContextMenuPlugin) {\n console.warn('ContextMenuPlugin is not available in @visactor/vtable-plugins');\n } else {\n const contextMenuPlugin = createContextMenuItems(sheetDefine, userPluginOptions);\n plugins.push(contextMenuPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== ContextMenuPlugin);\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === ExcelEditCellKeyboardPlugin)) {\n const userPluginOptions =\n enabledPluginsUserSetted?.find(module => module.module === ExcelEditCellKeyboardPlugin)?.moduleOptions ?? {};\n\n // Safety check for ExcelEditCellKeyboardPlugin availability\n if (!ExcelEditCellKeyboardPlugin) {\n console.warn('ExcelEditCellKeyboardPlugin is not available in @visactor/vtable-plugins');\n } else {\n // let currentState_editingEditor: IEditor | null = null; //需要在keyDownBeforeCallback中保存下来,因为插件处理事件中会影响这个值(调用了completeEdit)\n // const keyDownBeforeCallback = function (this: ExcelEditCellKeyboardPlugin, event: KeyboardEvent) {\n // currentState_editingEditor = sheet.getActiveSheet()?.tableInstance?.editorManager.editingEditor;\n // };\n // // 注意:这里使用普通函数而不是箭头函数,这样才能通过 apply 正确绑定 this 为插件实例\n // const keyDownAfterCallback = function (this: ExcelEditCellKeyboardPlugin, event: KeyboardEvent) {\n // const eventKey = event.key.toLowerCase() as ExcelEditCellKeyboardResponse;\n // if (this.responseKeyboard.includes(eventKey)) {\n // if (\n // (currentState_editingEditor &&\n // eventKey !== ExcelEditCellKeyboardResponse.DELETE &&\n // eventKey !== ExcelEditCellKeyboardResponse.BACKSPACE) ||\n // (!currentState_editingEditor &&\n // (eventKey === ExcelEditCellKeyboardResponse.DELETE ||\n // eventKey === ExcelEditCellKeyboardResponse.BACKSPACE)) ||\n // sheet.formulaManager._formulaWorkingOnCell\n // ) {\n // event.stopPropagation();\n // event.preventDefault();\n // }\n // }\n // };\n // 创建插件时包含回调\n const excelEditCellKeyboardPlugin = new ExcelEditCellKeyboardPlugin(userPluginOptions);\n plugins.push(excelEditCellKeyboardPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(\n module => module.module !== ExcelEditCellKeyboardPlugin\n );\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === AutoFillPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === AutoFillPlugin)?.moduleOptions;\n\n // Safety check for AutoFillPlugin availability\n if (!AutoFillPlugin) {\n console.warn('AutoFillPlugin is not available in @visactor/vtable-plugins');\n } else {\n // Create formula detection functions that use vtable-sheet's formula engine\n const formulaDetectionOptions = createFormulaDetectionOptions(sheetDefine, options, vtableSheet);\n\n const autoFillPlugin = new AutoFillPlugin({\n ...userPluginOptions,\n ...formulaDetectionOptions\n });\n plugins.push(autoFillPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== AutoFillPlugin);\n }\n if (enabledPluginsUserSetted?.length) {\n enabledPluginsUserSetted.forEach(\n (module: {\n module: new (options: unknown) => VTable.pluginsDefinition.IVTablePlugin;\n moduleOptions: unknown;\n disabled: boolean;\n }) => {\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\n // 检查 FilterPlugin 是否可用\n if (!FilterPlugin) {\n console.warn('FilterPlugin is not available in @visactor/vtable-plugins');\n return null;\n }\n\n // 构建插件选项,确保符合FilterOptions接口\n const pluginOptions: FilterOptions = {\n enableFilter: createColumnFilterChecker(sheetDefine),\n ...userPluginOptions\n };\n\n return new FilterPlugin(pluginOptions);\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\n/**\n * 创建公式检测选项,使用vtable-sheet的公式引擎\n */\nfunction createFormulaDetectionOptions(sheetDefine?: ISheetDefine, options?: IVTableSheetOptions, vtableSheet?: any) {\n return {\n /**\n * 自定义公式检测函数 - 使用vtable-sheet的公式引擎判断是否为公式\n */\n isFormulaCell: (col: number, row: number, cellData: unknown, table: VTable.ListTable): boolean => {\n // 首先尝试使用vtable-sheet的公式管理器\n if (vtableSheet?.formulaManager) {\n try {\n const sheetName = (vtableSheet.sheetManager as any)?._activeSheetKey || 'Sheet1';\n return vtableSheet.formulaManager.isCellFormula({\n sheet: sheetName,\n row: row,\n col: col\n });\n } catch (error) {\n // 如果公式引擎调用失败,回退到表格级别的检测\n }\n }\n\n // 回退到简单检测:检查单元格值是否以=开头\n if (typeof cellData === 'string' && cellData.startsWith('=')) {\n return true;\n }\n\n // 检查单元格原始值(可能是计算后的值)\n const cellValue = table.getCellValue(col, row);\n return typeof cellValue === 'string' && cellValue.startsWith('=');\n },\n\n /**\n * 自定义公式获取函数 - 从vtable-sheet公式引擎获取公式字符串\n */\n getCellFormula: (col: number, row: number, cellData: unknown, table: VTable.ListTable): string | undefined => {\n // 首先尝试使用vtable-sheet的公式管理器\n if (vtableSheet?.formulaManager) {\n try {\n const sheetName = (vtableSheet.sheetManager as any)?._activeSheetKey || 'Sheet1';\n return vtableSheet.formulaManager.getCellFormula({\n sheet: sheetName,\n row: row,\n col: col\n });\n } catch (error) {\n // 如果公式引擎调用失败,回退到表格级别的检测\n }\n }\n\n // 回退到简单检测:如果单元格值以=开头,返回该值作为公式\n const cellValue = table.getCellValue(col, row);\n if (typeof cellValue === 'string' && cellValue.startsWith('=')) {\n return cellValue;\n }\n\n return undefined;\n },\n\n /**\n * 自定义公式设置函数 - 使用vtable-sheet公式引擎设置公式\n */\n setCellFormula: (col: number, row: number, formula: string, table: VTable.ListTable): void => {\n // 首先尝试使用vtable-sheet的公式管理器\n if (vtableSheet?.formulaManager) {\n try {\n const sheetName = (vtableSheet.sheetManager as any)?._activeSheetKey || 'Sheet1';\n vtableSheet.formulaManager.setCellContent(\n {\n sheet: sheetName,\n row: row,\n col: col\n },\n formula\n );\n return;\n } catch (error) {\n // 如果公式引擎调用失败,回退到表格级别的设置\n }\n }\n\n // 回退到直接设置单元格值\n table.changeCellValue(col, row, formula);\n }\n };\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 * @param options 配置选项\n * @param vtableSheet VTableSheet实例(可选,用于访问公式管理器)\n * @returns 插件数组\n */\nexport function getTablePlugins(\n sheetDefine?: ISheetDefine,\n options?: IVTableSheetOptions,\n vtableSheet?: any\n): VTable.pluginsDefinition.IVTablePlugin[] {\n const plugins: VTable.pluginsDefinition.IVTablePlugin[] = [];\n // 结合options.VTablePluginModules,来判断是否禁用插件\n const disabledPluginsUserSetted = options?.VTablePluginModules?.filter(module => module.disabled);\n let enabledPluginsUserSetted = options?.VTablePluginModules?.filter(module => !module.disabled);\n if (!disabledPluginsUserSetted?.some(module => module.module === FilterPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === FilterPlugin)\n ?.moduleOptions as FilterOptions;\n const filterPlugin = createFilterPlugin(sheetDefine, userPluginOptions);\n if (filterPlugin) {\n plugins.push(filterPlugin);\n }\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === AddRowColumnPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === AddRowColumnPlugin)\n ?.moduleOptions as AddRowColumnOptions;\n\n // Safety check for AddRowColumnPlugin availability\n if (!AddRowColumnPlugin) {\n console.warn('AddRowColumnPlugin is not available in @visactor/vtable-plugins');\n } else {\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 //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== AddRowColumnPlugin);\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === TableSeriesNumber)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === TableSeriesNumber)\n ?.moduleOptions as TableSeriesNumberOptions;\n\n // Safety check for TableSeriesNumber availability\n if (!TableSeriesNumber) {\n console.warn('TableSeriesNumber is not available in @visactor/vtable-plugins');\n } else {\n // 构建插件选项,包含dragOrder(即使类型定义中没有,插件实际支持)\n const pluginOptions: TableSeriesNumberOptions & { dragOrder?: any } = {\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\n // 如果sheet定义中有dragOrder,添加到插件选项中\n if (sheetDefine?.dragOrder) {\n pluginOptions.dragOrder = sheetDefine.dragOrder;\n }\n\n const tableSeriesNumberPlugin = new TableSeriesNumber(pluginOptions);\n plugins.push(tableSeriesNumberPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== TableSeriesNumber);\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 (!disabledPluginsUserSetted?.some(module => module.module === ContextMenuPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(\n module => module.module === ContextMenuPlugin\n )?.moduleOptions;\n\n // Safety check for ContextMenuPlugin availability\n if (!ContextMenuPlugin) {\n console.warn('ContextMenuPlugin is not available in @visactor/vtable-plugins');\n } else {\n const contextMenuPlugin = createContextMenuItems(sheetDefine, userPluginOptions);\n plugins.push(contextMenuPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== ContextMenuPlugin);\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === ExcelEditCellKeyboardPlugin)) {\n const userPluginOptions =\n enabledPluginsUserSetted?.find(module => module.module === ExcelEditCellKeyboardPlugin)?.moduleOptions ?? {};\n\n // Safety check for ExcelEditCellKeyboardPlugin availability\n if (!ExcelEditCellKeyboardPlugin) {\n console.warn('ExcelEditCellKeyboardPlugin is not available in @visactor/vtable-plugins');\n } else {\n // let currentState_editingEditor: IEditor | null = null; //需要在keyDownBeforeCallback中保存下来,因为插件处理事件中会影响这个值(调用了completeEdit)\n // const keyDownBeforeCallback = function (this: ExcelEditCellKeyboardPlugin, event: KeyboardEvent) {\n // currentState_editingEditor = sheet.getActiveSheet()?.tableInstance?.editorManager.editingEditor;\n // };\n // // 注意:这里使用普通函数而不是箭头函数,这样才能通过 apply 正确绑定 this 为插件实例\n // const keyDownAfterCallback = function (this: ExcelEditCellKeyboardPlugin, event: KeyboardEvent) {\n // const eventKey = event.key.toLowerCase() as ExcelEditCellKeyboardResponse;\n // if (this.responseKeyboard.includes(eventKey)) {\n // if (\n // (currentState_editingEditor &&\n // eventKey !== ExcelEditCellKeyboardResponse.DELETE &&\n // eventKey !== ExcelEditCellKeyboardResponse.BACKSPACE) ||\n // (!currentState_editingEditor &&\n // (eventKey === ExcelEditCellKeyboardResponse.DELETE ||\n // eventKey === ExcelEditCellKeyboardResponse.BACKSPACE)) ||\n // sheet.formulaManager._formulaWorkingOnCell\n // ) {\n // event.stopPropagation();\n // event.preventDefault();\n // }\n // }\n // };\n // 创建插件时包含回调\n const excelEditCellKeyboardPlugin = new ExcelEditCellKeyboardPlugin(userPluginOptions);\n plugins.push(excelEditCellKeyboardPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(\n module => module.module !== ExcelEditCellKeyboardPlugin\n );\n }\n if (!disabledPluginsUserSetted?.some(module => module.module === AutoFillPlugin)) {\n const userPluginOptions = enabledPluginsUserSetted?.find(module => module.module === AutoFillPlugin)?.moduleOptions;\n\n // Safety check for AutoFillPlugin availability\n if (!AutoFillPlugin) {\n console.warn('AutoFillPlugin is not available in @visactor/vtable-plugins');\n } else {\n // Create formula detection functions that use vtable-sheet's formula engine\n const formulaDetectionOptions = createFormulaDetectionOptions(sheetDefine, options, vtableSheet);\n\n const autoFillPlugin = new AutoFillPlugin({\n ...userPluginOptions,\n ...formulaDetectionOptions\n });\n plugins.push(autoFillPlugin);\n }\n //已经初始化过的插件,从enabledPluginsUserSetted中移除\n enabledPluginsUserSetted = enabledPluginsUserSetted?.filter(module => module.module !== AutoFillPlugin);\n }\n if (enabledPluginsUserSetted?.length) {\n enabledPluginsUserSetted.forEach(\n (module: {\n module: new (options: unknown) => VTable.pluginsDefinition.IVTablePlugin;\n moduleOptions: unknown;\n disabled: boolean;\n }) => {\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\n // 检查 FilterPlugin 是否可用\n if (!FilterPlugin) {\n console.warn('FilterPlugin is not available in @visactor/vtable-plugins');\n return null;\n }\n\n // 构建插件选项,确保符合FilterOptions接口\n const pluginOptions: FilterOptions = {\n enableFilter: createColumnFilterChecker(sheetDefine),\n ...userPluginOptions\n };\n\n return new FilterPlugin(pluginOptions);\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\n/**\n * 创建公式检测选项,使用vtable-sheet的公式引擎\n */\nexport function createFormulaDetectionOptions(\n sheetDefine?: ISheetDefine,\n options?: IVTableSheetOptions,\n vtableSheet?: any\n) {\n const getActiveSheetKey = (): string => {\n return (\n vtableSheet?.getActiveSheet?.()?.getKey?.() ||\n vtableSheet?.sheetManager?.getActiveSheet?.()?.sheetKey ||\n sheetDefine?.sheetKey ||\n 'Sheet1'\n );\n };\n\n return {\n /**\n * 自定义公式检测函数 - 使用vtable-sheet的公式引擎判断是否为公式\n */\n isFormulaCell: (col: number, row: number, cellData: unknown, table: VTable.ListTable): boolean => {\n // 首先尝试使用vtable-sheet的公式管理器\n if (vtableSheet?.formulaManager) {\n try {\n const sheetName = getActiveSheetKey();\n return vtableSheet.formulaManager.isCellFormula({\n sheet: sheetName,\n row: row,\n col: col\n });\n } catch (error) {\n // 如果公式引擎调用失败,回退到表格级别的检测\n }\n }\n\n // 回退到简单检测:检查单元格值是否以=开头\n if (typeof cellData === 'string' && cellData.startsWith('=')) {\n return true;\n }\n\n // 检查单元格原始值(可能是计算后的值)\n const cellValue = table.getCellValue(col, row);\n return typeof cellValue === 'string' && cellValue.startsWith('=');\n },\n\n /**\n * 自定义公式获取函数 - 从vtable-sheet公式引擎获取公式字符串\n */\n getCellFormula: (col: number, row: number, cellData: unknown, table: VTable.ListTable): string | undefined => {\n // 首先尝试使用vtable-sheet的公式管理器\n if (vtableSheet?.formulaManager) {\n try {\n const sheetName = getActiveSheetKey();\n return vtableSheet.formulaManager.getCellFormula({\n sheet: sheetName,\n row: row,\n col: col\n });\n } catch (error) {\n // 如果公式引擎调用失败,回退到表格级别的检测\n }\n }\n\n // 回退到简单检测:如果单元格值以=开头,返回该值作为公式\n const cellValue = table.getCellValue(col, row);\n if (typeof cellValue === 'string' && cellValue.startsWith('=')) {\n return cellValue;\n }\n\n return undefined;\n },\n\n /**\n * 自定义公式设置函数 - 使用vtable-sheet公式引擎设置公式\n */\n setCellFormula: (col: number, row: number, formula: string, table: VTable.ListTable): void => {\n // 首先尝试使用vtable-sheet的公式管理器\n if (vtableSheet?.formulaManager) {\n try {\n const sheetName = getActiveSheetKey();\n vtableSheet.formulaManager.setCellContent(\n {\n sheet: sheetName,\n row: row,\n col: col\n },\n formula\n );\n return;\n } catch (error) {\n // 如果公式引擎调用失败,回退到表格级别的设置\n }\n }\n\n // 回退到直接设置单元格值\n table.changeCellValue(col, row, formula);\n }\n };\n}\n"]}
@@ -72,6 +72,7 @@ class TableEventRelay {
72
72
  wrappedCallback && (tableInstance.off(eventType, wrappedCallback), handler.wrappedCallbacks.delete(sheetKey));
73
73
  }));
74
74
  }
75
+ this.boundSheets.delete(sheetKey), this.cleanupCallbacks.delete(sheetKey);
75
76
  }
76
77
  unbindFromAllSheets(eventType) {
77
78
  this.vtableSheet.workSheetInstances.forEach(((worksheet, sheetKey) => {