簡體   English   中英

非常奇怪的Google Apps腳本行為

[英]Very strange Google Apps Script behavior

我看到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);
}

采用

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

您的數據驗證設置為null。 應該是Range.setDataValidation(rule)

這就是為什么您沒有看到下拉框的原因。 該功能

Range.getDisplayValues()

返回一個數組,數組的索引從0開始。但是,在電子表格中,行索引從1開始。因此,您需要添加1才能將數組索引轉換為行索引。 使用以下內容獲取正確的范圍

Sheet.getRange(i+1,14)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM