我发现Google Apps脚本有一些非常奇怪的行为。我想要做的就是在我的工作表中解析一些行,如果对于任何行,如果日期是> 1999年1月1日然后添加一个预先填充一些错误值的下拉列表。这里奇怪的行为是,它总是填充满足日期检查条件的行上方的下拉行。因此,例如,如果行#5满足条件,则在行#4中填充下拉列表。不知道为什么会这样。我也尝试过这样做
var range = sheet.getRange(i+1, 14);
但这似乎并没有在屏幕上显示任何内容。我无法理解这种奇怪的行为。任何帮助将不胜感激。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[1];
var dataRange = sheet.getDataRange();
var values = dataRange.getDisplayValues();
for (var i = rowNum; i < values.length; i++) {
if (new Date(values[i][9]).getTime() > new Date('1/1/1999').getTime()){
SpreadsheetApp.getUi().alert(values[i][2]);
var range = sheet.getRange(i, 14);
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['Error Value'], true).build();
range.setDataValidation(rule);
}
答案 0 :(得分:0)
使用
var range = sheet.getRange(Number(i)+1, 14);
当您使用i + 1且i = 20时,i + 1将变为201,您将不会在屏幕上看到任何明显的差异。第201行将在屏幕下方。
在JavaScript中,数字和字符串偶尔会以您可能不期望的方式运行。在对变量进行操作之前采取预防措施总是好的。
答案 1 :(得分:0)
您的数据验证设置为null。它应该是Range.setDataValidation(rule)
这就是为什么你没有看到下拉框。 这个功能
Range.getDisplayValues()
返回数组,数组的索引从0开始。但是,在电子表格中,行索引从1开始。因此,您需要添加1以将数组索引转换为行索引。使用以下内容获取正确的范围
Sheet.getRange(i+1,14)