google-apps-script - 谷歌表格脚本:搜索任何有错误的单元格
问题描述
在电子表格中,我使用了近 2M 个单元格,这些单元格使用了很多函数,包括 ArrayFormulas 等跨越数千行。许多列基于之前的列进行计算,这些列也是计算的,因此错误会级联。
有没有办法使用 createTextFinder(),但将单元格的内容与 ERROR.TYPEs 数组进行比较?
或者除了遍历所有单元格之外没有更聪明的方法吗?虽然我可以做到这一点,但我确信有一种更有效的方法可以做到这一点。
解决方案
我找到了另一篇我改编的帖子,它在任何列(不是特定单元格)中都发现了错误,但这对我来说没问题,并且运行时间不长:
function c_FindCellErrors() {
// Author: Max Hugen
// Date: 2021-01-09
// Purpose: Log all columns in spreadsheet with an error
// Source: Tedinoz
// Link: https://stackoverflow.com/a/60848623/190925
const aErrors = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A", "#ERROR!"];
const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for ( i=0; i<sheets.length; i++) {
var sheet = sheets[i];
if ( !sheet.getLastRow() || !sheet.getLastColumn() ) {continue; } // in case it's a blank sheet
var dSheet = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues();
// loop though the columns
for (var col=0; col<dSheet[0].length; col++){
// create an array for the column
var aCol = dSheet.map( function(getCol) { return getCol[col]; } );
// loop through errors
for (var errNum=0; errNum<aErrors.length; errNum++){
// get the error
var errVal = aErrors[errNum]
// if the error exists in this column then response = true
if (aCol.includes(errVal) == true){
Logger.log('ERROR: Sheet: '+sheet.getName()+', Column: '+c_ColumnToLetter(col+1)+', Error: '+(errNum+1)+' - '+errVal);
} } } }
return;
}
推荐阅读
- python - 如何在灰度图像的python中生成图像在x和y方向上的高斯偏导数的联合直方图?
- javafx - J-Unit JavaFX Tookit 未初始化
- kotlin - 错误:Kotlin:[内部错误] java.rmi.UnmarshalException
- css - VueJs没有在变量类名上触发动画
- java - 来自网站的内容不会显示在我的 logcat 中
- postgresql - postgres 容器创建数据库但不创建表和添加数据
- jenkins - 无法从詹金斯控制台输出文件中获取值
- javascript - React-Hooks-如何使用 FlatList 为 renderItem 中的每个渲染项分配一个唯一的“ref”?
- javascript - 为什么 jQuery 项目不能在 Github 页面上运行?
- vue.js - 如何设置存储数据以检查 vuejs 中路由中的守卫?