使用脚本检测 Google 表格中的公式错误

Ale*_*lex 3 google-apps-script

我的最终目标是在这里,但是因为我没有得到任何答复,所以我开始从头开始学习(无论如何可能是最好的)。基本上,我想要一个脚本来识别错误并修复它们

嗯,第一部分是能够识别错误。有没有办法使用 Google Script 来识别单元格中是否有错误,并因此返回特定消息?或者我是否只需要做一个 if/else 说“如果单元格值为‘#N/A’,则执行此操作”,加上“如果单元格值为‘#ERROR’,则执行此操作”,继续出现各种错误?. 基本上我想要 ISERROR(),但在脚本中

teh*_*wch 5

使用辅助函数来抽象掉这些肮脏之处:

function isError_(cell) {
  // Cell is a value, e.g. came from `range.getValue()` or is an element of an array from `range.getValues()`
  const errorValues = ["#N/A", "#REF", .... ];
  for (var i = 0; i < errorValues.length; ++i)
    if (cell == errorValues[i])
      return true;

  return false;
}

function foo() {
  const vals = SpreadsheetApp.getActive().getSheets()[0].getDataRange().getValues();
  for (var row = 0; row < vals.length; ++row) {
    for (var col = 0; col < vals[0].length; ++col) {
      if (isError_(vals[row][col])) {
        Logger.log("Array element (" + row + ", " + col + ") is an error value.");
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用Array#indexOf的辅助函数:

function isError_(cell) {
  // Cell is a value, e.g. came from `range.getValue()` or is an element of an array from `range.getValues()`
  // Note: indexOf uses strict equality when comparing cell to elements of errorValues, so make sure everything's a primitive...
  const errorValues = ["#N/A", "#REF", .... ];
  return (errorValues.indexOf(cell) !== -1);
}
Run Code Online (Sandbox Code Playgroud)

如果/当 Google Apps Script 升级为Array#includes,那将是比 更好的选择Array#indexOf

function isError_(cell) {
  // cell is a value, e.g. came from `range.getValue()` or is an element of an array from `range.getValues()`
  const errorValues = ["#N/A", "#REF", .... ];
  return errorValues.includes(cell);
}
Run Code Online (Sandbox Code Playgroud)

现在 v8 运行时可用,可以对上述代码片段(箭头函数等)进行许多其他更改,但请注意,不需要以这种方式更改内容。