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

时间:2019-02-07 11:27:29

标签: google-apps-script google-sheets google-sheets-macros

我是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);

1 个答案:

答案 0 :(得分:0)

通过批处理(并遵循official best practices)执行此操作要快得多。将这些read the values转换成“ 2D” JavaScript数组(值数组),然后您就可以在内存中执行所有逻辑,而不必反复从slow Spreadsheet interface.

请求数据
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日志(可通过脚本编辑器的“查看”菜单访问)来监视宏和触发函数的错误。