@speed-sheet/extension-formula 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context.ts","../src/errors.ts","../src/internal-ref-scan.ts","../src/refs.ts","../src/formula-bindings.ts","../src/registry/formulajs-catalog.json","../src/registry/meta.ts","../src/registry/buildRegistry.ts","../src/registry/categories.ts","../src/registry/index.ts","../src/fnMap.ts","../src/edit.ts","../src/evaluate.ts","../src/result.ts","../src/refSpans.ts","../src/engine.ts","../src/extension.ts"],"names":["ID","AXIS_ID_PATTERN","a","formulajs","text","tokens","SheetState","depKey"],"mappings":"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","file":"index.js","sourcesContent":["import * as Y from 'yjs'\nimport type { Sheet } from '@speed-sheet/core'\nimport { SheetState, buildIdIndexes } from '@speed-sheet/core'\nimport { depKey } from '@speed-sheet/shared'\n\nexport interface FormulaContext {\n readonly activeSheetId: string\n resolveSheetId(nameOrId: string | undefined): string | null\n getSheetName(sheetId: string): string\n resolveCellIds(sheetId: string, r: number, c: number): { rowId: string; colId: string } | null\n idsToDisplay(sheetId: string, rowId: string, colId: string): { r: number; c: number } | null\n expandIdRange(\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n ): Array<{ rowId: string; colId: string }>\n /** Scalar by stable ids (canonical for evaluation). */\n getScalarById(\n sheetId: string,\n rowId: string,\n colId: string,\n visiting: Set<string>,\n ): number | string | boolean | null\n /** Display-coordinate scalar (A1 boundary only). */\n getScalar(sheetId: string, r: number, c: number, visiting: Set<string>): number | string | boolean | null\n}\n\nfunction getSheetState(sheetsMap: Y.Map<unknown>, sheetId: string): SheetState | null {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) return null\n return new SheetState(ySheet)\n}\n\nexport function createFormulaContext(sheet: Sheet): FormulaContext {\n const ydoc = sheet.ydoc\n const sheetsMap = ydoc.getMap('sheets')\n\n return {\n activeSheetId: sheet.getActiveSheetId(),\n\n getSheetName(sheetId: string): string {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n return (ySheet?.get('name') as string) ?? sheetId\n },\n\n resolveSheetId(nameOrId: string | undefined): string | null {\n if (!nameOrId) return sheet.getActiveSheetId()\n if (sheetsMap.has(nameOrId)) return nameOrId\n for (const id of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(id) as Y.Map<unknown> | undefined\n const name = ySheet?.get('name') as string | undefined\n if (name === nameOrId) return id\n }\n return null\n },\n\n resolveCellIds(sheetId: string, r: number, c: number): { rowId: string; colId: string } | null {\n const state = getSheetState(sheetsMap, sheetId)\n return state?.resolveCellIds(r, c) ?? null\n },\n\n idsToDisplay(sheetId: string, rowId: string, colId: string): { r: number; c: number } | null {\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return null\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r = rowIndex.get(rowId)\n const c = colIndex.get(colId)\n if (r === undefined || c === undefined) return null\n return { r, c }\n },\n\n expandIdRange(\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n ): Array<{ rowId: string; colId: string }> {\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return []\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r0 = rowIndex.get(rowId0)\n const c0 = colIndex.get(colId0)\n const r1 = rowIndex.get(rowId1)\n const c1 = colIndex.get(colId1)\n if (r0 === undefined || c0 === undefined || r1 === undefined || c1 === undefined) return []\n\n const out: Array<{ rowId: string; colId: string }> = []\n const ra = Math.min(r0, r1)\n const rb = Math.max(r0, r1)\n const ca = Math.min(c0, c1)\n const cb = Math.max(c0, c1)\n for (let r = ra; r <= rb; r++) {\n for (let c = ca; c <= cb; c++) {\n const rowId = state.rowOrder.get(r)\n const colId = state.colOrder.get(c)\n if (rowId && colId) out.push({ rowId, colId })\n }\n }\n return out\n },\n\n getScalarById(\n sheetId: string,\n rowId: string,\n colId: string,\n visiting: Set<string>,\n ): number | string | boolean | null {\n const visitKey = depKey(sheetId, rowId, colId)\n if (visiting.has(visitKey)) return null\n\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return null\n\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r = rowIndex.get(rowId)\n const c = colIndex.get(colId)\n if (r === undefined || c === undefined) return null\n\n const data = state.getCellData(r, c)\n if (!data) return null\n const v = data.v\n if (v === null || v === undefined) return null\n return v\n },\n\n getScalar(\n sheetId: string,\n r: number,\n c: number,\n visiting: Set<string>,\n ): number | string | boolean | null {\n const ids = this.resolveCellIds(sheetId, r, c)\n if (!ids) return null\n return this.getScalarById(sheetId, ids.rowId, ids.colId, visiting)\n },\n }\n}\n\nexport function scalarToDisplay(v: number | string | boolean | null): string {\n if (v === null) return ''\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE'\n return String(v)\n}\n\nexport function coerceNumber(v: number | string | boolean | null): number {\n if (v === null || v === '') return 0\n if (typeof v === 'boolean') return v ? 1 : 0\n const n = Number(v)\n return Number.isFinite(n) ? n : 0\n}\n\nexport function collectRangeScalars(\n ctx: FormulaContext,\n sheetId: string,\n row: [number, number],\n column: [number, number],\n visiting: Set<string>,\n): number[] {\n const out: number[] = []\n for (let r = row[0]; r <= row[1]; r++) {\n for (let c = column[0]; c <= column[1]; c++) {\n out.push(coerceNumber(ctx.getScalar(sheetId, r, c, visiting)))\n }\n }\n return out\n}\n\nexport function collectIdRangeScalars(\n ctx: FormulaContext,\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n visiting: Set<string>,\n): number[] {\n const cells = ctx.expandIdRange(sheetId, rowId0, colId0, rowId1, colId1)\n return cells.map(({ rowId, colId }) =>\n coerceNumber(ctx.getScalarById(sheetId, rowId, colId, visiting)),\n )\n}\n","/** Excel 风格公式错误(显示值 + 提示文案) */\n\nexport type FormulaErrorCode =\n | 'ERROR'\n | 'VALUE'\n | 'NAME'\n | 'REF'\n | 'DIV0'\n | 'NA'\n | 'NUM'\n | 'NULL'\n\nexport interface FormulaErrorDef {\n code: FormulaErrorCode\n /** 单元格显示,如 #VALUE! */\n display: string\n /** 悬停提示(中文) */\n message: string\n}\n\nexport const FORMULA_ERRORS: Record<FormulaErrorCode, FormulaErrorDef> = {\n ERROR: {\n code: 'ERROR',\n display: '#ERROR!',\n message: '公式解析错误',\n },\n VALUE: {\n code: 'VALUE',\n display: '#VALUE!',\n message: '值类型错误:运算或函数参数类型不匹配(例如数字与文本相加)',\n },\n NAME: {\n code: 'NAME',\n display: '#NAME?',\n message: '无法识别名称:函数名拼写错误、文本未加双引号,或工作表名引用不正确',\n },\n REF: {\n code: 'REF',\n display: '#REF!',\n message: '无效引用:引用的单元格、区域或工作表不存在',\n },\n DIV0: {\n code: 'DIV0',\n display: '#DIV/0!',\n message: '除数为零:公式中除以 0 或空单元格',\n },\n NA: {\n code: 'NA',\n display: '#N/A',\n message: '找不到匹配值:查找或匹配函数未找到对应数据',\n },\n NUM: {\n code: 'NUM',\n display: '#NUM!',\n message: '数值错误:结果超出可计算范围或数值不合法',\n },\n NULL: {\n code: 'NULL',\n display: '#NULL!',\n message: '空交集错误:区域引用之间使用了空格而非逗号或冒号',\n },\n}\n\nconst ERROR_DISPLAY_SET = new Set(\n Object.values(FORMULA_ERRORS).map((e) => e.display),\n)\n\nexport function formulaErrorResult(code: FormulaErrorCode): {\n value: null\n m: string\n error: FormulaErrorCode\n errorMessage: string\n} {\n const def = FORMULA_ERRORS[code]\n return {\n value: null,\n m: def.display,\n error: def.code,\n errorMessage: def.message,\n }\n}\n\nexport function isFormulaErrorDisplay(text: string): boolean {\n return ERROR_DISPLAY_SET.has(text.trim())\n}\n\nexport function getFormulaErrorMessage(\n code: string | undefined,\n fallback?: string,\n): string {\n if (code && code in FORMULA_ERRORS) {\n return FORMULA_ERRORS[code as FormulaErrorCode].message\n }\n return fallback ?? FORMULA_ERRORS.ERROR.message\n}\n","import { AXIS_ID_PATTERN } from '@speed-sheet/shared'\n\nconst ID = AXIS_ID_PATTERN\nconst INTERNAL_REF_FULL_RE = new RegExp(\n `#(?:@[^|#]+\\\\|)?${ID}:${ID}(?:~${ID}:${ID})?#`,\n 'g',\n)\n\n/** Ranges of `#r_…:c_…#` tokens — A1 scanners must not match inside these. */\nexport function getInternalRefRanges(formula: string): Array<{ start: number; end: number }> {\n const ranges: Array<{ start: number; end: number }> = []\n INTERNAL_REF_FULL_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = INTERNAL_REF_FULL_RE.exec(formula)) !== null) {\n ranges.push({ start: m.index, end: m.index + m[0].length })\n }\n return ranges\n}\n\nexport function overlapsInternalRef(formula: string, start: number, end: number): boolean {\n for (const r of getInternalRefRanges(formula)) {\n if (start < r.end && end > r.start) return true\n }\n return false\n}\n\nexport function hasInternalRefs(formula: string): boolean {\n INTERNAL_REF_FULL_RE.lastIndex = 0\n return INTERNAL_REF_FULL_RE.test(formula)\n}\n\nexport function extractInternalRefTokens(formula: string): string[] {\n const tokens: string[] = []\n INTERNAL_REF_FULL_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = INTERNAL_REF_FULL_RE.exec(formula)) !== null) {\n tokens.push(m[0])\n }\n return tokens\n}\n","/** A1 风格引用解析(与 Excel / Luckysheet 子集对齐) */\n\nexport interface CellAddress {\n r: number\n c: number\n}\n\nexport interface RangeAddress {\n row: [number, number]\n column: [number, number]\n}\n\nexport interface SheetRef {\n /** 工作表名(展示名)或 id */\n sheet?: string\n cell?: CellAddress\n range?: RangeAddress\n}\n\n/** 列字母 → 0-based 列号 */\nexport function letterToCol(letters: string): number {\n let n = 0\n const s = letters.toUpperCase()\n for (let i = 0; i < s.length; i++) {\n n = n * 26 + (s.charCodeAt(i) - 64)\n }\n return n - 1\n}\n\nexport function colToLetter(c: number): string {\n let s = ''\n let n = c\n do {\n s = String.fromCharCode(65 + (n % 26)) + s\n n = Math.floor(n / 26) - 1\n } while (n >= 0)\n return s\n}\n\nexport function formatA1(r: number, c: number): string {\n return `${colToLetter(c)}${r + 1}`\n}\n\n/** 解析 A1 或 A1:B10 */\nexport function parseRefToken(token: string): SheetRef | null {\n const trimmed = token.trim()\n if (!trimmed) return null\n\n let sheet: string | undefined\n let local = trimmed\n\n const bang = trimmed.indexOf('!')\n if (bang >= 0) {\n let sheetPart = trimmed.slice(0, bang)\n if (sheetPart.startsWith(\"'\") && sheetPart.endsWith(\"'\")) {\n sheetPart = sheetPart.slice(1, -1)\n }\n sheet = sheetPart\n local = trimmed.slice(bang + 1)\n }\n\n const rangeMatch = /^([A-Za-z]+)(\\d+):([A-Za-z]+)(\\d+)$/.exec(local)\n if (rangeMatch) {\n const r0 = Number(rangeMatch[2]) - 1\n const c0 = letterToCol(rangeMatch[1])\n const r1 = Number(rangeMatch[4]) - 1\n const c1 = letterToCol(rangeMatch[3])\n return {\n sheet,\n range: {\n row: [Math.min(r0, r1), Math.max(r0, r1)],\n column: [Math.min(c0, c1), Math.max(c0, c1)],\n },\n }\n }\n\n const cellMatch = /^([A-Za-z]+)(\\d+)$/.exec(local)\n if (cellMatch) {\n return {\n sheet,\n cell: {\n r: Number(cellMatch[2]) - 1,\n c: letterToCol(cellMatch[1]),\n },\n }\n }\n\n return null\n}\n\nimport { overlapsInternalRef } from './internal-ref-scan'\n\n/** 从公式文本中提取全部 A1 引用 token(跳过 `#r_…:c_…#` 内部区域) */\nexport function extractRefTokens(formula: string): string[] {\n const tokens: string[] = []\n const re =\n /(?:'[^']+'|[\\w\\u4e00-\\u9fff\\u3400-\\u9fff]+!)?[A-Za-z]{1,4}\\d+(?::[A-Za-z]{1,4}\\d+)?/g\n let m: RegExpExecArray | null\n while ((m = re.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n tokens.push(m[0])\n }\n return tokens\n}\n","/**\n * Formula semantic bindings: stable rowId/colId in storage, A1 for display only.\n *\n * Internal cell ref: #r_<nanoid>:c_<nanoid>#\n * Internal range: #r_<nanoid>:c_<nanoid>~r_<nanoid>:c_<nanoid>#\n * Cross-sheet cell: #@sheetId|r_<nanoid>:c_<nanoid>#\n */\nimport { AXIS_ID_PATTERN } from '@speed-sheet/shared'\nimport type { FormulaContext } from './context'\nimport {\n extractInternalRefTokens,\n hasInternalRefs,\n} from './internal-ref-scan'\nimport { extractRefTokens, formatA1, parseRefToken } from './refs'\n\nexport { extractInternalRefTokens, hasInternalRefs } from './internal-ref-scan'\n\nconst ID = AXIS_ID_PATTERN\n\nexport function formatInternalCellRef(rowId: string, colId: string, sheetId?: string): string {\n if (sheetId) return `#@${sheetId}|${rowId}:${colId}#`\n return `#${rowId}:${colId}#`\n}\n\nexport function formatInternalRangeRef(\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n sheetId?: string,\n): string {\n if (sheetId) return `#@${sheetId}|${rowId0}:${colId0}~${rowId1}:${colId1}#`\n return `#${rowId0}:${colId0}~${rowId1}:${colId1}#`\n}\n\nexport interface InternalRef {\n sheetId?: string\n rowId: string\n colId: string\n endRowId?: string\n endColId?: string\n}\n\nexport function parseInternalRefToken(token: string): InternalRef | null {\n const range = new RegExp(`^#(?:@([^|#]+)\\\\|)?(${ID}):(${ID})~(${ID}):(${ID})#$`).exec(token)\n if (range) {\n return {\n sheetId: range[1],\n rowId: range[2]!,\n colId: range[3]!,\n endRowId: range[4]!,\n endColId: range[5]!,\n }\n }\n const cell = new RegExp(`^#(?:@([^|#]+)\\\\|)?(${ID}):(${ID})#$`).exec(token)\n if (cell) {\n return { sheetId: cell[1], rowId: cell[2]!, colId: cell[3]! }\n }\n return null\n}\n\nfunction resolveIdsForA1(\n ctx: FormulaContext,\n sheetId: string,\n r: number,\n c: number,\n): { rowId: string; colId: string } | null {\n return ctx.resolveCellIds(sheetId, r, c)\n}\n\nfunction a1RefToInternal(\n ctx: FormulaContext,\n defaultSheetId: string,\n token: string,\n): string | null {\n const ref = parseRefToken(token)\n if (!ref) return null\n\n const sheetResolved = ref.sheet ? ctx.resolveSheetId(ref.sheet) : defaultSheetId\n if (!sheetResolved) return null\n\n if (ref.range) {\n const a = resolveIdsForA1(ctx, sheetResolved, ref.range.row[0], ref.range.column[0])\n const b = resolveIdsForA1(ctx, sheetResolved, ref.range.row[1], ref.range.column[1])\n if (!a || !b) return null\n const cross = sheetResolved !== defaultSheetId ? sheetResolved : undefined\n return formatInternalRangeRef(a.rowId, a.colId, b.rowId, b.colId, cross)\n }\n\n if (ref.cell) {\n const ids = resolveIdsForA1(ctx, sheetResolved, ref.cell.r, ref.cell.c)\n if (!ids) return null\n const cross = sheetResolved !== defaultSheetId ? sheetResolved : undefined\n return formatInternalCellRef(ids.rowId, ids.colId, cross)\n }\n\n return null\n}\n\n/** User-facing A1 formula → canonical internal formula (stored in `f`). */\nexport function displayFormulaToInternal(\n displayFormula: string,\n ctx: FormulaContext,\n defaultSheetId: string,\n): string {\n const text = displayFormula.trim()\n if (!text.startsWith('=')) return text\n\n let out = text\n const tokens = [...extractRefTokens(text)].sort((a, b) => b.length - a.length)\n for (const token of tokens) {\n const internal = a1RefToInternal(ctx, defaultSheetId, token)\n if (internal) out = out.split(token).join(internal)\n }\n return out\n}\n\nfunction internalRefToA1(ctx: FormulaContext, ref: InternalRef, defaultSheetId: string): string | null {\n const sheetId = ref.sheetId ?? defaultSheetId\n\n const toA1 = (rowId: string, colId: string): string | null => {\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) return null\n return formatA1(pos.r, pos.c)\n }\n\n if (ref.endRowId != null && ref.endColId != null) {\n const a = toA1(ref.rowId, ref.colId)\n const b = toA1(ref.endRowId, ref.endColId)\n if (!a || !b) return null\n const local = a === b ? a : `${a}:${b}`\n if (ref.sheetId && ref.sheetId !== defaultSheetId) {\n const name = ctx.getSheetName(ref.sheetId)\n return `'${name.replace(/'/g, \"''\")}'!${local}`\n }\n return local\n }\n\n const a = toA1(ref.rowId, ref.colId)\n if (!a) return null\n if (ref.sheetId && ref.sheetId !== defaultSheetId) {\n const name = ctx.getSheetName(ref.sheetId)\n return `'${name.replace(/'/g, \"''\")}'!${a}`\n }\n return a\n}\n\n/** Stored internal formula → formula-bar A1 display. */\nexport function internalFormulaToDisplay(\n internalFormula: string,\n ctx: FormulaContext,\n defaultSheetId: string,\n): string {\n const text = internalFormula.trim()\n if (!text.startsWith('=')) return text\n if (!hasInternalRefs(text)) return text\n\n let out = text\n const tokens = [...extractInternalRefTokens(text)].sort((a, b) => b.length - a.length)\n for (const token of tokens) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const a1 = internalRefToA1(ctx, ref, defaultSheetId)\n if (a1) out = out.split(token).join(a1)\n }\n return out\n}\n","{\"ABS\":{\"category\":\"math\",\"formulajs\":true},\"ACCRINT\":{\"category\":\"financial\",\"formulajs\":true},\"ACCRINTM\":{\"category\":\"financial\",\"formulajs\":false},\"ACOS\":{\"category\":\"math\",\"formulajs\":true},\"ACOSH\":{\"category\":\"math\",\"formulajs\":true},\"ACOT\":{\"category\":\"math\",\"formulajs\":true},\"ACOTH\":{\"category\":\"math\",\"formulajs\":true},\"AGGREGATE\":{\"category\":\"math\",\"formulajs\":true},\"ADDRESS\":{\"category\":\"lookup\",\"formulajs\":false},\"AMORDEGRC\":{\"category\":\"financial\",\"formulajs\":false},\"AMORLINC\":{\"category\":\"financial\",\"formulajs\":false},\"AND\":{\"category\":\"logical\",\"formulajs\":true},\"ARABIC\":{\"category\":\"math\",\"formulajs\":true},\"AREAS\":{\"category\":\"lookup\",\"formulajs\":false},\"ARRAYTOTEXT\":{\"category\":\"text\",\"formulajs\":false},\"ASC\":{\"category\":\"text\",\"formulajs\":false},\"ASIN\":{\"category\":\"math\",\"formulajs\":true},\"ASINH\":{\"category\":\"math\",\"formulajs\":true},\"ATAN\":{\"category\":\"math\",\"formulajs\":true},\"ATAN2\":{\"category\":\"math\",\"formulajs\":true},\"ATANH\":{\"category\":\"math\",\"formulajs\":true},\"AVEDEV\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGE\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEA\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEIF\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"BAHTTEXT\":{\"category\":\"text\",\"formulajs\":false},\"BASE\":{\"category\":\"math\",\"formulajs\":true},\"BESSELI\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELJ\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELK\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELY\":{\"category\":\"engineering\",\"formulajs\":true},\"BETADIST\":{\"category\":\"statistical\",\"formulajs\":true},\"BETAINV\":{\"category\":\"statistical\",\"formulajs\":true},\"BIN2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"BIN2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"BIN2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"BINOMDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"BINOMDISTRANGE\":{\"category\":\"statistical\",\"formulajs\":true},\"BINOMINV\":{\"category\":\"statistical\",\"formulajs\":true},\"BITAND\":{\"category\":\"engineering\",\"formulajs\":true},\"BITLSHIFT\":{\"category\":\"engineering\",\"formulajs\":true},\"BITOR\":{\"category\":\"engineering\",\"formulajs\":true},\"BITRSHIFT\":{\"category\":\"engineering\",\"formulajs\":true},\"BITXOR\":{\"category\":\"engineering\",\"formulajs\":true},\"BYCOL\":{\"category\":\"logical\",\"formulajs\":false},\"BYROW\":{\"category\":\"logical\",\"formulajs\":false},\"CEILING\":{\"category\":\"compatibility\",\"formulajs\":true},\"CEILINGMATH\":{\"category\":\"math\",\"formulajs\":true},\"CEILINGPRECISE\":{\"category\":\"math\",\"formulajs\":true},\"CELL\":{\"category\":\"information\",\"formulajs\":false},\"CHAR\":{\"category\":\"text\",\"formulajs\":true},\"CHIDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHIINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHITEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHISQDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQINV\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQINVRT\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQTEST\":{\"category\":\"statistical\",\"formulajs\":true},\"CHOOSE\":{\"category\":\"lookup\",\"formulajs\":true},\"CHOOSECOLS\":{\"category\":\"lookup\",\"formulajs\":false},\"CHOOSEROWS\":{\"category\":\"lookup\",\"formulajs\":false},\"CLEAN\":{\"category\":\"text\",\"formulajs\":true},\"CODE\":{\"category\":\"text\",\"formulajs\":true},\"COLUMN\":{\"category\":\"lookup\",\"formulajs\":true},\"COLUMNS\":{\"category\":\"lookup\",\"formulajs\":true},\"COMBIN\":{\"category\":\"math\",\"formulajs\":true},\"COMBINA\":{\"category\":\"math\",\"formulajs\":true},\"COMPLEX\":{\"category\":\"engineering\",\"formulajs\":true},\"CONCAT\":{\"category\":\"text\",\"formulajs\":true},\"CONCATENATE\":{\"category\":\"text\",\"formulajs\":true},\"CONFIDENCE\":{\"category\":\"compatibility\",\"formulajs\":false},\"CONFIDENCENORM\":{\"category\":\"statistical\",\"formulajs\":true},\"CONFIDENCET\":{\"category\":\"statistical\",\"formulajs\":true},\"CONVERT\":{\"category\":\"engineering\",\"formulajs\":true},\"CORREL\":{\"category\":\"statistical\",\"formulajs\":true},\"COS\":{\"category\":\"math\",\"formulajs\":true},\"COSH\":{\"category\":\"math\",\"formulajs\":true},\"COT\":{\"category\":\"math\",\"formulajs\":true},\"COTH\":{\"category\":\"math\",\"formulajs\":true},\"COUNT\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTA\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTBLANK\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTIF\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"COUPDAYBS\":{\"category\":\"financial\",\"formulajs\":false},\"COUPDAYS\":{\"category\":\"financial\",\"formulajs\":true},\"COUPDAYSNC\":{\"category\":\"financial\",\"formulajs\":false},\"COUPNCD\":{\"category\":\"financial\",\"formulajs\":false},\"COUPNUM\":{\"category\":\"financial\",\"formulajs\":false},\"COUPPCD\":{\"category\":\"financial\",\"formulajs\":false},\"COVAR\":{\"category\":\"compatibility\",\"formulajs\":true},\"COVARIANCEP\":{\"category\":\"statistical\",\"formulajs\":true},\"COVARIANCES\":{\"category\":\"statistical\",\"formulajs\":true},\"CRITBINOM\":{\"category\":\"compatibility\",\"formulajs\":true},\"CSC\":{\"category\":\"math\",\"formulajs\":true},\"CSCH\":{\"category\":\"math\",\"formulajs\":true},\"CUMIPMT\":{\"category\":\"financial\",\"formulajs\":true},\"CUMPRINC\":{\"category\":\"financial\",\"formulajs\":true},\"DATE\":{\"category\":\"date\",\"formulajs\":true},\"DATEDIF\":{\"category\":\"date\",\"formulajs\":true},\"DATEVALUE\":{\"category\":\"date\",\"formulajs\":true},\"DAVERAGE\":{\"category\":\"database\",\"formulajs\":true},\"DAY\":{\"category\":\"date\",\"formulajs\":true},\"DAYS\":{\"category\":\"date\",\"formulajs\":true},\"DAYS360\":{\"category\":\"date\",\"formulajs\":true},\"DB\":{\"category\":\"financial\",\"formulajs\":true},\"DBCS\":{\"category\":\"text\",\"formulajs\":false},\"DCOUNT\":{\"category\":\"database\",\"formulajs\":true},\"DCOUNTA\":{\"category\":\"database\",\"formulajs\":true},\"DDB\":{\"category\":\"financial\",\"formulajs\":true},\"DEC2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"DEC2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"DEC2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"DECIMAL\":{\"category\":\"math\",\"formulajs\":true},\"DEGREES\":{\"category\":\"math\",\"formulajs\":true},\"DELTA\":{\"category\":\"engineering\",\"formulajs\":true},\"DETECTLANGUAGE\":{\"category\":\"text\",\"formulajs\":false},\"DEVSQ\":{\"category\":\"statistical\",\"formulajs\":true},\"DGET\":{\"category\":\"database\",\"formulajs\":true},\"DISC\":{\"category\":\"financial\",\"formulajs\":true},\"DMAX\":{\"category\":\"database\",\"formulajs\":true},\"DMIN\":{\"category\":\"database\",\"formulajs\":true},\"DOLLAR\":{\"category\":\"text\",\"formulajs\":true},\"DOLLARDE\":{\"category\":\"financial\",\"formulajs\":true},\"DOLLARFR\":{\"category\":\"financial\",\"formulajs\":true},\"DPRODUCT\":{\"category\":\"database\",\"formulajs\":true},\"DROP\":{\"category\":\"lookup\",\"formulajs\":false},\"DSTDEV\":{\"category\":\"database\",\"formulajs\":true},\"DSTDEVP\":{\"category\":\"database\",\"formulajs\":true},\"DSUM\":{\"category\":\"database\",\"formulajs\":true},\"DURATION\":{\"category\":\"financial\",\"formulajs\":false},\"DVAR\":{\"category\":\"database\",\"formulajs\":true},\"DVARP\":{\"category\":\"database\",\"formulajs\":true},\"EDATE\":{\"category\":\"date\",\"formulajs\":true},\"EFFECT\":{\"category\":\"financial\",\"formulajs\":true},\"EOMONTH\":{\"category\":\"date\",\"formulajs\":true},\"ERF\":{\"category\":\"engineering\",\"formulajs\":true},\"ERFPRECISE\":{\"category\":\"engineering\",\"formulajs\":false},\"ERFC\":{\"category\":\"engineering\",\"formulajs\":true},\"ERFCPRECISE\":{\"category\":\"engineering\",\"formulajs\":false},\"ERRORTYPE\":{\"category\":\"information\",\"formulajs\":true},\"EVEN\":{\"category\":\"math\",\"formulajs\":true},\"EXACT\":{\"category\":\"text\",\"formulajs\":true},\"EXP\":{\"category\":\"math\",\"formulajs\":true},\"EXPAND\":{\"category\":\"lookup\",\"formulajs\":false},\"EXPONDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FACT\":{\"category\":\"math\",\"formulajs\":true},\"FACTDOUBLE\":{\"category\":\"math\",\"formulajs\":true},\"FALSE\":{\"category\":\"logical\",\"formulajs\":true},\"FDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"FILTER\":{\"category\":\"lookup\",\"formulajs\":false},\"FIND\":{\"category\":\"text\",\"formulajs\":true},\"FINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"FINVRT\":{\"category\":\"statistical\",\"formulajs\":true},\"FISHER\":{\"category\":\"statistical\",\"formulajs\":true},\"FISHERINV\":{\"category\":\"statistical\",\"formulajs\":true},\"FIXED\":{\"category\":\"text\",\"formulajs\":true},\"FLOOR\":{\"category\":\"compatibility\",\"formulajs\":true},\"FLOORMATH\":{\"category\":\"math\",\"formulajs\":true},\"FLOORPRECISE\":{\"category\":\"math\",\"formulajs\":true},\"FORECAST\":{\"category\":\"statistical\",\"formulajs\":true},\"FORECASTETS\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSCONFINT\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSSEASONALITY\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSSTAT\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTLINEAR\":{\"category\":\"statistical\",\"formulajs\":false},\"FORMULATEXT\":{\"category\":\"lookup\",\"formulajs\":false},\"FREQUENCY\":{\"category\":\"statistical\",\"formulajs\":true},\"FTEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FV\":{\"category\":\"financial\",\"formulajs\":true},\"FVSCHEDULE\":{\"category\":\"financial\",\"formulajs\":true},\"GAMMA\":{\"category\":\"statistical\",\"formulajs\":true},\"GAMMADIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"GAMMAINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"GAMMALN\":{\"category\":\"statistical\",\"formulajs\":true},\"GAMMALNPRECISE\":{\"category\":\"statistical\",\"formulajs\":true},\"GAUSS\":{\"category\":\"statistical\",\"formulajs\":true},\"GCD\":{\"category\":\"math\",\"formulajs\":true},\"GEOMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"GESTEP\":{\"category\":\"engineering\",\"formulajs\":true},\"GETPIVOTDATA\":{\"category\":\"lookup\",\"formulajs\":false},\"GROUPBY\":{\"category\":\"lookup\",\"formulajs\":false},\"GROWTH\":{\"category\":\"statistical\",\"formulajs\":true},\"HARMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"HEX2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"HEX2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"HEX2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"HLOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"HOUR\":{\"category\":\"date\",\"formulajs\":true},\"HSTACK\":{\"category\":\"lookup\",\"formulajs\":false},\"HYPERLINK\":{\"category\":\"lookup\",\"formulajs\":false},\"HYPGEOMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"IF\":{\"category\":\"logical\",\"formulajs\":true},\"IFERROR\":{\"category\":\"logical\",\"formulajs\":true},\"IFNA\":{\"category\":\"logical\",\"formulajs\":true},\"IFS\":{\"category\":\"logical\",\"formulajs\":true},\"IMABS\":{\"category\":\"engineering\",\"formulajs\":true},\"IMAGE\":{\"category\":\"lookup\",\"formulajs\":false},\"IMAGINARY\":{\"category\":\"engineering\",\"formulajs\":true},\"IMARGUMENT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCONJUGATE\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOS\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOSH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCSC\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCSCH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMDIV\":{\"category\":\"engineering\",\"formulajs\":true},\"IMEXP\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLN\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLOG10\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLOG2\":{\"category\":\"engineering\",\"formulajs\":true},\"IMPOWER\":{\"category\":\"engineering\",\"formulajs\":true},\"IMPRODUCT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMREAL\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSEC\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSECH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSIN\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSINH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSQRT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSUB\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSUM\":{\"category\":\"engineering\",\"formulajs\":true},\"IMTAN\":{\"category\":\"engineering\",\"formulajs\":true},\"INDEX\":{\"category\":\"lookup\",\"formulajs\":true},\"INDIRECT\":{\"category\":\"lookup\",\"formulajs\":false},\"INFO\":{\"category\":\"information\",\"formulajs\":false},\"INT\":{\"category\":\"math\",\"formulajs\":true},\"INTERCEPT\":{\"category\":\"statistical\",\"formulajs\":true},\"INTRATE\":{\"category\":\"financial\",\"formulajs\":false},\"IPMT\":{\"category\":\"financial\",\"formulajs\":true},\"IRR\":{\"category\":\"financial\",\"formulajs\":true},\"ISBLANK\":{\"category\":\"information\",\"formulajs\":true},\"ISERR\":{\"category\":\"information\",\"formulajs\":true},\"ISERROR\":{\"category\":\"information\",\"formulajs\":true},\"ISEVEN\":{\"category\":\"information\",\"formulajs\":true},\"ISFORMULA\":{\"category\":\"information\",\"formulajs\":false},\"ISLOGICAL\":{\"category\":\"information\",\"formulajs\":true},\"ISNA\":{\"category\":\"information\",\"formulajs\":true},\"ISNONTEXT\":{\"category\":\"information\",\"formulajs\":true},\"ISNUMBER\":{\"category\":\"information\",\"formulajs\":true},\"ISODD\":{\"category\":\"information\",\"formulajs\":true},\"ISOMITTED\":{\"category\":\"information\",\"formulajs\":false},\"ISREF\":{\"category\":\"information\",\"formulajs\":false},\"ISTEXT\":{\"category\":\"information\",\"formulajs\":true},\"ISOCEILING\":{\"category\":\"math\",\"formulajs\":true},\"ISOWEEKNUM\":{\"category\":\"date\",\"formulajs\":true},\"ISPMT\":{\"category\":\"financial\",\"formulajs\":true},\"JIS\":{\"category\":\"text\",\"formulajs\":false},\"KURT\":{\"category\":\"statistical\",\"formulajs\":true},\"LAMBDA\":{\"category\":\"logical\",\"formulajs\":false},\"LARGE\":{\"category\":\"statistical\",\"formulajs\":true},\"LCM\":{\"category\":\"math\",\"formulajs\":true},\"LEFT\":{\"category\":\"text\",\"formulajs\":true},\"LEN\":{\"category\":\"text\",\"formulajs\":true},\"LET\":{\"category\":\"logical\",\"formulajs\":false},\"LINEST\":{\"category\":\"statistical\",\"formulajs\":true},\"LN\":{\"category\":\"math\",\"formulajs\":true},\"LOG\":{\"category\":\"math\",\"formulajs\":true},\"LOG10\":{\"category\":\"math\",\"formulajs\":true},\"LOGEST\":{\"category\":\"statistical\",\"formulajs\":true},\"LOGINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"LOGNORMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"LOGNORMINV\":{\"category\":\"statistical\",\"formulajs\":true},\"LOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"LOWER\":{\"category\":\"text\",\"formulajs\":true},\"MAKEARRAY\":{\"category\":\"logical\",\"formulajs\":false},\"MAP\":{\"category\":\"logical\",\"formulajs\":false},\"MATCH\":{\"category\":\"lookup\",\"formulajs\":true},\"MAX\":{\"category\":\"statistical\",\"formulajs\":true},\"MAXA\":{\"category\":\"statistical\",\"formulajs\":true},\"MAXIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"MDETERM\":{\"category\":\"math\",\"formulajs\":false},\"MDURATION\":{\"category\":\"financial\",\"formulajs\":false},\"MEDIAN\":{\"category\":\"statistical\",\"formulajs\":true},\"MID\":{\"category\":\"text\",\"formulajs\":true},\"MIN\":{\"category\":\"statistical\",\"formulajs\":true},\"MINIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"MINA\":{\"category\":\"statistical\",\"formulajs\":true},\"MINUTE\":{\"category\":\"date\",\"formulajs\":true},\"MINVERSE\":{\"category\":\"math\",\"formulajs\":false},\"MIRR\":{\"category\":\"financial\",\"formulajs\":true},\"MMULT\":{\"category\":\"math\",\"formulajs\":true},\"MOD\":{\"category\":\"math\",\"formulajs\":true},\"MODE\":{\"category\":\"compatibility\",\"formulajs\":false},\"MODEMULT\":{\"category\":\"statistical\",\"formulajs\":true},\"MODESNGL\":{\"category\":\"statistical\",\"formulajs\":true},\"MONTH\":{\"category\":\"date\",\"formulajs\":true},\"MROUND\":{\"category\":\"math\",\"formulajs\":true},\"MULTINOMIAL\":{\"category\":\"math\",\"formulajs\":true},\"MUNIT\":{\"category\":\"math\",\"formulajs\":true},\"N\":{\"category\":\"information\",\"formulajs\":true},\"NA\":{\"category\":\"information\",\"formulajs\":true},\"NEGBINOMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NETWORKDAYS\":{\"category\":\"date\",\"formulajs\":true},\"NETWORKDAYSINTL\":{\"category\":\"date\",\"formulajs\":true},\"NOMINAL\":{\"category\":\"financial\",\"formulajs\":true},\"NORMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMSDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMSINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"NOT\":{\"category\":\"logical\",\"formulajs\":true},\"NOW\":{\"category\":\"date\",\"formulajs\":true},\"NPER\":{\"category\":\"financial\",\"formulajs\":true},\"NPV\":{\"category\":\"financial\",\"formulajs\":true},\"NUMBERVALUE\":{\"category\":\"text\",\"formulajs\":true},\"OCT2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"OCT2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"OCT2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"ODD\":{\"category\":\"math\",\"formulajs\":true},\"ODDFPRICE\":{\"category\":\"financial\",\"formulajs\":false},\"ODDFYIELD\":{\"category\":\"financial\",\"formulajs\":false},\"ODDLPRICE\":{\"category\":\"financial\",\"formulajs\":false},\"ODDLYIELD\":{\"category\":\"financial\",\"formulajs\":false},\"OFFSET\":{\"category\":\"lookup\",\"formulajs\":false},\"OR\":{\"category\":\"logical\",\"formulajs\":true},\"PDURATION\":{\"category\":\"financial\",\"formulajs\":true},\"PEARSON\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILEEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILEINC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILE\":{\"category\":\"compatibility\",\"formulajs\":false},\"PERCENTOF\":{\"category\":\"math\",\"formulajs\":false},\"PERCENTRANKEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTRANKINC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTRANK\":{\"category\":\"compatibility\",\"formulajs\":false},\"PERMUT\":{\"category\":\"statistical\",\"formulajs\":true},\"PERMUTATIONA\":{\"category\":\"statistical\",\"formulajs\":true},\"PHI\":{\"category\":\"statistical\",\"formulajs\":true},\"PHONETIC\":{\"category\":\"text\",\"formulajs\":false},\"PI\":{\"category\":\"math\",\"formulajs\":true},\"PIVOTBY\":{\"category\":\"lookup\",\"formulajs\":false},\"PMT\":{\"category\":\"financial\",\"formulajs\":true},\"POISSONDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"POISSON\":{\"category\":\"compatibility\",\"formulajs\":false},\"POWER\":{\"category\":\"math\",\"formulajs\":true},\"PPMT\":{\"category\":\"financial\",\"formulajs\":true},\"PRICE\":{\"category\":\"financial\",\"formulajs\":false},\"PRICEDISC\":{\"category\":\"financial\",\"formulajs\":true},\"PRICEMAT\":{\"category\":\"financial\",\"formulajs\":false},\"PROB\":{\"category\":\"statistical\",\"formulajs\":true},\"PRODUCT\":{\"category\":\"math\",\"formulajs\":true},\"PROPER\":{\"category\":\"text\",\"formulajs\":true},\"PV\":{\"category\":\"financial\",\"formulajs\":true},\"QUARTILE\":{\"category\":\"compatibility\",\"formulajs\":false},\"QUARTILEEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"QUARTILEINC\":{\"category\":\"statistical\",\"formulajs\":true},\"QUOTIENT\":{\"category\":\"math\",\"formulajs\":true},\"RADIANS\":{\"category\":\"math\",\"formulajs\":true},\"RAND\":{\"category\":\"math\",\"formulajs\":true},\"RANDARRAY\":{\"category\":\"math\",\"formulajs\":false},\"RANDBETWEEN\":{\"category\":\"math\",\"formulajs\":true},\"RANKAVG\":{\"category\":\"statistical\",\"formulajs\":true},\"RANKEQ\":{\"category\":\"statistical\",\"formulajs\":true},\"RANK\":{\"category\":\"compatibility\",\"formulajs\":false},\"RATE\":{\"category\":\"financial\",\"formulajs\":true},\"RECEIVED\":{\"category\":\"financial\",\"formulajs\":false},\"REDUCE\":{\"category\":\"logical\",\"formulajs\":false},\"REGEXEXTRACT\":{\"category\":\"text\",\"formulajs\":false},\"REGEXREPLACE\":{\"category\":\"text\",\"formulajs\":false},\"REGEXTEST\":{\"category\":\"text\",\"formulajs\":false},\"REPLACE\":{\"category\":\"text\",\"formulajs\":true},\"REPT\":{\"category\":\"text\",\"formulajs\":true},\"RIGHT\":{\"category\":\"text\",\"formulajs\":true},\"ROMAN\":{\"category\":\"math\",\"formulajs\":true},\"ROUND\":{\"category\":\"math\",\"formulajs\":true},\"ROUNDDOWN\":{\"category\":\"math\",\"formulajs\":true},\"ROUNDUP\":{\"category\":\"math\",\"formulajs\":true},\"ROW\":{\"category\":\"lookup\",\"formulajs\":true},\"ROWS\":{\"category\":\"lookup\",\"formulajs\":true},\"RRI\":{\"category\":\"financial\",\"formulajs\":true},\"RSQ\":{\"category\":\"statistical\",\"formulajs\":true},\"RTD\":{\"category\":\"lookup\",\"formulajs\":false},\"SCAN\":{\"category\":\"logical\",\"formulajs\":false},\"SEARCH\":{\"category\":\"text\",\"formulajs\":true},\"SEC\":{\"category\":\"math\",\"formulajs\":true},\"SECH\":{\"category\":\"math\",\"formulajs\":true},\"SECOND\":{\"category\":\"date\",\"formulajs\":true},\"SEQUENCE\":{\"category\":\"math\",\"formulajs\":false},\"SERIESSUM\":{\"category\":\"math\",\"formulajs\":true},\"SHEET\":{\"category\":\"information\",\"formulajs\":false},\"SHEETS\":{\"category\":\"information\",\"formulajs\":false},\"SIGN\":{\"category\":\"math\",\"formulajs\":true},\"SIN\":{\"category\":\"math\",\"formulajs\":true},\"SINH\":{\"category\":\"math\",\"formulajs\":true},\"SKEW\":{\"category\":\"statistical\",\"formulajs\":true},\"SKEWP\":{\"category\":\"statistical\",\"formulajs\":true},\"SLN\":{\"category\":\"financial\",\"formulajs\":true},\"SLOPE\":{\"category\":\"statistical\",\"formulajs\":true},\"SMALL\":{\"category\":\"statistical\",\"formulajs\":true},\"SORT\":{\"category\":\"lookup\",\"formulajs\":true},\"SORTBY\":{\"category\":\"lookup\",\"formulajs\":false},\"SQRT\":{\"category\":\"math\",\"formulajs\":true},\"SQRTPI\":{\"category\":\"math\",\"formulajs\":true},\"STANDARDIZE\":{\"category\":\"statistical\",\"formulajs\":true},\"STOCKHISTORY\":{\"category\":\"information\",\"formulajs\":false},\"STDEV\":{\"category\":\"compatibility\",\"formulajs\":false},\"STDEVP\":{\"category\":\"compatibility\",\"formulajs\":true},\"STDEVS\":{\"category\":\"statistical\",\"formulajs\":true},\"STDEVA\":{\"category\":\"statistical\",\"formulajs\":true},\"STDEVPA\":{\"category\":\"statistical\",\"formulajs\":true},\"STEYX\":{\"category\":\"statistical\",\"formulajs\":true},\"SUBSTITUTE\":{\"category\":\"text\",\"formulajs\":true},\"SUBTOTAL\":{\"category\":\"math\",\"formulajs\":true},\"SUM\":{\"category\":\"math\",\"formulajs\":true},\"SUMIF\":{\"category\":\"math\",\"formulajs\":true},\"SUMIFS\":{\"category\":\"math\",\"formulajs\":true},\"SUMPRODUCT\":{\"category\":\"math\",\"formulajs\":true},\"SUMSQ\":{\"category\":\"math\",\"formulajs\":true},\"SUMX2MY2\":{\"category\":\"math\",\"formulajs\":true},\"SUMX2PY2\":{\"category\":\"math\",\"formulajs\":true},\"SUMXMY2\":{\"category\":\"math\",\"formulajs\":true},\"SWITCH\":{\"category\":\"logical\",\"formulajs\":true},\"SYD\":{\"category\":\"financial\",\"formulajs\":true},\"T\":{\"category\":\"text\",\"formulajs\":true},\"TAN\":{\"category\":\"math\",\"formulajs\":true},\"TANH\":{\"category\":\"math\",\"formulajs\":true},\"TAKE\":{\"category\":\"lookup\",\"formulajs\":false},\"TBILLEQ\":{\"category\":\"financial\",\"formulajs\":true},\"TBILLPRICE\":{\"category\":\"financial\",\"formulajs\":true},\"TBILLYIELD\":{\"category\":\"financial\",\"formulajs\":true},\"TDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"TDIST2T\":{\"category\":\"statistical\",\"formulajs\":true},\"TDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"TEXT\":{\"category\":\"text\",\"formulajs\":true},\"TEXTAFTER\":{\"category\":\"text\",\"formulajs\":false},\"TEXTBEFORE\":{\"category\":\"text\",\"formulajs\":false},\"TEXTJOIN\":{\"category\":\"text\",\"formulajs\":true},\"TEXTSPLIT\":{\"category\":\"text\",\"formulajs\":false},\"TIME\":{\"category\":\"date\",\"formulajs\":true},\"TIMEVALUE\":{\"category\":\"date\",\"formulajs\":true},\"TINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"TINV2T\":{\"category\":\"statistical\",\"formulajs\":true},\"TOCOL\":{\"category\":\"lookup\",\"formulajs\":false},\"TOROW\":{\"category\":\"lookup\",\"formulajs\":false},\"TODAY\":{\"category\":\"date\",\"formulajs\":true},\"TRANSLATE\":{\"category\":\"text\",\"formulajs\":false},\"TRANSPOSE\":{\"category\":\"lookup\",\"formulajs\":true},\"TREND\":{\"category\":\"statistical\",\"formulajs\":true},\"TRIM\":{\"category\":\"text\",\"formulajs\":true},\"TRIMMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"TRIMRANGE\":{\"category\":\"lookup\",\"formulajs\":false},\"TRUE\":{\"category\":\"logical\",\"formulajs\":true},\"TRUNC\":{\"category\":\"math\",\"formulajs\":true},\"TTEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"TYPE\":{\"category\":\"information\",\"formulajs\":true},\"UNICHAR\":{\"category\":\"text\",\"formulajs\":true},\"UNICODE\":{\"category\":\"text\",\"formulajs\":true},\"UNIQUE\":{\"category\":\"lookup\",\"formulajs\":true},\"UPPER\":{\"category\":\"text\",\"formulajs\":true},\"VALUE\":{\"category\":\"text\",\"formulajs\":true},\"VALUETOTEXT\":{\"category\":\"text\",\"formulajs\":false},\"VAR\":{\"category\":\"compatibility\",\"formulajs\":false},\"VARP\":{\"category\":\"compatibility\",\"formulajs\":true},\"VARS\":{\"category\":\"statistical\",\"formulajs\":true},\"VARA\":{\"category\":\"statistical\",\"formulajs\":true},\"VARPA\":{\"category\":\"statistical\",\"formulajs\":true},\"VDB\":{\"category\":\"financial\",\"formulajs\":false},\"VLOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"WEEKDAY\":{\"category\":\"date\",\"formulajs\":true},\"WEEKNUM\":{\"category\":\"date\",\"formulajs\":true},\"WEIBULL\":{\"category\":\"compatibility\",\"formulajs\":false},\"WEIBULLDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"WORKDAY\":{\"category\":\"date\",\"formulajs\":true},\"WORKDAYINTL\":{\"category\":\"date\",\"formulajs\":true},\"XIRR\":{\"category\":\"financial\",\"formulajs\":true},\"XLOOKUP\":{\"category\":\"lookup\",\"formulajs\":false},\"XMATCH\":{\"category\":\"lookup\",\"formulajs\":false},\"XNPV\":{\"category\":\"financial\",\"formulajs\":true},\"XOR\":{\"category\":\"logical\",\"formulajs\":true},\"YEAR\":{\"category\":\"date\",\"formulajs\":true},\"YEARFRAC\":{\"category\":\"date\",\"formulajs\":true},\"YIELD\":{\"category\":\"financial\",\"formulajs\":false},\"YIELDDISC\":{\"category\":\"financial\",\"formulajs\":false},\"YIELDMAT\":{\"category\":\"financial\",\"formulajs\":false},\"ZTEST\":{\"category\":\"compatibility\",\"formulajs\":true}}","/**\n * UI 元数据覆盖(可选)。\n * 函数全集来自 @formulajs/formulajs + formulajs-catalog.json(formulajs.info 分类)。\n * 此处只维护:常用 featured、已接入 implemented、中文 label/hint/syntax。\n * 其余函数使用默认占位,后续可对照语雀 / Excel 文档逐步补充。\n */\nimport type { FormulaBuiltinEntry, FormulaCategoryId } from './types'\n\ntype MetaOverride = Partial<FormulaBuiltinEntry> & { name: string }\n\nexport const FORMULA_META_OVERRIDES: readonly MetaOverride[] = [\n {\n name: 'SUM',\n category: 'statistical',\n label: '求和',\n syntax: 'SUM(数值1, [数值2], …)',\n hint: '返回一组数值和/或单元格的总和。',\n example: 'SUM(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'AVERAGE',\n category: 'statistical',\n label: '平均值',\n syntax: 'AVERAGE(数值1, [数值2], …)',\n hint: '返回其参数的算术平均值。',\n example: 'AVERAGE(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'COUNT',\n category: 'statistical',\n label: '计数',\n syntax: 'COUNT(数值1, [数值2], …)',\n hint: '计算参数列表中数字的个数。',\n example: 'COUNT(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'MAX',\n category: 'statistical',\n label: '最大值',\n syntax: 'MAX(数值1, [数值2], …)',\n hint: '返回参数列表中的最大值。',\n implemented: true,\n featured: true,\n },\n {\n name: 'MIN',\n category: 'statistical',\n label: '最小值',\n syntax: 'MIN(数值1, [数值2], …)',\n hint: '返回参数列表中的最小值。',\n implemented: true,\n featured: true,\n },\n {\n name: 'IF',\n category: 'logical',\n label: '条件',\n syntax: 'IF(条件, 真值, [假值])',\n hint: '判断是否满足某个条件,返回不同结果。',\n featured: true,\n },\n {\n name: 'AND',\n category: 'logical',\n label: '且',\n syntax: 'AND(逻辑1, [逻辑2], …)',\n hint: '所有参数为 TRUE 时返回 TRUE。',\n featured: true,\n },\n {\n name: 'OR',\n category: 'logical',\n label: '或',\n syntax: 'OR(逻辑1, [逻辑2], …)',\n hint: '任一参数为 TRUE 时返回 TRUE。',\n featured: true,\n },\n {\n name: 'ABS',\n category: 'math',\n label: '绝对值',\n syntax: 'ABS(数值)',\n hint: '返回数字的绝对值。',\n },\n {\n name: 'ROUND',\n category: 'math',\n label: '四舍五入',\n syntax: 'ROUND(数值, 位数)',\n hint: '按指定位数四舍五入。',\n },\n {\n name: 'VLOOKUP',\n category: 'lookup',\n label: '垂直查找',\n syntax: 'VLOOKUP(查找值, 表区域, 列序, [匹配])',\n hint: '在表首列查找并返回同行指定列。',\n },\n] as const\n\nexport function getMetaOverrideMap(): Map<string, MetaOverride> {\n return new Map(FORMULA_META_OVERRIDES.map((m) => [m.name, m]))\n}\n\nexport function defaultCategory(): FormulaCategoryId {\n return 'math'\n}\n","/**\n * 从 @formulajs/formulajs 导出 + formulajs.info 分类目录 合并为注册表。\n * 不引入平台自定义函数;UI 文案在 meta.ts 按需覆盖。\n */\nimport * as formulajs from '@formulajs/formulajs'\nimport type { FormulaBuiltinEntry, FormulaCategoryId } from './types'\nimport catalog from './formulajs-catalog.json'\nimport { defaultCategory, getMetaOverrideMap } from './meta'\n\ntype CatalogRow = { category: FormulaCategoryId; formulajs: boolean }\n\nconst catalogMap = catalog as Record<string, CatalogRow>\n\nfunction getFormulajsExportNames(): string[] {\n const lib = formulajs as Record<string, unknown>\n return Object.keys(lib)\n .filter((k) => /^[A-Z][A-Z0-9_]*$/.test(k) && typeof lib[k] === 'function')\n .sort()\n}\n\nfunction buildEntry(name: string): FormulaBuiltinEntry | null {\n if (!catalogMap[name]) return null\n const row = catalogMap[name]\n const override = getMetaOverrideMap().get(name)\n const category = override?.category ?? row.category ?? defaultCategory()\n return {\n name,\n category,\n label: override?.label ?? name,\n labelEn: override?.labelEn,\n syntax: override?.syntax ?? `${name}(…)`,\n hint:\n override?.hint ??\n 'Excel 兼容函数(@formulajs/formulajs)。说明待补充,可参考 formulajs.info。',\n description: override?.description,\n example: override?.example,\n seeAlso: override?.seeAlso,\n aliases: override?.aliases,\n implemented: override?.implemented ?? false,\n formulajs: row.formulajs,\n featured: override?.featured ?? false,\n }\n}\n\n/** 运行时注册表:仅包含 formulajs 包内存在的函数 */\nexport function buildFormulaBuiltinRegistry(): FormulaBuiltinEntry[] {\n const names = getFormulajsExportNames()\n const out: FormulaBuiltinEntry[] = []\n for (const name of names) {\n const entry = buildEntry(name)\n if (entry) out.push(entry)\n }\n return out\n}\n\nexport const FORMULA_BUILTIN_REGISTRY: readonly FormulaBuiltinEntry[] =\n buildFormulaBuiltinRegistry()\n","import type { FormulaCategoryId, FormulaCategoryMeta } from './types'\n\nexport const FORMULA_CATEGORIES: readonly FormulaCategoryMeta[] = [\n { id: 'math', label: '数学', labelEn: 'Math', formulajsCategory: 'Math and trigonometry' },\n { id: 'statistical', label: '统计', labelEn: 'Statistics', formulajsCategory: 'Statistical' },\n { id: 'financial', label: '财务', labelEn: 'Financial', formulajsCategory: 'Financial' },\n { id: 'engineering', label: '工程', labelEn: 'Engineering', formulajsCategory: 'Engineering' },\n { id: 'text', label: '文本', labelEn: 'Text', formulajsCategory: 'Text' },\n { id: 'logical', label: '逻辑', labelEn: 'Logical', formulajsCategory: 'Logical' },\n { id: 'date', label: '日期', labelEn: 'Date', formulajsCategory: 'Date and time' },\n { id: 'lookup', label: '查找', labelEn: 'Lookup', formulajsCategory: 'Lookup and reference' },\n { id: 'information', label: '信息', labelEn: 'Information', formulajsCategory: 'Information' },\n { id: 'database', label: '数据库', labelEn: 'Database', formulajsCategory: 'Database' },\n { id: 'compatibility', label: '兼容', labelEn: 'Compatibility', formulajsCategory: 'Compatibility' },\n] as const\n\nexport function getCategoryMeta(id: FormulaCategoryId): FormulaCategoryMeta | undefined {\n return FORMULA_CATEGORIES.find((c) => c.id === id)\n}\n\nexport function categoryLabel(id: FormulaCategoryId, locale: 'zh' | 'en' = 'zh'): string {\n const meta = getCategoryMeta(id)\n if (!meta) return id\n return locale === 'en' ? meta.labelEn : meta.label\n}\n","import type { FormulaCategoryId, FormulaBuiltinEntry } from './types'\nimport { FORMULA_BUILTIN_REGISTRY } from './buildRegistry'\nimport { FORMULA_CATEGORIES, categoryLabel, getCategoryMeta } from './categories'\n\nexport type { FormulaBuiltinEntry, FormulaCategoryId, FormulaCategoryMeta } from './types'\nexport { FORMULA_BUILTIN_REGISTRY } from './buildRegistry'\nexport { FORMULA_META_OVERRIDES } from './meta'\nexport { FORMULA_CATEGORIES, categoryLabel, getCategoryMeta } from './categories'\n\nconst _canonical = new Map<string, string>()\n\nfunction rebuildCanonical(): void {\n if (_canonical.size) return\n for (const b of FORMULA_BUILTIN_REGISTRY) {\n const upper = b.name.toUpperCase()\n _canonical.set(upper, upper)\n for (const a of b.aliases ?? []) {\n _canonical.set(a.toUpperCase(), upper)\n }\n }\n}\n\nexport function resolveBuiltinName(name: string): string | undefined {\n rebuildCanonical()\n return _canonical.get(name.toUpperCase())\n}\n\nexport function isRegisteredBuiltin(name: string): boolean {\n rebuildCanonical()\n return _canonical.has(name.toUpperCase())\n}\n\nexport function getBuiltinEntry(name: string): FormulaBuiltinEntry | undefined {\n const canonical = resolveBuiltinName(name)\n if (!canonical) return undefined\n return FORMULA_BUILTIN_REGISTRY.find((b) => b.name === canonical)\n}\n\nexport function getFeaturedBuiltins(): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.featured)\n}\n\nexport function getBuiltinsByCategory(category: FormulaCategoryId): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.category === category)\n}\n\nexport function getImplementedBuiltins(): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.implemented)\n}\n\nexport function getImplementedBuiltinNames(): string[] {\n return getImplementedBuiltins().map((b) => b.name)\n}\n\n/** 菜单用:有函数的分类(保持 FORMULA_CATEGORIES 顺序) */\nexport function getCategoriesWithBuiltins(): FormulaCategoryId[] {\n const ids = new Set<FormulaCategoryId>()\n for (const b of FORMULA_BUILTIN_REGISTRY) ids.add(b.category)\n return FORMULA_CATEGORIES.map((c) => c.id).filter((id) => ids.has(id))\n}\n\nexport function searchBuiltins(query: string): FormulaBuiltinEntry[] {\n const q = query.trim().toUpperCase()\n if (!q) return [...FORMULA_BUILTIN_REGISTRY]\n return FORMULA_BUILTIN_REGISTRY.filter((b) => {\n if (b.name.includes(q)) return true\n if (b.label.includes(query.trim())) return true\n if (b.hint.includes(query.trim())) return true\n return (b.aliases ?? []).some((a) => a.toUpperCase().includes(q))\n })\n}\n\n/** 从公式文本解析当前正在输入的函数名(=SUM( → SUM) */\nexport function parseActiveFunctionName(formula: string, caret: number): string | null {\n const head = formula.slice(0, caret)\n const m = head.match(/([A-Za-z][\\w.]*)$/)\n if (!m) return null\n const name = m[1].toUpperCase().replace(/\\./g, '')\n if (!name) return null\n const after = head.slice(head.length - m[1].length)\n if (!/^[A-Za-z]/.test(after)) return null\n return resolveBuiltinName(name) ?? null\n}\n\nexport function buildFunctionNamePattern(): RegExp {\n const names = [...new Set(FORMULA_BUILTIN_REGISTRY.map((b) => b.name))]\n const escaped = names.sort((a, b) => b.length - a.length).map((n) =>\n n.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n )\n return new RegExp(`\\\\b(${escaped.join('|')})\\\\s*\\\\(`, 'gi')\n}\n","import * as formulajs from '@formulajs/formulajs'\nimport { buildFunctionNamePattern, getImplementedBuiltinNames } from './registry'\n\nexport type FormulaFn = (values: number[]) => number\n\nfunction buildFnMap(): Record<string, FormulaFn> {\n const map: Record<string, FormulaFn> = {}\n const lib = formulajs as Record<string, unknown>\n for (const name of getImplementedBuiltinNames()) {\n const fn = lib[name]\n if (typeof fn !== 'function') continue\n map[name] = fn as FormulaFn\n }\n return map\n}\n\nexport const FN_MAP = buildFnMap()\nexport const FN_RE = buildFunctionNamePattern()\n","/**\n * 公式编辑态字符串操作(headless,与 UI 框架无关)。\n * 供 vue3 / 其他宿主在公式栏、单元格内联编辑、点选引用时复用。\n */\nimport type { Sheet } from '@speed-sheet/core'\nimport type { CellAttributes } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { internalFormulaToDisplay } from './formula-bindings'\nimport { overlapsInternalRef } from './internal-ref-scan'\nimport { formatA1 } from './refs'\n\nconst REF_TOKEN_RE =\n /(?:'[^']+'!)?[A-Za-z]{1,4}\\d+(?::[A-Za-z]{1,4}\\d+)?/gi\n\nconst OP_END_RE = /[+\\-*/,(]$/\n\n/** 光标前为该字符时,允许点选单元格插入引用(对齐 Luckysheet israngeseleciton) */\nconst REF_PICK_TRIGGER = new Set([\n '(',\n ',',\n '=',\n '+',\n '-',\n '*',\n '/',\n '%',\n '&',\n '^',\n '<',\n '>',\n '|',\n ':',\n])\n\n/**\n * 是否处于「点选插入引用」态(而非仅公式编辑态)。\n * @param refPickSession 已为 true 时等同 Luckysheet rangestart(上一次点选后保持到提交/取消)\n */\nexport function canPickFormulaRefAtCaret(formula: string, caret: number): boolean {\n if (!isFormulaInput(formula)) return false\n const trimmed = formula.trimStart()\n if (trimmed === '=') return true\n const safeCaret = Math.max(0, Math.min(caret, formula.length))\n const before = formula.slice(0, safeCaret).trimEnd()\n if (!before.length) return false\n const last = before[before.length - 1]!\n return REF_PICK_TRIGGER.has(last)\n}\n\nexport function canPickFormulaRef(\n formula: string,\n caret: number,\n refPickSession: boolean,\n): boolean {\n if (!isFormulaInput(formula)) return false\n return refPickSession || canPickFormulaRefAtCaret(formula, caret)\n}\n\nexport function isFormulaInput(text: string): boolean {\n return text.trimStart().startsWith('=')\n}\n\nexport const isFormulaText = isFormulaInput\n\nexport function getCellFormulaInitialFromCell(\n cell: CellAttributes | null | undefined,\n sheet?: Sheet,\n sheetId?: string,\n): string {\n if (cell?.f) {\n const f = String(cell.f)\n if (sheet && f.startsWith('=')) {\n const ctx = createFormulaContext(sheet)\n const sid = sheetId ?? sheet.getActiveSheetId()\n return internalFormulaToDisplay(f, ctx, sid)\n }\n return f\n }\n const raw = cell?.m ?? cell?.v\n if (typeof raw === 'string' && raw.startsWith('=')) return raw\n return '='\n}\n\n/** 进入公式编辑时的初始文本:已有公式则保留,否则为 `=` */\nexport function getCellFormulaInitial(sheet: Sheet, r: number, c: number): string {\n return getCellFormulaInitialFromCell(\n sheet.state.getCellData(r, c),\n sheet,\n sheet.getActiveSheetId(),\n )\n}\n\nexport function formatRangeA1(\n r0: number,\n c0: number,\n r1: number,\n c1: number,\n): string {\n const ra = Math.min(r0, r1)\n const rb = Math.max(r0, r1)\n const ca = Math.min(c0, c1)\n const cb = Math.max(c0, c1)\n if (ra === rb && ca === cb) return formatA1(ra, ca)\n return `${formatA1(ra, ca)}:${formatA1(rb, cb)}`\n}\n\nexport function buildSheetRefToken(\n sheet: Sheet,\n r0: number,\n c0: number,\n r1?: number,\n c1?: number,\n sheetId?: string,\n): string {\n const sid = sheetId ?? sheet.getActiveSheetId()\n const activeId = sheet.getActiveSheetId()\n const local =\n r1 !== undefined && c1 !== undefined\n ? formatRangeA1(r0, c0, r1, c1)\n : formatA1(r0, c0)\n if (sid === activeId) return local\n const name = sheet.getSheetName(sid)\n return `'${name.replace(/'/g, \"''\")}'!${local}`\n}\n\nfunction findRefSpanAt(formula: string, index: number): { start: number; end: number } | null {\n REF_TOKEN_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = REF_TOKEN_RE.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n if (index >= start && index <= end) return { start, end }\n }\n return null\n}\n\nfunction findLastRefSpan(formula: string): { start: number; end: number } | null {\n REF_TOKEN_RE.lastIndex = 0\n let last: { start: number; end: number } | null = null\n let m: RegExpExecArray | null\n while ((m = REF_TOKEN_RE.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n last = { start, end }\n }\n return last\n}\n\n/** 在公式中插入/替换引用:运算符后拼接,否则替换光标处引用(或最后一个引用) */\nexport function patchFormulaWithRef(\n formula: string,\n caret: number,\n refToken: string,\n): { text: string; caret: number } {\n if (!isFormulaInput(formula)) {\n return { text: `=${refToken}`, caret: 1 + refToken.length }\n }\n\n const safeCaret = Math.max(0, Math.min(caret, formula.length))\n const before = formula.slice(0, safeCaret)\n const after = formula.slice(safeCaret)\n\n if (formula === '=' || OP_END_RE.test(before.trimEnd())) {\n const text = before + refToken + after\n return { text, caret: before.length + refToken.length }\n }\n\n const span =\n findRefSpanAt(formula, safeCaret) ??\n findRefSpanAt(formula, safeCaret - 1) ??\n findLastRefSpan(formula)\n\n if (span) {\n const text = formula.slice(0, span.start) + refToken + formula.slice(span.end)\n return { text, caret: span.start + refToken.length }\n }\n\n const sep = OP_END_RE.test(before.trimEnd()) ? '' : '+'\n const text = before + sep + refToken + after\n return { text, caret: before.length + sep.length + refToken.length }\n}\n","import type { FormulaContext } from './context'\nimport { collectIdRangeScalars, coerceNumber } from './context'\nimport { formulaErrorResult, type FormulaErrorCode } from './errors'\nimport {\n extractInternalRefTokens,\n hasInternalRefs,\n parseInternalRefToken,\n} from './formula-bindings'\nimport { FN_MAP, FN_RE } from './fnMap'\nimport { isRegisteredBuiltin } from './registry'\n\nexport type { FormulaErrorCode }\nexport { formulaErrorResult, isFormulaErrorDisplay, getFormulaErrorMessage, FORMULA_ERRORS } from './errors'\n\nexport interface FormulaResult {\n value: number | string | boolean | null\n m: string\n error?: FormulaErrorCode\n errorMessage?: string\n}\n\ntype FnName = keyof typeof FN_MAP\nconst IDENT_FN_RE = /\\b([A-Za-z_][\\w.]*)\\s*\\(/g\nconst NULL_RANGE_RE = /[A-Za-z]{1,4}\\d+:[A-Za-z]{1,4}\\d+\\s+[A-Za-z]{1,4}/\n\nfunction splitTopLevelArgs(inner: string): string[] {\n const parts: string[] = []\n let depth = 0\n let start = 0\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i]\n if (ch === '(') depth++\n else if (ch === ')') depth--\n else if (ch === ',' && depth === 0) {\n parts.push(inner.slice(start, i).trim())\n start = i + 1\n }\n }\n parts.push(inner.slice(start).trim())\n return parts.filter(Boolean)\n}\n\nfunction detectNameError(expr: string): boolean {\n IDENT_FN_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = IDENT_FN_RE.exec(expr)) !== null) {\n const name = m[1].toUpperCase().replace(/\\./g, '')\n if (!isRegisteredBuiltin(name)) return true\n }\n return false\n}\n\nfunction detectNullRangeError(expr: string): boolean {\n return NULL_RANGE_RE.test(expr)\n}\n\nfunction resolveRefSheetId(\n ctx: FormulaContext,\n sheetIdOrName: string | undefined,\n): string | { error: 'REF' } {\n if (!sheetIdOrName) return ctx.activeSheetId\n const id = ctx.resolveSheetId(sheetIdOrName)\n if (!id) return { error: 'REF' }\n return id\n}\n\nfunction resolveArgNumbers(\n arg: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): number[] | { error: FormulaErrorCode } {\n if (arg.startsWith('#')) {\n const ref = parseInternalRefToken(arg)\n if (!ref) return { error: 'REF' }\n const sheetResolved = resolveRefSheetId(ctx, ref.sheetId)\n if (typeof sheetResolved !== 'string') return sheetResolved\n const sheetId = sheetResolved\n if (ref.endRowId != null && ref.endColId != null) {\n return collectIdRangeScalars(\n ctx,\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n visiting,\n )\n }\n const raw = ctx.getScalarById(sheetId, ref.rowId, ref.colId, visiting)\n if (typeof raw === 'string' && raw.startsWith('#')) return { error: 'REF' }\n if (typeof raw === 'string' && raw !== '' && Number.isNaN(Number(raw))) {\n return { error: 'VALUE' }\n }\n return [coerceNumber(raw)]\n }\n const n = Number(arg)\n if (Number.isFinite(n)) return [n]\n if (arg.startsWith('\"') || /[A-Za-z\\u4e00-\\u9fff]/.test(arg)) return { error: 'VALUE' }\n return []\n}\n\nfunction evalFunctions(\n expr: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): string | { error: FormulaErrorCode } {\n let out = expr\n let guard = 0\n while (guard++ < 32) {\n FN_RE.lastIndex = 0\n const m = FN_RE.exec(out)\n if (!m) break\n const fnName = m[1].toUpperCase().replace(/\\./g, '') as FnName\n const fn = FN_MAP[fnName]\n if (!fn) {\n FN_RE.lastIndex = m.index + m[0].length\n continue\n }\n\n const open = m.index + m[0].length\n let depth = 1\n let i = open\n for (; i < out.length && depth > 0; i++) {\n if (out[i] === '(') depth++\n else if (out[i] === ')') depth--\n }\n if (depth !== 0) return { error: 'ERROR' }\n\n const inner = out.slice(open, i - 1)\n const args = splitTopLevelArgs(inner)\n const values: number[] = []\n for (const a of args) {\n const resolved = resolveArgNumbers(a, ctx, visiting)\n if (!Array.isArray(resolved)) return resolved\n values.push(...resolved)\n }\n\n let computed: number\n computed = fn(values)\n\n if (!Number.isFinite(computed)) return { error: 'NUM' }\n\n const replacement = String(computed)\n out = out.slice(0, m.index) + replacement + out.slice(i)\n }\n return out\n}\n\nfunction replaceInternalRefs(\n expr: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): string | { error: FormulaErrorCode } {\n const tokens = extractInternalRefTokens(expr)\n let out = expr\n for (const token of tokens) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const sheetResolved = resolveRefSheetId(ctx, ref.sheetId)\n if (typeof sheetResolved !== 'string') return sheetResolved\n const sheetId = sheetResolved\n if (ref.endRowId != null && ref.endColId != null) {\n const nums = collectIdRangeScalars(\n ctx,\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n visiting,\n )\n const sumFn = FN_MAP.SUM\n if (!sumFn) return { error: 'NAME' }\n const sum = sumFn(nums)\n if (!Number.isFinite(sum)) return { error: 'NUM' }\n out = out.split(token).join(String(sum))\n continue\n }\n const raw = ctx.getScalarById(sheetId, ref.rowId, ref.colId, visiting)\n if (typeof raw === 'string' && raw.startsWith('#')) return { error: 'REF' }\n if (typeof raw === 'string' && raw !== '' && Number.isNaN(Number(raw))) {\n return { error: 'VALUE' }\n }\n const v = coerceNumber(raw)\n out = out.split(token).join(String(v))\n }\n return out\n}\n\nfunction safeArithmetic(expr: string): FormulaResult {\n const trimmed = expr.replace(/\\s/g, '')\n if (!trimmed) return formulaErrorResult('ERROR')\n\n if (/[a-zA-Z\"]/.test(trimmed)) {\n return formulaErrorResult('VALUE')\n }\n\n if (!/^[0-9+\\-*/().]+$/.test(trimmed)) {\n return formulaErrorResult('ERROR')\n }\n\n if (/\\/\\s*0+(?:\\.0*)?(?:[+\\-*/)]|$)/.test(trimmed)) {\n return formulaErrorResult('DIV0')\n }\n\n try {\n // eslint-disable-next-line no-new-func\n const v = new Function(`return (${trimmed})`)()\n if (typeof v !== 'number' || Number.isNaN(v)) {\n return formulaErrorResult('VALUE')\n }\n if (!Number.isFinite(v)) {\n return formulaErrorResult(Math.abs(v) === Infinity ? 'DIV0' : 'NUM')\n }\n const m = Number.isInteger(v) ? String(v) : String(Math.round(v * 1e9) / 1e9)\n return { value: v, m }\n } catch {\n return formulaErrorResult('ERROR')\n }\n}\n\nexport function evaluateFormulaString(\n raw: string,\n ctx: FormulaContext,\n visiting: Set<string> = new Set(),\n): FormulaResult {\n const text = raw.trim()\n if (!text.startsWith('=')) {\n return { value: text, m: text }\n }\n\n let expr = text.slice(1).trim()\n if (!expr) {\n return formulaErrorResult('ERROR')\n }\n\n if (detectNullRangeError(expr)) {\n return formulaErrorResult('NULL')\n }\n\n if (detectNameError(expr)) {\n return formulaErrorResult('NAME')\n }\n\n try {\n const afterFn = evalFunctions(expr, ctx, visiting)\n if (typeof afterFn !== 'string') {\n return formulaErrorResult(afterFn.error)\n }\n expr = afterFn\n\n if (hasInternalRefs(expr)) {\n const afterRefs = replaceInternalRefs(expr, ctx, visiting)\n if (typeof afterRefs !== 'string') {\n return formulaErrorResult(afterRefs.error)\n }\n expr = afterRefs\n }\n\n return safeArithmetic(expr)\n } catch {\n return formulaErrorResult('ERROR')\n }\n}\n\nexport { isFormulaInput } from './edit'\n","import { getFormulaErrorMessage } from './errors'\nimport type { FormulaResult } from './evaluate'\nimport type { CellAttributes } from '@speed-sheet/shared'\n\nexport function cellPatchFromFormulaResult(\n formula: string,\n result: FormulaResult,\n): Partial<CellAttributes> {\n const f = formula.trim()\n if (result.error) {\n return {\n f,\n v: null,\n m: result.m,\n ef: result.error,\n em: result.errorMessage ?? getFormulaErrorMessage(result.error),\n }\n }\n return {\n f,\n v: result.value,\n m: result.m,\n ef: undefined,\n em: undefined,\n }\n}\n","import { extractInternalRefTokens, hasInternalRefs } from './internal-ref-scan'\nimport { extractRefTokens } from './refs'\n\nexport const FORMULA_REF_COLORS = [\n '#1a73e8',\n '#0d9d57',\n '#e37400',\n '#9c27b0',\n '#d93025',\n] as const\n\nexport interface FormulaRefSpan {\n start: number\n end: number\n token: string\n color: string\n}\n\nfunction spansForTokens(formula: string, tokens: string[]): FormulaRefSpan[] {\n const spans: FormulaRefSpan[] = []\n let searchFrom = 0\n tokens.forEach((token, i) => {\n const idx = formula.indexOf(token, searchFrom)\n if (idx < 0) return\n spans.push({\n start: idx,\n end: idx + token.length,\n token,\n color: FORMULA_REF_COLORS[i % FORMULA_REF_COLORS.length],\n })\n searchFrom = idx + token.length\n })\n return spans\n}\n\n/** 公式内引用 token 着色区间 */\nexport function getFormulaRefSpans(formula: string): FormulaRefSpan[] {\n if (hasInternalRefs(formula)) {\n return spansForTokens(formula, extractInternalRefTokens(formula))\n }\n return spansForTokens(formula, extractRefTokens(formula))\n}\n","import * as Y from 'yjs'\nimport type { Sheet } from '@speed-sheet/core'\nimport { SheetState, transactSystem } from '@speed-sheet/core'\nimport { depKey, parseDepKey } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { evaluateFormulaString } from './evaluate'\nimport {\n displayFormulaToInternal,\n extractInternalRefTokens,\n hasInternalRefs,\n parseInternalRefToken,\n} from './formula-bindings'\nimport { cellPatchFromFormulaResult } from './result'\nimport { extractRefTokens, parseRefToken } from './refs'\nimport { FORMULA_REF_COLORS } from './refSpans'\n\nexport interface FormulaRangeHighlight {\n sheetId: string\n row: [number, number]\n column: [number, number]\n color: string\n}\n\nconst HIGHLIGHT_COLORS = [...FORMULA_REF_COLORS]\n\nfunction refToHighlight(\n ctx: ReturnType<typeof createFormulaContext>,\n sheetId: string,\n r: number,\n c: number,\n color: string,\n): FormulaRangeHighlight {\n return { sheetId, row: [r, r], column: [c, c], color }\n}\n\nexport function buildHighlightsFromFormula(\n formula: string,\n ctx: ReturnType<typeof createFormulaContext>,\n): FormulaRangeHighlight[] {\n const out: FormulaRangeHighlight[] = []\n\n if (hasInternalRefs(formula)) {\n const tokens = extractInternalRefTokens(formula)\n tokens.forEach((token, i) => {\n const ref = parseInternalRefToken(token)\n if (!ref) return\n const sheetId = ref.sheetId ?? ctx.activeSheetId\n const color = HIGHLIGHT_COLORS[i % HIGHLIGHT_COLORS.length]\n if (ref.endRowId != null && ref.endColId != null) {\n const cells = ctx.expandIdRange(\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n )\n if (!cells.length) return\n let rMin = Infinity\n let rMax = -Infinity\n let cMin = Infinity\n let cMax = -Infinity\n for (const { rowId, colId } of cells) {\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) continue\n rMin = Math.min(rMin, pos.r)\n rMax = Math.max(rMax, pos.r)\n cMin = Math.min(cMin, pos.c)\n cMax = Math.max(cMax, pos.c)\n }\n if (rMin !== Infinity) {\n out.push({ sheetId, row: [rMin, rMax], column: [cMin, cMax], color })\n }\n } else {\n const pos = ctx.idsToDisplay(sheetId, ref.rowId, ref.colId)\n if (pos) out.push(refToHighlight(ctx, sheetId, pos.r, pos.c, color))\n }\n })\n return out\n }\n\n const tokens = extractRefTokens(formula)\n tokens.forEach((token, i) => {\n const ref = parseRefToken(token)\n if (!ref) return\n const sheetId = ctx.resolveSheetId(ref.sheet) ?? ctx.activeSheetId\n const color = HIGHLIGHT_COLORS[i % HIGHLIGHT_COLORS.length]\n if (ref.range) {\n out.push({ sheetId, row: ref.range.row, column: ref.range.column, color })\n } else if (ref.cell) {\n out.push(refToHighlight(ctx, sheetId, ref.cell.r, ref.cell.c, color))\n }\n })\n return out\n}\n\nexport function recalculateWorkbook(sheet: Sheet): void {\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n const formulas: Array<{ sheetId: string; r: number; c: number; f: string }> = []\n\n for (const sheetId of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n for (const { r, c, data } of state.getAllCells()) {\n if (data.f && String(data.f).startsWith('=') && hasInternalRefs(String(data.f))) {\n formulas.push({ sheetId, r, c, f: String(data.f) })\n }\n }\n }\n\n for (let pass = 0; pass < 8; pass++) {\n let changed = false\n for (const item of formulas) {\n const visiting = new Set<string>()\n const result = evaluateFormulaString(item.f, ctx, visiting)\n const ySheet = sheetsMap.get(item.sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n const prev = state.getCellData(item.r, item.c)\n const patch = cellPatchFromFormulaResult(item.f, result)\n if (prev?.v !== patch.v || prev?.m !== patch.m || prev?.ef !== patch.ef) {\n changed = true\n transactSystem(sheet.ydoc, () => {\n state.setCell(item.r, item.c, patch, false)\n })\n }\n }\n if (!changed) break\n }\n}\n\nexport function normalizeWorkbookFormulas(sheet: Sheet, dependents: Map<string, Set<string>>): void {\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n\n for (const sheetId of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n\n for (const { r, c, data } of state.getAllCells()) {\n const f = data.f ? String(data.f) : ''\n if (!f.startsWith('=') || hasInternalRefs(f)) continue\n\n const internal = displayFormulaToInternal(f, ctx, sheetId)\n const ids = state.resolveCellIds(r, c)\n if (!ids) continue\n\n transactSystem(sheet.ydoc, () => {\n state.setCell(r, c, { f: internal }, false)\n })\n registerFormulaDeps(sheetId, ids.rowId, ids.colId, internal, ctx, dependents)\n }\n }\n}\n\nexport function updateDependents(\n sheet: Sheet,\n changedSheetId: string,\n r: number,\n c: number,\n dependents: Map<string, Set<string>>,\n): void {\n const ySheet = sheet.ydoc.getMap('sheets').get(changedSheetId) as Y.Map<unknown> | undefined\n if (!ySheet) return\n const state = new SheetState(ySheet)\n const ids = state.resolveCellIds(r, c)\n if (!ids) return\n\n const key = depKey(changedSheetId, ids.rowId, ids.colId)\n const targets = dependents.get(key)\n if (!targets?.size) return\n\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n\n for (const targetKey of targets) {\n const parsed = parseDepKey(targetKey)\n if (!parsed) continue\n const { sheetId, rowId, colId } = parsed\n const targetSheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!targetSheet) continue\n const targetState = new SheetState(targetSheet)\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) continue\n const data = targetState.getCellData(pos.r, pos.c)\n if (!data?.f) continue\n const f = String(data.f)\n if (!hasInternalRefs(f)) continue\n const result = evaluateFormulaString(f, ctx)\n transactSystem(sheet.ydoc, () => {\n targetState.setCell(pos.r, pos.c, cellPatchFromFormulaResult(f, result), false)\n })\n }\n}\n\nexport function registerFormulaDeps(\n sheetId: string,\n rowId: string,\n colId: string,\n internalFormula: string,\n ctx: ReturnType<typeof createFormulaContext>,\n dependents: Map<string, Set<string>>,\n): void {\n const targetKey = depKey(sheetId, rowId, colId)\n\n for (const dep of dependents.values()) {\n dep.delete(targetKey)\n }\n for (const k of [...dependents.keys()]) {\n const set = dependents.get(k)!\n if (set.has(targetKey)) set.delete(targetKey)\n }\n\n for (const token of extractInternalRefTokens(internalFormula)) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const refSheetId = ref.sheetId ?? sheetId\n\n const link = (depRowId: string, depColId: string): void => {\n const depKeyStr = depKey(refSheetId, depRowId, depColId)\n if (!dependents.has(depKeyStr)) dependents.set(depKeyStr, new Set())\n dependents.get(depKeyStr)!.add(targetKey)\n }\n\n if (ref.endRowId != null && ref.endColId != null) {\n for (const cell of ctx.expandIdRange(\n refSheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n )) {\n link(cell.rowId, cell.colId)\n }\n } else {\n link(ref.rowId, ref.colId)\n }\n }\n}\n","import type { Sheet } from '@speed-sheet/core'\nimport {\n Extension,\n type CommandContext,\n type ExtensionCommandContext,\n} from '@speed-sheet/core'\nimport { depKey } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { evaluateFormulaString, isFormulaInput } from './evaluate'\nimport {\n buildHighlightsFromFormula,\n normalizeWorkbookFormulas,\n recalculateWorkbook,\n registerFormulaDeps,\n updateDependents,\n} from './engine'\nimport { displayFormulaToInternal } from './formula-bindings'\nimport { cellPatchFromFormulaResult } from './result'\n\nexport interface FormulaStorage {\n evaluating: boolean\n dependents: Map<string, Set<string>>\n sheet: Sheet | null\n}\n\nfunction afterLayoutChange(sheet: Sheet, storage: FormulaStorage): void {\n storage.evaluating = true\n try {\n recalculateWorkbook(sheet)\n } finally {\n storage.evaluating = false\n }\n sheet.notifyLayoutChange()\n}\n\nexport const FormulaExtension = Extension.create<FormulaStorage>({\n name: 'formula',\n priority: 10,\n\n addStorage() {\n return {\n evaluating: false,\n dependents: new Map(),\n sheet: null,\n }\n },\n\n addCommands(ctx: ExtensionCommandContext) {\n const boundSheet = ctx.sheet\n\n return {\n setCellValue: (props: { r: number; c: number; value: string }) => {\n return ({ state }: CommandContext) => {\n const raw = props.value\n const sheetId = boundSheet.getActiveSheetId()\n const ids = state.resolveCellIds(props.r, props.c)\n\n if (isFormulaInput(raw)) {\n const fctx = createFormulaContext(boundSheet)\n const internal = displayFormulaToInternal(raw, fctx, sheetId)\n const result = evaluateFormulaString(internal, fctx)\n state.setCell(props.r, props.c, cellPatchFromFormulaResult(internal, result))\n if (ids) {\n registerFormulaDeps(\n sheetId,\n ids.rowId,\n ids.colId,\n internal,\n fctx,\n this.storage.dependents,\n )\n }\n } else {\n const num = Number(raw)\n const v: string | number = !Number.isNaN(num) && raw !== '' ? num : raw\n state.setCell(props.r, props.c, {\n v,\n m: raw,\n ef: undefined,\n em: undefined,\n })\n const cell = state.getCell(props.r, props.c)\n cell?.delete('f')\n if (ids) {\n const tk = depKey(sheetId, ids.rowId, ids.colId)\n for (const set of this.storage.dependents.values()) set.delete(tk)\n }\n }\n\n return true\n }\n },\n\n setCellFormula: (props: { r: number; c: number; formula: string }) => {\n return ({ state }: CommandContext) => {\n const display = props.formula.startsWith('=') ? props.formula : `=${props.formula}`\n const fctx = createFormulaContext(boundSheet)\n const sheetId = boundSheet.getActiveSheetId()\n const internal = displayFormulaToInternal(display, fctx, sheetId)\n const result = evaluateFormulaString(internal, fctx)\n const ids = state.resolveCellIds(props.r, props.c)\n state.setCell(props.r, props.c, cellPatchFromFormulaResult(internal, result))\n if (ids) {\n registerFormulaDeps(\n sheetId,\n ids.rowId,\n ids.colId,\n internal,\n fctx,\n this.storage.dependents,\n )\n }\n return true\n }\n },\n\n recalculateFormulas: () => {\n return () => {\n this.storage.evaluating = true\n try {\n recalculateWorkbook(boundSheet)\n } finally {\n this.storage.evaluating = false\n }\n return true\n }\n },\n\n insertRows: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.insertRows(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n deleteRows: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.deleteRows(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n insertCols: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.insertCols(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n deleteCols: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.deleteCols(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n }\n },\n\n onInit(this: Extension<FormulaStorage>, sheet: Sheet) {\n this.storage.sheet = sheet\n this.storage.evaluating = true\n try {\n normalizeWorkbookFormulas(sheet, this.storage.dependents)\n recalculateWorkbook(sheet)\n } finally {\n this.storage.evaluating = false\n }\n },\n\n onCellChange(this: Extension<FormulaStorage>, r: number, c: number) {\n if (this.storage.evaluating || !this.storage.sheet) return\n updateDependents(\n this.storage.sheet,\n this.storage.sheet.getActiveSheetId(),\n r,\n c,\n this.storage.dependents,\n )\n },\n})\n\nexport function getFormulaHighlights(sheet: Sheet, formula: string) {\n if (!isFormulaInput(formula)) return []\n const ctx = createFormulaContext(sheet)\n return buildHighlightsFromFormula(formula, ctx)\n}\n\nexport type { FormulaRangeHighlight } from './engine'\n"]}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@speed-sheet/extension-formula",
3
+ "version": "0.1.1",
4
+ "type": "module",
5
+ "description": "Formula parsing and calculation for speed-sheet",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "@formulajs/formulajs": "^4.4.0",
20
+ "@speed-sheet/core": "^0.1.1",
21
+ "@speed-sheet/shared": "^0.1.1"
22
+ },
23
+ "devDependencies": {
24
+ "tsup": "^8.3.0",
25
+ "typescript": "^5.6.0",
26
+ "vitest": "^2.1.0"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "scripts": {
32
+ "build": "tsup",
33
+ "dev": "tsup --watch",
34
+ "test": "vitest run",
35
+ "clean": "rm -rf dist"
36
+ }
37
+ }