我正在尝试使其自动运行,但是以当前形式,它只有在我手动运行代码的情况下才有效。
此工作表中还有另一个代码文件,该文件也使用onEdit,无论将G列选择为“ Complete”,然后将H列更改为“ shipped”,如何将相同的onEdit合并到此代码中或使其运行?
function addValidation() {
// Get the spreadsheet and active sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Get the data as an Array you can iterate and manipulate
var data = sheet.getDataRange().getValues();
var rule = SpreadsheetApp.newDataValidation().requireValueInList(["Complete"]).build();
// Loop the sheet
for(var i=0; i<data.length; i++) {
if(data[i][11] == "Complete") {
sheet.getRange(i+1, 8).clear().setDataValidation(rule);
} {
sheet.getRange(i+1, 8).clearDataValidations().setValue("Shipped");
}
}
}
答案 0 :(得分:3)
几件事:
在if
语句中,您没有检查G列-您正在检查K列(11)。如果要检查G,则需要将if更改为:
if(data[i][6].toString() == "Complete") {
...
}
您的逻辑倒退,您缺少else
关键字来运行替代方法。照原样,如果不与“完成”匹配,它将标记为“已发货”。交换语句以正确填充单元格值。
此外,循环中的字符串检查有些棘手。作为索引的单元格引用是对象,而不是字符串。您需要先使用.toString()
方法转换单元格,然后才能比较直字符串。
您的整个脚本应显示为:
function addValidation() {
// Get the spreadsheet and active sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Get the data as an Array you can iterate and manipulate
var data = sheet.getDataRange().getValues();
// Loop the sheet
for(var i=0; i<data.length; i++) {
// To change which columns you're testing, change the second value.
// ColG = 6, not 11.
// Convert data[i][6] using .toString() to compare the value
if(data[i][6].toString() == "Complete") {
// If it's "Complete," mark Col H as 'Shipped'
sheet.getRange(i+1, 8).setValue("Shipped");
} else {
// If you want something else to happen, add that here.
}
}
}
最后一步是为脚本启用触发器。如果您将函数命名为onEdit()
,则由于编辑是一个简单的脚本,因此它将自行运行。由于它名为addValidation
,因此您需要在UI中手动添加onEdit
触发器。转到“编辑”>“当前项目触发器”,然后单击右下角的“添加触发器”。按照UI中的步骤操作,脚本应自行运行。