@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/components/vtable-sheet.ts"],"names":[],"mappings":"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","file":"vtable-sheet.js","sourcesContent":["import { FormulaManager } from '../managers/formula-manager';\nimport SheetManager from '../managers/sheet-manager';\nimport { WorkSheet } from '../core/WorkSheet';\nimport * as VTable from '@visactor/vtable';\nimport { getTablePlugins } from '../core/table-plugins';\nimport { DomEventManager } from '../event/dom-event-manager';\nimport { showSnackbar } from '../tools/ui/snackbar';\nimport type { IVTableSheetOptions, ISheetDefine } from '../ts-types';\nimport type { MultiSheetImportResult } from '@visactor/vtable-plugins/src/excel-import/types';\nimport type { TableEventHandlersEventArgumentMap } from '@visactor/vtable/es/ts-types/events';\nimport SheetTabDragManager from '../managers/tab-drag-manager';\nimport { FormulaAutocomplete } from '../formula/formula-autocomplete';\nimport { formulaEditor } from '../formula/formula-editor';\nimport type { TYPES } from '@visactor/vtable';\nimport { MenuManager } from '../managers/menu-manager';\nimport { FormulaUIManager } from '../formula/formula-ui-manager';\nimport { SheetTabEventHandler } from './sheet-tab-event-handler';\nimport { TableEventRelay } from '../event/table-event-relay';\nimport type { VTableSheetEventType } from '../ts-types/spreadsheet-events';\nimport { SpreadSheetEventManager } from '../event/spreadsheet-event-manager';\nimport { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';\n\n// 注册公式编辑器\nVTable.register.editor('formula', formulaEditor);\nexport default class VTableSheet {\n /** DOM容器 */\n private container: HTMLElement;\n /** 配置选项 */\n private options: IVTableSheetOptions;\n /** sheet管理器 */\n private sheetManager: SheetManager;\n /** 公式管理器 */\n formulaManager: FormulaManager;\n /** 事件管理器 */\n private eventManager: DomEventManager;\n\n /** 菜单管理 */\n private menuManager: MenuManager;\n /** 当前活动sheet实例 */\n private activeWorkSheet: WorkSheet | null = null;\n /** 所有sheet实例 */\n workSheetInstances: Map<string, WorkSheet> = new Map();\n /** 公式自动补全 */\n private formulaAutocomplete: FormulaAutocomplete | null = null;\n /** Table 事件中转器 */\n private tableEventRelay: TableEventRelay;\n /** 电子表格事件管理器 */\n private spreadsheetEventManager: SpreadSheetEventManager;\n /** 统一事件总线 */\n private eventBus: VTableSheetEventBus;\n\n /** 公式UI管理器 */\n formulaUIManager: FormulaUIManager;\n\n /** UI组件 */\n private rootElement: HTMLElement;\n private formulaBarElement: HTMLElement | null = null;\n private sheetTabElement: HTMLElement | null = null;\n private mainMenuElement: HTMLElement | null = null;\n private contentElement: HTMLElement;\n\n // tab拖拽管理器\n private dragManager: SheetTabDragManager;\n /** sheet标签事件处理器 */\n private sheetTabEventHandler: SheetTabEventHandler;\n\n /**\n * 构造函数\n * @param options 配置选项\n */\n constructor(container: HTMLElement, options: IVTableSheetOptions) {\n this.container = container;\n this.options = this.mergeDefaultOptions(options);\n\n // 创建统一事件总线\n this.eventBus = new VTableSheetEventBus();\n\n // 创建管理器(注意:tableEventRelay 必须在 eventManager 之前初始化)\n this.sheetManager = new SheetManager(this.eventBus);\n this.formulaManager = new FormulaManager(this);\n this.tableEventRelay = new TableEventRelay(this); // ⚠️ 必须在 EventManager 之前初始化\n this.eventManager = new DomEventManager(this); // EventManager 构造函数会调用 this.onTableEvent()\n this.dragManager = new SheetTabDragManager(this);\n this.menuManager = new MenuManager(this);\n this.formulaUIManager = new FormulaUIManager(this);\n this.sheetTabEventHandler = new SheetTabEventHandler(this);\n this.spreadsheetEventManager = new SpreadSheetEventManager(this);\n\n // 初始化UI\n this.initUI();\n\n // 初始化sheets\n this.initSheets();\n\n this.resize();\n }\n\n /**\n * 合并默认配置\n */\n private mergeDefaultOptions(options: IVTableSheetOptions): IVTableSheetOptions {\n return {\n showFormulaBar: true,\n showSheetTab: true,\n defaultRowHeight: 25,\n defaultColWidth: 100,\n ...options\n };\n }\n\n /**\n * 初始化公式自动补全\n */\n private initFormulaAutocomplete(): void {\n if (!this.formulaBarElement) {\n return;\n }\n\n const formulaInput = this.formulaUIManager.formulaInput;\n if (formulaInput) {\n this.formulaAutocomplete = new FormulaAutocomplete(this.rootElement, this);\n this.formulaAutocomplete.attachTo(formulaInput);\n }\n }\n\n /**\n * 初始化UI\n */\n private initUI(): void {\n // 创建根元素\n this.rootElement = document.createElement('div');\n this.rootElement.className = 'vtable-sheet-container';\n // this.rootElement.style.width = `${this.options.width}px`;\n // this.rootElement.style.height = `${this.options.height}px`;\n this.container.appendChild(this.rootElement);\n //创建顶部菜单和公式的容器\n const topContainer = document.createElement('div');\n topContainer.className = 'vtable-sheet-top-container';\n this.rootElement.appendChild(topContainer);\n\n // 创建主菜单\n if (this.options.mainMenu?.show) {\n this.mainMenuElement = this.menuManager.createMainMenu();\n topContainer.appendChild(this.mainMenuElement);\n }\n // 创建公式栏\n if (this.options.showFormulaBar) {\n this.formulaBarElement = this.formulaUIManager.createFormulaBar();\n topContainer.appendChild(this.formulaBarElement);\n\n this.initFormulaAutocomplete();\n }\n\n // 创建内容区域\n this.contentElement = document.createElement('div');\n this.contentElement.className = 'vtable-sheet-content';\n this.rootElement.appendChild(this.contentElement);\n\n // 创建sheet切换栏\n if (this.options.showSheetTab) {\n this.sheetTabElement = this.createSheetTab();\n this.rootElement.appendChild(this.sheetTabElement);\n }\n }\n\n /**\n * 创建sheet切换栏\n */\n private createSheetTab(): HTMLElement {\n // SVG图标常量\n const addIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"/>' +\n '</svg>';\n const leftIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>' +\n '</svg>';\n const rightIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>' +\n '</svg>';\n const menuIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 ' +\n '.9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>' +\n '</svg>';\n\n const sheetTab = document.createElement('div');\n sheetTab.className = 'vtable-sheet-tab-bar';\n\n // 创建左侧渐变效果\n const fadeLeft = document.createElement('div');\n fadeLeft.className = 'vtable-sheet-fade-left';\n fadeLeft.style.display = 'none';\n sheetTab.appendChild(fadeLeft);\n\n // 创建中间的tabs容器\n const tabsContainer = document.createElement('div');\n tabsContainer.className = 'vtable-sheet-tabs-container';\n tabsContainer.addEventListener('scroll', () =>\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight)\n );\n sheetTab.appendChild(tabsContainer);\n\n // 创建插入指示器\n const insertIndicator = document.createElement('div');\n insertIndicator.className = 'vtable-sheet-insert-indicator';\n insertIndicator.style.display = 'none';\n tabsContainer.appendChild(insertIndicator);\n\n // 创建右侧渐变效果\n const fadeRight = document.createElement('div');\n fadeRight.className = 'vtable-sheet-fade-right';\n sheetTab.appendChild(fadeRight);\n\n // 添加新增sheet按钮\n const addButton = document.createElement('button');\n addButton.className = 'vtable-sheet-add-button';\n addButton.innerHTML = addIcon;\n addButton.title = '添加工作表';\n addButton.addEventListener('click', () => this._addNewSheet());\n sheetTab.appendChild(addButton);\n\n // 创建导航按钮容器\n const navButtons = document.createElement('div');\n navButtons.className = 'vtable-sheet-nav-buttons';\n\n // 创建左侧滚动按钮\n const leftScrollBtn = document.createElement('button');\n leftScrollBtn.className = 'vtable-sheet-scroll-button';\n leftScrollBtn.innerHTML = leftIcon;\n leftScrollBtn.title = '向左滚动';\n leftScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('left', tabsContainer));\n navButtons.appendChild(leftScrollBtn);\n\n // 创建右侧滚动按钮\n const rightScrollBtn = document.createElement('button');\n rightScrollBtn.className = 'vtable-sheet-scroll-button';\n rightScrollBtn.innerHTML = rightIcon;\n rightScrollBtn.title = '向右滚动';\n rightScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('right', tabsContainer));\n navButtons.appendChild(rightScrollBtn);\n\n // 创建sheet菜单按钮\n const menuButton = document.createElement('button');\n menuButton.className = 'vtable-sheet-menu-button';\n menuButton.innerHTML = menuIcon;\n menuButton.title = '工作表选项';\n menuButton.addEventListener('click', e => this.sheetTabEventHandler.toggleSheetMenu(e));\n navButtons.appendChild(menuButton);\n\n // 创建菜单容器\n const menuContainer = document.createElement('ul');\n menuContainer.className = 'vtable-sheet-menu-list';\n sheetTab.appendChild(menuContainer);\n\n sheetTab.appendChild(navButtons);\n // 初始化渐变效果\n setTimeout(() => {\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight);\n }, 100);\n\n return sheetTab;\n }\n\n /**\n * 激活sheet标签并滚动到可见区域\n */\n private _activeSheetTab(): void {\n this.sheetTabEventHandler.activeSheetTab();\n }\n /**\n * 更新sheet切换标签\n * @param tabsContainer 标签容器\n */\n updateSheetTabs(\n tabsContainer: HTMLElement = this.sheetTabElement?.querySelector('.vtable-sheet-tabs-container')\n ): void {\n if (!tabsContainer) {\n return;\n }\n // 清除现有标签 - 直接清空容器内容(这会移除所有事件监听器)\n tabsContainer.innerHTML = '';\n\n // 添加sheet标签\n const sheets = this.sheetManager.getAllSheets();\n sheets.forEach((sheet, index) => {\n tabsContainer.appendChild(this.createSheetTabItem(sheet, index));\n });\n // 激活sheet标签并滚动到可见区域\n this._activeSheetTab();\n }\n /**\n * 创建tab栏标签项\n */\n private createSheetTabItem(sheet: ISheetDefine, index: number): HTMLElement {\n const tab = document.createElement('div');\n tab.className = 'vtable-sheet-tab';\n tab.dataset.key = sheet.sheetKey;\n tab.textContent = sheet.sheetTitle;\n tab.title = sheet.sheetTitle;\n tab.addEventListener('click', () => this.activateSheet(sheet.sheetKey));\n tab.addEventListener('dblclick', () =>\n this.sheetTabEventHandler.handleSheetTabDblClick(sheet.sheetKey, sheet.sheetTitle)\n );\n // 拖拽事件\n tab.addEventListener('mousedown', e => this.dragManager.handleTabMouseDown(e, sheet.sheetKey));\n\n return tab;\n }\n\n /**\n * 更新sheet列表\n */\n updateSheetMenu(): void {\n this.sheetTabEventHandler.updateSheetMenu();\n }\n\n /**\n * 初始化sheets\n */\n private initSheets(): void {\n if (this.options.sheets && this.options.sheets.length > 0) {\n // 添加所有sheet\n this.options.sheets.forEach((sheetDefine: ISheetDefine) => {\n this.sheetManager.addSheet(sheetDefine);\n });\n\n // 找到active的sheet\n let activeSheetKey = '';\n const activeSheet = this.options.sheets.find((sheet: ISheetDefine) => sheet.active);\n if (activeSheet) {\n activeSheetKey = activeSheet.sheetKey;\n } else {\n activeSheetKey = this.options.sheets[0].sheetKey;\n }\n\n // 激活sheet\n this.activateSheet(activeSheetKey);\n } else {\n // 如果没有提供sheets,创建一个默认的\n this._addNewSheet();\n }\n }\n\n /**\n * 激活指定sheet\n * @param sheetKey sheet的key\n */\n activateSheet(sheetKey: string): void {\n // 获取之前激活的sheet信息\n const previousActiveSheet = this.sheetManager.getActiveSheet();\n const previousSheetKey = previousActiveSheet?.sheetKey;\n const previousSheetTitle = previousActiveSheet?.sheetTitle;\n\n // 设置活动sheet\n this.sheetManager.setActiveSheet(sheetKey);\n\n // 获取sheet定义\n const sheetDefine = this.sheetManager.getSheet(sheetKey);\n if (!sheetDefine) {\n return;\n }\n\n // 隐藏所有sheet实例并解除事件绑定\n this.workSheetInstances.forEach(instance => {\n instance.getElement().style.display = 'none';\n // 解除事件绑定以防止重复触发\n if (instance.tableInstance) {\n this.tableEventRelay.unbindSheetEvents(instance.sheetKey, instance.tableInstance);\n }\n });\n\n // 如果已经存在实例,则显示并激活对应tab和menu\n if (this.workSheetInstances.has(sheetKey)) {\n const instance = this.workSheetInstances.get(sheetKey)!;\n instance.getElement().style.display = 'block';\n this.activeWorkSheet = instance;\n\n // 重新绑定事件(因为我们在隐藏时解除了绑定)\n if (instance.tableInstance) {\n this.tableEventRelay.bindSheetEvents(instance.sheetKey, instance.tableInstance);\n }\n\n // 更新公式管理器中的活动工作表(在实例激活后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // sheet标签和菜单项激活样式\n this._activeSheetTab();\n this.sheetTabEventHandler.activeSheetMenuItem();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n } else {\n // 创建新的sheet实例\n const instance = this.createWorkSheetInstance(sheetDefine);\n this.workSheetInstances.set(sheetKey, instance);\n this.activeWorkSheet = instance;\n\n // 更新公式管理器中的活动工作表(在实例创建后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // 刷新sheet标签和菜单\n this.updateSheetTabs();\n this.updateSheetMenu();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n }\n\n this.updateFormulaBar();\n\n // 触发工作表激活事件(电子表格级别)\n this.spreadsheetEventManager.emitSheetActivated(\n sheetKey,\n sheetDefine.sheetTitle,\n previousSheetKey,\n previousSheetTitle\n );\n\n // 触发之前工作表的停用事件\n if (previousSheetKey && previousSheetKey !== sheetKey) {\n this.spreadsheetEventManager.emitSheetDeactivated(previousSheetKey, previousSheetTitle);\n }\n }\n\n addSheet(sheet: ISheetDefine): void {\n this.sheetManager.addSheet(sheet);\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n\n /**\n * 删除sheet\n * @param sheetKey 工作表key\n */\n removeSheet(sheetKey: string): void {\n if (this.sheetManager.getSheetCount() <= 1) {\n showSnackbar('至少保留一个工作表', 1300);\n return;\n }\n\n // 删除实例对应的dom元素\n const instance = this.workSheetInstances.get(sheetKey);\n if (instance) {\n instance.release();\n this.workSheetInstances.delete(sheetKey);\n }\n\n // 删除sheet定义\n const newActiveSheetKey = this.sheetManager.removeSheet(sheetKey);\n\n // 激活新的sheet(如果有)\n if (newActiveSheetKey) {\n this.activateSheet(newActiveSheetKey);\n }\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n getSheetCount(): number {\n return this.sheetManager.getSheetCount();\n }\n getSheet(sheetKey: string): ISheetDefine | null {\n return this.sheetManager.getSheet(sheetKey);\n }\n getAllSheets(): ISheetDefine[] {\n return this.sheetManager.getAllSheets();\n }\n\n /**\n * 创建sheet实例\n * @param sheetDefine sheet的定义\n */\n createWorkSheetInstance(sheetDefine: ISheetDefine): WorkSheet {\n formulaEditor.setSheet(this);\n // 计算内容区域大小\n const contentWidth = this.contentElement.clientWidth;\n const contentHeight = this.contentElement.clientHeight;\n sheetDefine.dragOrder = sheetDefine.dragOrder ?? this.options.dragOrder;\n // 创建sheet实例\n const sheet = new WorkSheet(this, {\n ...sheetDefine,\n container: this.contentElement,\n width: contentWidth,\n height: contentHeight,\n defaultRowHeight: this.options.defaultRowHeight,\n defaultColWidth: this.options.defaultColWidth,\n dragOrder: sheetDefine.dragOrder,\n plugins: getTablePlugins(sheetDefine, this.options, this),\n headerEditor: 'formula',\n editor: 'formula',\n select: {\n makeSelectCellVisible: false\n },\n style: {\n borderColor: ['#E1E4E8', '#E1E4E8', '#E1E4E8', '#E1E4E8'],\n borderLineWidth: [1, 1, 1, 1],\n borderLineDash: [null, null, null, null],\n padding: [8, 8, 8, 8]\n },\n editCellTrigger: ['api', 'keydown', 'doubleclick'],\n customMergeCell: sheetDefine.cellMerge,\n theme: sheetDefine.theme?.tableTheme || this.options.theme?.tableTheme\n } as any);\n\n // 事件系统现在通过 TableEventRelay 自动处理,不再需要手动绑定\n\n // 在公式管理器中添加这个sheet\n try {\n const normalizedData = this.formulaManager.normalizeSheetData(sheetDefine.data, sheet.tableInstance);\n this.formulaManager.addSheet(sheetDefine.sheetKey, normalizedData, sheetDefine.sheetTitle);\n // 加载保存的公式数据(如果有)\n if (sheetDefine.formulas && Object.keys(sheetDefine.formulas).length > 0) {\n this.loadFormulas(sheetDefine.sheetKey, sheetDefine.formulas);\n }\n } catch (error) {\n console.warn(`Sheet ${sheetDefine.sheetKey} may already exist in formula manager:`, error);\n // 如果添加失败(可能已存在),继续执行\n }\n\n return sheet;\n }\n /**\n * 加载指定工作表的公式数据\n * @param sheetKey 工作表键\n * @param formulas 公式数据 (A1表示法的单元格引用 -> 公式内容)\n */\n private loadFormulas(sheetKey: string, formulas: Record<string, string>): void {\n if (!formulas || Object.keys(formulas).length === 0) {\n return;\n }\n\n try {\n // 优化公式计算顺序\n const sortedFormulas = this.formulaManager.sortFormulasByDependency(sheetKey, formulas);\n // 按照优化后的顺序设置公式\n for (const [cellRef, formula] of sortedFormulas) {\n // 解析单元格引用 (如 A1, B2) 到行列索引\n const { row, col } = this.parseCellKey(cellRef);\n // 设置单元格公式\n this.formulaManager.setCellContent({ sheet: sheetKey, row, col }, formula);\n }\n\n // 刷新计算\n this.formulaManager.rebuildAndRecalculate();\n } catch (error) {\n console.error(`Failed to load formulas for sheet ${sheetKey}:`, error);\n }\n }\n\n /**\n * 将单元格引用(A1表示法)解析为行列索引\n * @param cellKey 单元格引用 (如 A1, B2)\n * @returns 行列索引 (0-based)\n */\n private parseCellKey(cellKey: string): { row: number; col: number } {\n // 匹配列引用(字母部分)和行引用(数字部分)\n const match = cellKey.match(/^([A-Za-z]+)(\\d+)$/);\n if (!match) {\n throw new Error(`Invalid cell reference: ${cellKey}`);\n }\n const [, colStr, rowStr] = match;\n // 解析行索引 (1-based -> 0-based)\n const row = parseInt(rowStr, 10) - 1;\n // 解析列索引 (A -> 0, B -> 1, ..., Z -> 25, AA -> 26, etc.)\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n const charCode = colStr.toUpperCase().charCodeAt(i) - 65; // 65 is ASCII for 'A'\n col = col * 26 + charCode;\n }\n return { row, col };\n }\n\n /**\n * 恢复筛选状态\n */\n private restoreFilterState(sheet: WorkSheet, sheetDefine: ISheetDefine): void {\n // 如果没有保存的筛选状态,直接返回\n if (!sheetDefine.filterState) {\n return;\n }\n\n // console.log(`恢复 Sheet ${sheetDefine.sheetKey} 的筛选状态:`, sheetDefine.filterState);\n\n // 等待表格初始化完成\n setTimeout(() => {\n if (sheet.tableInstance && sheet.tableInstance.pluginManager) {\n const filterPlugin = sheet.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterPlugin.setFilterState(sheetDefine.filterState);\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 未找到筛选插件或插件不支持 setFilterState 方法`);\n }\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 表格实例或插件管理器未初始化`);\n }\n }, 0);\n }\n\n /**\n * 添加新sheet\n */\n private _addNewSheet(): void {\n // 生成新sheet的key和title\n const sheetCount = this.sheetManager.getSheetCount();\n const baseKey = `sheet${sheetCount + 1}`;\n const baseTitle = `Sheet ${sheetCount + 1}`;\n let key = baseKey;\n let title = baseTitle;\n let index = sheetCount + 1;\n // 检查key和title是否被占用,递增直到唯一\n const existingKeys = new Set(this.sheetManager.getAllSheets().map(s => s.sheetKey));\n const existingTitles = new Set(this.sheetManager.getAllSheets().map(s => s.sheetTitle));\n while (existingKeys.has(key) || existingTitles.has(title)) {\n index += 1;\n key = `sheet${index}`;\n title = `Sheet ${index}`;\n }\n\n // 创建新sheet配置\n const newSheet: ISheetDefine = {\n sheetKey: key,\n sheetTitle: title,\n columnCount: 20,\n rowCount: 100,\n data: []\n };\n\n // 添加到管理器\n this.sheetManager.addSheet(newSheet);\n\n // 激活新sheet\n this.activateSheet(key);\n }\n\n /**\n * 更新公式栏\n */\n private updateFormulaBar(): void {\n this.formulaUIManager.updateFormulaBar();\n }\n\n /**\n * 获取公式管理器\n */\n getFormulaManager(): FormulaManager {\n return this.formulaManager;\n }\n /**\n * 获取电子表格事件管理器\n */\n getSpreadSheetEventManager(): SpreadSheetEventManager {\n return this.spreadsheetEventManager;\n }\n\n /**\n * 获取统一事件总线\n */\n getEventBus(): VTableSheetEventBus {\n return this.eventBus;\n }\n\n /**\n * 获取Sheet管理器\n */\n getSheetManager(): SheetManager {\n return this.sheetManager;\n }\n\n /**\n * 获取活动Sheet实例\n */\n getActiveSheet(): WorkSheet | null {\n return this.activeWorkSheet;\n }\n\n /**\n * 监听 Table 事件(统一监听所有 sheet)\n *\n * 提供通用的事件转发机制\n * 当任何 sheet 触发事件时,回调函数会自动接收到增强的事件对象(附带 sheetKey)\n *\n * @example\n * ```typescript\n * // 监听所有 sheet 的单元格点击\n * sheet.onTableEvent('click_cell', (event) => {\n * // event.sheetKey 告诉你是哪个 sheet\n * // event 的其他属性是原始 VTable 事件\n * console.log(`Sheet ${event.sheetKey} 的单元格 [${event.row}, ${event.col}] 被点击`);\n * });\n *\n * // 监听所有 sheet 的单元格值改变\n * sheet.onTableEvent('change_cell_value', (event) => {\n * console.log(`Sheet ${event.sheetKey} 的值改变`);\n * autoSave(event);\n * });\n *\n * // 可以监听任何 VTable 支持的事件\n * sheet.onTableEvent('scroll', (event) => {\n * console.log(`Sheet ${event.sheetKey} 滚动了`);\n * });\n * ```\n *\n * @param type VTable 事件类型\n * @param callback 事件回调函数,参数是增强后的事件对象(包含 sheetKey)\n */\n onTableEvent<K extends keyof TableEventHandlersEventArgumentMap>(\n type: K,\n callback: (event: TableEventHandlersEventArgumentMap[K] & { sheetKey: string }) => void\n ): void {\n this.tableEventRelay.onTableEvent(type, callback);\n }\n\n /**\n * 移除 Table 事件监听器\n *\n * @param type VTable 事件类型\n * @param callback 事件回调函数(可选)\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n offTableEvent(type: string, callback?: (...args: any[]) => void): void {\n this.tableEventRelay.offTableEvent(type, callback);\n }\n\n /**\n * 注册 WorkSheet 事件监听器(在 VTableSheet 层)\n */\n onSheetEvent(type: string, callback: (event: any) => void): void {\n // 所有事件都通过 SpreadSheetEventManager 处理\n // 事件系统会自动处理工作表级别的事件分发\n this.spreadsheetEventManager.on(type as any, callback);\n }\n\n /**\n * 移除 WorkSheet 事件监听器\n *\n * @param type 事件类型\n * @param callback 回调函数(可选)\n */\n offSheetEvent(type: string, callback?: (event: any) => void): void {\n // 所有事件都通过 SpreadSheetEventManager 处理\n // 事件系统会自动处理工作表级别的事件移除\n this.spreadsheetEventManager.off(type as any, callback);\n }\n\n /**\n * 注册事件监听器(统一接口)\n *\n * 推荐使用此方法替代 onSheetEvent,提供更简洁的 API\n *\n * @param type 事件类型\n * @param callback 事件回调函数\n */\n on(type: VTableSheetEventType, callback: (event: any) => void): void {\n this.onSheetEvent(type, callback);\n }\n\n /**\n * 移除事件监听器(统一接口)\n *\n * 推荐使用此方法替代 offSheetEvent,提供更简洁的 API\n *\n * @param type 事件类型\n * @param callback 事件回调函数(可选)\n */\n off(type: VTableSheetEventType, callback?: (event: any) => void): void {\n this.offSheetEvent(type, callback);\n }\n\n /**\n * 根据名称获取Sheet实例\n */\n getSheetByName(sheetName: string): WorkSheet | null {\n // 遍历所有sheet实例,找到匹配的sheet\n for (const [sheetKey, workSheet] of this.workSheetInstances) {\n const sheetDefine = this.sheetManager.getSheet(sheetKey);\n if (sheetDefine && sheetDefine.sheetTitle === sheetName) {\n return workSheet;\n }\n }\n return null;\n }\n\n /**\n * 根据key获取Sheet实例\n */\n getWorkSheetByKey(sheetKey: string): WorkSheet | null {\n return this.workSheetInstances.get(sheetKey) || null;\n }\n\n /**\n * 保存所有数据为配置\n */\n saveToConfig(): IVTableSheetOptions {\n // 收集所有sheet的数据\n const sheets: ISheetDefine[] = [];\n\n this.sheetManager.getAllSheets().forEach(sheetDefine => {\n const instance = this.workSheetInstances.get(sheetDefine.sheetKey);\n if (instance) {\n const data = instance.getCopiedData();\n //#region 组织columns\n //column中去除field字段 (field字段会在columns.map中被使用)\n const columns = instance.getColumns().map(column => {\n // 解构时省略field属性\n const { ...rest } = column;\n // 删除field属性\n delete rest.field;\n return rest;\n });\n // 找到最后一个有title的列的索引\n const lastTitleIndex = columns.reduce((lastIndex, column, index) => (column.title ? index : lastIndex), -1);\n\n // 从最后一个有title的列之后删除所有列\n if (lastTitleIndex === -1) {\n columns.length = 0; // 清空数组\n } else {\n columns.splice(lastTitleIndex + 1);\n }\n //#endregion\n\n //#region 组织data\n // 找到最后一个有非空值的行\n const lastDataIndex = data.reduce((lastIndex, rowData, index) => (rowData ? index : lastIndex), -1);\n // 保留到最后一个有值的行,删除之后的空行\n if (lastDataIndex === -1) {\n data.length = 0; // 清空数组\n } else {\n data.splice(lastDataIndex + 1);\n }\n //#endregion\n // 获取筛选状态\n let filterState = null;\n const filterPlugin = instance.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterState = filterPlugin.getFilterState();\n }\n\n // 获取排序状态\n let sortState = instance.tableInstance.internalProps.sortState;\n let currentSortState;\n if (sortState) {\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n currentSortState = sortState.map(item => ({\n field: item.field,\n order: item.order,\n ...(item.orderFn != null && { orderFn: item.orderFn })\n }));\n }\n\n // 使用FormulaManager的导出方法获取所有公式\n const formulas = this.formulaManager.exportFormulas(sheetDefine.sheetKey);\n\n //#region 从tableInstance.internalProps._widthResizedColMap对应到columns的key 组织columnWidthConfig\n const columnWidthConfig = Array.from(instance.tableInstance.internalProps._widthResizedColMap).map(key => {\n return {\n key: key,\n width: instance.tableInstance.getColWidth(key as number)\n };\n });\n //#endregion\n //#region 从tableInstance.internalProps._heightResizedRowMap对应到columns的key 组织rowHeightConfig\n const rowHeightConfig = Array.from(instance.tableInstance.internalProps._heightResizedRowMap).map(key => {\n return {\n key: key,\n height: instance.tableInstance.getRowHeight(key)\n };\n });\n //#endregion\n\n sheets.push({\n ...sheetDefine,\n data,\n columns,\n cellMerge: instance.tableInstance.options.customMergeCell as TYPES.CustomMergeCellArray,\n showHeader: instance.tableInstance.options.showHeader,\n frozenRowCount: instance.tableInstance.frozenRowCount,\n frozenColCount: instance.tableInstance.frozenColCount,\n active: sheetDefine.sheetKey === this.sheetManager.getActiveSheet().sheetKey,\n filterState: filterState,\n sortState: currentSortState,\n formulas: Object.keys(formulas).length > 0 ? formulas : undefined,\n columnWidthConfig,\n rowHeightConfig\n });\n } else {\n sheets.push(sheetDefine);\n }\n });\n\n return {\n ...this.options,\n sheets\n };\n }\n\n /** 导出当前sheet到文件 */\n exportSheetToFile(fileType: 'csv' | 'xlsx', allSheets: boolean = true): void {\n try {\n // 触发导出开始事件\n this.spreadsheetEventManager.emitExportStart(fileType, allSheets);\n\n const sheet = this.getActiveSheet();\n if (!sheet) {\n throw new Error('No active sheet available for export');\n }\n\n let sheetCount = 0;\n if (fileType === 'csv') {\n if ((sheet.tableInstance as any)?.exportToCsv) {\n (sheet.tableInstance as any).exportToCsv();\n sheetCount = 1;\n } else {\n throw new Error('TableExportPlugin not configured for CSV export');\n }\n } else {\n if (allSheets) {\n this.exportAllSheetsToExcel();\n sheetCount = this.sheetManager.getSheetCount();\n } else {\n if ((sheet.tableInstance as any)?.exportToExcel) {\n (sheet.tableInstance as any).exportToExcel();\n sheetCount = 1;\n } else {\n throw new Error('TableExportPlugin not configured for Excel export');\n }\n }\n }\n\n // 触发导出完成事件\n this.spreadsheetEventManager.emitExportCompleted(fileType, allSheets, sheetCount);\n } catch (error) {\n // 触发导出失败事件\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.spreadsheetEventManager.emitExportError(fileType, allSheets, errorMessage);\n console.warn('Export failed:', errorMessage);\n }\n }\n exportAllSheetsToExcel(): void {\n this.initAllSheetInstances();\n const allDefines = this.sheetManager.getAllSheets();\n const tables = allDefines.map(def => {\n const inst = this.workSheetInstances.get(def.sheetKey)!;\n return { table: inst.tableInstance as any, name: def.sheetTitle || def.sheetKey };\n });\n (this as any)._exportMutipleTablesToExcel?.(tables); //这个方法是在vtable-plugins中添加的,table-export插件在VTableSheet实例上添加了导出所有sheet到Excel的方法\n }\n initAllSheetInstances(): void {\n const allDefines = this.sheetManager.getAllSheets();\n allDefines.forEach(def => {\n if (!this.workSheetInstances.has(def.sheetKey)) {\n const instance = this.createWorkSheetInstance(def);\n this.workSheetInstances.set(def.sheetKey, instance);\n }\n });\n }\n /**\n * 导入文件(支持 Excel 多 sheet 和 CSV)\n * @param options 导入选项,包括 clearExisting(是否清除现有 sheets,默认 true 表示替换模式)\n * @returns Promise<MultiSheetImportResult | void>\n */\n async importFileToSheet(\n options: { clearExisting?: boolean } = { clearExisting: true }\n ): Promise<MultiSheetImportResult | void> {\n try {\n // 触发导入开始事件\n this.spreadsheetEventManager.emitImportStart('xlsx');\n\n // 使用绑定到 VTableSheet 实例的导入方法(插件内部会处理文件选择)\n let result: MultiSheetImportResult | void;\n if ((this as any)?._importFile) {\n result = await (this as any)._importFile({\n clearExisting: options?.clearExisting !== false\n });\n } else {\n // 回退到 tableInstance 的 importFile 方法\n const sheet = this.getActiveSheet();\n if (!sheet) {\n throw new Error('No active sheet available for import');\n }\n if ((sheet.tableInstance as any)?.importFile) {\n result = await (sheet.tableInstance as any).importFile({\n clearExisting: options?.clearExisting !== false\n });\n } else {\n throw new Error('ExcelImportPlugin not configured');\n }\n }\n\n // 触发导入完成事件\n const sheetCount = result && 'sheets' in result ? result.sheets?.length || 0 : 0;\n this.spreadsheetEventManager.emitImportCompleted('xlsx', sheetCount);\n\n return result;\n } catch (error) {\n // 触发导入失败事件\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.spreadsheetEventManager.emitImportError('xlsx', errorMessage);\n console.warn('Import failed:', errorMessage);\n throw error;\n }\n }\n /**\n * 获取容器元素\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取根元素\n */\n getRootElement(): HTMLElement {\n return this.rootElement;\n }\n\n /**\n * 获取选项\n */\n getOptions(): IVTableSheetOptions {\n return this.options;\n }\n\n /**\n * 获取公式栏元素\n */\n getFormulaBarElement(): HTMLElement | null {\n return this.formulaBarElement;\n }\n\n /**\n * 获取sheet标签栏元素\n */\n getSheetTabElement(): HTMLElement | null {\n return this.sheetTabElement;\n }\n\n /**\n * 获取内容区域元素\n */\n getContentElement(): HTMLElement {\n return this.contentElement;\n }\n\n /**\n * 销毁实例\n */\n release(): void {\n // 触发电子表格销毁事件\n this.spreadsheetEventManager.emitDestroyed();\n\n // 清除所有 Table 事件监听器\n this.tableEventRelay.clearAllListeners();\n\n // 释放事件管理器\n this.eventManager.release();\n this.formulaManager.release();\n this.formulaUIManager.release();\n this.spreadsheetEventManager.clearAllListeners();\n\n // 释放菜单管理器\n if (this.menuManager) {\n this.menuManager.release();\n }\n\n // 移除点击外部监听器\n this.sheetTabEventHandler.removeClickOutsideListener();\n\n // 销毁所有sheet实例\n this.workSheetInstances.forEach(instance => {\n instance.release();\n });\n\n // 清空容器\n if (this.rootElement && this.rootElement.parentNode) {\n this.rootElement.parentNode.removeChild(this.rootElement);\n }\n\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n }\n if (this.formulaManager.cellHighlightManager) {\n this.formulaManager.cellHighlightManager.release();\n }\n }\n\n /**\n * 导出指定sheet的数据\n * @param sheetKey sheet的key\n * @returns 数据\n */\n exportData(sheetKey: string): any[][] {\n const sheet = this.workSheetInstances.get(sheetKey);\n if (!sheet) {\n return [];\n }\n return sheet.getData();\n }\n\n /**\n * 导出所有sheet的数据\n * @returns 数据\n */\n exportAllData(): any[][] {\n const sheets = Array.from(this.workSheetInstances.values());\n return sheets.map(sheet => sheet.getData());\n }\n\n /**\n * resize\n */\n resize(): void {\n // const containerWidth = this.getContainer().clientWidth;\n // const containerHeight = this.getContainer().clientHeight;\n // this.rootElement.style.width = `${this.getOptions().width || containerWidth}px`;\n // this.rootElement.style.height = `${this.getOptions().height || containerHeight}px`;\n this.getActiveSheet()?.resize();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/vtable-sheet.ts"],"names":[],"mappings":"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","file":"vtable-sheet.js","sourcesContent":["import { FormulaManager } from '../managers/formula-manager';\nimport SheetManager from '../managers/sheet-manager';\nimport { WorkSheet } from '../core/WorkSheet';\nimport * as VTable from '@visactor/vtable';\nimport { getTablePlugins } from '../core/table-plugins';\nimport { DomEventManager } from '../event/dom-event-manager';\nimport { showSnackbar } from '../tools/ui/snackbar';\nimport type {\n IVTableSheetOptions,\n IVTableSheetUpdateOptions,\n ISheetDefine,\n IWorkSheetOptions,\n IColumnDefine\n} from '../ts-types';\nimport type { MultiSheetImportResult } from '@visactor/vtable-plugins/src/excel-import/types';\nimport type { TableEventHandlersEventArgumentMap } from '@visactor/vtable/es/ts-types/events';\nimport SheetTabDragManager from '../managers/tab-drag-manager';\nimport { FormulaAutocomplete } from '../formula/formula-autocomplete';\nimport { formulaEditor } from '../formula/formula-editor';\nimport type { TYPES } from '@visactor/vtable';\nimport { MenuManager } from '../managers/menu-manager';\nimport { FormulaUIManager } from '../formula/formula-ui-manager';\nimport { SheetTabEventHandler } from './sheet-tab-event-handler';\nimport { TableEventRelay } from '../event/table-event-relay';\nimport type { VTableSheetEventType } from '../ts-types/spreadsheet-events';\nimport { SpreadSheetEventManager } from '../event/spreadsheet-event-manager';\nimport { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';\nimport { pluginIsChanged } from '../sheet-helper';\nimport type { ITableThemeDefine } from '@visactor/vtable/es/themes';\nimport { tableThemeIsChanged } from '@visactor/vtable/es/themes';\n\n// 注册公式编辑器\nVTable.register.editor('formula', formulaEditor);\n\nexport default class VTableSheet {\n /** DOM容器 */\n private container: HTMLElement;\n /** 配置选项 */\n private options: IVTableSheetOptions;\n /** sheet管理器 */\n private sheetManager: SheetManager;\n /** 公式管理器 */\n formulaManager: FormulaManager;\n /** 事件管理器 */\n private eventManager: DomEventManager;\n\n /** 菜单管理 */\n private menuManager: MenuManager;\n /** 当前活动sheet实例 */\n private activeWorkSheet: WorkSheet | null = null;\n /** 所有sheet实例 */\n workSheetInstances: Map<string, WorkSheet> = new Map();\n /** 公式自动补全 */\n private formulaAutocomplete: FormulaAutocomplete | null = null;\n /** Table 事件中转器 */\n private tableEventRelay: TableEventRelay;\n /** 电子表格事件管理器 */\n private spreadsheetEventManager: SpreadSheetEventManager;\n /** 统一事件总线 */\n private eventBus: VTableSheetEventBus;\n\n /** 公式UI管理器 */\n formulaUIManager: FormulaUIManager;\n\n /** UI组件 */\n private rootElement: HTMLElement;\n private formulaBarElement: HTMLElement | null = null;\n private sheetTabElement: HTMLElement | null = null;\n private mainMenuElement: HTMLElement | null = null;\n private contentElement: HTMLElement;\n\n // tab拖拽管理器\n private dragManager: SheetTabDragManager;\n /** sheet标签事件处理器 */\n private sheetTabEventHandler: SheetTabEventHandler;\n\n /**\n * 构造函数\n * @param options 配置选项\n */\n constructor(container: HTMLElement, options: IVTableSheetOptions) {\n this.container = container;\n this.options = this.mergeDefaultOptions(options);\n\n // 创建统一事件总线\n this.eventBus = new VTableSheetEventBus();\n\n // 创建管理器(注意:tableEventRelay 必须在 eventManager 之前初始化)\n this.sheetManager = new SheetManager(this.eventBus);\n this.formulaManager = new FormulaManager(this);\n this.tableEventRelay = new TableEventRelay(this); // ⚠️ 必须在 EventManager 之前初始化\n this.eventManager = new DomEventManager(this); // EventManager 构造函数会调用 this.onTableEvent()\n this.dragManager = new SheetTabDragManager(this);\n this.menuManager = new MenuManager(this);\n this.formulaUIManager = new FormulaUIManager(this);\n this.sheetTabEventHandler = new SheetTabEventHandler(this);\n this.spreadsheetEventManager = new SpreadSheetEventManager(this);\n\n // 初始化UI\n this.initUI();\n\n // 初始化sheets\n this.initSheets();\n\n this.resize();\n }\n\n /**\n * 合并默认配置\n */\n private mergeDefaultOptions(options: IVTableSheetOptions): IVTableSheetOptions {\n return {\n showFormulaBar: true,\n showSheetTab: true,\n defaultRowHeight: 25,\n defaultColWidth: 100,\n ...options\n };\n }\n\n /**\n * 初始化公式自动补全\n */\n private initFormulaAutocomplete(): void {\n if (!this.formulaBarElement) {\n return;\n }\n\n const formulaInput = this.formulaUIManager.formulaInput;\n if (formulaInput) {\n this.formulaAutocomplete = new FormulaAutocomplete(this.rootElement, this);\n this.formulaAutocomplete.attachTo(formulaInput);\n }\n }\n\n /**\n * 初始化UI\n */\n private initUI(): void {\n // 创建根元素\n this.rootElement = document.createElement('div');\n this.rootElement.className = 'vtable-sheet-container';\n // this.rootElement.style.width = `${this.options.width}px`;\n // this.rootElement.style.height = `${this.options.height}px`;\n this.container.appendChild(this.rootElement);\n //创建顶部菜单和公式的容器\n const topContainer = document.createElement('div');\n topContainer.className = 'vtable-sheet-top-container';\n this.rootElement.appendChild(topContainer);\n\n // 创建主菜单\n if (this.options.mainMenu?.show) {\n this.mainMenuElement = this.menuManager.createMainMenu();\n topContainer.appendChild(this.mainMenuElement);\n }\n // 创建公式栏\n if (this.options.showFormulaBar) {\n this.formulaBarElement = this.formulaUIManager.createFormulaBar();\n topContainer.appendChild(this.formulaBarElement);\n\n this.initFormulaAutocomplete();\n }\n\n // 创建内容区域\n this.contentElement = document.createElement('div');\n this.contentElement.className = 'vtable-sheet-content';\n this.rootElement.appendChild(this.contentElement);\n\n // 创建sheet切换栏\n if (this.options.showSheetTab) {\n this.sheetTabElement = this.createSheetTab();\n this.rootElement.appendChild(this.sheetTabElement);\n }\n }\n\n /**\n * 创建sheet切换栏\n */\n private createSheetTab(): HTMLElement {\n // SVG图标常量\n const addIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"/>' +\n '</svg>';\n const leftIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>' +\n '</svg>';\n const rightIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>' +\n '</svg>';\n const menuIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 ' +\n '.9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>' +\n '</svg>';\n\n const sheetTab = document.createElement('div');\n sheetTab.className = 'vtable-sheet-tab-bar';\n\n // 创建左侧渐变效果\n const fadeLeft = document.createElement('div');\n fadeLeft.className = 'vtable-sheet-fade-left';\n fadeLeft.style.display = 'none';\n sheetTab.appendChild(fadeLeft);\n\n // 创建中间的tabs容器\n const tabsContainer = document.createElement('div');\n tabsContainer.className = 'vtable-sheet-tabs-container';\n tabsContainer.addEventListener('scroll', () =>\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight)\n );\n sheetTab.appendChild(tabsContainer);\n\n // 创建插入指示器\n const insertIndicator = document.createElement('div');\n insertIndicator.className = 'vtable-sheet-insert-indicator';\n insertIndicator.style.display = 'none';\n tabsContainer.appendChild(insertIndicator);\n\n // 创建右侧渐变效果\n const fadeRight = document.createElement('div');\n fadeRight.className = 'vtable-sheet-fade-right';\n sheetTab.appendChild(fadeRight);\n\n // 添加新增sheet按钮\n const addButton = document.createElement('button');\n addButton.className = 'vtable-sheet-add-button';\n addButton.innerHTML = addIcon;\n addButton.title = '添加工作表';\n addButton.addEventListener('click', () => this._addNewSheet());\n sheetTab.appendChild(addButton);\n\n // 创建导航按钮容器\n const navButtons = document.createElement('div');\n navButtons.className = 'vtable-sheet-nav-buttons';\n\n // 创建左侧滚动按钮\n const leftScrollBtn = document.createElement('button');\n leftScrollBtn.className = 'vtable-sheet-scroll-button';\n leftScrollBtn.innerHTML = leftIcon;\n leftScrollBtn.title = '向左滚动';\n leftScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('left', tabsContainer));\n navButtons.appendChild(leftScrollBtn);\n\n // 创建右侧滚动按钮\n const rightScrollBtn = document.createElement('button');\n rightScrollBtn.className = 'vtable-sheet-scroll-button';\n rightScrollBtn.innerHTML = rightIcon;\n rightScrollBtn.title = '向右滚动';\n rightScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('right', tabsContainer));\n navButtons.appendChild(rightScrollBtn);\n\n // 创建sheet菜单按钮\n const menuButton = document.createElement('button');\n menuButton.className = 'vtable-sheet-menu-button';\n menuButton.innerHTML = menuIcon;\n menuButton.title = '工作表选项';\n menuButton.addEventListener('click', e => this.sheetTabEventHandler.toggleSheetMenu(e));\n navButtons.appendChild(menuButton);\n\n // 创建菜单容器\n const menuContainer = document.createElement('ul');\n menuContainer.className = 'vtable-sheet-menu-list';\n sheetTab.appendChild(menuContainer);\n\n sheetTab.appendChild(navButtons);\n // 初始化渐变效果\n setTimeout(() => {\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight);\n }, 100);\n\n return sheetTab;\n }\n\n /**\n * 激活sheet标签并滚动到可见区域\n */\n private _activeSheetTab(): void {\n if (this.options.showSheetTab === false) {\n return;\n }\n this.sheetTabEventHandler.activeSheetTab();\n }\n /**\n * 更新sheet切换标签\n * @param tabsContainer 标签容器\n */\n updateSheetTabs(\n tabsContainer: HTMLElement = this.sheetTabElement?.querySelector('.vtable-sheet-tabs-container')\n ): void {\n if (!tabsContainer) {\n return;\n }\n // 清除现有标签 - 直接清空容器内容(这会移除所有事件监听器)\n tabsContainer.innerHTML = '';\n\n // 添加sheet标签\n const sheets = this.sheetManager.getAllSheets();\n\n sheets.forEach((sheet, index) => {\n tabsContainer.appendChild(this.createSheetTabItem(sheet, index));\n });\n // 激活sheet标签并滚动到可见区域\n this._activeSheetTab();\n }\n /**\n * 创建tab栏标签项\n */\n private createSheetTabItem(sheet: ISheetDefine, _index: number): HTMLElement {\n const tab = document.createElement('div');\n tab.className = 'vtable-sheet-tab';\n tab.dataset.key = sheet.sheetKey;\n tab.textContent = sheet.sheetTitle;\n tab.title = sheet.sheetTitle;\n tab.addEventListener('click', () => this.activateSheet(sheet.sheetKey));\n tab.addEventListener('dblclick', () =>\n this.sheetTabEventHandler.handleSheetTabDblClick(sheet.sheetKey, sheet.sheetTitle)\n );\n // 拖拽事件\n tab.addEventListener('mousedown', e => this.dragManager.handleTabMouseDown(e, sheet.sheetKey));\n\n return tab;\n }\n\n /**\n * 更新sheet列表\n */\n updateSheetMenu(): void {\n if (this.options.showSheetTab === false) {\n return;\n }\n this.sheetTabEventHandler.updateSheetMenu();\n }\n\n /**\n * 初始化sheets\n */\n private initSheets(): void {\n if (this.options.sheets && this.options.sheets.length > 0) {\n // 添加所有sheet\n this.options.sheets.forEach((sheetDefine: ISheetDefine) => {\n this.sheetManager.addSheet(sheetDefine);\n });\n\n // 找到active的sheet\n let activeSheetKey = '';\n const activeSheet = this.options.sheets.find((sheet: ISheetDefine) => sheet.active);\n if (activeSheet) {\n activeSheetKey = activeSheet.sheetKey;\n } else {\n activeSheetKey = this.options.sheets[0].sheetKey;\n }\n\n // 激活sheet\n this.activateSheet(activeSheetKey);\n } else {\n // 如果没有提供sheets,创建一个默认的\n this._addNewSheet();\n }\n }\n\n /**\n * 激活指定sheet\n * @param sheetKey sheet的key\n */\n activateSheet(sheetKey: string): void {\n // 获取之前激活的sheet信息\n const previousActiveSheet = this.sheetManager.getActiveSheet();\n const previousSheetKey = previousActiveSheet?.sheetKey;\n const previousSheetTitle = previousActiveSheet?.sheetTitle;\n\n // 设置活动sheet\n this.sheetManager.setActiveSheet(sheetKey);\n\n // 获取sheet定义\n const sheetDefine = this.sheetManager.getSheet(sheetKey);\n if (!sheetDefine) {\n return;\n }\n\n // 隐藏所有sheet实例并解除事件绑定\n this.workSheetInstances.forEach(instance => {\n instance.getElement().style.display = 'none';\n // 解除事件绑定以防止重复触发\n if (instance.tableInstance) {\n this.tableEventRelay.unbindSheetEvents(instance.sheetKey, instance.tableInstance);\n }\n });\n\n // 如果已经存在实例,则显示并激活对应tab和menu\n if (this.workSheetInstances.has(sheetKey)) {\n const instance = this.workSheetInstances.get(sheetKey);\n if (!instance) {\n throw new Error(`Worksheet instance for key \"${sheetKey}\" not found`);\n }\n instance.getElement().style.display = 'block';\n this.activeWorkSheet = instance;\n\n // 重新绑定事件(因为我们在隐藏时解除了绑定)\n if (instance.tableInstance) {\n this.tableEventRelay.bindSheetEvents(instance.sheetKey, instance.tableInstance);\n }\n\n // 更新公式管理器中的活动工作表(在实例激活后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // sheet标签和菜单项激活样式\n this._activeSheetTab();\n this.sheetTabEventHandler.activeSheetMenuItem();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n } else {\n // 创建新的sheet实例\n const instance = this.createWorkSheetInstance(sheetDefine);\n this.workSheetInstances.set(sheetKey, instance);\n this.activeWorkSheet = instance;\n\n // 更新公式管理器中的活动工作表(在实例创建后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // 刷新sheet标签和菜单\n this.updateSheetTabs();\n this.updateSheetMenu();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n }\n\n this.updateFormulaBar();\n\n // 触发工作表激活事件(电子表格级别)\n this.spreadsheetEventManager.emitSheetActivated(\n sheetKey,\n sheetDefine.sheetTitle,\n previousSheetKey,\n previousSheetTitle\n );\n\n // 触发之前工作表的停用事件\n if (previousSheetKey && previousSheetKey !== sheetKey) {\n this.spreadsheetEventManager.emitSheetDeactivated(previousSheetKey, previousSheetTitle);\n }\n }\n\n addSheet(sheet: ISheetDefine): void {\n this.sheetManager.addSheet(sheet);\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n\n /**\n * 删除sheet\n * @param sheetKey 工作表key\n */\n removeSheet(sheetKey: string): void {\n if (this.sheetManager.getSheetCount() <= 1) {\n showSnackbar('至少保留一个工作表', 1300);\n return;\n }\n\n // 删除实例对应的dom元素\n const instance = this.workSheetInstances.get(sheetKey);\n if (instance) {\n instance.release();\n this.workSheetInstances.delete(sheetKey);\n }\n\n // 删除sheet定义\n const newActiveSheetKey = this.sheetManager.removeSheet(sheetKey);\n\n // 激活新的sheet(如果有)\n if (newActiveSheetKey) {\n this.activateSheet(newActiveSheetKey);\n }\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n getSheetCount(): number {\n return this.sheetManager.getSheetCount();\n }\n getSheet(sheetKey: string): ISheetDefine | null {\n return this.sheetManager.getSheet(sheetKey);\n }\n getAllSheets(): ISheetDefine[] {\n return this.sheetManager.getAllSheets();\n }\n\n /**\n * 创建sheet实例\n * @param sheetDefine sheet的定义\n */\n createWorkSheetInstance(sheetDefine: ISheetDefine): WorkSheet {\n formulaEditor.setSheet(this);\n // 计算内容区域大小\n const contentWidth = this.contentElement.clientWidth;\n const contentHeight = this.contentElement.clientHeight;\n sheetDefine.dragOrder = sheetDefine.dragOrder ?? this.options.dragOrder;\n // 创建sheet实例\n const sheet = new WorkSheet(this, {\n ...sheetDefine,\n container: this.contentElement,\n width: contentWidth,\n height: contentHeight,\n defaultRowHeight: this.options.defaultRowHeight,\n defaultColWidth: this.options.defaultColWidth,\n dragOrder: sheetDefine.dragOrder,\n plugins: getTablePlugins(sheetDefine, this.options, this),\n headerEditor: 'formula',\n editor: 'formula',\n select: {\n makeSelectCellVisible: false\n },\n // style: {\n // borderColor: ['#E1E4E8', '#E1E4E8', '#E1E4E8', '#E1E4E8'],\n // borderLineWidth: [1, 1, 1, 1],\n // borderLineDash: [null, null, null, null],\n // padding: [8, 8, 8, 8]\n // },\n editCellTrigger: ['api', 'keydown', 'doubleclick'],\n customMergeCell: sheetDefine.cellMerge,\n theme: sheetDefine.theme?.tableTheme || this.options.theme?.tableTheme\n });\n\n // 事件系统现在通过 TableEventRelay 自动处理,不再需要手动绑定\n\n // 在公式管理器中添加这个sheet\n try {\n const normalizedData = sheetDefine.data\n ? this.formulaManager.normalizeSheetData(sheetDefine.data, sheet.tableInstance)\n : [];\n this.formulaManager.addSheet(sheetDefine.sheetKey, normalizedData, sheetDefine.sheetTitle);\n // 加载保存的公式数据(如果有)\n if (sheetDefine.formulas && Object.keys(sheetDefine.formulas).length > 0) {\n this.loadFormulas(sheetDefine.sheetKey, sheetDefine.formulas);\n }\n } catch (error) {\n console.warn(`Sheet ${sheetDefine.sheetKey} may already exist in formula manager:`, error);\n // 如果添加失败(可能已存在),继续执行\n }\n\n return sheet;\n }\n /**\n * 加载指定工作表的公式数据\n * @param sheetKey 工作表键\n * @param formulas 公式数据 (A1表示法的单元格引用 -> 公式内容)\n */\n private loadFormulas(sheetKey: string, formulas: Record<string, string>): void {\n if (!formulas || Object.keys(formulas).length === 0) {\n return;\n }\n\n try {\n // 优化公式计算顺序\n const sortedFormulas = this.formulaManager.sortFormulasByDependency(sheetKey, formulas);\n // 按照优化后的顺序设置公式\n for (const [cellRef, formula] of sortedFormulas) {\n // 解析单元格引用 (如 A1, B2) 到行列索引\n const { row, col } = this.parseCellKey(cellRef);\n // 设置单元格公式\n this.formulaManager.setCellContent({ sheet: sheetKey, row, col }, formula);\n }\n } catch (error) {\n console.error(`Failed to load formulas for sheet ${sheetKey}:`, error);\n }\n }\n\n /**\n * 将单元格引用(A1表示法)解析为行列索引\n * @param cellKey 单元格引用 (如 A1, B2)\n * @returns 行列索引 (0-based)\n */\n private parseCellKey(cellKey: string): { row: number; col: number } {\n // 匹配列引用(字母部分)和行引用(数字部分)\n const match = cellKey.match(/^([A-Za-z]+)(\\d+)$/);\n if (!match) {\n throw new Error(`Invalid cell reference: ${cellKey}`);\n }\n const [, colStr, rowStr] = match;\n // 解析行索引 (1-based -> 0-based)\n const row = parseInt(rowStr, 10) - 1;\n // 解析列索引 (A -> 0, B -> 1, ..., Z -> 25, AA -> 26, etc.)\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n const charCode = colStr.toUpperCase().charCodeAt(i) - 65; // 65 is ASCII for 'A'\n col = col * 26 + charCode;\n }\n return { row, col };\n }\n\n /**\n * 恢复筛选状态\n */\n private restoreFilterState(sheet: WorkSheet, sheetDefine: ISheetDefine): void {\n // 如果没有保存的筛选状态,直接返回\n if (!sheetDefine.filterState) {\n return;\n }\n\n // console.log(`恢复 Sheet ${sheetDefine.sheetKey} 的筛选状态:`, sheetDefine.filterState);\n\n // 等待表格初始化完成\n setTimeout(() => {\n if (sheet.tableInstance && sheet.tableInstance.pluginManager) {\n const filterPlugin = sheet.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterPlugin.setFilterState(sheetDefine.filterState);\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 未找到筛选插件或插件不支持 setFilterState 方法`);\n }\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 表格实例或插件管理器未初始化`);\n }\n }, 0);\n }\n\n /**\n * 添加新sheet\n */\n private _addNewSheet(): void {\n // 生成新sheet的key和title\n const sheetCount = this.sheetManager.getSheetCount();\n const baseKey = `sheet${sheetCount + 1}`;\n const baseTitle = `Sheet ${sheetCount + 1}`;\n let key = baseKey;\n let title = baseTitle;\n let index = sheetCount + 1;\n // 检查key和title是否被占用,递增直到唯一\n const existingKeys = new Set(this.sheetManager.getAllSheets().map(s => s.sheetKey));\n const existingTitles = new Set(this.sheetManager.getAllSheets().map(s => s.sheetTitle));\n while (existingKeys.has(key) || existingTitles.has(title)) {\n index += 1;\n key = `sheet${index}`;\n title = `Sheet ${index}`;\n }\n\n // 创建新sheet配置\n const newSheet: ISheetDefine = {\n sheetKey: key,\n sheetTitle: title,\n columnCount: 20,\n rowCount: 100,\n data: []\n };\n\n // 添加到管理器\n this.sheetManager.addSheet(newSheet);\n\n // 激活新sheet\n this.activateSheet(key);\n }\n\n /**\n * 更新公式栏\n */\n private updateFormulaBar(): void {\n this.formulaUIManager.updateFormulaBar();\n }\n\n /**\n * 获取公式管理器\n */\n getFormulaManager(): FormulaManager {\n return this.formulaManager;\n }\n /**\n * 获取电子表格事件管理器\n */\n getSpreadSheetEventManager(): SpreadSheetEventManager {\n return this.spreadsheetEventManager;\n }\n\n /**\n * 获取统一事件总线\n */\n getEventBus(): VTableSheetEventBus {\n return this.eventBus;\n }\n\n /**\n * 获取Sheet管理器\n */\n getSheetManager(): SheetManager {\n return this.sheetManager;\n }\n\n /**\n * 获取活动Sheet实例\n */\n getActiveSheet(): WorkSheet | null {\n return this.activeWorkSheet;\n }\n\n /**\n * 监听 Table 事件(统一监听所有 sheet)\n *\n * 提供通用的事件转发机制\n * 当任何 sheet 触发事件时,回调函数会自动接收到增强的事件对象(附带 sheetKey)\n *\n * @example\n * ```typescript\n * // 监听所有 sheet 的单元格点击\n * sheet.onTableEvent('click_cell', (event) => {\n * // event.sheetKey 告诉你是哪个 sheet\n * // event 的其他属性是原始 VTable 事件\n * console.log(`Sheet ${event.sheetKey} 的单元格 [${event.row}, ${event.col}] 被点击`);\n * });\n *\n * // 监听所有 sheet 的单元格值改变\n * sheet.onTableEvent('change_cell_value', (event) => {\n * console.log(`Sheet ${event.sheetKey} 的值改变`);\n * autoSave(event);\n * });\n *\n * // 可以监听任何 VTable 支持的事件\n * sheet.onTableEvent('scroll', (event) => {\n * console.log(`Sheet ${event.sheetKey} 滚动了`);\n * });\n * ```\n *\n * @param type VTable 事件类型\n * @param callback 事件回调函数,参数是增强后的事件对象(包含 sheetKey)\n */\n onTableEvent<K extends keyof TableEventHandlersEventArgumentMap>(\n type: K,\n callback: (event: TableEventHandlersEventArgumentMap[K] & { sheetKey: string }) => void\n ): void {\n this.tableEventRelay.onTableEvent(type, callback);\n }\n\n /**\n * 移除 Table 事件监听器\n *\n * @param type VTable 事件类型\n * @param callback 事件回调函数(可选)\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n offTableEvent(type: string, callback?: (...args: any[]) => void): void {\n this.tableEventRelay.offTableEvent(type, callback);\n }\n\n /**\n * 注册 WorkSheet 事件监听器(在 VTableSheet 层)\n */\n onSheetEvent(type: string, callback: (event: any) => void): void {\n // 所有事件都通过 SpreadSheetEventManager 处理\n // 事件系统会自动处理工作表级别的事件分发\n this.spreadsheetEventManager.on(type as any, callback);\n }\n\n /**\n * 移除 WorkSheet 事件监听器\n *\n * @param type 事件类型\n * @param callback 回调函数(可选)\n */\n offSheetEvent(type: string, callback?: (event: any) => void): void {\n // 所有事件都通过 SpreadSheetEventManager 处理\n // 事件系统会自动处理工作表级别的事件移除\n this.spreadsheetEventManager.off(type as any, callback);\n }\n\n /**\n * 注册事件监听器(统一接口)\n *\n * 推荐使用此方法替代 onSheetEvent,提供更简洁的 API\n *\n * @param type 事件类型\n * @param callback 事件回调函数\n */\n on(type: VTableSheetEventType, callback: (event: any) => void): void {\n this.onSheetEvent(type, callback);\n }\n\n /**\n * 移除事件监听器(统一接口)\n *\n * 推荐使用此方法替代 offSheetEvent,提供更简洁的 API\n *\n * @param type 事件类型\n * @param callback 事件回调函数(可选)\n */\n off(type: VTableSheetEventType, callback?: (event: any) => void): void {\n this.offSheetEvent(type, callback);\n }\n\n /**\n * 根据名称获取Sheet实例\n */\n getSheetByName(sheetName: string): WorkSheet | null {\n // 遍历所有sheet实例,找到匹配的sheet\n for (const [sheetKey, workSheet] of this.workSheetInstances) {\n const sheetDefine = this.sheetManager.getSheet(sheetKey);\n if (sheetDefine && sheetDefine.sheetTitle === sheetName) {\n return workSheet;\n }\n }\n return null;\n }\n\n /**\n * 根据key获取Sheet实例\n */\n getWorkSheetByKey(sheetKey: string): WorkSheet | null {\n return this.workSheetInstances.get(sheetKey) || null;\n }\n\n /**\n * 保存所有数据为配置\n */\n saveToConfig(): IVTableSheetOptions {\n // 收集所有sheet的数据\n const sheets: ISheetDefine[] = [];\n\n this.sheetManager.getAllSheets().forEach(sheetDefine => {\n const instance = this.workSheetInstances.get(sheetDefine.sheetKey);\n if (instance) {\n const data = instance.getCopiedData();\n //#region 组织columns\n //column中去除field字段 (field字段会在columns.map中被使用)\n const columns = instance.getColumns().map(column => {\n // 解构时省略field属性\n const { ...rest } = column;\n // 删除field属性\n delete rest.field;\n return rest;\n });\n // 找到最后一个有title的列的索引\n const lastTitleIndex = columns.reduce((lastIndex, column, index) => (column.title ? index : lastIndex), -1);\n\n // 从最后一个有title的列之后删除所有列\n if (lastTitleIndex === -1) {\n columns.length = 0; // 清空数组\n } else {\n columns.splice(lastTitleIndex + 1);\n }\n //#endregion\n\n //#region 组织data\n // 找到最后一个有非空值的行\n const lastDataIndex = data.reduce((lastIndex, rowData, index) => (rowData ? index : lastIndex), -1);\n // 保留到最后一个有值的行,删除之后的空行\n if (lastDataIndex === -1) {\n data.length = 0; // 清空数组\n } else {\n data.splice(lastDataIndex + 1);\n }\n //#endregion\n // 获取筛选状态\n let filterState = null;\n const filterPlugin = instance.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterState = filterPlugin.getFilterState();\n }\n\n // 获取排序状态\n let sortState = instance.tableInstance.internalProps.sortState;\n let currentSortState;\n if (sortState) {\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n currentSortState = sortState.map(item => ({\n field: item.field,\n order: item.order,\n ...(item.orderFn !== null && item.orderFn !== undefined && { orderFn: item.orderFn })\n }));\n }\n\n // 使用FormulaManager的导出方法获取所有公式\n const formulas = this.formulaManager.exportFormulas(sheetDefine.sheetKey);\n\n //#region 从tableInstance.internalProps._widthResizedColMap对应到columns的key 组织columnWidthConfig\n const columnWidthConfig = Array.from(instance.tableInstance.internalProps._widthResizedColMap).map(key => {\n return {\n key: key,\n width: instance.tableInstance.getColWidth(key as number)\n };\n });\n //#endregion\n //#region 从tableInstance.internalProps._heightResizedRowMap对应到columns的key 组织rowHeightConfig\n const rowHeightConfig = Array.from(instance.tableInstance.internalProps._heightResizedRowMap).map(key => {\n return {\n key: key,\n height: instance.tableInstance.getRowHeight(key)\n };\n });\n //#endregion\n\n sheets.push({\n ...sheetDefine,\n data,\n columns: columns as IColumnDefine[],\n cellMerge: instance.tableInstance.options.customMergeCell as TYPES.CustomMergeCellArray,\n showHeader: instance.tableInstance.options.showHeader,\n frozenRowCount: instance.tableInstance.frozenRowCount,\n frozenColCount: instance.tableInstance.frozenColCount,\n active: sheetDefine.sheetKey === this.sheetManager.getActiveSheet().sheetKey,\n filterState: filterState,\n sortState: currentSortState,\n formulas: Object.keys(formulas).length > 0 ? formulas : undefined,\n columnWidthConfig,\n rowHeightConfig\n });\n } else {\n sheets.push(sheetDefine);\n }\n });\n\n return {\n ...this.options,\n sheets\n };\n }\n updateMainMenu(mainMenu: IVTableSheetOptions['mainMenu']): void {\n this.options.mainMenu = mainMenu;\n this.menuManager.updateMainMenu(mainMenu);\n }\n /**\n * 更新电子表格配置\n *\n * - 当 options 中包含 sheets 时,视为“全量更新”,会对比新旧 sheets 列表并执行新增/删除/更新逻辑;\n * - 当 options 中不包含 sheets 时,视为“增量更新”,仅对常用全局配置进行局部更新,并下发到受影响的 WorkSheet。\n */\n updateOption(options: IVTableSheetUpdateOptions): void {\n if (!options) {\n return;\n }\n const hasMainMenu = typeof options.mainMenu !== 'undefined';\n if (hasMainMenu) {\n this.updateMainMenu(options.mainMenu);\n }\n const pluginModulesChanged = pluginIsChanged(this.options.VTablePluginModules, options.VTablePluginModules);\n const tableThemeChanged = tableThemeIsChanged(this.options.theme?.tableTheme, options.theme?.tableTheme);\n //对options中非sheets的配置项逐项进行分析\n const { sheets, ...rest } = options;\n // if (Object.keys(rest).length > 0) {\n // this.updateGlobalOptions(rest);\n // }\n\n // 先更新顶层 options(保持最新配置,用于后续新增 sheet 等场景)\n this.options = {\n ...this.options,\n ...(options as IVTableSheetOptions)\n };\n\n // 如果包含 sheets,按全量更新处理\n if (Array.isArray(options.sheets) || pluginModulesChanged || tableThemeChanged) {\n this.updateSheets(options);\n } else {\n // 仅做增量更新\n // this.updateGlobalOptions(options);\n }\n }\n\n /**\n * 全量更新 sheets:对比新旧列表,执行新增 / 删除 / 更新\n *\n * - 新增:创建 WorkSheet 实例并绑定事件、注册公式;\n * - 删除:释放 WorkSheet 实例和底层表格、移除公式;\n * - 更新:复用已存在的 WorkSheet 实例,调用 updateSheetOption 做增量更新。\n *\n * 完成结构变更后,通过 FormulaManager 重建公式依赖,确保跨表引用一致。\n */\n private updateSheets(options: IVTableSheetUpdateOptions): void {\n const nextSheets = options.sheets || [];\n const prevSheets = this.sheetManager.getAllSheets();\n\n const prevMap = new Map<string, ISheetDefine>();\n prevSheets.forEach(sheet => {\n prevMap.set(sheet.sheetKey, sheet);\n });\n\n const added: ISheetDefine[] = [];\n const updated: { prev: ISheetDefine; next: ISheetDefine }[] = [];\n\n nextSheets.forEach(next => {\n const prev = prevMap.get(next.sheetKey);\n if (!prev) {\n added.push(next);\n } else {\n updated.push({ prev, next });\n prevMap.delete(next.sheetKey);\n }\n });\n\n const removedKeys = Array.from(prevMap.keys());\n\n // 先删除移除的 sheet\n removedKeys.forEach(sheetKey => {\n const instance = this.workSheetInstances.get(sheetKey);\n if (instance) {\n instance.release();\n this.workSheetInstances.delete(sheetKey);\n }\n try {\n this.sheetManager.removeSheet(sheetKey);\n this.formulaManager.removeSheet(sheetKey);\n } catch (error) {\n console.warn(`Failed to remove sheet ${sheetKey}:`, error);\n }\n });\n\n // 新增 sheet\n added.forEach(sheetDefine => {\n this.sheetManager.addSheet(sheetDefine);\n const instance = this.createWorkSheetInstance(sheetDefine);\n this.workSheetInstances.set(sheetDefine.sheetKey, instance);\n });\n\n // 更新已存在的 sheet:优先使用 WorkSheet.updateSheetOption 做增量更新\n updated.forEach(({ prev, next: next_sheetDefine }) => {\n const instance = this.workSheetInstances.get(next_sheetDefine.sheetKey);\n\n // 将最新配置合并回 SheetManager 持有的定义对象,保证后续 getAllSheets 返回的是最新配置\n Object.assign(prev, next_sheetDefine);\n\n if (!instance) {\n const newInstance = this.createWorkSheetInstance(next_sheetDefine);\n this.workSheetInstances.set(next_sheetDefine.sheetKey, newInstance);\n return;\n }\n\n const sheetOption: IWorkSheetOptions = {\n sheetTitle: next_sheetDefine.sheetTitle,\n sheetKey: next_sheetDefine.sheetKey,\n showHeader: next_sheetDefine.showHeader,\n frozenRowCount: next_sheetDefine.frozenRowCount,\n frozenColCount: next_sheetDefine.frozenColCount,\n filter: next_sheetDefine.filter,\n filterState: next_sheetDefine.filterState,\n sortState: next_sheetDefine.sortState,\n columnWidthConfig: next_sheetDefine.columnWidthConfig,\n rowHeightConfig: next_sheetDefine.rowHeightConfig,\n defaultRowHeight: this.options.defaultRowHeight,\n defaultColWidth: this.options.defaultColWidth,\n dragOrder: next_sheetDefine.dragOrder,\n plugins: getTablePlugins(next_sheetDefine, this.options, this),\n headerEditor: 'formula',\n editor: 'formula',\n select: {\n makeSelectCellVisible: false\n },\n editCellTrigger: ['api', 'keydown', 'doubleclick'],\n customMergeCell: next_sheetDefine.cellMerge,\n theme: next_sheetDefine.theme?.tableTheme || this.options.theme?.tableTheme,\n data: next_sheetDefine.data,\n columns: next_sheetDefine.columns\n // // 传入 data/columns 以便 updateOption 能正确更新表格数据;显式传 columns: undefined 时也要透传,以便恢复为无表头\n // ...('data' in next_sheetDefine && { data: next_sheetDefine.data }),\n // ...('columns' in next_sheetDefine && { columns: next_sheetDefine.columns })\n };\n\n instance.updateSheetOption(sheetOption);\n });\n\n // 结构变更完成后,重建所有公式与依赖\n try {\n this.formulaManager.rebuildFormulas(nextSheets);\n // 重建后同步每个 sheet 的数据并重新加载公式\n nextSheets.forEach(sheetDefine => {\n const worksheetInstance = this.workSheetInstances.get(sheetDefine.sheetKey);\n if (!worksheetInstance || !worksheetInstance.tableInstance) {\n return;\n }\n const dataToUse = sheetDefine.data || worksheetInstance.getData();\n const normalizedData = this.formulaManager.normalizeSheetData(dataToUse, worksheetInstance.tableInstance);\n this.formulaManager.formulaEngine.updateSheetData(sheetDefine.sheetKey, normalizedData);\n if (sheetDefine.formulas && Object.keys(sheetDefine.formulas).length > 0) {\n this.loadFormulas(sheetDefine.sheetKey, sheetDefine.formulas);\n }\n });\n // 对于原来有公式但更新后移除的 sheet,显式清除公式状态\n updated.forEach(({ prev, next: next_sheetDefine }) => {\n const hadFormulas = prev.formulas && Object.keys(prev.formulas).length > 0;\n const hasFormulas = next_sheetDefine.formulas && Object.keys(next_sheetDefine.formulas).length > 0;\n if (!hadFormulas || hasFormulas) {\n return;\n }\n const worksheetInstance = this.workSheetInstances.get(next_sheetDefine.sheetKey);\n if (!worksheetInstance) {\n return;\n }\n const data = next_sheetDefine.data || worksheetInstance.getData();\n Object.keys(prev.formulas).forEach(cellRef => {\n try {\n const { row, col } = this.parseCellKey(cellRef);\n const cellValue = data?.[row]?.[col];\n if (typeof cellValue !== 'undefined') {\n this.formulaManager.setCellContent({ sheet: next_sheetDefine.sheetKey, row, col }, cellValue);\n }\n } catch (error) {\n console.warn(`Failed to clear formula for ${next_sheetDefine.sheetKey}!${cellRef}:`, error);\n }\n });\n });\n } catch (error) {\n console.error('Failed to rebuild formulas after sheets update:', error);\n }\n this.sheetManager.sortSheets(this.options.sheets);\n // 更新 sheet tab 和菜单\n this.updateSheetTabs();\n this.updateSheetMenu();\n\n // 保持当前激活 sheet:优先使用新配置中的 active 标记,否则回退到第一个 sheet\n const activeDefine = nextSheets.find(s => s.active) || nextSheets[0];\n if (activeDefine) {\n this.activateSheet(activeDefine.sheetKey);\n }\n }\n /** 导出当前sheet到文件 */\n exportSheetToFile(fileType: 'csv' | 'xlsx', allSheets: boolean = true): void {\n try {\n // 触发导出开始事件\n this.spreadsheetEventManager.emitExportStart(fileType, allSheets);\n\n const sheet = this.getActiveSheet();\n if (!sheet) {\n throw new Error('No active sheet available for export');\n }\n\n let sheetCount = 0;\n if (fileType === 'csv') {\n if ((sheet.tableInstance as any)?.exportToCsv) {\n (sheet.tableInstance as any).exportToCsv();\n sheetCount = 1;\n } else {\n throw new Error('TableExportPlugin not configured for CSV export');\n }\n } else {\n if (allSheets) {\n this.exportAllSheetsToExcel();\n sheetCount = this.sheetManager.getSheetCount();\n } else {\n if ((sheet.tableInstance as any)?.exportToExcel) {\n (sheet.tableInstance as any).exportToExcel();\n sheetCount = 1;\n } else {\n throw new Error('TableExportPlugin not configured for Excel export');\n }\n }\n }\n\n // 触发导出完成事件\n this.spreadsheetEventManager.emitExportCompleted(fileType, allSheets, sheetCount);\n } catch (error) {\n // 触发导出失败事件\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.spreadsheetEventManager.emitExportError(fileType, allSheets, errorMessage);\n console.warn('Export failed:', errorMessage);\n }\n }\n exportAllSheetsToExcel(): void {\n this.initAllSheetInstances();\n const allDefines = this.sheetManager.getAllSheets();\n const tables = allDefines.map(def => {\n const inst = this.workSheetInstances.get(def.sheetKey);\n if (!inst) {\n throw new Error(`Worksheet instance for key \"${def.sheetKey}\" not found during export`);\n }\n return { table: inst.tableInstance as any, name: def.sheetTitle || def.sheetKey };\n });\n (this as any)._exportMutipleTablesToExcel?.(tables); //这个方法是在vtable-plugins中添加的,table-export插件在VTableSheet实例上添加了导出所有sheet到Excel的方法\n }\n initAllSheetInstances(): void {\n const allDefines = this.sheetManager.getAllSheets();\n allDefines.forEach(def => {\n if (!this.workSheetInstances.has(def.sheetKey)) {\n const instance = this.createWorkSheetInstance(def);\n this.workSheetInstances.set(def.sheetKey, instance);\n }\n });\n }\n /**\n * 导入文件(支持 Excel 多 sheet 和 CSV)\n * @param options 导入选项,包括 clearExisting(是否清除现有 sheets,默认 true 表示替换模式)\n * @returns Promise<MultiSheetImportResult | void>\n */\n async importFileToSheet(\n options: { clearExisting?: boolean } = { clearExisting: true }\n ): Promise<MultiSheetImportResult | void> {\n try {\n // 触发导入开始事件\n this.spreadsheetEventManager.emitImportStart('xlsx');\n\n // 使用绑定到 VTableSheet 实例的导入方法(插件内部会处理文件选择)\n let result: MultiSheetImportResult | void;\n if ((this as any)?._importFile) {\n result = await (this as any)._importFile({\n clearExisting: options?.clearExisting !== false\n });\n } else {\n // 回退到 tableInstance 的 importFile 方法\n const sheet = this.getActiveSheet();\n if (!sheet) {\n throw new Error('No active sheet available for import');\n }\n if ((sheet.tableInstance as any)?.importFile) {\n result = await (sheet.tableInstance as any).importFile({\n clearExisting: options?.clearExisting !== false\n });\n } else {\n throw new Error('ExcelImportPlugin not configured');\n }\n }\n\n // 触发导入完成事件\n const sheetCount = result && 'sheets' in result ? result.sheets?.length || 0 : 0;\n this.spreadsheetEventManager.emitImportCompleted('xlsx', sheetCount);\n\n return result;\n } catch (error) {\n // 触发导入失败事件\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.spreadsheetEventManager.emitImportError('xlsx', errorMessage);\n console.warn('Import failed:', errorMessage);\n throw error;\n }\n }\n /**\n * 获取容器元素\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取根元素\n */\n getRootElement(): HTMLElement {\n return this.rootElement;\n }\n\n /**\n * 获取选项\n */\n getOptions(): IVTableSheetOptions {\n return this.options;\n }\n\n /**\n * 获取公式栏元素\n */\n getFormulaBarElement(): HTMLElement | null {\n return this.formulaBarElement;\n }\n\n /**\n * 获取sheet标签栏元素\n */\n getSheetTabElement(): HTMLElement | null {\n return this.sheetTabElement;\n }\n\n /**\n * 获取内容区域元素\n */\n getContentElement(): HTMLElement {\n return this.contentElement;\n }\n\n /**\n * 销毁实例\n */\n release(): void {\n // 触发电子表格销毁事件\n this.spreadsheetEventManager.emitDestroyed();\n\n // 清除所有 Table 事件监听器\n this.tableEventRelay.clearAllListeners();\n\n // 释放事件管理器\n this.eventManager.release();\n this.formulaManager.release();\n this.formulaUIManager.release();\n this.spreadsheetEventManager.clearAllListeners();\n\n // 释放菜单管理器\n if (this.menuManager) {\n this.menuManager.release();\n }\n\n // 移除点击外部监听器\n this.sheetTabEventHandler.removeClickOutsideListener();\n\n // 销毁所有sheet实例\n this.workSheetInstances.forEach(instance => {\n instance.release();\n });\n\n // 清空容器\n if (this.rootElement && this.rootElement.parentNode) {\n this.rootElement.parentNode.removeChild(this.rootElement);\n }\n\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n }\n if (this.formulaManager.cellHighlightManager) {\n this.formulaManager.cellHighlightManager.release();\n }\n }\n\n /**\n * 导出指定sheet的数据\n * @param sheetKey sheet的key\n * @returns 数据\n */\n exportData(sheetKey: string): any[][] {\n const sheet = this.workSheetInstances.get(sheetKey);\n if (!sheet) {\n return [];\n }\n return sheet.getData();\n }\n\n /**\n * 导出所有sheet的数据\n * @returns 数据\n */\n exportAllData(): any[][] {\n const sheets = Array.from(this.workSheetInstances.values());\n return sheets.map(sheet => sheet.getData());\n }\n\n /**\n * resize\n */\n resize(): void {\n // const containerWidth = this.getContainer().clientWidth;\n // const containerHeight = this.getContainer().clientHeight;\n // this.rootElement.style.width = `${this.getOptions().width || containerWidth}px`;\n // this.rootElement.style.height = `${this.getOptions().height || containerHeight}px`;\n this.getActiveSheet()?.resize();\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { ColumnDefine, ListTableConstructorOptions } from '@visactor/vtable';
2
2
  import { ListTable } from '@visactor/vtable';
3
3
  import type { IWorkSheetOptions, IWorkSheetAPI, CellCoord, CellRange, CellValue, IFormulaManagerOptions } from '../ts-types';
4
- import type { VTableSheet } from '..';
4
+ import type { TYPES, VTableSheet } from '..';
5
5
  import { WorkSheetEventManager } from '../event/worksheet-event-manager';
6
6
  import type { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';
7
7
  import type { IWorksheetEventSource } from '../event/event-interfaces';
@@ -41,6 +41,7 @@ export declare class WorkSheet implements IWorkSheetAPI, IWorksheetEventSource {
41
41
  private _createRootElement;
42
42
  private _initializeTable;
43
43
  private _generateTableOptions;
44
+ _adjustTheme(theme: TYPES.VTableThemes.ITableThemeDefine): TYPES.VTableThemes.ITableThemeDefine;
44
45
  private _setupEventListeners;
45
46
  private handleCellSelected;
46
47
  private handleSelectionChanged;
@@ -76,6 +77,7 @@ export declare class WorkSheet implements IWorkSheetAPI, IWorksheetEventSource {
76
77
  getSelection(): CellRange | null;
77
78
  getMultipleSelections(): CellRange[];
78
79
  setFirstRowAsHeader(): void;
80
+ updateSheetOption(sheetOption: IWorkSheetOptions): void;
79
81
  processFormulaPaste(formulas: string[][], sourceStartCol: number, _sourceStartRow: number, targetStartCol: number, _targetStartRow: number): string[][];
80
82
  getCopyData(): (string | number)[][];
81
83
  pasteData(data: string[][], targetStartCol: number, targetStartRow: number): void;
@@ -1,5 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var __rest = this && this.__rest || function(s, e) {
4
+ var t = {};
5
+ for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
6
+ if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
7
+ var i = 0;
8
+ for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
9
+ }
10
+ return t;
11
+ };
12
+
3
13
  Object.defineProperty(exports, "__esModule", {
4
14
  value: !0
5
15
  }), exports.WorkSheet = void 0;
@@ -59,7 +69,6 @@ class WorkSheet {
59
69
  this.eventManager && this.eventManager.emitDataLoaded(this.rowCount, this.colCount);
60
70
  }
61
71
  _generateTableOptions() {
62
- var _a;
63
72
  let isShowTableHeader = this.options.showHeader;
64
73
  if (this.options.columns) for (let i = 0; i < this.options.columns.length; i++) this.options.columns[i].field = i,
65
74
  this.options.columns[i].key = i; else isShowTableHeader = !!(0, vutils_1.isValid)(isShowTableHeader) && isShowTableHeader,
@@ -86,22 +95,6 @@ class WorkSheet {
86
95
  showCopyCellBorder: !0,
87
96
  cutSelected: !0
88
97
  });
89
- let changedTheme;
90
- if ((null === (_a = this.options) || void 0 === _a ? void 0 : _a.theme) || (this.options.theme = ts_types_1.VTableThemes.DEFAULT),
91
- this.options.theme = this.options.theme, this.options.theme.bodyStyle && !(0, tools_1.isPropertyWritable)(this.options.theme, "bodyStyle")) {
92
- changedTheme = this.options.theme.extends(this.options.theme.getExtendTheme());
93
- const extendThemeOption = changedTheme.getExtendTheme();
94
- extendThemeOption.frameStyle = Object.assign({}, extendThemeOption.frameStyle, {
95
- shadowBlur: 0,
96
- cornerRadius: 0,
97
- borderLineWidth: 0
98
- });
99
- } else "string" == typeof this.options.theme || (changedTheme = this.options.theme,
100
- changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {
101
- shadowBlur: 0,
102
- cornerRadius: 0,
103
- borderLineWidth: 0
104
- }));
105
98
  return Object.assign(Object.assign({}, this.options), {
106
99
  dragOrder: {
107
100
  maintainArrayDataOrder: !0
@@ -113,7 +106,7 @@ class WorkSheet {
113
106
  container: this.element,
114
107
  showHeader: isShowTableHeader,
115
108
  keyboardOptions: keyboardOptions,
116
- theme: changedTheme,
109
+ theme: this._adjustTheme(this.options.theme),
117
110
  excelOptions: {
118
111
  fillHandle: !0
119
112
  },
@@ -122,6 +115,25 @@ class WorkSheet {
122
115
  }
123
116
  });
124
117
  }
118
+ _adjustTheme(theme) {
119
+ let changedTheme;
120
+ if (this.options.theme = theme || ts_types_1.VTableThemes.DEFAULT, this.options.theme.bodyStyle && !(0,
121
+ tools_1.isPropertyWritable)(this.options.theme, "bodyStyle")) {
122
+ changedTheme = this.options.theme.extends(this.options.theme.getExtendTheme());
123
+ const extendThemeOption = changedTheme.getExtendTheme();
124
+ extendThemeOption.frameStyle = Object.assign({}, extendThemeOption.frameStyle, {
125
+ shadowBlur: 0,
126
+ cornerRadius: 0,
127
+ borderLineWidth: 0
128
+ });
129
+ } else "string" == typeof this.options.theme || (changedTheme = this.options.theme,
130
+ changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {
131
+ shadowBlur: 0,
132
+ cornerRadius: 0,
133
+ borderLineWidth: 0
134
+ }));
135
+ return changedTheme;
136
+ }
125
137
  _setupEventListeners() {
126
138
  this.tableInstance && (this.tableInstance.on("mousedown_cell", (event => {
127
139
  this.vtableSheet.formulaManager.formulaWorkingOnCell && event.event.preventDefault();
@@ -360,8 +372,10 @@ class WorkSheet {
360
372
  }
361
373
  addressFromCoord(coordOrCol, row) {
362
374
  let col, rowNum;
363
- "object" == typeof coordOrCol ? (col = coordOrCol.col, rowNum = coordOrCol.row) : (col = coordOrCol,
364
- rowNum = row);
375
+ if ("object" == typeof coordOrCol) col = coordOrCol.col, rowNum = coordOrCol.row; else {
376
+ if (col = coordOrCol, void 0 === row) throw new Error("row is required when coordOrCol is a number");
377
+ rowNum = row;
378
+ }
365
379
  let colStr = "", tempCol = col + 1;
366
380
  do {
367
381
  tempCol -= 1, colStr = String.fromCharCode(65 + tempCol % 26) + colStr, tempCol = Math.floor(tempCol / 26);
@@ -399,12 +413,22 @@ class WorkSheet {
399
413
  field: i,
400
414
  title: data[0][i]
401
415
  };
402
- data.shift(), this.tableInstance.updateOption(Object.assign(Object.assign({}, this.options), {
416
+ data.shift();
417
+ const _a = this.options, {dragOrder: _omitSheetDragOrder} = _a, optionsRest = __rest(_a, [ "dragOrder" ]);
418
+ this.tableInstance.updateOption(Object.assign(Object.assign({}, optionsRest), {
419
+ dragOrder: {
420
+ maintainArrayDataOrder: !0
421
+ },
403
422
  columns: this.options.columns,
404
423
  showHeader: !0,
405
424
  records: data
406
425
  }));
407
426
  }
427
+ updateSheetOption(sheetOption) {
428
+ this.options = Object.assign(Object.assign({}, this.options), sheetOption);
429
+ const tableOptions = this._generateTableOptions();
430
+ this.tableInstance.updateOption(tableOptions);
431
+ }
408
432
  processFormulaPaste(formulas, sourceStartCol, _sourceStartRow, targetStartCol, _targetStartRow) {
409
433
  if (!formulas || 0 === formulas.length) return formulas;
410
434
  const colOffset = targetStartCol - sourceStartCol, rowOffset = _targetStartRow - _sourceStartRow;