非常奇怪的Google Apps脚本行为

时间:2017-03-06 19:05:43

标签: google-apps-script google-sheets

我发现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);
}

2 个答案:

答案 0 :(得分:0)

使用

var range = sheet.getRange(Number(i)+1, 14);

当您使用i + 1且i = 20时,i + 1将变为201,您将不会在屏幕上看到任何明显的差异。第201行将在屏幕下方。

在JavaScript中,数字和字符串偶尔会以您可能不期望的方式运行。在对变量进行操作之前采取预防措施总是好的。

另请阅读https://autotelicum.github.io/Smooth-CoffeeScript/literate/js-intro.html#operations-on-numbers-strings

答案 1 :(得分:0)

您的数据验证设置为null。它应该是Range.setDataValidation(rule)

这就是为什么你没有看到下拉框。 这个功能

Range.getDisplayValues()

返回数组,数组的索引从0开始。但是,在电子表格中,行索引从1开始。因此,您需要添加1以将数组索引转换为行索引。使用以下内容获取正确的范围

Sheet.getRange(i+1,14)