【发布时间】:2021-12-19 12:58:11
【问题描述】:
只要E列(即数组[4])中的任何单元格被编辑,下面的脚本就会运行。它的唯一目的是向已编辑行的后续空单元格添加一些附加信息。但是,我的脚本不仅将这些信息添加到同一行中为空的下一个单元格,而是重新设置所有后续单元格的值,即使这些后续单元格中已经包含了一些值。有人可以告诉我我在这里做错了什么以及如何解决吗?很明显,我在 IF 语句 中做错了什么,但老实说我不知道那可能是什么:(
非常感谢您的帮助和提示!!!
这是脚本:
function addAdditionalInfo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('SHEET_ID');
var data = s.getDataRange().getValues();
var data_len = data.length;
for (var i = 0; i < data_len; i++) {
if (data[i][4] == "COMPLETED") {
s.getRange(i + 1, 6).setValue("name");
s.getRange(i + 1, 7).setValue("street");
s.getRange(i + 1, 8).setValue("street number");
s.getRange(i + 1, 9).setValue("zip code");
s.getRange(i + 1, 10).setValue("country");
s.getRange(i + 1, 11).setValue("maternal language");
s.getRange(i + 1, 12).setValue("second language");
s.getRange(i + 1, 13).setValue("-");
}
else if (data[i][4] == "APPROVAL") {
s.getRange(i + 1, 6).setValue("name of supervisor)");
s.getRange(i + 1, 7).setValue("email of supervisor");
s.getRange(i + 1, 8).setValue("tel of supervisor");
s.getRange(i + 1, 9).setValue("maternal language of supervisor");
s.getRange(i + 1, 10).setValue("second language of supervisor");
s.getRange(i + 1, 11).setValue("assistant of the supervisor");
s.getRange(i + 1, 12).setValue("status of the approval process");
s.getRange(i + 1, 13).setValue("approval due date");
}
}
}
这里是触发器:
// The trigger is any manual change done in Column E, starting at row 3 of that column
function onEdit(e) {
if (
e.source.getSheetName() == "SHEET_ID" &&
e.range.columnStart == 5 &&
e.range.columnEnd == 5 &&
e.range.rowStart >= 3 &&
e.range.rowEnd <= 3000
) {
addAdditionalInfo()
}
}
【问题讨论】:
-
@Tanaike - 如果你在附近,能给我一些提示和/指向正确的方向吗?你对我有什么建议吗,@Cooper?那真是太好了。谢谢:)
-
您认为
e.range.rowStart包含什么?e.range所指的范围是多少? -
@TheMaster -
e.range.rowStart在 E 列中,包含与 E 列中所有其他单元格相同的下拉列表。e.range.rowStart也是同一列 E 中的第一个非空行。一旦用户在该列 E 中选择了一个选项,工作表中发生的任何更改都会开始。我是否完全回答了您的问题?谢谢:) -
@TheMaster -
e.range指的是已编辑的单元格。你似乎暗示我根本不应该使用它?或者我在这里缺少什么?谢谢:) -
我的意思是你根本不需要循环。当您已经拥有需要检查的行和范围时,为什么要遍历每一行?
标签: javascript for-loop google-apps-script