javascript - 谷歌脚本如果函数在迭代期间不会调用
问题描述
我的工作表有一个 Vlookup,它检查名称是否存在,如果不存在,则会产生错误消息。以下代码旨在检查每个单元格是否包含错误消息,以及是否通过附加到两个数组来将其标记给用户。一个包含错误名称,一个包含错误行。我知道,通过 Logger.log(),迭代有效,但由于某种原因,函数中没有调用 IF 语句。
function nameCheck(){
var numEmail = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D2').getValue();
Logger.log(numEmail)
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Input');
var startRow = 1;
var numRows = numEmail
var invalid = []
var rowWithError = []
var dataRange = ss.getRange(startRow, 9, numRows, 9);
var data = dataRange.getValues();
for (var i in data){
var row = data[i];
Logger.log(row)
if (row == "Please Check Name, , , , , , , , ") {
var wrongName = ss.getRange('A' + row)
var invalid = invalid.push(wrongName)
var rowWithError = rowWithError.push(row[i])
}
else{}
}
if (invalid.length != 0){
var ui = SpreadsheetApp.getUi();
var ui = SpreadsheetApp.getUi();
ui.alert(
"The sheet had detected an invalid Name - '" + invalid + "', please check row " + rowWithError + " and try again.",)
}
else{}
}
任何帮助都会很棒,因为我是新手
解决方案
修改点:
- 在您的脚本中,
data
从 的范围内检索ss.getRange(startRow, 9, numRows, 9)
,并且row
是data[i]
二维数组。在这种情况下,row
是具有 9 个元素的一维数组。由此,if (row == "Please Check Name, , , , , , , , ") {
总是假的。invalid.length
总是如此0
。我认为这可能是您的问题的原因。 - 从您的角度
"Please Check Name, , , , , , , , "
来看if (row == "Please Check Name, , , , , , , , ") {
,我认为该值可能是该行的文本连接单元格值。 push
返回数组长度。所以var invalid = invalid.push(wrongName)
和var rowWithError = rowWithError.push(row[i])
都运行,invalid
并且rowWithError
是数组长度。- 我认为这
var ui = SpreadsheetApp.getUi();
可以宣布一次。
如果我的理解是正确的,那么下面的修改呢?
修改后的脚本:
从:for (var i in data){
var row = data[i];
Logger.log(row)
if (row == "Please Check Name, , , , , , , , ") {
var wrongName = ss.getRange('A' + row)
var invalid = invalid.push(wrongName)
var rowWithError = rowWithError.push(row[i])
}
else{}
}
if (invalid.length != 0){
var ui = SpreadsheetApp.getUi();
var ui = SpreadsheetApp.getUi();
ui.alert(
"The sheet had detected an invalid Name - '" + invalid + "', please check row " + rowWithError + " and try again.",)
}
else{}
至:
data.forEach((row, i) => {
if (row.join(",") == "Please Check Name, , , , , , , , ") {
var wrongName = ss.getRange('A' + (i + 1)).getValue();
invalid.push(wrongName);
rowWithError.push(row); // or rowWithError.push(row.join(","))
}
if (invalid.length != 0){
var ui = SpreadsheetApp.getUi();
ui.alert(
"The sheet had detected an invalid Name - '" + invalid.pop() + "', please check row " + rowWithError.pop() + " and try again.",)
}
});
笔记:
根据您的问题,我无法理解您的实际电子表格。因此,当上述建议的修改不是直接解决方案时,您能否提供您的示例电子表格以复制您的问题,并提供您目标的详细信息?借此,我想确认一下。
当然,在您的情况下,我认为也可以使用字符串变量来代替数组,如下所示。
var invalid = ""; var rowWithError = ""; data.forEach((row, i) => { if (row.join(",") == "Please Check Name, , , , , , , , ") { var wrongName = ss.getRange('A' + (i + 1)).getValue(); invalid = wrongName; rowWithError = row.join(","); } if (invalid.length != 0){ var ui = SpreadsheetApp.getUi(); ui.alert( "The sheet had detected an invalid Name - '" + invalid + "', please check row " + rowWithError + " and try again.",) } });
参考:
推荐阅读
- vba - 如何使用 VBA 删除 powerpoint 文件中的所有嵌入视频?
- python - 从一系列条件中检查是否还有
- sql - 我不知道为什么会出错,我是学生,我确实喜欢我的老师,但他执行了它,我的 SQL 表中出现错误
- python - Python Tkinter 在按钮中调用带有参数的函数
- python - 为什么我的 Keras 模型没有按照指定的所有 5 个 epoch 加载?
- c - 多变量赋值中的左值和右值
- isabelle - Isabelle:mixfix 注释中的优先级太多
- c# - 如何在 uwp 的滚动查看器中获取滚动条高度?
- php - 无法使用 Teams Graph API php 发送 chatMessage
- vue.js - 是否可以将 Nuxt 包导入 VuejS 项目?