@visactor/vtable-sheet 1.23.1 → 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.
- package/cjs/core/table-plugins.d.ts +5 -0
- package/cjs/core/table-plugins.js +10 -9
- package/cjs/core/table-plugins.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/managers/formula-manager.js +6 -6
- package/cjs/managers/formula-manager.js.map +1 -1
- package/dist/vtable-sheet.js +57 -44
- package/dist/vtable-sheet.min.js +1 -1
- package/es/core/table-plugins.d.ts +5 -0
- package/es/core/table-plugins.js +8 -7
- package/es/core/table-plugins.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/managers/formula-manager.js +6 -6
- package/es/managers/formula-manager.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/managers/formula-manager.ts"],"names":[],"mappings":"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","file":"formula-manager.js","sourcesContent":["import { FormulaEngine } from '../formula/formula-engine';\nimport type VTableSheet from '../components/vtable-sheet';\nimport type { FormulaCell, FormulaResult, IFormulaManager } from '../ts-types/formula';\nimport { FormulaRangeSelector } from '../formula/formula-range-selector';\nimport type { CellRange, ISheetDefine } from '../ts-types';\nimport { CellHighlightManager } from '../formula';\nimport type * as VTable from '@visactor/vtable';\nimport { CrossSheetFormulaHandler } from '../formula/cross-sheet-formula-handler';\nimport type { CrossSheetFormulaOptions } from '../formula/cross-sheet-formula-handler';\n\n/**\n * 标准FormulaEngine配置 (MIT兼容)\n */\nconst DEFAULT_FORMULA_ENGINE_CONFIG = {\n precisionRounding: 14,\n caseSensitive: false,\n ignoreWhiteSpace: 'standard' as const,\n nullDate: { year: 1899, month: 12, day: 30 },\n dateFormats: ['DD/MM/YYYY', 'DD/MM/YY', 'YYYY-MM-DD'],\n timeFormats: ['hh:mm', 'hh:mm:ss.s']\n};\n\nexport class FormulaManager implements IFormulaManager {\n /** Sheet实例 */\n sheet: VTableSheet;\n /** FormulaEngine实例 */\n formulaEngine: FormulaEngine;\n /** 工作表映射 */\n private sheetMapping: Map<string, number> = new Map();\n /** 反向工作表映射 */\n private reverseSheetMapping: Map<number, string> = new Map();\n /** 是否已初始化 */\n private isInitialized = false;\n /** 下一个工作表ID */\n private nextSheetId = 0;\n /** 单元格高亮管理器 */\n cellHighlightManager: CellHighlightManager;\n /** 正在输入公式的单元格(如果是完整的公式 不做记录。没输入完整才记录)。为后面拖拽单元范围或者点击单元格选中计算范围逻辑做准备。 */\n _formulaWorkingOnCell: FormulaCell | null = null;\n /** 上一次被记录过的光标位置。 公式输入框中光标位置 */\n lastKnownCursorPosInFormulaInput: number | null = null;\n\n /** 公式范围选择器 */\n formulaRangeSelector: FormulaRangeSelector;\n /** 正在处理的单元格选区 */\n lastSelectionRangesOfHandling: CellRange[] = [];\n\n inputIsParamMode: {\n inParamMode: boolean;\n functionParamPosition: {\n start: number;\n end: number;\n } | null;\n } | null = null;\n\n inputingElement: HTMLInputElement | null = null;\n\n /** 跨sheet公式处理器 */\n crossSheetHandler: CrossSheetFormulaHandler;\n\n get formulaWorkingOnCell(): FormulaCell | null {\n return this._formulaWorkingOnCell;\n }\n set formulaWorkingOnCell(value: FormulaCell | null) {\n this._formulaWorkingOnCell = value;\n }\n\n constructor(sheet: VTableSheet) {\n this.sheet = sheet;\n this.cellHighlightManager = new CellHighlightManager(sheet);\n this.formulaRangeSelector = new FormulaRangeSelector(this);\n this.initializeFormulaEngine();\n this.crossSheetHandler = new CrossSheetFormulaHandler(this.formulaEngine, this.sheet.getSheetManager(), this);\n }\n\n /**\n * 初始化FormulaEngine实例\n */\n private initializeFormulaEngine(): void {\n try {\n this.formulaEngine = new FormulaEngine(DEFAULT_FORMULA_ENGINE_CONFIG);\n this.isInitialized = true;\n } catch (error) {\n console.error('Failed to initialize FormulaEngine:', error);\n throw new Error('FormulaManager initialization failed');\n }\n }\n\n /**\n * 添加新工作表 - 正确的多表格支持 (MIT兼容)\n * @param sheetKey 工作表键\n * @param normalizedData 工作表数据 需要规范处理过 且包含表头的数据 因为要输入给FormulaEngine\n * @param sheetTitle 工作表标题(用户可见的名称)\n * @returns 工作表ID\n */\n addSheet(sheetKey: string, normalizedData?: unknown[][], sheetTitle?: string): number {\n this.ensureInitialized();\n\n // 检查是否已存在\n if (this.sheetMapping.has(sheetKey)) {\n const existingId = this.sheetMapping.get(sheetKey);\n if (existingId !== undefined) {\n return existingId;\n }\n }\n\n try {\n // 记录添加前的数量\n const wasFirstSheet = this.sheetMapping.size === 0;\n\n // 使用FormulaEngine创建工作表\n const sheetId = this.formulaEngine.addSheet(sheetKey, normalizedData);\n\n // 设置工作表标题(如果提供)\n if (sheetTitle) {\n this.formulaEngine.setSheetTitle(sheetKey, sheetTitle);\n }\n\n this.sheetMapping.set(sheetKey, sheetId);\n this.reverseSheetMapping.set(sheetId, sheetKey);\n this.nextSheetId = Math.max(this.nextSheetId, sheetId + 1);\n\n // 如果是第一个工作表,设置为活动工作表\n if (wasFirstSheet) {\n this.formulaEngine.setActiveSheet(sheetKey);\n }\n\n return sheetId;\n } catch (error) {\n console.error(`Failed to add sheet ${sheetKey}:`, error);\n throw new Error(`Failed to add sheet: ${sheetKey}`);\n }\n }\n\n /**\n * 标准化工作表数据\n * @param data 工作表数据\n * @returns 标准化后的工作表数据\n */\n normalizeSheetData(data: unknown[][], tableInstance: VTable.ListTable): unknown[][] {\n try {\n //将columns中的title追加到data中\n const headerRows: unknown[][] = [];\n for (let i = 0; i < tableInstance.columnHeaderLevelCount; i++) {\n const headerRow: unknown[] = [];\n for (let j = 0; j < tableInstance.colCount; j++) {\n const cellValue = tableInstance.getCellValue(j, i);\n headerRow.push(cellValue);\n }\n headerRows.push(headerRow);\n }\n const dataCopy = JSON.parse(JSON.stringify(data));\n\n const toNormalizeData = tableInstance.columnHeaderLevelCount > 0 ? [...headerRows].concat(dataCopy) : dataCopy;\n\n if (!Array.isArray(toNormalizeData) || toNormalizeData.length === 0) {\n return [['']];\n }\n\n // 确保所有行都是数组,并转换数据类型\n const validData = toNormalizeData.filter(row => Array.isArray(row));\n if (validData.length === 0) {\n return [['']];\n }\n\n // 确保所有行都有相同的列数,并正确处理数据类型\n const maxCols = Math.max(...validData.map(row => row.length));\n return validData.map(row => {\n const normalizedRow = Array.isArray(row)\n ? row.map(cell => {\n if (typeof cell === 'string') {\n if (cell.startsWith('=')) {\n return cell; // 保持公式不变\n }\n const num = Number(cell);\n return !isNaN(num) && cell.trim() !== '' ? num : cell;\n }\n return cell ?? '';\n })\n : [''];\n\n while (normalizedRow.length < maxCols) {\n normalizedRow.push('');\n }\n return normalizedRow;\n });\n } catch (error) {\n console.error('Failed to normalize sheet data:', error);\n return [['']];\n }\n }\n\n /**\n * 移除工作表 (MIT兼容)\n * @param sheetKey 工作表键\n */\n removeSheet(sheetKey: string): void {\n const sheetId = this.sheetMapping.get(sheetKey);\n if (sheetId === undefined) {\n return;\n }\n\n try {\n // // 不能删除最后一个sheet\n // if (this.sheetMapping.size <= 1) {\n // throw new Error('Cannot remove the last sheet');\n // }\n\n this.formulaEngine.removeSheet(sheetKey);\n this.sheetMapping.delete(sheetKey);\n this.reverseSheetMapping.delete(sheetId);\n } catch (error) {\n console.error(`Failed to remove sheet ${sheetKey}:`, error);\n throw new Error(`Failed to remove sheet: ${sheetKey}`);\n }\n }\n\n /**\n * 重命名工作表 (MIT兼容)\n * @param oldKey 旧工作表键\n * @param newKey 新工作表键\n */\n renameSheet(oldKey: string, newKey: string): void {\n const sheetId = this.sheetMapping.get(oldKey);\n if (sheetId === undefined) {\n throw new Error(`Sheet not found: ${oldKey}`);\n }\n\n try {\n // 使用FormulaEngine的renameSheet API\n this.formulaEngine.renameSheet(oldKey, newKey);\n\n // 更新内部映射\n this.sheetMapping.delete(oldKey);\n this.sheetMapping.set(newKey, sheetId);\n this.reverseSheetMapping.set(sheetId, newKey);\n } catch (error) {\n console.error(`Failed to rename sheet from ${oldKey} to ${newKey}:`, error);\n throw new Error(`Failed to rename sheet: ${oldKey}`);\n }\n }\n\n /**\n * 更新工作表标题(用于sheet重命名时)\n * @param sheetKey 工作表键\n * @param newTitle 新标题\n */\n updateSheetTitle(sheetKey: string, newTitle: string): void {\n // 获取旧标题\n const oldTitle = this.formulaEngine.getSheetTitle(sheetKey);\n\n // 使用FormulaEngine的setSheetTitle API更新标题映射\n this.formulaEngine.setSheetTitle(sheetKey, newTitle);\n\n // 更新所有引用旧标题的公式\n if (oldTitle && oldTitle !== newTitle) {\n this.updateCrossSheetFormulasWithNewTitle(oldTitle, newTitle);\n }\n\n // 清除相关缓存以确保跨sheet公式能正确识别新的标题\n if (this.crossSheetHandler) {\n this.crossSheetHandler.clearCache();\n }\n }\n\n /**\n * 更新所有引用旧标题的跨sheet公式\n * @param oldTitle 旧标题\n * @param newTitle 新标题\n */\n private updateCrossSheetFormulasWithNewTitle(oldTitle: string, newTitle: string): void {\n try {\n // 获取所有工作表\n const allSheets = this.sheet.getSheetManager().getAllSheets();\n\n for (const sheetInfo of allSheets) {\n const formulas = this.formulaEngine.exportFormulas(sheetInfo.sheetKey);\n\n for (const [cellRef, formula] of Object.entries(formulas)) {\n if (this.hasCrossSheetReference(formula)) {\n // 转义旧标题中的特殊字符,用于正则表达式\n const escapedOldTitle = oldTitle.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // 创建各种可能的引用模式\n const patterns = [\n // 英文感叹号,无引号: 销售数据!\n `${escapedOldTitle}!`,\n // 中文感叹号,无引号: 销售数据!\n `${escapedOldTitle}!`,\n // 英文感叹号,有引号: '销售数据'!\n `'${escapedOldTitle}'!`,\n // 中文感叹号,有引号: '销售数据'!\n `'${escapedOldTitle}'!`\n ];\n\n let updatedFormula = formula;\n let hasChanges = false;\n\n // 逐一替换各种模式\n for (const pattern of patterns) {\n if (updatedFormula.includes(pattern)) {\n // 根据模式类型进行相应的替换\n if (pattern.includes(`'${escapedOldTitle}'`)) {\n // 处理带引号的情况\n if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(new RegExp(`'${escapedOldTitle}'!`, 'g'), `'${newTitle}'!`);\n } else if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(\n new RegExp(`'${escapedOldTitle}'!`, 'g'),\n `'${newTitle}'!`\n );\n }\n } else {\n // 处理无引号的情况\n if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(new RegExp(`${escapedOldTitle}!`, 'g'), `${newTitle}!`);\n } else if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(new RegExp(`${escapedOldTitle}!`, 'g'), `${newTitle}!`);\n }\n }\n hasChanges = true;\n }\n }\n\n if (hasChanges && updatedFormula !== formula) {\n // 解析单元格引用 (A1格式转换为行列坐标)\n const cell = this.parseA1CellRef(`${sheetInfo.sheetKey}!${cellRef}`);\n if (cell) {\n // 更新公式\n this.formulaEngine.setCellContent(cell, updatedFormula);\n // console.log(`Updated formula in ${sheetInfo.sheetKey}!${cellRef}: ${formula} -> ${updatedFormula}`);\n }\n }\n }\n }\n }\n } catch (error) {\n console.error(`Failed to update cross-sheet formulas from ${oldTitle} to ${newTitle}:`, error);\n }\n }\n\n /**\n * 解析A1格式的单元格引用为行列坐标\n * @param cellRef A1格式的单元格引用,如 \"Sheet1!A1\" 或 \"A1\"\n * @returns 单元格对象,如果解析失败返回null\n */\n private parseA1CellRef(cellRef: string): { sheet: string; row: number; col: number } | null {\n try {\n // 支持中英文感叹号\n let parts: string[];\n if (cellRef.includes('!')) {\n parts = cellRef.split('!');\n } else if (cellRef.includes('!')) {\n parts = cellRef.split('!');\n } else {\n // 没有sheet前缀,使用默认sheet\n parts = ['Sheet1', cellRef];\n }\n\n if (parts.length !== 2) {\n return null;\n }\n\n const [sheet, a1Notation] = parts;\n\n // 解析A1格式 (如 A1, B2, AA10)\n const match = a1Notation.match(/^([A-Z]+)([0-9]+)$/);\n if (!match) {\n return null;\n }\n\n const colLetters = match[1];\n const rowNumber = parseInt(match[2], 10);\n\n // 转换列字母为索引 (A=0, B=1, ..., Z=25, AA=26, etc.)\n let col = 0;\n for (let i = 0; i < colLetters.length; i++) {\n col = col * 26 + (colLetters.charCodeAt(i) - 65);\n }\n\n return { sheet, row: rowNumber - 1, col };\n } catch {\n return null;\n }\n }\n\n // 用于防止死循环的标记\n private creatingSheets = new Set<string>();\n\n /**\n * 确保sheet已在formulaEngine中注册\n * @param sheetKey 工作表键\n */\n private ensureSheetRegistered(sheetKey: string): void {\n if (this.sheet.workSheetInstances.has(sheetKey)) {\n return;\n }\n\n // 如果正在创建这个 sheet,直接返回避免死循环\n if (this.creatingSheets.has(sheetKey)) {\n return;\n }\n\n const sheetDefine = this.sheet.getSheetManager().getSheet(sheetKey);\n if (!sheetDefine) {\n return;\n }\n\n try {\n // 标记正在创建\n this.creatingSheets.add(sheetKey);\n const instance = this.sheet.createWorkSheetInstance(sheetDefine);\n this.sheet.workSheetInstances.set(sheetKey, instance);\n } finally {\n // 创建完成后移除标记\n this.creatingSheets.delete(sheetKey);\n }\n }\n\n /**\n * 确保跨sheet公式中引用的所有sheet都已注册\n * @param formula 公式字符串\n */\n private ensureAllSheetsRegisteredForCrossSheetFormula(formula: string): void {\n try {\n // 提取公式中引用的所有sheet名称\n const sheetPattern = /([A-Za-z0-9_一-龥]+)!/g;\n let match;\n const referencedSheets = new Set<string>();\n\n while ((match = sheetPattern.exec(formula)) !== null) {\n const sheetName = match[1];\n if (sheetName) {\n referencedSheets.add(sheetName);\n }\n }\n\n // 将所有引用的sheet转换为sheetKey并注册\n for (const sheetTitle of referencedSheets) {\n // 查找对应的sheetKey\n const allSheets = this.sheet.getSheetManager().getAllSheets();\n const sheetInfo = allSheets.find(sheet => sheet.sheetTitle.toLowerCase() === sheetTitle.toLowerCase());\n\n if (sheetInfo) {\n // 确保这个sheet已注册到formulaEngine\n this.ensureSheetRegistered(sheetInfo.sheetKey);\n }\n }\n } catch (error) {\n console.warn('Failed to register sheets for cross-sheet formula:', error);\n }\n }\n\n /**\n * 标准化数据供公式引擎使用\n * @param data 原始数据\n * @returns 标准化后的数据\n */\n private normalizeDataForFormulaEngine(data: unknown[][]): unknown[][] {\n if (!Array.isArray(data) || data.length === 0) {\n return [['']];\n }\n\n const maxCols = Math.max(...data.map(row => (Array.isArray(row) ? row.length : 0)));\n\n return data.map(row => {\n if (!Array.isArray(row)) {\n return Array(maxCols).fill('');\n }\n\n const normalizedRow = row.map(cell => {\n if (typeof cell === 'string') {\n if (cell.startsWith('=')) {\n return cell; // 保持公式不变\n }\n const num = Number(cell);\n return !isNaN(num) && cell.trim() !== '' ? num : cell;\n }\n return cell ?? '';\n });\n\n while (normalizedRow.length < maxCols) {\n normalizedRow.push('');\n }\n\n return normalizedRow;\n });\n }\n\n /**\n * 触发公式相关事件\n * @param cell 单元格\n * @param eventType 事件类型\n * @param formula 公式内容\n * @param error 错误信息(可选)\n */\n private emitFormulaEvent(\n cell: FormulaCell,\n eventType: 'added' | 'removed' | 'error',\n formula?: string,\n error?: any\n ): void {\n // Safely get the worksheet instance\n let worksheet: any = null;\n\n // Try to get worksheet using the public method if available\n if (this.sheet && typeof this.sheet.getWorkSheetByKey === 'function') {\n worksheet = this.sheet.getWorkSheetByKey(cell.sheet);\n } else {\n // Fallback: try to access the private property directly (for backwards compatibility in tests)\n try {\n const workSheetInstances = (this.sheet as any).workSheetInstances;\n if (workSheetInstances && workSheetInstances.get) {\n worksheet = workSheetInstances.get(cell.sheet);\n }\n } catch (_e) {\n void _e;\n // If we can't access the worksheet, just return silently\n return;\n }\n }\n\n if (!worksheet || !worksheet.eventManager) {\n return;\n }\n\n switch (eventType) {\n case 'added':\n worksheet.eventManager.emitFormulaAdded({ row: cell.row, col: cell.col }, formula);\n break;\n case 'removed':\n worksheet.eventManager.emitFormulaRemoved({ row: cell.row, col: cell.col }, formula);\n break;\n case 'error':\n worksheet.eventManager.emitFormulaError(cell, formula || '', error);\n break;\n }\n }\n\n /**\n * 获取工作表ID\n * @param sheetKey 工作表键\n * @returns 工作表ID\n */\n getSheetId(sheetKey: string): number {\n // 首先尝试精确匹配\n const sheetId = this.sheetMapping.get(sheetKey);\n if (sheetId !== undefined) {\n return sheetId;\n }\n\n // 如果精确匹配失败,尝试不区分大小写的匹配\n const lowerSheetKey = sheetKey.toLowerCase();\n for (const [existingKey, existingId] of this.sheetMapping.entries()) {\n if (existingKey.toLowerCase() === lowerSheetKey) {\n return existingId;\n }\n }\n\n // 如果还是找不到,自动创建新sheet\n return this.addSheet(sheetKey);\n }\n\n /**\n * 设置单元格内容 (MIT兼容)\n * @param cell 单元格\n * @param value 值\n */\n setCellContent(cell: FormulaCell, value: unknown): void {\n this.ensureInitialized();\n\n // 检查单元格参数有效性\n if (!cell || cell.sheet === undefined || cell.row === undefined || cell.col === undefined) {\n console.error('Invalid cell parameter:', cell);\n throw new Error('Invalid cell parameter for setCellContent');\n }\n\n // 检查单元格是否超出有效范围\n if (cell.row < 0 || cell.col < 0) {\n console.error('Cell coordinates out of bounds:', cell);\n throw new Error(`Cell coordinates out of bounds: row=${cell.row}, col=${cell.col}`);\n }\n\n try {\n // 公式计算应以当前单元格所属 sheet 为上下文\n this.formulaEngine.setActiveSheet(cell.sheet);\n\n // 检查是否为公式\n const isFormula = typeof value === 'string' && value.startsWith('=');\n const oldFormula = this.getCellFormula(cell);\n\n // 检查是否为跨sheet公式\n if (isFormula && this.hasCrossSheetReference(value)) {\n // 使用跨sheet公式处理器处理\n // 注意:setCrossSheetFormula 是异步的,但这里没有等待\n // 由于 setCrossSheetFormula 内部会同步调用 formulaEngine.setCellContent,\n // 所以公式会被立即存储,不需要等待 Promise\n this.crossSheetHandler.setCrossSheetFormula(cell, value);\n } else {\n // 使用FormulaEngine设置单元格内容\n this.formulaEngine.setCellContent(cell, value);\n }\n\n // 在操作成功后触发相应的事件\n const newFormula = this.getCellFormula(cell);\n if (newFormula && newFormula !== oldFormula) {\n // 公式添加或更新\n this.emitFormulaEvent(cell, 'added', newFormula);\n } else if (!newFormula && oldFormula) {\n // 公式被移除\n this.emitFormulaEvent(cell, 'removed', oldFormula);\n }\n } catch (error) {\n console.error('Failed to set cell content:', error);\n\n // 触发公式错误事件\n if (typeof value === 'string' && value.startsWith('=')) {\n this.emitFormulaEvent(cell, 'error', value, error);\n }\n\n // 提供更详细的错误信息\n if (error instanceof Error) {\n throw new Error(`Failed to set cell content at ${cell.sheet}:${cell.row}:${cell.col}. ${error.message}`);\n } else {\n throw new Error(`Failed to set cell content at ${cell.sheet}:${cell.row}:${cell.col}`);\n }\n }\n }\n\n /**\n * 获取单元格值 (MIT兼容)\n * @param cell 单元格\n * @returns 单元格值\n */\n getCellValue(cell: FormulaCell): FormulaResult {\n this.ensureInitialized();\n\n try {\n // 检查是否为跨sheet公式\n const formula = this.formulaEngine.getCellFormula(cell);\n if (formula && this.hasCrossSheetReference(formula)) {\n // 对于跨sheet公式,确保所有相关sheet都已注册\n this.ensureAllSheetsRegisteredForCrossSheetFormula(formula);\n const result = this.formulaEngine.getCellValue(cell);\n return result;\n }\n\n // 检查sheet是否已在formulaEngine中注册,如果没有则尝试注册\n this.ensureSheetRegistered(cell.sheet);\n\n // 以当前单元格所属 sheet 作为计算上下文\n this.formulaEngine.setActiveSheet(cell.sheet);\n\n // 使用FormulaEngine获取单元格值\n return this.formulaEngine.getCellValue(cell);\n } catch (error) {\n console.error('Failed to get cell value:', error);\n return {\n value: null,\n error: error instanceof Error ? error.message : 'Unknown error'\n };\n }\n }\n\n /**\n * 获取单元格公式 (MIT兼容)\n * @param cell 单元格\n * @returns 单元格公式\n */\n getCellFormula(cell: FormulaCell): string | undefined {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取单元格公式\n return this.formulaEngine.getCellFormula(cell);\n } catch (error) {\n console.error('Failed to get cell formula:', error);\n return undefined;\n }\n }\n\n /**\n * 检查是否为公式单元格 (MIT兼容)\n * @param cell 单元格\n * @returns 是否为公式单元格\n */\n isCellFormula(cell: FormulaCell): boolean {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine检查是否为公式单元格\n return this.formulaEngine.isCellFormula(cell);\n } catch (error) {\n console.error('Failed to check if cell has formula:', error);\n return false;\n }\n }\n\n /**\n * 获取依赖此单元格的所有单元格(包括范围依赖)(MIT兼容)\n * @param cell 单元格\n * @returns 依赖此单元格的所有单元格\n */\n getCellDependents(cell: FormulaCell): FormulaCell[] {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取依赖单元格\n return this.formulaEngine.getCellDependents(cell);\n } catch (error) {\n console.error('Failed to get cell dependents:', error);\n return [];\n }\n }\n\n /**\n * 获取此单元格依赖的所有单元格 (MIT兼容)\n * @param cell 单元格\n * @returns 此单元格依赖的所有单元格\n */\n getCellPrecedents(cell: FormulaCell): FormulaCell[] {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取前置单元格\n return this.formulaEngine.getCellPrecedents(cell);\n } catch (error) {\n console.error('Failed to get cell precedents:', error);\n return [];\n }\n }\n\n /**\n * 批量更新单元格 (MIT兼容)\n * @param changes 更新内容\n */\n batchUpdate(changes: Array<{ cell: FormulaCell; value: unknown }>): void {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine批量更新单元格\n for (const { cell, value } of changes) {\n this.formulaEngine.setCellContent(cell, value);\n }\n } catch (error) {\n console.error('Failed to batch update cells:', error);\n throw new Error('Batch update failed');\n }\n }\n\n /**\n * 添加行 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param rowIndex 行索引\n * @param numberOfRows 添加的行数\n */\n addRows(sheetKey: string, rowIndex: number, numberOfRows: number = 1) {\n this.ensureInitialized();\n\n try {\n // 简化实现:在指定位置插入空行\n console.warn(\n `addRows operation not fully implemented in MIT version.\n Inserting ${numberOfRows} empty rows at index ${rowIndex}`\n );\n // 调整公式引用\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'insert',\n 'row',\n rowIndex,\n numberOfRows,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n\n // 刷新所有受影响的单元格\n [...adjustedCells, ...movedCells].forEach(cell => {\n // this.sheet.getActiveSheet().tableInstance.scenegraph.updateCellContent(cell.row, cell.col);\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value);\n });\n } catch (error) {\n console.error('Failed to add rows:', error);\n throw new Error(`Failed to add ${numberOfRows} rows at index ${rowIndex}`);\n }\n }\n\n /**\n * 删除行 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param rowIndex 行索引\n * @param numberOfRows 删除的行数\n */\n removeRows(sheetKey: string, rowIndex: number, numberOfRows: number = 1) {\n this.ensureInitialized();\n\n try {\n // 简化实现:删除指定位置的行\n console.warn(\n `removeRows operation not fully implemented in MIT version. Removing ${numberOfRows} rows at index ${rowIndex}`\n );\n\n // 调整公式引用,获取所有受影响的单元格\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'delete',\n 'row',\n rowIndex,\n numberOfRows,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n\n // 刷新所有受影响的单元格\n [...adjustedCells, ...movedCells].forEach(cell => {\n // this.sheet.getActiveSheet().tableInstance.scenegraph.updateCellContent(cell.row, cell.col);\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value);\n });\n } catch (error) {\n console.error('Failed to remove rows:', error);\n throw new Error(`Failed to remove ${numberOfRows} rows at index ${rowIndex}`);\n }\n }\n\n /**\n * 添加列 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param columnIndex 列索引\n * @param numberOfColumns 添加的列数\n */\n addColumns(sheetKey: string, columnIndex: number, numberOfColumns: number = 1): void {\n this.ensureInitialized();\n\n try {\n // 简化实现:在指定位置插入空列\n console.warn(\n `addColumns operation not fully implemented in MIT version.\n Inserting ${numberOfColumns} empty columns at index ${columnIndex}`\n );\n\n // 调整公式引用,获取所有受影响的单元格\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'insert',\n 'column',\n columnIndex,\n numberOfColumns,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n [...adjustedCells, ...movedCells].forEach(cell => {\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value);\n });\n } catch (error) {\n console.error('Failed to add columns:', error);\n throw new Error(`Failed to add ${numberOfColumns} columns at index ${columnIndex}`);\n }\n }\n\n /**\n * 删除列 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param columnIndex 列索引\n * @param numberOfColumns 删除的列数\n */\n removeColumns(sheetKey: string, columnIndex: number, numberOfColumns: number = 1): void {\n this.ensureInitialized();\n\n try {\n // 简化实现:删除指定位置的列\n console.warn(\n `removeColumns operation not fully implemented in MIT version.\n Removing ${numberOfColumns} columns at index ${columnIndex}`\n );\n\n // 调整公式引用,获取所有受影响的单元格\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'delete',\n 'column',\n columnIndex,\n numberOfColumns,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n // 刷新所有受影响的单元格\n [...adjustedCells, ...movedCells].forEach(cell => {\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value);\n });\n } catch (error) {\n console.error('Failed to remove columns:', error);\n throw new Error(`Failed to remove ${numberOfColumns} columns at index ${columnIndex}`);\n }\n }\n /**\n * 移动列表头位置.将sourceCol位置开始往后moveCount个列,移动调整到targetCol位置处\n * @param sheetKey\n * @param sourceCol\n * @param targetCol\n * @returns\n */\n changeColumnHeaderPosition(sheetKey: string, sourceCol: number, targetCol: number): void {\n this.ensureInitialized();\n\n try {\n // 获取工作表信息\n const sheet = this.sheet.getSheet(sheetKey);\n if (!sheet) {\n throw new Error(`Sheet not found: ${sheetKey}`);\n }\n\n const totalColCount = sheet.columnCount;\n const totalRowCount = sheet.rowCount;\n\n // 使用专门的列移动方法来避免#REF!错误\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferencesForColumnMove(\n sheetKey,\n sourceCol,\n targetCol,\n totalColCount,\n totalRowCount\n );\n\n // 刷新所有受影响的单元格\n const allAffectedCells = [...adjustedCells, ...movedCells];\n for (const cell of allAffectedCells) {\n const result = this.getCellValue(cell);\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value);\n }\n\n // Log completion info\n // console.log(\n // `Column move completed: ${adjustedCells.length} formulas adjusted, ${movedCells.length} formulas moved`\n // );\n } catch (error) {\n console.error(`Failed to change column header position from ${sourceCol} to ${targetCol}:`, error);\n throw new Error(\n `Failed to change column header position: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * 移动行表头位置.将sourceRow位置开始往后moveCount个行,移动调整到targetRow位置处\n * @param sheetKey 工作表键\n * @param sourceRow 源行索引\n * @param targetRow 目标行索引\n */\n changeRowHeaderPosition(sheetKey: string, sourceRow: number, targetRow: number): void {\n this.ensureInitialized();\n\n try {\n // 获取工作表信息\n const sheet = this.sheet.getSheet(sheetKey);\n if (!sheet) {\n throw new Error(`Sheet not found: ${sheetKey}`);\n }\n\n // 使用专门的行移动方法来避免#REF!错误\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferencesForRowMove(\n sheetKey,\n sourceRow,\n targetRow\n );\n\n // 刷新所有受影响的单元格\n const allAffectedCells = [...adjustedCells, ...movedCells];\n for (const cell of allAffectedCells) {\n const result = this.getCellValue(cell);\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value);\n }\n\n // Log completion info\n // console.log(\n // `Row move completed: ${adjustedCells.length} formulas adjusted, ${movedCells.length} formulas moved`\n // );\n } catch (error) {\n console.error(`Failed to change row header position from ${sourceRow} to ${targetRow}:`, error);\n throw new Error(\n `Failed to change row header position: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * 获取工作表序列化数据 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @returns 工作表序列化数据\n */\n getSheetSerialized(sheetKey: string): unknown[][] {\n this.ensureInitialized();\n\n try {\n // 简化实现:返回空数组,实际实现需要获取工作表数据\n console.warn(`getSheetSerialized operation not fully implemented in MIT version for sheet ${sheetKey}`);\n return [[]];\n } catch (error) {\n console.error('Failed to get sheet serialized data:', error);\n return [[]];\n }\n }\n\n /**\n * 根据依赖关系对公式进行排序 (MIT兼容)\n * @param sheetKey 工作表键\n * @param formulas 公式数据 (A1表示法的单元格引用 -> 公式内容)\n * @returns 排序后的公式条目数组\n */\n sortFormulasByDependency(sheetKey: string, formulas: Record<string, string>): [string, string][] {\n try {\n // 使用FormulaEngine的依赖排序功能\n return this.formulaEngine.sortFormulasByDependency(sheetKey, formulas);\n } catch (_error) {\n void _error;\n // 如果排序失败,返回原始顺序\n return Object.entries(formulas);\n }\n }\n\n /**\n * 检查循环引用 (MIT兼容 - 简化实现)\n * @returns 是否存在循环引用\n */\n hasCircularReference(): boolean {\n try {\n // 简化实现:FormulaEngine内部处理循环引用检测\n console.warn('Circular reference detection not fully implemented in MIT version');\n return false;\n } catch (error) {\n console.error('Failed to check circular reference:', error);\n return false;\n }\n }\n\n /**\n * 获取可用函数列表 - 静态列表\n * @returns 可用函数列表\n */\n getAvailableFunctions(): string[] {\n // 返回常用的Excel函数列表\n return [\n 'ABS',\n 'ACOS',\n 'AND',\n 'ASIN',\n 'ATAN',\n 'AVERAGE',\n 'CEILING',\n 'CONCATENATE',\n 'COS',\n 'COUNT',\n 'COUNTA',\n 'COUNTIF',\n 'COUNTIFS',\n 'DATE',\n 'DAY',\n 'FLOOR',\n 'IF',\n 'IFERROR',\n 'INDEX',\n 'LEFT',\n 'LEN',\n 'LOWER',\n 'MATCH',\n 'MAX',\n 'MID',\n 'MIN',\n 'MONTH',\n 'NOT',\n 'NOW',\n 'OR',\n 'RIGHT',\n 'ROUND',\n 'ROUNDDOWN',\n 'ROUNDUP',\n 'SIN',\n 'SUM',\n 'SUMIF',\n 'SUMIFS',\n 'TAN',\n 'TODAY',\n 'UPPER',\n 'VLOOKUP',\n 'YEAR'\n ];\n }\n\n /**\n * 验证公式语法 (MIT兼容)\n * @param formula 公式\n * @returns 验证结果\n */\n validateFormula(formula: string): { isValid: boolean; error?: string } {\n try {\n // 使用FormulaEngine验证公式\n return this.formulaEngine.validateFormula(formula);\n } catch (error) {\n return {\n isValid: false,\n error: error instanceof Error ? error.message : 'Invalid formula syntax'\n };\n }\n }\n\n // /**\n // * 检查公式是否完整\n // * @param formula 公式字符串\n // * @returns 是否完整\n // */\n // isFormulaComplete(formula: string): boolean {\n // if (!formula || typeof formula !== 'string') {\n // return false;\n // }\n\n // // 如果不是公式,则认为是完整的\n // if (!formula.startsWith('=')) {\n // return true;\n // }\n\n // // 检查是否只有等号或等号加空格\n // if (formula.trim() === '=') {\n // return false;\n // }\n\n // try {\n // // 检查括号是否匹配\n // const openParenCount = (formula.match(/\\(/g) || []).length;\n // const closeParenCount = (formula.match(/\\)/g) || []).length;\n\n // // 检查引号是否匹配(简单检查)\n // const doubleQuoteCount = (formula.match(/\"/g) || []).length;\n // const singleQuoteCount = (formula.match(/'/g) || []).length;\n\n // // 检查括号和引号是否匹配\n // if (openParenCount !== closeParenCount || doubleQuoteCount % 2 !== 0 || singleQuoteCount % 2 !== 0) {\n // return false;\n // }\n\n // // 检查是否有未完成的函数参数,如 \"=SUM(A1,B2,)\" 这种情况\n // if (\n // formula.match(/\\([^)]*,\\s*\\)/) ||\n // formula.match(/,\\s*\\)/) ||\n // formula.match(/\\(\\s*\\)/) ||\n // formula.endsWith(',')\n // ) {\n // return false;\n // }\n\n // // 检查是否有连续的逗号,如 \"=SUM(A1,,B2)\" 这种情况\n // if (formula.match(/,,/)) {\n // return false;\n // }\n\n // // 检查是否以操作符结尾,如 \"=A1+\" 这种情况\n // if (formula.match(/[+\\-*/^&%<>=]$/)) {\n // return false;\n // }\n\n // // 尝试验证公式语法\n // const validationResult = this.validateFormula(formula);\n // return validationResult.isValid;\n // } catch (error) {\n // // 如果验证抛出异常,则公式不完整\n // return false;\n // }\n // }\n\n /**\n * 检查公式是否完整\n * @param formula 公式字符串\n * @returns 是否完整\n */\n isFormulaComplete(formula: string): boolean {\n if (!formula || typeof formula !== 'string') {\n return false;\n }\n\n // 如果不是公式,则认为是完整的\n if (!formula.startsWith('=')) {\n return true;\n }\n\n // 检查是否只有等号或等号加空格\n if (formula.trim() === '=') {\n return false;\n }\n\n try {\n // 检查括号是否匹配\n const openParenCount = (formula.match(/\\(/g) || []).length;\n const closeParenCount = (formula.match(/\\)/g) || []).length;\n\n // 检查引号是否匹配(简单检查)\n const doubleQuoteCount = (formula.match(/\"/g) || []).length;\n const singleQuoteCount = (formula.match(/'/g) || []).length;\n\n // 检查括号和引号是否匹配\n if (openParenCount !== closeParenCount || doubleQuoteCount % 2 !== 0 || singleQuoteCount % 2 !== 0) {\n return false;\n }\n\n // 检查是否有未完成的函数参数,如 \"=SUM(A1,B2,)\" 这种情况\n if (\n formula.match(/\\([^)]*,\\s*\\)/) ||\n formula.match(/,\\s*\\)/) ||\n formula.match(/\\(\\s*\\)/) ||\n formula.endsWith(',')\n ) {\n return false;\n }\n\n // 检查是否有连续的逗号,如 \"=SUM(A1,,B2)\" 这种情况\n if (formula.match(/,,/)) {\n return false;\n }\n\n // 检查是否以操作符结尾,如 \"=A1+\" 这种情况\n if (formula.match(/[+\\-*/^&%<>=]$/)) {\n return false;\n }\n\n // 检查比较运算符后是否缺少操作数,如 \"=IF(E1>,\" 或 \"=IF(A1=)\" 这种情况\n if (formula.match(/[<>=][<>=]?(?=[\\s,)])/)) {\n return false;\n }\n\n // 检查逻辑运算符后是否缺少操作数,如 \"=IF(AND(A1,)\" 这种情况\n if (formula.match(/\\b(AND|OR|NOT)\\((?=[\\s,)])/i)) {\n return false;\n }\n\n // 检查数学运算符后是否有操作数,如 \"=A1+*B1\" 这种情况\n if (formula.match(/[+\\-*/^&%][+\\-*/^&%]/)) {\n return false;\n }\n\n // 尝试验证公式语法\n const validationResult = this.validateFormula(formula);\n return validationResult.isValid;\n } catch (_error) {\n void _error;\n // 如果验证抛出异常,则公式不完整\n return false;\n }\n }\n\n /**\n * 计算单个公式而不影响工作表 (MIT兼容)\n * @param formula 公式\n * @returns 计算结果\n */\n calculateFormula(formula: string): { value: unknown; error?: string } {\n try {\n // 确保所有引用的sheet都已注册(用于跨sheet公式)\n if (this.hasCrossSheetReference(formula)) {\n this.ensureAllSheetsRegisteredForCrossSheetFormula(formula);\n }\n\n // 使用FormulaEngine计算公式\n return this.formulaEngine.calculateFormula(formula);\n } catch (error) {\n return {\n value: null,\n error: error instanceof Error ? error.message : 'Calculation failed'\n };\n }\n }\n\n /**\n * 暂停自动计算 (MIT兼容 - 简化实现)\n * @returns 是否成功\n */\n suspendEvaluation(): void {\n try {\n // 简化实现:FormulaEngine不支持暂停计算\n console.warn('suspendEvaluation operation not supported in MIT version');\n } catch (error) {\n console.error('Failed to suspend evaluation:', error);\n }\n }\n\n /**\n * 恢复自动计算 (MIT兼容 - 简化实现)\n */\n resumeEvaluation(): void {\n try {\n // 简化实现:FormulaEngine不支持恢复计算\n console.warn('resumeEvaluation operation not supported in MIT version');\n } catch (error) {\n console.error('Failed to resume evaluation:', error);\n }\n }\n\n /**\n * 基于当前 WorkSheet 实例重建所有公式引擎状态。\n *\n * 典型使用场景:\n * - VTableSheet 在全量更新 sheets 列表后调用;\n * - 先清空内部映射与 FormulaEngine,再根据传入的 sheets 重新注册工作表。\n *\n * 注意:公式内容本身(ISheetDefine.formulas)不在此方法中恢复,\n * 由外层(例如 VTableSheet.loadFormulas)在重建完成后按需重新写入。\n */\n rebuildFormulas(sheets: ISheetDefine[]): void {\n try {\n // 释放旧的 FormulaEngine,但保留高亮管理等 UI 相关对象\n if (this.formulaEngine) {\n try {\n this.formulaEngine.release();\n } catch (error) {\n console.error('Failed to release FormulaEngine before rebuild:', error);\n }\n }\n\n // 重置内部状态映射\n this.sheetMapping.clear();\n this.reverseSheetMapping.clear();\n this.nextSheetId = 0;\n\n // 重新初始化公式引擎\n this.initializeFormulaEngine();\n\n // 重新创建跨 sheet 公式处理器,使其绑定新的 FormulaEngine 实例\n if (this.crossSheetHandler) {\n try {\n this.crossSheetHandler.destroy();\n } catch (error) {\n console.error('Failed to destroy CrossSheetFormulaHandler before rebuild:', error);\n }\n }\n this.crossSheetHandler = new CrossSheetFormulaHandler(this.formulaEngine, this.sheet.getSheetManager(), this);\n\n // 基于传入的 sheets 重新注册所有工作表\n sheets.forEach((sheetDefine: ISheetDefine) => {\n const sheetKey = sheetDefine.sheetKey;\n const worksheetInstance = this.sheet.workSheetInstances.get(sheetKey);\n if (!worksheetInstance || !worksheetInstance.tableInstance) {\n // 如果还没有对应的 WorkSheet 实例,跳过,后续按需再补充\n return;\n }\n\n const normalizedData = this.normalizeSheetData(worksheetInstance.getData(), worksheetInstance.tableInstance);\n this.addSheet(sheetKey, normalizedData, sheetDefine.sheetTitle);\n });\n } catch (error) {\n console.error('Failed to rebuild formulas from sheets:', error);\n }\n }\n\n /**\n * 强制重新计算所有公式 (MIT兼容 - 简化实现)\n */\n rebuildAndRecalculate(): void {\n try {\n // 简化实现:FormulaEngine自动处理重新计算\n console.warn('rebuildAndRecalculate operation not required in MIT version');\n } catch (error) {\n console.error('Failed to rebuild and recalculate:', error);\n }\n }\n\n /**\n * 清空所有内容 (MIT兼容)\n */\n clearContent(): void {\n try {\n this.release();\n this.initializeFormulaEngine();\n } catch (error) {\n console.error('Failed to clear content:', error);\n }\n }\n\n /**\n * 销毁FormulaManager (MIT兼容)\n */\n release(): void {\n this.formulaRangeSelector?.release();\n this.cellHighlightManager?.release();\n this.crossSheetHandler?.destroy();\n try {\n if (this.formulaEngine) {\n this.formulaEngine.release();\n }\n } catch (error) {\n console.error('Failed to destroy FormulaEngine:', error);\n } finally {\n this.sheetMapping.clear();\n this.reverseSheetMapping.clear();\n this.isInitialized = false;\n this.nextSheetId = 0;\n this.formulaRangeSelector = null;\n this.cellHighlightManager = null;\n }\n }\n\n /**\n * 导出状态用于调试 (MIT兼容)\n */\n exportState(): Record<string, unknown> {\n return {\n isInitialized: this.isInitialized,\n sheets: Array.from(this.sheetMapping.entries()),\n functions: this.getAvailableFunctions(),\n crossSheetHandler: this.crossSheetHandler ? this.crossSheetHandler.getHandlerStatus() : null,\n stats: null // FormulaEngine不提供统计信息\n };\n }\n\n /**\n * 导出指定工作表中的所有公式 (MIT兼容)\n * @param sheetKey 工作表键\n * @returns 公式数据 (A1表示法的单元格引用 -> 公式内容)\n */\n exportFormulas(sheetKey: string): Record<string, string> {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine导出公式\n return this.formulaEngine.exportFormulas(sheetKey);\n } catch (error) {\n console.error(`Failed to export formulas for sheet ${sheetKey}:`, error);\n return {};\n }\n }\n\n /**\n * 确保已初始化\n */\n private ensureInitialized(): void {\n if (!this.isInitialized) {\n throw new Error('FormulaManager not initialized');\n }\n }\n\n /**\n * 获取所有工作表信息 (MIT兼容)\n */\n getAllSheets(): Array<{ key: string; id: number; title: string }> {\n try {\n // 使用FormulaEngine获取所有工作表\n return this.formulaEngine.getAllSheets();\n } catch (error) {\n console.error('Failed to get all sheets:', error);\n return [];\n }\n }\n\n /**\n * 设置活动工作表 (MIT兼容)\n * @param sheetKey 工作表键\n */\n setActiveSheet(sheetKey: string): void {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine设置活动工作表\n this.formulaEngine.setActiveSheet(sheetKey);\n } catch (error) {\n console.error(`Failed to set active sheet ${sheetKey}:`, error);\n throw new Error(`Failed to set active sheet: ${sheetKey}`);\n }\n }\n\n /**\n * 获取活动工作表 (MIT兼容)\n */\n getActiveSheet(): string | null {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取活动工作表\n return this.formulaEngine.getActiveSheet();\n } catch (error) {\n console.error('Failed to get active sheet:', error);\n return null;\n }\n }\n\n /**\n * 复制/移动单元格范围 - 简化版本 (MIT兼容)\n * @param sourceSheet 源工作表\n * @param sourceRange 源范围\n * @param targetSheet 目标工作表\n * @param targetRow 目标行\n * @param targetCol 目标列\n */\n copyRange(\n sourceSheet: string,\n sourceRange: { startRow: number; startCol: number; endRow: number; endCol: number },\n targetSheet: string,\n targetRow: number,\n targetCol: number\n ): void {\n this.ensureInitialized();\n\n try {\n // 简单的数据复制实现\n for (let row = sourceRange.startRow; row <= sourceRange.endRow; row++) {\n for (let col = sourceRange.startCol; col <= sourceRange.endCol; col++) {\n const sourceCell = { sheet: sourceSheet, row, col };\n const targetCell = {\n sheet: targetSheet,\n row: targetRow + (row - sourceRange.startRow),\n col: targetCol + (col - sourceRange.startCol)\n };\n\n const value = this.getCellValue(sourceCell).value;\n if (value !== null && value !== undefined) {\n this.setCellContent(targetCell, value);\n }\n }\n }\n } catch (error) {\n console.error('Failed to copy range:', error);\n throw new Error('Failed to copy cell range');\n }\n }\n\n /**\n * 检查是否为跨sheet引用\n */\n private hasCrossSheetReference(formula: string): boolean {\n return formula.includes('!') || formula.includes('!');\n }\n\n /**\n * 获取跨sheet依赖关系\n */\n getCrossSheetDependencies(): Map<string, string[]> {\n return this.crossSheetHandler.getCrossSheetDependencies();\n }\n\n /**\n * 验证跨sheet公式\n */\n validateCrossSheetFormula(cell: FormulaCell) {\n return this.crossSheetHandler.validateCrossSheetFormula(cell);\n }\n\n /**\n * 验证所有跨sheet公式\n */\n validateAllCrossSheetFormulas() {\n return this.crossSheetHandler.validateAllCrossSheetFormulas();\n }\n\n /**\n * 强制重新计算所有跨sheet公式\n */\n async recalculateAllCrossSheetFormulas(): Promise<void> {\n await this.crossSheetHandler.recalculateAllCrossSheetFormulas();\n }\n\n /**\n * 更新跨sheet公式处理器选项\n */\n updateCrossSheetOptions(options: Partial<CrossSheetFormulaOptions>): void {\n this.crossSheetHandler.updateOptions(options);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/managers/formula-manager.ts"],"names":[],"mappings":"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","file":"formula-manager.js","sourcesContent":["import { FormulaEngine } from '../formula/formula-engine';\nimport type VTableSheet from '../components/vtable-sheet';\nimport type { FormulaCell, FormulaResult, IFormulaManager } from '../ts-types/formula';\nimport { FormulaRangeSelector } from '../formula/formula-range-selector';\nimport type { CellRange, ISheetDefine } from '../ts-types';\nimport { CellHighlightManager } from '../formula';\nimport type * as VTable from '@visactor/vtable';\nimport { CrossSheetFormulaHandler } from '../formula/cross-sheet-formula-handler';\nimport type { CrossSheetFormulaOptions } from '../formula/cross-sheet-formula-handler';\n\n/**\n * 标准FormulaEngine配置 (MIT兼容)\n */\nconst DEFAULT_FORMULA_ENGINE_CONFIG = {\n precisionRounding: 14,\n caseSensitive: false,\n ignoreWhiteSpace: 'standard' as const,\n nullDate: { year: 1899, month: 12, day: 30 },\n dateFormats: ['DD/MM/YYYY', 'DD/MM/YY', 'YYYY-MM-DD'],\n timeFormats: ['hh:mm', 'hh:mm:ss.s']\n};\n\nexport class FormulaManager implements IFormulaManager {\n /** Sheet实例 */\n sheet: VTableSheet;\n /** FormulaEngine实例 */\n formulaEngine: FormulaEngine;\n /** 工作表映射 */\n private sheetMapping: Map<string, number> = new Map();\n /** 反向工作表映射 */\n private reverseSheetMapping: Map<number, string> = new Map();\n /** 是否已初始化 */\n private isInitialized = false;\n /** 下一个工作表ID */\n private nextSheetId = 0;\n /** 单元格高亮管理器 */\n cellHighlightManager: CellHighlightManager;\n /** 正在输入公式的单元格(如果是完整的公式 不做记录。没输入完整才记录)。为后面拖拽单元范围或者点击单元格选中计算范围逻辑做准备。 */\n _formulaWorkingOnCell: FormulaCell | null = null;\n /** 上一次被记录过的光标位置。 公式输入框中光标位置 */\n lastKnownCursorPosInFormulaInput: number | null = null;\n\n /** 公式范围选择器 */\n formulaRangeSelector: FormulaRangeSelector;\n /** 正在处理的单元格选区 */\n lastSelectionRangesOfHandling: CellRange[] = [];\n\n inputIsParamMode: {\n inParamMode: boolean;\n functionParamPosition: {\n start: number;\n end: number;\n } | null;\n } | null = null;\n\n inputingElement: HTMLInputElement | null = null;\n\n /** 跨sheet公式处理器 */\n crossSheetHandler: CrossSheetFormulaHandler;\n\n get formulaWorkingOnCell(): FormulaCell | null {\n return this._formulaWorkingOnCell;\n }\n set formulaWorkingOnCell(value: FormulaCell | null) {\n this._formulaWorkingOnCell = value;\n }\n\n constructor(sheet: VTableSheet) {\n this.sheet = sheet;\n this.cellHighlightManager = new CellHighlightManager(sheet);\n this.formulaRangeSelector = new FormulaRangeSelector(this);\n this.initializeFormulaEngine();\n this.crossSheetHandler = new CrossSheetFormulaHandler(this.formulaEngine, this.sheet.getSheetManager(), this);\n }\n\n /**\n * 初始化FormulaEngine实例\n */\n private initializeFormulaEngine(): void {\n try {\n this.formulaEngine = new FormulaEngine(DEFAULT_FORMULA_ENGINE_CONFIG);\n this.isInitialized = true;\n } catch (error) {\n console.error('Failed to initialize FormulaEngine:', error);\n throw new Error('FormulaManager initialization failed');\n }\n }\n\n /**\n * 添加新工作表 - 正确的多表格支持 (MIT兼容)\n * @param sheetKey 工作表键\n * @param normalizedData 工作表数据 需要规范处理过 且包含表头的数据 因为要输入给FormulaEngine\n * @param sheetTitle 工作表标题(用户可见的名称)\n * @returns 工作表ID\n */\n addSheet(sheetKey: string, normalizedData?: unknown[][], sheetTitle?: string): number {\n this.ensureInitialized();\n\n // 检查是否已存在\n if (this.sheetMapping.has(sheetKey)) {\n const existingId = this.sheetMapping.get(sheetKey);\n if (existingId !== undefined) {\n return existingId;\n }\n }\n\n try {\n // 记录添加前的数量\n const wasFirstSheet = this.sheetMapping.size === 0;\n\n // 使用FormulaEngine创建工作表\n const sheetId = this.formulaEngine.addSheet(sheetKey, normalizedData);\n\n // 设置工作表标题(如果提供)\n if (sheetTitle) {\n this.formulaEngine.setSheetTitle(sheetKey, sheetTitle);\n }\n\n this.sheetMapping.set(sheetKey, sheetId);\n this.reverseSheetMapping.set(sheetId, sheetKey);\n this.nextSheetId = Math.max(this.nextSheetId, sheetId + 1);\n\n // 如果是第一个工作表,设置为活动工作表\n if (wasFirstSheet) {\n this.formulaEngine.setActiveSheet(sheetKey);\n }\n\n return sheetId;\n } catch (error) {\n console.error(`Failed to add sheet ${sheetKey}:`, error);\n throw new Error(`Failed to add sheet: ${sheetKey}`);\n }\n }\n\n /**\n * 标准化工作表数据\n * @param data 工作表数据\n * @returns 标准化后的工作表数据\n */\n normalizeSheetData(data: unknown[][], tableInstance: VTable.ListTable): unknown[][] {\n try {\n //将columns中的title追加到data中\n const headerRows: unknown[][] = [];\n for (let i = 0; i < tableInstance.columnHeaderLevelCount; i++) {\n const headerRow: unknown[] = [];\n for (let j = 0; j < tableInstance.colCount; j++) {\n const cellValue = tableInstance.getCellValue(j, i);\n headerRow.push(cellValue);\n }\n headerRows.push(headerRow);\n }\n const dataCopy = JSON.parse(JSON.stringify(data));\n\n const toNormalizeData = tableInstance.columnHeaderLevelCount > 0 ? [...headerRows].concat(dataCopy) : dataCopy;\n\n if (!Array.isArray(toNormalizeData) || toNormalizeData.length === 0) {\n return [['']];\n }\n\n // 确保所有行都是数组,并转换数据类型\n const validData = toNormalizeData.filter(row => Array.isArray(row));\n if (validData.length === 0) {\n return [['']];\n }\n\n // 确保所有行都有相同的列数,并正确处理数据类型\n const maxCols = Math.max(...validData.map(row => row.length));\n return validData.map(row => {\n const normalizedRow = Array.isArray(row)\n ? row.map(cell => {\n if (typeof cell === 'string') {\n if (cell.startsWith('=')) {\n return cell; // 保持公式不变\n }\n const num = Number(cell);\n return !isNaN(num) && cell.trim() !== '' ? num : cell;\n }\n return cell ?? '';\n })\n : [''];\n\n while (normalizedRow.length < maxCols) {\n normalizedRow.push('');\n }\n return normalizedRow;\n });\n } catch (error) {\n console.error('Failed to normalize sheet data:', error);\n return [['']];\n }\n }\n\n /**\n * 移除工作表 (MIT兼容)\n * @param sheetKey 工作表键\n */\n removeSheet(sheetKey: string): void {\n const sheetId = this.sheetMapping.get(sheetKey);\n if (sheetId === undefined) {\n return;\n }\n\n try {\n // // 不能删除最后一个sheet\n // if (this.sheetMapping.size <= 1) {\n // throw new Error('Cannot remove the last sheet');\n // }\n\n this.formulaEngine.removeSheet(sheetKey);\n this.sheetMapping.delete(sheetKey);\n this.reverseSheetMapping.delete(sheetId);\n } catch (error) {\n console.error(`Failed to remove sheet ${sheetKey}:`, error);\n throw new Error(`Failed to remove sheet: ${sheetKey}`);\n }\n }\n\n /**\n * 重命名工作表 (MIT兼容)\n * @param oldKey 旧工作表键\n * @param newKey 新工作表键\n */\n renameSheet(oldKey: string, newKey: string): void {\n const sheetId = this.sheetMapping.get(oldKey);\n if (sheetId === undefined) {\n throw new Error(`Sheet not found: ${oldKey}`);\n }\n\n try {\n // 使用FormulaEngine的renameSheet API\n this.formulaEngine.renameSheet(oldKey, newKey);\n\n // 更新内部映射\n this.sheetMapping.delete(oldKey);\n this.sheetMapping.set(newKey, sheetId);\n this.reverseSheetMapping.set(sheetId, newKey);\n } catch (error) {\n console.error(`Failed to rename sheet from ${oldKey} to ${newKey}:`, error);\n throw new Error(`Failed to rename sheet: ${oldKey}`);\n }\n }\n\n /**\n * 更新工作表标题(用于sheet重命名时)\n * @param sheetKey 工作表键\n * @param newTitle 新标题\n */\n updateSheetTitle(sheetKey: string, newTitle: string): void {\n // 获取旧标题\n const oldTitle = this.formulaEngine.getSheetTitle(sheetKey);\n\n // 使用FormulaEngine的setSheetTitle API更新标题映射\n this.formulaEngine.setSheetTitle(sheetKey, newTitle);\n\n // 更新所有引用旧标题的公式\n if (oldTitle && oldTitle !== newTitle) {\n this.updateCrossSheetFormulasWithNewTitle(oldTitle, newTitle);\n }\n\n // 清除相关缓存以确保跨sheet公式能正确识别新的标题\n if (this.crossSheetHandler) {\n this.crossSheetHandler.clearCache();\n }\n }\n\n /**\n * 更新所有引用旧标题的跨sheet公式\n * @param oldTitle 旧标题\n * @param newTitle 新标题\n */\n private updateCrossSheetFormulasWithNewTitle(oldTitle: string, newTitle: string): void {\n try {\n // 获取所有工作表\n const allSheets = this.sheet.getSheetManager().getAllSheets();\n\n for (const sheetInfo of allSheets) {\n const formulas = this.formulaEngine.exportFormulas(sheetInfo.sheetKey);\n\n for (const [cellRef, formula] of Object.entries(formulas)) {\n if (this.hasCrossSheetReference(formula)) {\n // 转义旧标题中的特殊字符,用于正则表达式\n const escapedOldTitle = oldTitle.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // 创建各种可能的引用模式\n const patterns = [\n // 英文感叹号,无引号: 销售数据!\n `${escapedOldTitle}!`,\n // 中文感叹号,无引号: 销售数据!\n `${escapedOldTitle}!`,\n // 英文感叹号,有引号: '销售数据'!\n `'${escapedOldTitle}'!`,\n // 中文感叹号,有引号: '销售数据'!\n `'${escapedOldTitle}'!`\n ];\n\n let updatedFormula = formula;\n let hasChanges = false;\n\n // 逐一替换各种模式\n for (const pattern of patterns) {\n if (updatedFormula.includes(pattern)) {\n // 根据模式类型进行相应的替换\n if (pattern.includes(`'${escapedOldTitle}'`)) {\n // 处理带引号的情况\n if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(new RegExp(`'${escapedOldTitle}'!`, 'g'), `'${newTitle}'!`);\n } else if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(\n new RegExp(`'${escapedOldTitle}'!`, 'g'),\n `'${newTitle}'!`\n );\n }\n } else {\n // 处理无引号的情况\n if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(new RegExp(`${escapedOldTitle}!`, 'g'), `${newTitle}!`);\n } else if (pattern.endsWith('!')) {\n updatedFormula = updatedFormula.replace(new RegExp(`${escapedOldTitle}!`, 'g'), `${newTitle}!`);\n }\n }\n hasChanges = true;\n }\n }\n\n if (hasChanges && updatedFormula !== formula) {\n // 解析单元格引用 (A1格式转换为行列坐标)\n const cell = this.parseA1CellRef(`${sheetInfo.sheetKey}!${cellRef}`);\n if (cell) {\n // 更新公式\n this.formulaEngine.setCellContent(cell, updatedFormula);\n // console.log(`Updated formula in ${sheetInfo.sheetKey}!${cellRef}: ${formula} -> ${updatedFormula}`);\n }\n }\n }\n }\n }\n } catch (error) {\n console.error(`Failed to update cross-sheet formulas from ${oldTitle} to ${newTitle}:`, error);\n }\n }\n\n /**\n * 解析A1格式的单元格引用为行列坐标\n * @param cellRef A1格式的单元格引用,如 \"Sheet1!A1\" 或 \"A1\"\n * @returns 单元格对象,如果解析失败返回null\n */\n private parseA1CellRef(cellRef: string): { sheet: string; row: number; col: number } | null {\n try {\n // 支持中英文感叹号\n let parts: string[];\n if (cellRef.includes('!')) {\n parts = cellRef.split('!');\n } else if (cellRef.includes('!')) {\n parts = cellRef.split('!');\n } else {\n // 没有sheet前缀,使用默认sheet\n parts = ['Sheet1', cellRef];\n }\n\n if (parts.length !== 2) {\n return null;\n }\n\n const [sheet, a1Notation] = parts;\n\n // 解析A1格式 (如 A1, B2, AA10)\n const match = a1Notation.match(/^([A-Z]+)([0-9]+)$/);\n if (!match) {\n return null;\n }\n\n const colLetters = match[1];\n const rowNumber = parseInt(match[2], 10);\n\n // 转换列字母为索引 (A=0, B=1, ..., Z=25, AA=26, etc.)\n let col = 0;\n for (let i = 0; i < colLetters.length; i++) {\n col = col * 26 + (colLetters.charCodeAt(i) - 65);\n }\n\n return { sheet, row: rowNumber - 1, col };\n } catch {\n return null;\n }\n }\n\n // 用于防止死循环的标记\n private creatingSheets = new Set<string>();\n\n /**\n * 确保sheet已在formulaEngine中注册\n * @param sheetKey 工作表键\n */\n private ensureSheetRegistered(sheetKey: string): void {\n if (this.sheet.workSheetInstances.has(sheetKey)) {\n return;\n }\n\n // 如果正在创建这个 sheet,直接返回避免死循环\n if (this.creatingSheets.has(sheetKey)) {\n return;\n }\n\n const sheetDefine = this.sheet.getSheetManager().getSheet(sheetKey);\n if (!sheetDefine) {\n return;\n }\n\n try {\n // 标记正在创建\n this.creatingSheets.add(sheetKey);\n const instance = this.sheet.createWorkSheetInstance(sheetDefine);\n this.sheet.workSheetInstances.set(sheetKey, instance);\n } finally {\n // 创建完成后移除标记\n this.creatingSheets.delete(sheetKey);\n }\n }\n\n /**\n * 确保跨sheet公式中引用的所有sheet都已注册\n * @param formula 公式字符串\n */\n private ensureAllSheetsRegisteredForCrossSheetFormula(formula: string): void {\n try {\n // 提取公式中引用的所有sheet名称\n const sheetPattern = /([A-Za-z0-9_一-龥]+)!/g;\n let match;\n const referencedSheets = new Set<string>();\n\n while ((match = sheetPattern.exec(formula)) !== null) {\n const sheetName = match[1];\n if (sheetName) {\n referencedSheets.add(sheetName);\n }\n }\n\n // 将所有引用的sheet转换为sheetKey并注册\n for (const sheetTitle of referencedSheets) {\n // 查找对应的sheetKey\n const allSheets = this.sheet.getSheetManager().getAllSheets();\n const sheetInfo = allSheets.find(sheet => sheet.sheetTitle.toLowerCase() === sheetTitle.toLowerCase());\n\n if (sheetInfo) {\n // 确保这个sheet已注册到formulaEngine\n this.ensureSheetRegistered(sheetInfo.sheetKey);\n }\n }\n } catch (error) {\n console.warn('Failed to register sheets for cross-sheet formula:', error);\n }\n }\n\n /**\n * 标准化数据供公式引擎使用\n * @param data 原始数据\n * @returns 标准化后的数据\n */\n private normalizeDataForFormulaEngine(data: unknown[][]): unknown[][] {\n if (!Array.isArray(data) || data.length === 0) {\n return [['']];\n }\n\n const maxCols = Math.max(...data.map(row => (Array.isArray(row) ? row.length : 0)));\n\n return data.map(row => {\n if (!Array.isArray(row)) {\n return Array(maxCols).fill('');\n }\n\n const normalizedRow = row.map(cell => {\n if (typeof cell === 'string') {\n if (cell.startsWith('=')) {\n return cell; // 保持公式不变\n }\n const num = Number(cell);\n return !isNaN(num) && cell.trim() !== '' ? num : cell;\n }\n return cell ?? '';\n });\n\n while (normalizedRow.length < maxCols) {\n normalizedRow.push('');\n }\n\n return normalizedRow;\n });\n }\n\n /**\n * 触发公式相关事件\n * @param cell 单元格\n * @param eventType 事件类型\n * @param formula 公式内容\n * @param error 错误信息(可选)\n */\n private emitFormulaEvent(\n cell: FormulaCell,\n eventType: 'added' | 'removed' | 'error',\n formula?: string,\n error?: any\n ): void {\n // Safely get the worksheet instance\n let worksheet: any = null;\n\n // Try to get worksheet using the public method if available\n if (this.sheet && typeof this.sheet.getWorkSheetByKey === 'function') {\n worksheet = this.sheet.getWorkSheetByKey(cell.sheet);\n } else {\n // Fallback: try to access the private property directly (for backwards compatibility in tests)\n try {\n const workSheetInstances = (this.sheet as any).workSheetInstances;\n if (workSheetInstances && workSheetInstances.get) {\n worksheet = workSheetInstances.get(cell.sheet);\n }\n } catch (_e) {\n void _e;\n // If we can't access the worksheet, just return silently\n return;\n }\n }\n\n if (!worksheet || !worksheet.eventManager) {\n return;\n }\n\n switch (eventType) {\n case 'added':\n worksheet.eventManager.emitFormulaAdded({ row: cell.row, col: cell.col }, formula);\n break;\n case 'removed':\n worksheet.eventManager.emitFormulaRemoved({ row: cell.row, col: cell.col }, formula);\n break;\n case 'error':\n worksheet.eventManager.emitFormulaError(cell, formula || '', error);\n break;\n }\n }\n\n /**\n * 获取工作表ID\n * @param sheetKey 工作表键\n * @returns 工作表ID\n */\n getSheetId(sheetKey: string): number {\n // 首先尝试精确匹配\n const sheetId = this.sheetMapping.get(sheetKey);\n if (sheetId !== undefined) {\n return sheetId;\n }\n\n // 如果精确匹配失败,尝试不区分大小写的匹配\n const lowerSheetKey = sheetKey.toLowerCase();\n for (const [existingKey, existingId] of this.sheetMapping.entries()) {\n if (existingKey.toLowerCase() === lowerSheetKey) {\n return existingId;\n }\n }\n\n // 如果还是找不到,自动创建新sheet\n return this.addSheet(sheetKey);\n }\n\n /**\n * 设置单元格内容 (MIT兼容)\n * @param cell 单元格\n * @param value 值\n */\n setCellContent(cell: FormulaCell, value: unknown): void {\n this.ensureInitialized();\n\n // 检查单元格参数有效性\n if (!cell || cell.sheet === undefined || cell.row === undefined || cell.col === undefined) {\n console.error('Invalid cell parameter:', cell);\n throw new Error('Invalid cell parameter for setCellContent');\n }\n\n // 检查单元格是否超出有效范围\n if (cell.row < 0 || cell.col < 0) {\n console.error('Cell coordinates out of bounds:', cell);\n throw new Error(`Cell coordinates out of bounds: row=${cell.row}, col=${cell.col}`);\n }\n\n try {\n // 公式计算应以当前单元格所属 sheet 为上下文\n this.formulaEngine.setActiveSheet(cell.sheet);\n\n // 检查是否为公式\n const isFormula = typeof value === 'string' && value.startsWith('=');\n const oldFormula = this.getCellFormula(cell);\n\n // 检查是否为跨sheet公式\n if (isFormula && this.hasCrossSheetReference(value)) {\n // 使用跨sheet公式处理器处理\n // 注意:setCrossSheetFormula 是异步的,但这里没有等待\n // 由于 setCrossSheetFormula 内部会同步调用 formulaEngine.setCellContent,\n // 所以公式会被立即存储,不需要等待 Promise\n this.crossSheetHandler.setCrossSheetFormula(cell, value);\n } else {\n // 使用FormulaEngine设置单元格内容\n this.formulaEngine.setCellContent(cell, value);\n }\n\n // 在操作成功后触发相应的事件\n const newFormula = this.getCellFormula(cell);\n if (newFormula && newFormula !== oldFormula) {\n // 公式添加或更新\n this.emitFormulaEvent(cell, 'added', newFormula);\n } else if (!newFormula && oldFormula) {\n // 公式被移除\n this.emitFormulaEvent(cell, 'removed', oldFormula);\n }\n } catch (error) {\n console.error('Failed to set cell content:', error);\n\n // 触发公式错误事件\n if (typeof value === 'string' && value.startsWith('=')) {\n this.emitFormulaEvent(cell, 'error', value, error);\n }\n\n // 提供更详细的错误信息\n if (error instanceof Error) {\n throw new Error(`Failed to set cell content at ${cell.sheet}:${cell.row}:${cell.col}. ${error.message}`);\n } else {\n throw new Error(`Failed to set cell content at ${cell.sheet}:${cell.row}:${cell.col}`);\n }\n }\n }\n\n /**\n * 获取单元格值 (MIT兼容)\n * @param cell 单元格\n * @returns 单元格值\n */\n getCellValue(cell: FormulaCell): FormulaResult {\n this.ensureInitialized();\n\n try {\n // 检查是否为跨sheet公式\n const formula = this.formulaEngine.getCellFormula(cell);\n if (formula && this.hasCrossSheetReference(formula)) {\n // 对于跨sheet公式,确保所有相关sheet都已注册\n this.ensureAllSheetsRegisteredForCrossSheetFormula(formula);\n const result = this.formulaEngine.getCellValue(cell);\n return result;\n }\n\n // 检查sheet是否已在formulaEngine中注册,如果没有则尝试注册\n this.ensureSheetRegistered(cell.sheet);\n\n // 以当前单元格所属 sheet 作为计算上下文\n this.formulaEngine.setActiveSheet(cell.sheet);\n\n // 使用FormulaEngine获取单元格值\n return this.formulaEngine.getCellValue(cell);\n } catch (error) {\n console.error('Failed to get cell value:', error);\n return {\n value: null,\n error: error instanceof Error ? error.message : 'Unknown error'\n };\n }\n }\n\n /**\n * 获取单元格公式 (MIT兼容)\n * @param cell 单元格\n * @returns 单元格公式\n */\n getCellFormula(cell: FormulaCell): string | undefined {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取单元格公式\n return this.formulaEngine.getCellFormula(cell);\n } catch (error) {\n console.error('Failed to get cell formula:', error);\n return undefined;\n }\n }\n\n /**\n * 检查是否为公式单元格 (MIT兼容)\n * @param cell 单元格\n * @returns 是否为公式单元格\n */\n isCellFormula(cell: FormulaCell): boolean {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine检查是否为公式单元格\n return this.formulaEngine.isCellFormula(cell);\n } catch (error) {\n console.error('Failed to check if cell has formula:', error);\n return false;\n }\n }\n\n /**\n * 获取依赖此单元格的所有单元格(包括范围依赖)(MIT兼容)\n * @param cell 单元格\n * @returns 依赖此单元格的所有单元格\n */\n getCellDependents(cell: FormulaCell): FormulaCell[] {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取依赖单元格\n return this.formulaEngine.getCellDependents(cell);\n } catch (error) {\n console.error('Failed to get cell dependents:', error);\n return [];\n }\n }\n\n /**\n * 获取此单元格依赖的所有单元格 (MIT兼容)\n * @param cell 单元格\n * @returns 此单元格依赖的所有单元格\n */\n getCellPrecedents(cell: FormulaCell): FormulaCell[] {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取前置单元格\n return this.formulaEngine.getCellPrecedents(cell);\n } catch (error) {\n console.error('Failed to get cell precedents:', error);\n return [];\n }\n }\n\n /**\n * 批量更新单元格 (MIT兼容)\n * @param changes 更新内容\n */\n batchUpdate(changes: Array<{ cell: FormulaCell; value: unknown }>): void {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine批量更新单元格\n for (const { cell, value } of changes) {\n this.formulaEngine.setCellContent(cell, value);\n }\n } catch (error) {\n console.error('Failed to batch update cells:', error);\n throw new Error('Batch update failed');\n }\n }\n\n /**\n * 添加行 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param rowIndex 行索引\n * @param numberOfRows 添加的行数\n */\n addRows(sheetKey: string, rowIndex: number, numberOfRows: number = 1) {\n this.ensureInitialized();\n\n try {\n // 简化实现:在指定位置插入空行\n console.warn(\n `addRows operation not fully implemented in MIT version.\n Inserting ${numberOfRows} empty rows at index ${rowIndex}`\n );\n // 调整公式引用\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'insert',\n 'row',\n rowIndex,\n numberOfRows,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n\n // 刷新所有受影响的单元格\n [...adjustedCells, ...movedCells].forEach(cell => {\n // this.sheet.getActiveSheet().tableInstance.scenegraph.updateCellContent(cell.row, cell.col);\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value, false, false);\n });\n } catch (error) {\n console.error('Failed to add rows:', error);\n throw new Error(`Failed to add ${numberOfRows} rows at index ${rowIndex}`);\n }\n }\n\n /**\n * 删除行 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param rowIndex 行索引\n * @param numberOfRows 删除的行数\n */\n removeRows(sheetKey: string, rowIndex: number, numberOfRows: number = 1) {\n this.ensureInitialized();\n\n try {\n // 简化实现:删除指定位置的行\n console.warn(\n `removeRows operation not fully implemented in MIT version. Removing ${numberOfRows} rows at index ${rowIndex}`\n );\n\n // 调整公式引用,获取所有受影响的单元格\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'delete',\n 'row',\n rowIndex,\n numberOfRows,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n\n // 刷新所有受影响的单元格\n [...adjustedCells, ...movedCells].forEach(cell => {\n // this.sheet.getActiveSheet().tableInstance.scenegraph.updateCellContent(cell.row, cell.col);\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value, false, false);\n });\n } catch (error) {\n console.error('Failed to remove rows:', error);\n throw new Error(`Failed to remove ${numberOfRows} rows at index ${rowIndex}`);\n }\n }\n\n /**\n * 添加列 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param columnIndex 列索引\n * @param numberOfColumns 添加的列数\n */\n addColumns(sheetKey: string, columnIndex: number, numberOfColumns: number = 1): void {\n this.ensureInitialized();\n\n try {\n // 简化实现:在指定位置插入空列\n console.warn(\n `addColumns operation not fully implemented in MIT version.\n Inserting ${numberOfColumns} empty columns at index ${columnIndex}`\n );\n\n // 调整公式引用,获取所有受影响的单元格\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'insert',\n 'column',\n columnIndex,\n numberOfColumns,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n [...adjustedCells, ...movedCells].forEach(cell => {\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value, false, false);\n });\n } catch (error) {\n console.error('Failed to add columns:', error);\n throw new Error(`Failed to add ${numberOfColumns} columns at index ${columnIndex}`);\n }\n }\n\n /**\n * 删除列 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @param columnIndex 列索引\n * @param numberOfColumns 删除的列数\n */\n removeColumns(sheetKey: string, columnIndex: number, numberOfColumns: number = 1): void {\n this.ensureInitialized();\n\n try {\n // 简化实现:删除指定位置的列\n console.warn(\n `removeColumns operation not fully implemented in MIT version.\n Removing ${numberOfColumns} columns at index ${columnIndex}`\n );\n\n // 调整公式引用,获取所有受影响的单元格\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferences(\n sheetKey,\n 'delete',\n 'column',\n columnIndex,\n numberOfColumns,\n this.sheet.getSheet(sheetKey).columnCount,\n this.sheet.getSheet(sheetKey).rowCount\n );\n // 刷新所有受影响的单元格\n [...adjustedCells, ...movedCells].forEach(cell => {\n const result = this.sheet.formulaManager.getCellValue({\n sheet: sheetKey,\n row: cell.row,\n col: cell.col\n });\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value, false, false);\n });\n } catch (error) {\n console.error('Failed to remove columns:', error);\n throw new Error(`Failed to remove ${numberOfColumns} columns at index ${columnIndex}`);\n }\n }\n /**\n * 移动列表头位置.将sourceCol位置开始往后moveCount个列,移动调整到targetCol位置处\n * @param sheetKey\n * @param sourceCol\n * @param targetCol\n * @returns\n */\n changeColumnHeaderPosition(sheetKey: string, sourceCol: number, targetCol: number): void {\n this.ensureInitialized();\n\n try {\n // 获取工作表信息\n const sheet = this.sheet.getSheet(sheetKey);\n if (!sheet) {\n throw new Error(`Sheet not found: ${sheetKey}`);\n }\n\n const totalColCount = sheet.columnCount;\n const totalRowCount = sheet.rowCount;\n\n // 使用专门的列移动方法来避免#REF!错误\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferencesForColumnMove(\n sheetKey,\n sourceCol,\n targetCol,\n totalColCount,\n totalRowCount\n );\n\n // 刷新所有受影响的单元格\n const allAffectedCells = [...adjustedCells, ...movedCells];\n for (const cell of allAffectedCells) {\n const result = this.getCellValue(cell);\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value, false, false);\n }\n\n // Log completion info\n // console.log(\n // `Column move completed: ${adjustedCells.length} formulas adjusted, ${movedCells.length} formulas moved`\n // );\n } catch (error) {\n console.error(`Failed to change column header position from ${sourceCol} to ${targetCol}:`, error);\n throw new Error(\n `Failed to change column header position: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * 移动行表头位置.将sourceRow位置开始往后moveCount个行,移动调整到targetRow位置处\n * @param sheetKey 工作表键\n * @param sourceRow 源行索引\n * @param targetRow 目标行索引\n */\n changeRowHeaderPosition(sheetKey: string, sourceRow: number, targetRow: number): void {\n this.ensureInitialized();\n\n try {\n // 获取工作表信息\n const sheet = this.sheet.getSheet(sheetKey);\n if (!sheet) {\n throw new Error(`Sheet not found: ${sheetKey}`);\n }\n\n // 使用专门的行移动方法来避免#REF!错误\n const { adjustedCells, movedCells } = this.formulaEngine.adjustFormulaReferencesForRowMove(\n sheetKey,\n sourceRow,\n targetRow\n );\n\n // 刷新所有受影响的单元格\n const allAffectedCells = [...adjustedCells, ...movedCells];\n for (const cell of allAffectedCells) {\n const result = this.getCellValue(cell);\n this.sheet\n .getActiveSheet()\n .tableInstance?.changeCellValue(cell.col, cell.row, result.error ? '#ERROR!' : result.value, false, false);\n }\n\n // Log completion info\n // console.log(\n // `Row move completed: ${adjustedCells.length} formulas adjusted, ${movedCells.length} formulas moved`\n // );\n } catch (error) {\n console.error(`Failed to change row header position from ${sourceRow} to ${targetRow}:`, error);\n throw new Error(\n `Failed to change row header position: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * 获取工作表序列化数据 (MIT兼容 - 简化实现)\n * @param sheetKey 工作表键\n * @returns 工作表序列化数据\n */\n getSheetSerialized(sheetKey: string): unknown[][] {\n this.ensureInitialized();\n\n try {\n // 简化实现:返回空数组,实际实现需要获取工作表数据\n console.warn(`getSheetSerialized operation not fully implemented in MIT version for sheet ${sheetKey}`);\n return [[]];\n } catch (error) {\n console.error('Failed to get sheet serialized data:', error);\n return [[]];\n }\n }\n\n /**\n * 根据依赖关系对公式进行排序 (MIT兼容)\n * @param sheetKey 工作表键\n * @param formulas 公式数据 (A1表示法的单元格引用 -> 公式内容)\n * @returns 排序后的公式条目数组\n */\n sortFormulasByDependency(sheetKey: string, formulas: Record<string, string>): [string, string][] {\n try {\n // 使用FormulaEngine的依赖排序功能\n return this.formulaEngine.sortFormulasByDependency(sheetKey, formulas);\n } catch (_error) {\n void _error;\n // 如果排序失败,返回原始顺序\n return Object.entries(formulas);\n }\n }\n\n /**\n * 检查循环引用 (MIT兼容 - 简化实现)\n * @returns 是否存在循环引用\n */\n hasCircularReference(): boolean {\n try {\n // 简化实现:FormulaEngine内部处理循环引用检测\n console.warn('Circular reference detection not fully implemented in MIT version');\n return false;\n } catch (error) {\n console.error('Failed to check circular reference:', error);\n return false;\n }\n }\n\n /**\n * 获取可用函数列表 - 静态列表\n * @returns 可用函数列表\n */\n getAvailableFunctions(): string[] {\n // 返回常用的Excel函数列表\n return [\n 'ABS',\n 'ACOS',\n 'AND',\n 'ASIN',\n 'ATAN',\n 'AVERAGE',\n 'CEILING',\n 'CONCATENATE',\n 'COS',\n 'COUNT',\n 'COUNTA',\n 'COUNTIF',\n 'COUNTIFS',\n 'DATE',\n 'DAY',\n 'FLOOR',\n 'IF',\n 'IFERROR',\n 'INDEX',\n 'LEFT',\n 'LEN',\n 'LOWER',\n 'MATCH',\n 'MAX',\n 'MID',\n 'MIN',\n 'MONTH',\n 'NOT',\n 'NOW',\n 'OR',\n 'RIGHT',\n 'ROUND',\n 'ROUNDDOWN',\n 'ROUNDUP',\n 'SIN',\n 'SUM',\n 'SUMIF',\n 'SUMIFS',\n 'TAN',\n 'TODAY',\n 'UPPER',\n 'VLOOKUP',\n 'YEAR'\n ];\n }\n\n /**\n * 验证公式语法 (MIT兼容)\n * @param formula 公式\n * @returns 验证结果\n */\n validateFormula(formula: string): { isValid: boolean; error?: string } {\n try {\n // 使用FormulaEngine验证公式\n return this.formulaEngine.validateFormula(formula);\n } catch (error) {\n return {\n isValid: false,\n error: error instanceof Error ? error.message : 'Invalid formula syntax'\n };\n }\n }\n\n // /**\n // * 检查公式是否完整\n // * @param formula 公式字符串\n // * @returns 是否完整\n // */\n // isFormulaComplete(formula: string): boolean {\n // if (!formula || typeof formula !== 'string') {\n // return false;\n // }\n\n // // 如果不是公式,则认为是完整的\n // if (!formula.startsWith('=')) {\n // return true;\n // }\n\n // // 检查是否只有等号或等号加空格\n // if (formula.trim() === '=') {\n // return false;\n // }\n\n // try {\n // // 检查括号是否匹配\n // const openParenCount = (formula.match(/\\(/g) || []).length;\n // const closeParenCount = (formula.match(/\\)/g) || []).length;\n\n // // 检查引号是否匹配(简单检查)\n // const doubleQuoteCount = (formula.match(/\"/g) || []).length;\n // const singleQuoteCount = (formula.match(/'/g) || []).length;\n\n // // 检查括号和引号是否匹配\n // if (openParenCount !== closeParenCount || doubleQuoteCount % 2 !== 0 || singleQuoteCount % 2 !== 0) {\n // return false;\n // }\n\n // // 检查是否有未完成的函数参数,如 \"=SUM(A1,B2,)\" 这种情况\n // if (\n // formula.match(/\\([^)]*,\\s*\\)/) ||\n // formula.match(/,\\s*\\)/) ||\n // formula.match(/\\(\\s*\\)/) ||\n // formula.endsWith(',')\n // ) {\n // return false;\n // }\n\n // // 检查是否有连续的逗号,如 \"=SUM(A1,,B2)\" 这种情况\n // if (formula.match(/,,/)) {\n // return false;\n // }\n\n // // 检查是否以操作符结尾,如 \"=A1+\" 这种情况\n // if (formula.match(/[+\\-*/^&%<>=]$/)) {\n // return false;\n // }\n\n // // 尝试验证公式语法\n // const validationResult = this.validateFormula(formula);\n // return validationResult.isValid;\n // } catch (error) {\n // // 如果验证抛出异常,则公式不完整\n // return false;\n // }\n // }\n\n /**\n * 检查公式是否完整\n * @param formula 公式字符串\n * @returns 是否完整\n */\n isFormulaComplete(formula: string): boolean {\n if (!formula || typeof formula !== 'string') {\n return false;\n }\n\n // 如果不是公式,则认为是完整的\n if (!formula.startsWith('=')) {\n return true;\n }\n\n // 检查是否只有等号或等号加空格\n if (formula.trim() === '=') {\n return false;\n }\n\n try {\n // 检查括号是否匹配\n const openParenCount = (formula.match(/\\(/g) || []).length;\n const closeParenCount = (formula.match(/\\)/g) || []).length;\n\n // 检查引号是否匹配(简单检查)\n const doubleQuoteCount = (formula.match(/\"/g) || []).length;\n const singleQuoteCount = (formula.match(/'/g) || []).length;\n\n // 检查括号和引号是否匹配\n if (openParenCount !== closeParenCount || doubleQuoteCount % 2 !== 0 || singleQuoteCount % 2 !== 0) {\n return false;\n }\n\n // 检查是否有未完成的函数参数,如 \"=SUM(A1,B2,)\" 这种情况\n if (\n formula.match(/\\([^)]*,\\s*\\)/) ||\n formula.match(/,\\s*\\)/) ||\n formula.match(/\\(\\s*\\)/) ||\n formula.endsWith(',')\n ) {\n return false;\n }\n\n // 检查是否有连续的逗号,如 \"=SUM(A1,,B2)\" 这种情况\n if (formula.match(/,,/)) {\n return false;\n }\n\n // 检查是否以操作符结尾,如 \"=A1+\" 这种情况\n if (formula.match(/[+\\-*/^&%<>=]$/)) {\n return false;\n }\n\n // 检查比较运算符后是否缺少操作数,如 \"=IF(E1>,\" 或 \"=IF(A1=)\" 这种情况\n if (formula.match(/[<>=][<>=]?(?=[\\s,)])/)) {\n return false;\n }\n\n // 检查逻辑运算符后是否缺少操作数,如 \"=IF(AND(A1,)\" 这种情况\n if (formula.match(/\\b(AND|OR|NOT)\\((?=[\\s,)])/i)) {\n return false;\n }\n\n // 检查数学运算符后是否有操作数,如 \"=A1+*B1\" 这种情况\n if (formula.match(/[+\\-*/^&%][+\\-*/^&%]/)) {\n return false;\n }\n\n // 尝试验证公式语法\n const validationResult = this.validateFormula(formula);\n return validationResult.isValid;\n } catch (_error) {\n void _error;\n // 如果验证抛出异常,则公式不完整\n return false;\n }\n }\n\n /**\n * 计算单个公式而不影响工作表 (MIT兼容)\n * @param formula 公式\n * @returns 计算结果\n */\n calculateFormula(formula: string): { value: unknown; error?: string } {\n try {\n // 确保所有引用的sheet都已注册(用于跨sheet公式)\n if (this.hasCrossSheetReference(formula)) {\n this.ensureAllSheetsRegisteredForCrossSheetFormula(formula);\n }\n\n // 使用FormulaEngine计算公式\n return this.formulaEngine.calculateFormula(formula);\n } catch (error) {\n return {\n value: null,\n error: error instanceof Error ? error.message : 'Calculation failed'\n };\n }\n }\n\n /**\n * 暂停自动计算 (MIT兼容 - 简化实现)\n * @returns 是否成功\n */\n suspendEvaluation(): void {\n try {\n // 简化实现:FormulaEngine不支持暂停计算\n console.warn('suspendEvaluation operation not supported in MIT version');\n } catch (error) {\n console.error('Failed to suspend evaluation:', error);\n }\n }\n\n /**\n * 恢复自动计算 (MIT兼容 - 简化实现)\n */\n resumeEvaluation(): void {\n try {\n // 简化实现:FormulaEngine不支持恢复计算\n console.warn('resumeEvaluation operation not supported in MIT version');\n } catch (error) {\n console.error('Failed to resume evaluation:', error);\n }\n }\n\n /**\n * 基于当前 WorkSheet 实例重建所有公式引擎状态。\n *\n * 典型使用场景:\n * - VTableSheet 在全量更新 sheets 列表后调用;\n * - 先清空内部映射与 FormulaEngine,再根据传入的 sheets 重新注册工作表。\n *\n * 注意:公式内容本身(ISheetDefine.formulas)不在此方法中恢复,\n * 由外层(例如 VTableSheet.loadFormulas)在重建完成后按需重新写入。\n */\n rebuildFormulas(sheets: ISheetDefine[]): void {\n try {\n // 释放旧的 FormulaEngine,但保留高亮管理等 UI 相关对象\n if (this.formulaEngine) {\n try {\n this.formulaEngine.release();\n } catch (error) {\n console.error('Failed to release FormulaEngine before rebuild:', error);\n }\n }\n\n // 重置内部状态映射\n this.sheetMapping.clear();\n this.reverseSheetMapping.clear();\n this.nextSheetId = 0;\n\n // 重新初始化公式引擎\n this.initializeFormulaEngine();\n\n // 重新创建跨 sheet 公式处理器,使其绑定新的 FormulaEngine 实例\n if (this.crossSheetHandler) {\n try {\n this.crossSheetHandler.destroy();\n } catch (error) {\n console.error('Failed to destroy CrossSheetFormulaHandler before rebuild:', error);\n }\n }\n this.crossSheetHandler = new CrossSheetFormulaHandler(this.formulaEngine, this.sheet.getSheetManager(), this);\n\n // 基于传入的 sheets 重新注册所有工作表\n sheets.forEach((sheetDefine: ISheetDefine) => {\n const sheetKey = sheetDefine.sheetKey;\n const worksheetInstance = this.sheet.workSheetInstances.get(sheetKey);\n if (!worksheetInstance || !worksheetInstance.tableInstance) {\n // 如果还没有对应的 WorkSheet 实例,跳过,后续按需再补充\n return;\n }\n\n const normalizedData = this.normalizeSheetData(worksheetInstance.getData(), worksheetInstance.tableInstance);\n this.addSheet(sheetKey, normalizedData, sheetDefine.sheetTitle);\n });\n } catch (error) {\n console.error('Failed to rebuild formulas from sheets:', error);\n }\n }\n\n /**\n * 强制重新计算所有公式 (MIT兼容 - 简化实现)\n */\n rebuildAndRecalculate(): void {\n try {\n // 简化实现:FormulaEngine自动处理重新计算\n console.warn('rebuildAndRecalculate operation not required in MIT version');\n } catch (error) {\n console.error('Failed to rebuild and recalculate:', error);\n }\n }\n\n /**\n * 清空所有内容 (MIT兼容)\n */\n clearContent(): void {\n try {\n this.release();\n this.initializeFormulaEngine();\n } catch (error) {\n console.error('Failed to clear content:', error);\n }\n }\n\n /**\n * 销毁FormulaManager (MIT兼容)\n */\n release(): void {\n this.formulaRangeSelector?.release();\n this.cellHighlightManager?.release();\n this.crossSheetHandler?.destroy();\n try {\n if (this.formulaEngine) {\n this.formulaEngine.release();\n }\n } catch (error) {\n console.error('Failed to destroy FormulaEngine:', error);\n } finally {\n this.sheetMapping.clear();\n this.reverseSheetMapping.clear();\n this.isInitialized = false;\n this.nextSheetId = 0;\n this.formulaRangeSelector = null;\n this.cellHighlightManager = null;\n }\n }\n\n /**\n * 导出状态用于调试 (MIT兼容)\n */\n exportState(): Record<string, unknown> {\n return {\n isInitialized: this.isInitialized,\n sheets: Array.from(this.sheetMapping.entries()),\n functions: this.getAvailableFunctions(),\n crossSheetHandler: this.crossSheetHandler ? this.crossSheetHandler.getHandlerStatus() : null,\n stats: null // FormulaEngine不提供统计信息\n };\n }\n\n /**\n * 导出指定工作表中的所有公式 (MIT兼容)\n * @param sheetKey 工作表键\n * @returns 公式数据 (A1表示法的单元格引用 -> 公式内容)\n */\n exportFormulas(sheetKey: string): Record<string, string> {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine导出公式\n return this.formulaEngine.exportFormulas(sheetKey);\n } catch (error) {\n console.error(`Failed to export formulas for sheet ${sheetKey}:`, error);\n return {};\n }\n }\n\n /**\n * 确保已初始化\n */\n private ensureInitialized(): void {\n if (!this.isInitialized) {\n throw new Error('FormulaManager not initialized');\n }\n }\n\n /**\n * 获取所有工作表信息 (MIT兼容)\n */\n getAllSheets(): Array<{ key: string; id: number; title: string }> {\n try {\n // 使用FormulaEngine获取所有工作表\n return this.formulaEngine.getAllSheets();\n } catch (error) {\n console.error('Failed to get all sheets:', error);\n return [];\n }\n }\n\n /**\n * 设置活动工作表 (MIT兼容)\n * @param sheetKey 工作表键\n */\n setActiveSheet(sheetKey: string): void {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine设置活动工作表\n this.formulaEngine.setActiveSheet(sheetKey);\n } catch (error) {\n console.error(`Failed to set active sheet ${sheetKey}:`, error);\n throw new Error(`Failed to set active sheet: ${sheetKey}`);\n }\n }\n\n /**\n * 获取活动工作表 (MIT兼容)\n */\n getActiveSheet(): string | null {\n this.ensureInitialized();\n\n try {\n // 使用FormulaEngine获取活动工作表\n return this.formulaEngine.getActiveSheet();\n } catch (error) {\n console.error('Failed to get active sheet:', error);\n return null;\n }\n }\n\n /**\n * 复制/移动单元格范围 - 简化版本 (MIT兼容)\n * @param sourceSheet 源工作表\n * @param sourceRange 源范围\n * @param targetSheet 目标工作表\n * @param targetRow 目标行\n * @param targetCol 目标列\n */\n copyRange(\n sourceSheet: string,\n sourceRange: { startRow: number; startCol: number; endRow: number; endCol: number },\n targetSheet: string,\n targetRow: number,\n targetCol: number\n ): void {\n this.ensureInitialized();\n\n try {\n // 简单的数据复制实现\n for (let row = sourceRange.startRow; row <= sourceRange.endRow; row++) {\n for (let col = sourceRange.startCol; col <= sourceRange.endCol; col++) {\n const sourceCell = { sheet: sourceSheet, row, col };\n const targetCell = {\n sheet: targetSheet,\n row: targetRow + (row - sourceRange.startRow),\n col: targetCol + (col - sourceRange.startCol)\n };\n\n const value = this.getCellValue(sourceCell).value;\n if (value !== null && value !== undefined) {\n this.setCellContent(targetCell, value);\n }\n }\n }\n } catch (error) {\n console.error('Failed to copy range:', error);\n throw new Error('Failed to copy cell range');\n }\n }\n\n /**\n * 检查是否为跨sheet引用\n */\n private hasCrossSheetReference(formula: string): boolean {\n return formula.includes('!') || formula.includes('!');\n }\n\n /**\n * 获取跨sheet依赖关系\n */\n getCrossSheetDependencies(): Map<string, string[]> {\n return this.crossSheetHandler.getCrossSheetDependencies();\n }\n\n /**\n * 验证跨sheet公式\n */\n validateCrossSheetFormula(cell: FormulaCell) {\n return this.crossSheetHandler.validateCrossSheetFormula(cell);\n }\n\n /**\n * 验证所有跨sheet公式\n */\n validateAllCrossSheetFormulas() {\n return this.crossSheetHandler.validateAllCrossSheetFormulas();\n }\n\n /**\n * 强制重新计算所有跨sheet公式\n */\n async recalculateAllCrossSheetFormulas(): Promise<void> {\n await this.crossSheetHandler.recalculateAllCrossSheetFormulas();\n }\n\n /**\n * 更新跨sheet公式处理器选项\n */\n updateCrossSheetOptions(options: Partial<CrossSheetFormulaOptions>): void {\n this.crossSheetHandler.updateOptions(options);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vtable-sheet",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.2",
|
|
4
4
|
"description": "Lightweight editable spreadsheet component based on VTable",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"vtable-sheet",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"@visactor/vscale": "~1.0.17",
|
|
43
43
|
"@visactor/vdataset": "~1.0.17",
|
|
44
44
|
"cssfontparser": "^1.2.1",
|
|
45
|
-
"@visactor/vtable": "1.23.
|
|
46
|
-
"@visactor/vtable-editors": "1.23.
|
|
47
|
-
"@visactor/vtable-plugins": "1.23.
|
|
45
|
+
"@visactor/vtable": "1.23.2",
|
|
46
|
+
"@visactor/vtable-editors": "1.23.2",
|
|
47
|
+
"@visactor/vtable-plugins": "1.23.2"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"luxon": "*",
|
|
@@ -86,9 +86,9 @@
|
|
|
86
86
|
"node-fetch": "2.6.7",
|
|
87
87
|
"form-data": "~4.0.0",
|
|
88
88
|
"axios": "^1.4.0",
|
|
89
|
+
"@internal/bundler": "0.0.1",
|
|
89
90
|
"@internal/eslint-config": "0.0.1",
|
|
90
|
-
"@internal/ts-config": "0.0.1"
|
|
91
|
-
"@internal/bundler": "0.0.1"
|
|
91
|
+
"@internal/ts-config": "0.0.1"
|
|
92
92
|
},
|
|
93
93
|
"unpkg": "latest",
|
|
94
94
|
"unpkgFiles": [
|