如何检查 sheet 个单元格是否包含错误?

How to check if a sheet cells includes errors or not?

我正在使用这个脚本函数来检查我在 sheet 中的单元格函数是否有任何错误。

这是代码,但它似乎不起作用。当我在单元格中有错误时它一直说没有错误

var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourcename = "Sheet1";
  var source = ss.getSheetByName(sourcename);

  var cell = source.getRange("A1:AG30");

function isError2(cell) { 
  const errorValues = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A","#ERROR!"];
  if (errorValues.includes(cell) != true) {
  Logger.log("no error");
  } else{
    Logger.log("some error");
  }
  
}

function isError2() {  
var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sourcename = "Sheet1";
      var source = ss.getSheetByName(sourcename);

      var cell = source.getRange("A1:AG30");
      const errorValues = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A","#ERROR!"];
      if (errorValues.includes(cell) != true) {
      Logger.log("no error");
      } else{
        Logger.log("some error");
      }

    }

更新了方法,但仍然无法获得所需的输出

var mysheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
 var sheet1 = SpreadsheetApp.setActiveSheet(mysheet);

function findErrors(sheet) {
   const errorValues = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A","#ERROR!"];
    
  var singleSheetArray = [];

  var name = sheet1.getName();
   
  // how many cells in the sheet currently
  var maxRows = sheet1.getMaxRows();
  var maxCols = sheet1.getMaxColumns();
  
  var totalCells = maxRows * maxCols;
  
  // how many cells have data in them
  var r = sheet1.getLastRow();
  var c = sheet1.getLastColumn();
  var data_counter = r * c;
  
  if (data_counter !== 0) {
  
    var dataRange = sheet1.getRange(1,1,r,c);
    var dataValues = dataRange.getValues();

    dataValues.forEach(function(row) {
      row.forEach(function(cell) {
        if ((errorValues.indexOf(cell) === -1) )  {
           SpreadsheetApp.getUi().alert("no errors in "+cell);          
          data_counter --;
        } 
          
      });
    });  
  }
}

尝试将 4 个变量移到您的函数中。 Apps 脚本不支持全局变量。因此该函数无法识别 var 单元格。

编辑:

问题

Unable to check whether the cell has an error

说明

您遇到的问题是简单的类型不匹配。 getRange() 方法 return 是 Range 的实例,而您尝试将其与 errorValues 数组的成员进行比较,该数组由 字符串 。因此,errorValues.includes(cell) 将始终是 false,因此条件语句执行的第一个块。

解决方案

在范围上使用getValues(),它会return你一个二维值数组。如果您只对一行感兴趣(您可能是),请将其提取并使用 some(或 every)方法遍历单元格,进行相同的比较。

备注

  1. 关于在自定义函数和一般 GAS 中使用全局变量。您 可以 使用它们,GAS 环境是一个 JavaScript 运行时,带有一个便利层,可以简化 Google API 的使用,几乎所有在 JS 中有效的东西在这里都有效。也就是说,请将全局变量视为不存在 - 除非您确切地知道自己在做什么。

参考文献

  1. getRange方法reference
  2. getValues方法reference
  3. 自定义函数guide
  4. MDN 上的
  5. every 方法 reference(参见 some