XLSX
公式
普通公式、共享公式和数组公式
普通公式
为单元格设置公式,并可选提供缓存结果值:
{
"worksheets": [
{
"name": "Sheet1",
"children": [
{
"cells": [
{ "value": "Apples" },
{ "value": 10 },
{ "value": 2.5 },
{ "formula": { "formula": "B2*C2" }, "value": 25 }
]
},
{
"cells": [
{ "value": "Bananas" },
{ "value": 5 },
{ "value": 3.0 },
{ "formula": { "formula": "B3*C3" }, "value": 15 }
]
},
{
"cells": [
{ "value": "Total" },
{ "formula": { "formula": "SUM(B2:B3)" } },
{ "formula": { "formula": "SUM(C2:C3)" } },
{ "formula": { "formula": "SUM(D2:D3)" } }
]
}
]
}
]
}
import { Workbook, Packer } from "@office-open/xlsx";
const wb = new Workbook({
worksheets: [
{
name: "Sheet1",
children: [
{
cells: [
{ value: "Apples" },
{ value: 10 },
{ value: 2.5 },
{ formula: { formula: "B2*C2" }, value: 25 },
],
},
{
cells: [
{ value: "Bananas" },
{ value: 5 },
{ value: 3.0 },
{ formula: { formula: "B3*C3" }, value: 15 },
],
},
{
cells: [
{ value: "Total" },
{ formula: { formula: "SUM(B2:B3)" } },
{ formula: { formula: "SUM(C2:C3)" } },
{ formula: { formula: "SUM(D2:D3)" } },
],
},
],
},
],
});
省略 value 时 Excel 会在打开时自动重新计算。
共享公式
当多个单元格使用相同结构的公式时,可用共享公式减少重复:
{
"worksheets": [
{
"name": "Sheet1",
"children": [
{ "cells": [{ "value": "X" }, { "value": "Y" }, { "value": "X+Y" }] },
{
"rowNumber": 2,
"cells": [
{ "value": 1 },
{ "value": 2 },
{
"reference": "C2",
"formula": {
"formula": "A2+B2",
"type": "shared",
"reference": "C2:C4",
"sharedIndex": 0
},
"value": 3
}
]
},
{
"rowNumber": 3,
"cells": [
{ "value": 4 },
{ "value": 5 },
{
"reference": "C3",
"formula": { "formula": "", "type": "shared", "sharedIndex": 0 },
"value": 9
}
]
},
{
"rowNumber": 4,
"cells": [
{ "value": 6 },
{ "value": 7 },
{
"reference": "C4",
"formula": { "formula": "", "type": "shared", "sharedIndex": 0 },
"value": 13
}
]
}
]
}
]
}
{
rowNumber: 2,
cells: [
{ value: 1 },
{ value: 2 },
{
reference: "C2",
formula: { formula: "A2+B2", type: "shared", reference: "C2:C4", sharedIndex: 0 },
value: 3,
},
],
},
// 后继单元格:无需公式文本和 reference,只需相同的 sharedIndex
{
rowNumber: 3,
cells: [
{ value: 4 },
{ value: 5 },
{ reference: "C3", formula: { formula: "", type: "shared", sharedIndex: 0 }, value: 9 },
],
},
{
rowNumber: 4,
cells: [
{ value: 6 },
{ value: 7 },
{ reference: "C4", formula: { formula: "", type: "shared", sharedIndex: 0 }, value: 13 },
],
},
共享公式的要点:
- 定义单元格:包含公式文本、
reference(覆盖完整范围)和sharedIndex - 后继单元格:
formula为空字符串,相同sharedIndex,不设置reference
数组公式
数组公式返回一个值数组,覆盖多个单元格:
{
"worksheets": [
{
"name": "Sheet1",
"children": [
{ "cells": [{ "value": "X" }, { "value": "Y" }] },
{ "cells": [{ "value": 1 }, { "value": 10 }] },
{ "cells": [{ "value": 2 }, { "value": 20 }] },
{
"rowNumber": 5,
"cells": [
{
"reference": "A5",
"formula": { "formula": "A2:A4*B2:B4", "type": "array", "reference": "A5:B6" },
"value": 10
},
{
"reference": "B5",
"formula": { "formula": "", "type": "array", "reference": "A5:B6" },
"value": 100
}
]
},
{
"rowNumber": 6,
"cells": [
{
"reference": "A6",
"formula": { "formula": "", "type": "array", "reference": "A5:B6" },
"value": 20
},
{
"reference": "B6",
"formula": { "formula": "", "type": "array", "reference": "A5:B6" },
"value": 200
}
]
}
]
}
]
}
// 定义单元格:包含公式文本和 reference
{
rowNumber: 5,
cells: [
{ reference: "A5", formula: { formula: "A2:A4*B2:B4", type: "array", reference: "A5:B6" }, value: 10 },
{ reference: "B5", formula: { formula: "", type: "array", reference: "A5:B6" }, value: 100 },
],
},
// 后继单元格:每个单元格都带 reference
{
rowNumber: 6,
cells: [
{ reference: "A6", formula: { formula: "", type: "array", reference: "A5:B6" }, value: 20 },
{ reference: "B6", formula: { formula: "", type: "array", reference: "A5:B6" }, value: 200 },
],
},
数组公式的要点:
- 定义单元格:包含公式文本和
reference(覆盖所有结果单元格) - 后继单元格:
formula为空字符串,但仍需相同的reference - 范围内的每个单元格都必须存在,否则 Excel 会报错
FormulaOptions 参考
| 选项 | 类型 | 说明 |
|---|---|---|
formula | string | 公式表达式,如 "SUM(A1:A10)" |
type | string | 公式类型(默认 "normal",见下表) |
reference | string | 公式范围,如 "C1:C10" |
sharedIndex | number | 共享公式组索引(共享公式必需) |
公式类型:
| 类型 | 说明 |
|---|---|
normal | 普通公式 |
shared | 共享公式 |
array | 数组公式 |