@visactor/vtable-sheet 1.22.0 → 1.22.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/components/vtable-sheet.d.ts +2 -2
- package/cjs/components/vtable-sheet.js +28 -2
- package/cjs/components/vtable-sheet.js.map +1 -1
- package/cjs/core/WorkSheet.d.ts +3 -0
- package/cjs/core/WorkSheet.js +22 -3
- package/cjs/core/WorkSheet.js.map +1 -1
- package/cjs/core/table-plugins.js +1 -2
- package/cjs/core/table-plugins.js.map +1 -1
- package/cjs/formula/formula-engine.d.ts +12 -1
- package/cjs/formula/formula-engine.js +281 -28
- package/cjs/formula/formula-engine.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/managers/formula-manager.d.ts +2 -0
- package/cjs/managers/formula-manager.js +29 -0
- package/cjs/managers/formula-manager.js.map +1 -1
- package/cjs/ts-types/index.d.ts +2 -2
- package/cjs/ts-types/index.js.map +1 -1
- package/dist/vtable-sheet.js +771 -158
- package/dist/vtable-sheet.min.js +1 -1
- package/es/components/vtable-sheet.d.ts +2 -2
- package/es/components/vtable-sheet.js +29 -3
- package/es/components/vtable-sheet.js.map +1 -1
- package/es/core/WorkSheet.d.ts +3 -0
- package/es/core/WorkSheet.js +22 -3
- package/es/core/WorkSheet.js.map +1 -1
- package/es/core/table-plugins.js +1 -2
- package/es/core/table-plugins.js.map +1 -1
- package/es/formula/formula-engine.d.ts +12 -1
- package/es/formula/formula-engine.js +281 -28
- package/es/formula/formula-engine.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/managers/formula-manager.d.ts +2 -0
- package/es/managers/formula-manager.js +29 -0
- package/es/managers/formula-manager.js.map +1 -1
- package/es/ts-types/index.d.ts +2 -2
- package/es/ts-types/index.js.map +1 -1
- package/package.json +6 -6
package/es/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import VTableSheet from './components/vtable-sheet';
|
|
|
2
2
|
import type { ISheetDefine, IVTableSheetOptions } from './ts-types';
|
|
3
3
|
import * as TYPES from './ts-types';
|
|
4
4
|
import * as VTable from './vtable';
|
|
5
|
-
export declare const version = "1.22.
|
|
5
|
+
export declare const version = "1.22.2";
|
|
6
6
|
export { VTableSheet, TYPES, VTable, ISheetDefine, IVTableSheetOptions };
|
package/es/index.js
CHANGED
package/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,YAAY,EAAE,CAAC;AAIf,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAqC,CAAC","file":"index.js","sourcesContent":["import VTableSheet from './components/vtable-sheet';\nimport type { ISheetDefine, IVTableSheetOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport * as VTable from './vtable';\nimport { importStyles } from './styles/style-manager';\nexport const version = \"1.22.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,YAAY,EAAE,CAAC;AAIf,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAqC,CAAC","file":"index.js","sourcesContent":["import VTableSheet from './components/vtable-sheet';\nimport type { ISheetDefine, IVTableSheetOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport * as VTable from './vtable';\nimport { importStyles } from './styles/style-manager';\nexport const version = \"1.22.2\";\n// 导入样式\nimportStyles();\n/**\n * @namespace VTableSheet\n */\nexport { VTableSheet, TYPES, VTable, ISheetDefine, IVTableSheetOptions };\n"]}
|
|
@@ -48,6 +48,8 @@ export declare class FormulaManager {
|
|
|
48
48
|
removeRows(sheetKey: string, rowIndex: number, numberOfRows?: number): void;
|
|
49
49
|
addColumns(sheetKey: string, columnIndex: number, numberOfColumns?: number): void;
|
|
50
50
|
removeColumns(sheetKey: string, columnIndex: number, numberOfColumns?: number): void;
|
|
51
|
+
changeColumnHeaderPosition(sheetKey: string, sourceCol: number, targetCol: number): void;
|
|
52
|
+
changeRowHeaderPosition(sheetKey: string, sourceRow: number, targetRow: number): void;
|
|
51
53
|
getSheetSerialized(sheetKey: string): unknown[][];
|
|
52
54
|
sortFormulasByDependency(sheetKey: string, formulas: Record<string, string>): [string, string][];
|
|
53
55
|
hasCircularReference(): boolean;
|
|
@@ -235,6 +235,35 @@ export class FormulaManager {
|
|
|
235
235
|
throw new Error(`Failed to remove ${numberOfColumns} columns at index ${columnIndex}`);
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
|
+
changeColumnHeaderPosition(sheetKey, sourceCol, targetCol) {
|
|
239
|
+
var _a;
|
|
240
|
+
this.ensureInitialized();
|
|
241
|
+
try {
|
|
242
|
+
const sheet = this.sheet.getSheet(sheetKey);
|
|
243
|
+
if (!sheet) throw new Error(`Sheet not found: ${sheetKey}`);
|
|
244
|
+
const totalColCount = sheet.columnCount, totalRowCount = sheet.rowCount, {adjustedCells: adjustedCells, movedCells: movedCells} = this.formulaEngine.adjustFormulaReferencesForColumnMove(sheetKey, sourceCol, targetCol, totalColCount, totalRowCount), allAffectedCells = [ ...adjustedCells, ...movedCells ];
|
|
245
|
+
for (const cell of allAffectedCells) {
|
|
246
|
+
const result = this.getCellValue(cell);
|
|
247
|
+
null === (_a = this.sheet.getActiveSheet().tableInstance) || void 0 === _a || _a.changeCellValue(cell.col, cell.row, result.error ? "#ERROR!" : result.value);
|
|
248
|
+
}
|
|
249
|
+
} catch (error) {
|
|
250
|
+
throw new Error(`Failed to change column header position: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
changeRowHeaderPosition(sheetKey, sourceRow, targetRow) {
|
|
254
|
+
var _a;
|
|
255
|
+
this.ensureInitialized();
|
|
256
|
+
try {
|
|
257
|
+
if (!this.sheet.getSheet(sheetKey)) throw new Error(`Sheet not found: ${sheetKey}`);
|
|
258
|
+
const {adjustedCells: adjustedCells, movedCells: movedCells} = this.formulaEngine.adjustFormulaReferencesForRowMove(sheetKey, sourceRow, targetRow), allAffectedCells = [ ...adjustedCells, ...movedCells ];
|
|
259
|
+
for (const cell of allAffectedCells) {
|
|
260
|
+
const result = this.getCellValue(cell);
|
|
261
|
+
null === (_a = this.sheet.getActiveSheet().tableInstance) || void 0 === _a || _a.changeCellValue(cell.col, cell.row, result.error ? "#ERROR!" : result.value);
|
|
262
|
+
}
|
|
263
|
+
} catch (error) {
|
|
264
|
+
throw new Error(`Failed to change row header position: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
238
267
|
getSheetSerialized(sheetKey) {
|
|
239
268
|
this.ensureInitialized();
|
|
240
269
|
try {
|
|
@@ -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 } from '../ts-types/formula';\nimport { FormulaRangeSelector } from '../formula/formula-range-selector';\nimport type { CellRange } from '../ts-types';\nimport { CellHighlightManager } from '../formula';\nimport type * as VTable from '@visactor/vtable';\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 {\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 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 }\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 * @returns 工作表ID\n */\n addSheet(sheetKey: string, normalizedData?: unknown[][]): 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 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 * 获取工作表ID\n * @param sheetKey 工作表键\n * @returns 工作表ID\n */\n getSheetId(sheetKey: string): number {\n const sheetId = this.sheetMapping.get(sheetKey);\n if (sheetId === undefined) {\n // 自动创建新sheet\n return this.addSheet(sheetKey);\n }\n return sheetId;\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 // 使用FormulaEngine设置单元格内容\n this.formulaEngine.setCellContent(cell, value);\n } catch (error) {\n console.error('Failed to set cell content:', error);\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 // 使用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 /**\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 // 如果排序失败,返回原始顺序\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 // 如果验证抛出异常,则公式不完整\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 // 使用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 * 强制重新计算所有公式 (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 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 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; name: 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"]}
|
|
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 } from '../ts-types/formula';\nimport { FormulaRangeSelector } from '../formula/formula-range-selector';\nimport type { CellRange } from '../ts-types';\nimport { CellHighlightManager } from '../formula';\nimport type * as VTable from '@visactor/vtable';\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 {\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 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 }\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 * @returns 工作表ID\n */\n addSheet(sheetKey: string, normalizedData?: unknown[][]): 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 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 * 获取工作表ID\n * @param sheetKey 工作表键\n * @returns 工作表ID\n */\n getSheetId(sheetKey: string): number {\n const sheetId = this.sheetMapping.get(sheetKey);\n if (sheetId === undefined) {\n // 自动创建新sheet\n return this.addSheet(sheetKey);\n }\n return sheetId;\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 // 使用FormulaEngine设置单元格内容\n this.formulaEngine.setCellContent(cell, value);\n } catch (error) {\n console.error('Failed to set cell content:', error);\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 // 使用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 // 如果排序失败,返回原始顺序\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 // 如果验证抛出异常,则公式不完整\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 // 使用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 * 强制重新计算所有公式 (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 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 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; name: 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"]}
|
package/es/ts-types/index.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import type { ColumnDefine } from '@visactor/vtable';
|
|
|
2
2
|
import { TYPES as VTableTypes, themes as VTableThemes } from '@visactor/vtable';
|
|
3
3
|
import type { CellValue, MainMenuItem } from './base';
|
|
4
4
|
import type { IFilterState } from './filter';
|
|
5
|
-
import type { TableSeriesNumberOptions } from '@visactor/vtable-plugins';
|
|
5
|
+
import type { TableSeriesNumberOptions, ImportResult } from '@visactor/vtable-plugins';
|
|
6
6
|
import type { SortState } from '@visactor/vtable/es/ts-types';
|
|
7
|
-
export { VTableThemes, VTableTypes };
|
|
7
|
+
export { VTableThemes, VTableTypes, ImportResult };
|
|
8
8
|
export interface IFilterConfig {
|
|
9
9
|
filterModes?: ('byValue' | 'byCondition')[];
|
|
10
10
|
}
|
package/es/ts-types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhF,OAAO,EAAE,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAgB,CAAC;AA8FnD,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC","file":"index.js","sourcesContent":["import type { ColumnDefine } from '@visactor/vtable';\nimport { TYPES as VTableTypes, themes as VTableThemes } from '@visactor/vtable';\nimport type { CellValue, IStyle, MainMenuItem } from './base';\nimport type { IFilterState } from './filter';\nimport type { TableSeriesNumberOptions, ImportResult } from '@visactor/vtable-plugins';\nimport type { SortState } from '@visactor/vtable/es/ts-types';\nexport { VTableThemes, VTableTypes, ImportResult };\n/** 筛选配置 */\nexport interface IFilterConfig {\n /** 指定筛选器支持的筛选模式(按值、按条件、或两者) */\n filterModes?: ('byValue' | 'byCondition')[];\n}\n\n/** 扩展的列定义,添加筛选相关配置 */\nexport interface IColumnDefine extends Omit<ColumnDefine, 'field'> {\n /** 是否启用筛选功能 */\n filter?: boolean;\n}\n\n/** Sheet定义 */\nexport interface ISheetDefine {\n /** 标题 */\n sheetTitle: string;\n /** 唯一标识 */\n sheetKey: string;\n /** 列数 */\n columnCount?: number;\n /** 行数 */\n rowCount?: number;\n /** 表头定义 */\n columns?: IColumnDefine[];\n /** 数据 */\n data?: (CellValue[] | null)[];\n /** 是否是当前活动sheet TODO 是不是放到外层更好*/\n active?: boolean;\n cellMerge?: VTableTypes.CustomMergeCellArray;\n /** 冻结行数 */\n frozenRowCount?: number;\n /** 冻结列数 */\n frozenColCount?: number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 是否将第一行作为表头 */\n firstRowAsHeader?: boolean;\n /** 公式定义 */\n formulas?: Record<string, string>;\n /** 筛选配置 - 支持简单布尔值或详细配置对象 */\n filter?: boolean | IFilterConfig;\n /** 筛选状态 - 保存当前的筛选条件和状态 */\n filterState?: IFilterState;\n /** 排序状态 */\n sortState?: SortState[] | SortState | null;\n /** 主题 */\n theme?: IThemeDefine;\n}\nexport interface IThemeDefine {\n rowSeriesNumberCellStyle?: TableSeriesNumberOptions['rowSeriesNumberCellStyle'];\n colSeriesNumberCellStyle?: TableSeriesNumberOptions['colSeriesNumberCellStyle'];\n /** TODO 表格以外部分的主题 */\n menuStyle?: {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n padding?: number[];\n bgColor?: string;\n };\n tableTheme: VTableThemes.ITableThemeDefine;\n}\n/** VTableSheet配置 */\nexport interface IVTableSheetOptions {\n /** Sheet列表 */\n sheets: ISheetDefine[];\n /** 是否显示工具栏 */\n showToolbar?: boolean;\n /** 是否显示公式栏 */\n showFormulaBar?: boolean;\n /** 是否显示sheet切换栏 */\n showSheetTab?: boolean;\n /** 插件 */\n VTablePluginModules?: {\n module: any;\n moduleOptions?: any;\n /** vtable-sheet逻辑中使用到的插件,可以通过这个配置来禁用掉 */\n disabled?: boolean;\n }[];\n\n /** 主菜单 */\n mainMenu?: {\n /** 是否显示 */\n show?: boolean;\n /** 菜单项 */\n items?: MainMenuItem[];\n };\n /** 主题 */\n theme?: IThemeDefine;\n /** 默认行高 */\n defaultRowHeight?: number;\n /** 默认列宽 */\n defaultColWidth?: number;\n}\nexport * from './base';\nexport * from './event';\nexport * from './formula';\nexport * from './filter';\nexport * from './sheet';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vtable-sheet",
|
|
3
|
-
"version": "1.22.
|
|
3
|
+
"version": "1.22.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": "~0.18.1",
|
|
43
43
|
"@visactor/vdataset": "~0.18.1",
|
|
44
44
|
"cssfontparser": "^1.2.1",
|
|
45
|
-
"@visactor/vtable": "1.22.
|
|
46
|
-
"@visactor/vtable-
|
|
47
|
-
"@visactor/vtable
|
|
45
|
+
"@visactor/vtable-editors": "1.22.2",
|
|
46
|
+
"@visactor/vtable-plugins": "1.22.2",
|
|
47
|
+
"@visactor/vtable": "1.22.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/
|
|
89
|
+
"@internal/bundler": "0.0.1",
|
|
90
90
|
"@internal/eslint-config": "0.0.1",
|
|
91
|
-
"@internal/
|
|
91
|
+
"@internal/ts-config": "0.0.1"
|
|
92
92
|
},
|
|
93
93
|
"unpkg": "latest",
|
|
94
94
|
"unpkgFiles": [
|