如何检查 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
)方法遍历单元格,进行相同的比较。
备注
- 关于在自定义函数和一般 GAS 中使用全局变量。您 可以 使用它们,GAS 环境是一个 JavaScript 运行时,带有一个便利层,可以简化 Google API 的使用,几乎所有在 JS 中有效的东西在这里都有效。也就是说,请将全局变量视为不存在 - 除非您确切地知道自己在做什么。
参考文献
我正在使用这个脚本函数来检查我在 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
)方法遍历单元格,进行相同的比较。
备注
- 关于在自定义函数和一般 GAS 中使用全局变量。您 可以 使用它们,GAS 环境是一个 JavaScript 运行时,带有一个便利层,可以简化 Google API 的使用,几乎所有在 JS 中有效的东西在这里都有效。也就是说,请将全局变量视为不存在 - 除非您确切地知道自己在做什么。
参考文献