我是Google Script的新手。我想创建一个函数来检查内容是否已正确填充。如果某些列不包含特定单词,或者当列L的值为“Y”时它们不包含任何内容,则它应相应地显示警告消息。如果一切顺利,请显示消息“广告系列信息已正确添加!”
这是我写的脚本:
function Validation() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
for (var i = 0; i < range.length; i++) {
var campaign_live = range.getCell(i, 12).getValue();
var test_type = range.getCell(i, 6).getValue();
if (campaign_live == "Y" && test_type != "Subject" && test_type!= "Sender") {
Browser.msgBox("Wrong Test Type in Column G, please check.", Browser.Buttons.OK_CANCEL);
}
var Template = range.getCell(i, 8).getValue();
if (campaign_live == "Y" && Template != "HTML" && Template!= "TEXT") {
Browser.msgBox("Wrong Template in Column H, please check.", Browser.Buttons.OK_CANCEL);
}
var Sender = range.getCell(i, 9).getValue();
if (campaign_live == "Y" && Sender == "" ) {
Browser.msgBox("Missing Sender in Column I, please check.", Browser.Buttons.OK_CANCEL);
}
var Subject = range.getCell(i, 10).getValue();
if (campaign_live == "Y" && Subject == "" ) {
Browser.msgBox("Missing Subject in Column J, please check.", Browser.Buttons.OK_CANCEL);
}
var Content = range.getCell(i, 11).getValue();
if (campaign_live == "Y" && Content == "" ) {
Browser.msgBox("Missing Content in Column K, please check.", Browser.Buttons.OK_CANCEL);
}
}
Browser.msgBox("Campaign info's been added correctly!");
}
可以执行脚本,但是,无论我在循环中指示的单元格中有什么内容,它都只显示消息“广告系列信息已正确添加!”。在我看来,循环部分在此过程中完全被忽略。
你知道为什么它不起作用吗? 非常感谢您的回应。
答案 0 :(得分:1)
有一些问题。最大的问题是您无法使用range.length
。 range
是一个Object,而不是一个Array。相反,请使用range.getHeight()
。
function Validation() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
var ok = true;
for (var i = 1;i <= range.getHeight(); i++) {
var campaign_live = range.getCell(i, 12).getValue();
var test_type = range.getCell(i, 7).getValue();
if (campaign_live == "Y" && test_type != "Subject" && test_type!= "Sender"){
ok = false;
Browser.msgBox("Wrong Test Type in Column G, please check.", Browser.Buttons.OK_CANCEL);
}
var Template = range.getCell(i, 8).getValue();
if (campaign_live == "Y" && Template != "HTML" && Template!= "TEXT"){
ok = false;
Browser.msgBox("Wrong Template in Column H, please check.", Browser.Buttons.OK_CANCEL);
}
var Sender = range.getCell(i, 9).getValue();
if (campaign_live == "Y" && Sender == "" ) {
ok = false;
Browser.msgBox("Missing Sender in Column I, please check.", Browser.Buttons.OK_CANCEL);
}
var Subject = range.getCell(i, 10).getValue();
if (campaign_live == "Y" && Subject == "" ) {
ok = false;
Browser.msgBox("Missing Subject in Column J, please check.", Browser.Buttons.OK_CANCEL);
}
var Content = range.getCell(i, 11).getValue();
if (campaign_live == "Y" && Content == "" ) {
ok = false;
Browser.msgBox("Missing Content in Column K, please check.", Browser.Buttons.OK_CANCEL);
}
}
if (ok) {
Browser.msgBox("Campaign info's been added correctly!");
}
}
我做了其他三项修改:
ok
布尔值。这样可以防止&#34;广告系列信息被正确添加!&#34;如果出现错误信息。test_type
,您选择了getCell(1, 6)
,但是选择了F列,而不是G. i
现在从1开始,因为范围是1索引的。 (数组是0索引的。)答案 1 :(得分:0)
未输入for循环,因为循环条件未评估为true,因为Range
类没有length
属性(导致比较{{1} })。
此外,您的代码还有其他问题可以改进
0 < undefined
而不是getMax___()
。最后一个&#39;版本只考虑包含数据的行,而不考虑工作表中任何可能的行,即使完全没有数据。getLast___()
- 。改进的脚本:
campaign_live