2017-03-06 75 views
0

我看到一些非常奇怪的Google Apps腳本行爲。我所要做的就是解析我的工作表中的一些行,如果對於任何行,如果日期> 1/1/1999,則添加一個預填充某個錯誤值的下拉列表。這裏奇怪的行爲是,這總是在滿足日期檢查條件的行的上面一行填充下拉列表。例如,如果第5行滿足條件,則在第4行中填充下拉列表。不知道爲什麼會這樣。我也試圖做到這一點非常奇怪的Google Apps腳本行爲

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

的代碼是不完整的,rownum值爲沒有定義。 –

+0

我只在這裏發佈了相關內容。 rowNum被定義。 – p0tta

+0

查看指南需要[mcve] –

回答

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

+0

我可能在某個時候嘗試過。它沒有工作。我再次嘗試,它不起作用。我在Google表單中看不到任何下拉菜單。 – p0tta

+0

另外,如果我可以使用values [i] [9]讀取正確的日期)。getTime()我不明白爲什麼我需要做一個+1來獲得同一行的句柄。有些東西看起來不正確。 – p0tta

0

你的數據驗證設置爲null。它應該是Range.setDataValidation(rule)

這就是爲什麼你看不到下拉框。 此功能

Range.getDisplayValues()

返回數組的數組和索引從0開始。然而,在電子表格中的行索引從1開始。所以,你需要添加1到數組索引轉換爲行索引。使用以下方法來獲得正確的範圍

Sheet.getRange(i+1,14)

+0

你是正確的我在這裏發佈的代碼是錯誤的,並有空,但我已經測試與規則。 – p0tta

+0

那麼我的朋友,我不知道爲什麼它不工作。是否有可能與一些模擬數據共享電子表格?所以我可以嘗試排除它 –

+0

我其實已經找到了問題。這是重寫價值的另一回事。我想弄清楚如何解決這個問題。感謝您花時間看看它! – p0tta