公式写入规范
核心原则:用 .Formula 写公式,不用 .Value2 写计算结果
// ✅ 正确:写入公式,Excel 自动计算
ws.Range("D2").Formula = "=B2*C2";
ws.Range("D20").Formula = "=SUM(D2:D19)";
// ❌ 错误:用 JS 算好再写入值(用户无法调参)
ws.Range("D2").Value2 = b2 * c2;
公式拖填(批量写入)
// 方法1: 逐行写入(最可靠)
for (var r = 2; r <= lastRow; r++) {
ws.Range("D" + r).Formula = "=B" + r + "*C" + r;
}
// 方法2: 首行写入 + AutoFill
ws.Range("D2").Formula = "=B2*C2";
ws.Range("D2").AutoFill(ws.Range("D2:D" + lastRow));
常用公式模板
| 场景 |
公式 |
| 求和 |
=SUM(B2:B100) |
| 条件求和 |
=SUMIF(A2:A100,"条件",B2:B100) |
| 多条件求和 |
=SUMIFS(C2:C100,A2:A100,"条件1",B2:B100,">0") |
| 计数 |
=COUNTA(A2:A100) |
| 条件计数 |
=COUNTIF(A2:A100,"条件") |
| 平均值 |
=AVERAGE(B2:B100) |
| 查找匹配 |
=VLOOKUP(查找值,表区域,列号,0) |
| 灵活查找 |
=INDEX(返回区域,MATCH(查找值,查找区域,0)) |
| 条件判断 |
=IF(条件,"是","否") |
| 嵌套判断 |
=IF(A2>90,"优",IF(A2>60,"及格","不及格")) |
| 百分比 |
=B2/SUM(B$2:B$100) |
| 环比增长 |
=(B3-B2)/B2 |
| 排名 |
=RANK(B2,B$2:B$100) |
| 文本拼接 |
=A2&"-"&B2 |
公式纠错方法
// 读取公式内容(不是值)
var formula = ws.Range("D2").Formula;
// 常见错误及修复思路
// #VALUE! → 数据类型不匹配,检查是否文本混在数字中
// #REF! → 引用了被删除的单元格
// #NAME? → 函数名拼写错误或不存在
// #DIV/0! → 除数为零,用 =IF(B2=0,0,A2/B2)
// #N/A → VLOOKUP 找不到值,用 =IFERROR(VLOOKUP(...),"未找到")
WPS 特有注意事项
- WPS 中
.FormulaR1C1 可能不稳定,优先用 .Formula(A1 格式)
- 数组公式
{=...} 在 WPS 加载项中支持有限,优先用辅助列拆解
- 跨工作表引用格式:
='表名'!A1
- 公式中的中文引号会导致错误,确保用英文双引号
1---2name: formula-operations3description: 公式运算规范 — .Formula 写入、常用公式模板、纠错方法、WPS 特有限制4---56## 公式写入规范78### 核心原则:用 .Formula 写公式,不用 .Value2 写计算结果910```javascript11// ✅ 正确:写入公式,Excel 自动计算12ws.Range("D2").Formula = "=B2*C2";13ws.Range("D20").Formula = "=SUM(D2:D19)";1415// ❌ 错误:用 JS 算好再写入值(用户无法调参)16ws.Range("D2").Value2 = b2 * c2;17```1819### 公式拖填(批量写入)2021```javascript22// 方法1: 逐行写入(最可靠)23for (var r = 2; r <= lastRow; r++) {24 ws.Range("D" + r).Formula = "=B" + r + "*C" + r;25}2627// 方法2: 首行写入 + AutoFill28ws.Range("D2").Formula = "=B2*C2";29ws.Range("D2").AutoFill(ws.Range("D2:D" + lastRow));30```3132### 常用公式模板3334| 场景 | 公式 |35|------|------|36| 求和 | `=SUM(B2:B100)` |37| 条件求和 | `=SUMIF(A2:A100,"条件",B2:B100)` |38| 多条件求和 | `=SUMIFS(C2:C100,A2:A100,"条件1",B2:B100,">0")` |39| 计数 | `=COUNTA(A2:A100)` |40| 条件计数 | `=COUNTIF(A2:A100,"条件")` |41| 平均值 | `=AVERAGE(B2:B100)` |42| 查找匹配 | `=VLOOKUP(查找值,表区域,列号,0)` |43| 灵活查找 | `=INDEX(返回区域,MATCH(查找值,查找区域,0))` |44| 条件判断 | `=IF(条件,"是","否")` |45| 嵌套判断 | `=IF(A2>90,"优",IF(A2>60,"及格","不及格"))` |46| 百分比 | `=B2/SUM(B$2:B$100)` |47| 环比增长 | `=(B3-B2)/B2` |48| 排名 | `=RANK(B2,B$2:B$100)` |49| 文本拼接 | `=A2&"-"&B2` |5051### 公式纠错方法5253```javascript54// 读取公式内容(不是值)55var formula = ws.Range("D2").Formula;5657// 常见错误及修复思路58// #VALUE! → 数据类型不匹配,检查是否文本混在数字中59// #REF! → 引用了被删除的单元格60// #NAME? → 函数名拼写错误或不存在61// #DIV/0! → 除数为零,用 =IF(B2=0,0,A2/B2)62// #N/A → VLOOKUP 找不到值,用 =IFERROR(VLOOKUP(...),"未找到")63```6465### WPS 特有注意事项6667- WPS 中 `.FormulaR1C1` 可能不稳定,优先用 `.Formula`(A1 格式)68- 数组公式 `{=...}` 在 WPS 加载项中支持有限,优先用辅助列拆解69- 跨工作表引用格式:`='表名'!A1`70- 公式中的中文引号会导致错误,确保用英文双引号