google-apps-script - 谷歌应用脚​​本: Assign zero for empty cells

标签 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);

最佳答案

通过批处理操作执行此操作要快得多(并遵循 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 日志(可通过脚本编辑器的“查看”菜单访问)来监控宏和触发函数是否有错误。

关于google-apps-script - 谷歌应用脚​​本: Assign zero for empty cells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54572312/

相关文章:

javascript - 如何通过命名范围的验证在新列中设置值?

google-apps-script - Google 表格 setRowHeight() 自动调整,不调整大小以设置值

google-api - 是否有适用于新 Google 表格(电子表格)的 API?

google-sheets - 如何在 Google Sheet 中打印 Libre Barcode EAN13 字体文本

google-apps-script - 超过一万行的 TextFinder 实例的 findNext 出现服务错误

javascript - 在谷歌电子表格中连接日期和时间

google-apps-script - Google Apps 脚本 - HTML 服务 "createTemplateFromFile"无法在应用程序(电子表格等)内使用?

google-apps-script - 将空单元格排序到顶部

google-apps-script - 不为匿名用户显示 Google 电子表格自定义菜单