Google 应用程序脚本:为空单元格分配零

Google app scripts: Assign zero for empty cells

我是 Google Apps 脚本的新手,试图根据列的当前值和标志为列设置值。

  1. 如果 Flag = Y,则将 C1 中的值下限:

    C1 列值=23.9895
    期望值=23

  2. 如果 Flag = N 则舍入 C1 中的现有值:

    C1 列值=23.9895
    期望值=24

  3. 如果标志是 Y 或 N 则写入 0:

    C1 列值=空单元格
    期望值=0

我已经实现了下面的代码。它正在部分工作。前两个场景工作正常,但第三个场景失败。
当我尝试设置为零时,出现 #NUM! 错误而不是零。不知道该怎么做。

...
do {
  sRange = "Q" + iCt;
  if ((gDecimalInPrice == "Y") && (!isNaN(sheet.getRange(sRange).getValue()))) {
    sheet.getRange(sRange).setValue(Math.abs(parseInt(sheet.getRange(sRange).getValue())));
  } else if ((gDecimalInPrice == "N") && (!isNaN(sheet.getRange(sRange).getValue()))) {
    sheet.getRange(sRange).setValue(Math.abs(Math.round(sheet.getRange(sRange).getValue())));
  } else {
    sheet.getRange(sRange).setValue(sheet.getRange(sRange).getValue());
  }
  iCt = iCt + 1;
} while (iCt <= gRowCt);

通过批处理操作执行此操作要快得多(并遵循 official best practices). These read the values into a "2D" JavaScript array (an array of arrays of values), and then you can do all your logic in memory, rather than repeatedly requesting data from the

function foo() {
  const wb = SpreadsheetApp.getActive();
  const sheet = wb.getSheetByName("the sheet name");
  if (!sheet) throw new Error("Sheet with that name is missing");

  const lastRow = sheet.getLastRow();
  const flags = sheet.getRange("A1:A" + lastRow).getValues();
  const valueRange = sheet.getRange("Q1:Q" + lastRow);

  const newValues = valueRange.getValues().map(function (row, i) {
    return row.map(function (value) {
      var flag = flags[i][0];
      if (!flag || (value && isNaN(value))) // No "Y" or "N", or value is non-nullstring non-number, so return value as-is
        return value;
      else if (flag === "Y")
        return value ? Math.floor(parseFloat(value)) : 0;
      else if (flag === "N")
        return value ? Math.round(parseFloat(value)) : 0;
      else // Unknown flag value
        return value;
    });
  });
  // Write all processed values at once
  valueRange.setValues(newValues);
}

与往常一样,您应该通过查看 Stackdriver 日志(可通过脚本编辑器的 "View" 菜单访问)来监控宏和触发函数是否有错误。