我正在进行一个主表项目,使用本教程中的指导方针:https://youtu.be/SyB4MVkWV3c
基本上,这个脚本在我的文档中的每个工作表(选项卡)中过滤列"E“,每次它用"Pendiente”这个词点击时,都会在"Master“选项卡上列出一些值。目标是在我的主表中列出所有待定的订单,每当订单完全填写时,从任何选项卡中删除"Pendiente“(未决)单元格,这样它就不会显示在我的主选项卡上。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ignoreSheets = ["Master"];
const allSheets = ss.getSheets();
const filteredListOfSheets = allSheets.filter(s => ignoreSheets.indexOf(s.getSheetName()) == -1 )
let formulaArray = filteredListOfSheets.map(s => `filter({'${s.getSheetName()}'!B2:E, "${s.getSheetName()} / Fila "&ROW('${s.getSheetName()}'!C2:C)},(ISNUMBER('${s.getSheetName()}'!C2:C)),'${s.getSheetName()}'!E2:E="Pendiente")`)
let formulaText = "={" + formulaArray.join(";") + "}";
//console.log(formulaText);
ss.getSheetByName("Master").getRange("A2").setFormula(formulaText);这是很好的工作,直到我回到某一点,例如,并删除"pendiente“这个词从任何选项卡(不同于主选项卡)。从此,公式开始显示此错误:
“在array_literal中,数组文字缺少一个或多个行的值”
例如,我知道当有合并的单元格时会出现这种错误,但这不是我的情况。另外,我已经检查过了,所有的选项卡都有相同的列数。由此得出的公式表明:
={filter({'Ventas 17-9‘’!B2:e,"Ventas 17-9/ Fila "&ROW('Ventas 17-9'!C2:C)},( 'Ventas 17-9‘!C2:C),’Ventas 17-9‘!E2:E=“Pendiente”);
奇怪的是,在我开始删除这个"Pendiente“单元之前,脚本工作得很好。也许这和我的共享配置有关吧?此脚本是从Gsuite帐户编写的,电子表格是与非Gsuite用户共享的。
截图:主标签

“示例”选项卡,从中提取信息。

}
发布于 2020-09-29 08:16:31
您将得到该错误,因为公式filter没有在您的一个工作表中找到匹配的情况(如果工作表不包含Pendiente,您将遇到此错误),因此它返回一个占用单个单元格值的N/A。
这是一个格式错误的数组,因为在filter匹配搜索的工作表上,您要打印5列(您正在拖动的数据),而对于没有找到Pendiente的列,则只返回一个N/A值。
要解决这个问题,您可以将您的filter公式包装在一个iferror中,它将将N/A值更改为5个值,这些值将与实际匹配筛选器的其他工作表匹配。重要的是,为了避免此错误,您的所有行都有相同的列数。
因此,要解决这个问题,请将脚本的行更改为以下内容(当然,不是0,您可以打印任何想要的内容,但必须在所有5列中打印):
let formulaArray = filteredListOfSheets.map(s => `iferror(filter({'${s.getSheetName()}'!B2:E, "${s.getSheetName()} / Fila "&ROW('${s.getSheetName()}'!C2:C)},(ISNUMBER('${s.getSheetName()}'!C2:C)),'${s.getSheetName()}'!E2:E="Pendiente"),{"","","","",""})`)
参考资料:
https://stackoverflow.com/questions/64105712
复制相似问题