You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定区域字符串转为公式实现表格面积计算

解决方法

优先推荐:表格公式实现(无需脚本)

直接用Google表格内置公式就能实现自动计算,无需编写脚本,且修改B列内容后C列会自动更新:

方法1:基础公式(手动下拉)

在C2单元格输入以下公式,然后拖动单元格右下角的填充柄下拉到需要计算的行:

=PRODUCT(SPLIT(B2, "x"))
  • SPLIT(B2, "x"):将B2的字符串按"x"拆分成两个数字(如63.5和88)
  • PRODUCT():计算拆分后两个数字的乘积

方法2:数组公式(自动应用整列)

如果希望C列自动对B2及以下所有非空行计算,输入以下数组公式到C2即可:

=ARRAYFORMULA(IF(B2:B="", "", INDEX(SPLIT(B2:B, "x"),,1)*INDEX(SPLIT(B2:B, "x"),,2)))

或者使用更简洁的MAP函数(仅适用于新版Google表格):

=MAP(B2:B, LAMBDA(cell, IF(cell="",,PRODUCT(SPLIT(cell, "x")))))

脚本修改方案(若必须用脚本)

你的原脚本问题在于仅获取了B2单个单元格的值,然后将其设置为整个C列的公式,导致所有行都复用B2的计算结果。以下是两种修改后的脚本:

方案1:设置动态公式(支持自动更新)

该脚本会为C列每个单元格设置对应B行的公式,B列内容修改后C列自动更新:

function setFormula() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // 无数据时直接退出
  
  const formulas = [];
  // 循环生成每行的公式,引用对应行的B列
  for (let i = 2; i <= lastRow; i++) {
    formulas.push([`=SUBSTITUTE(B${i}, "x", "*")`]);
  }
  
  // 将公式批量写入C2到C最后一行
  sheet.getRange(2, 3, lastRow - 1, 1).setFormulas(formulas);
}

方案2:直接计算值填充(一次性计算,不自动更新)

该脚本会直接计算出结果并填充到C列,适合不需要后续自动更新的场景:

function calculateArea() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return;
  
  // 获取B列所有数据
  const sourceValues = sheet.getRange(2, 2, lastRow - 1, 1).getValues();
  const results = [];
  
  // 逐行计算面积
  for (const row of sourceValues) {
    const value = row[0];
    if (value) {
      // 替换x为*后计算乘积
      const area = eval(value.replace('x', '*'));
      results.push([area]);
    } else {
      results.push(['']);
    }
  }
  
  // 将结果批量写入C列
  sheet.getRange(2, 3, lastRow - 1, 1).setValues(results);
}

内容的提问来源于stack exchange,提问作者kq76

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:46:10