2014-06-15 17 views
-1

如果範圍(3,5)(或「A3」)爲空,我已經構建了此腳本以在工作表的索引3中添加一個新行。這樣做,我不需要滾動,直到最後一行爲表單添加值,我只是將它們添加到第三個空行中,這是在打開文檔時創建的。但是有一個問題:只有當我打開電子表格文檔中的一個表格(確切地說,是#gid=7之一)時,該功能才起作用,儘管我的功能中沒有這樣的情況。所以,如果我打開我的spreadhseet文檔沒有任何#gid=GID_NUMBER),或者如果我打開它通過與#gid=7的網址,它顯示First Menu。但是,如果我不這樣做(例如,如果我從其他#gid=中打開它),則不會顯示First Menu。當日志顯示此錯誤消息時:Execution failed: illegal argument. (line 2252, file "mainScript") [0:06 seconds of total runtime]。 2252線是這樣的:如何解決此錯誤:getRange(「A3」)中的「執行失敗:非法參數」從活動工作表?

Logger.log("activeSheet.getRange(3, 1).getValue() = "+activeSheet.getRange("A3").getValue()); 

當這條線被替換爲這個其他顯示同樣的錯誤:

if(activeSheet.getRange("A3").getValue() !== '') { 

如果我getRange(3, 1)更換"A3"說法,我得到了同樣的錯誤。奇怪的是,當我用#gid=7打開工作表時,這個錯誤不會發生。 執行range.getValue後發生錯誤。如何解決這個問題?這裏是一個代碼示例:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var activeSheet = ss.getActiveSheet(); 

function onOpen() { 
    insertEmptyRow(); 
    var menuEntries = 
    [ 
    {name: "My Menu", functionName: "myFunction"} 
    ]; 
    ss.addMenu("First menu", menuEntries); 
} 

function insertEmptyRow(){ 
    if(activeSheet.getRange("A3").getValue() !== '') { 
    activeSheet.insertRows(3); 
    Logger.log("activeSheet.getRange("A3").getValue() = " + activeSheet.getRange("A3").getValue()); 
    } 
} 
+0

你爲什麼手動編輯URL使用自定義GID,請問? – CameronC

+0

該文件有幾個gid,我必須編輯它們。每個gid都有一個獨特的'#gid = NUM​​BER'。 – craftApprentice

+0

刪除前兩個全局變量,會造成麻煩。把它們放在一個函數裏面。 –

回答

2

安裝onOpen可能是最好的解決方案,因爲您的onOpen函數需要授權才能運行(訪問電子表格服務)。

只需更改函數名稱以避免雙擊。從你的例子

示例代碼:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var activeSheet = ss.getActiveSheet(); 

function installableOnOpen() { 
    insertEmptyRow(); 
    var menuEntries = 
    [ 
    {name: "My Menu", functionName: "myFunction"} 
    ]; 
    ss.addMenu("First menu", menuEntries); 
} 

function insertEmptyRow(){ 
    if(activeSheet.getRange(3, 5).getValue() !== '') { 
    activeSheet.insertRows(3); 
    Logger.log("activeSheet.getRange(3, 1).getValues() = " + activeSheet.getRange(3, 1).getValue()); 
    } 
} 

test spreadsheet with view rights, make a copy to use and/or modify.

+0

嗨,@Sergeinsas,我改變了原來的問題,添加錯誤消息日誌(對不起,以前沒有做過!)。你能提供一些幫助嗎? – craftApprentice

+0

嗨,@Sergeinsas,我剛剛嘗試了您的測試電子表格(製作副本和授權)。但錯誤仍然存​​在。任何想法?在這裏我的測試副本:http://goo.gl/8Q0cRj – craftApprentice

+0

(無論如何,我選擇你的答案,因爲它是最完整的,並有很大的努力) – craftApprentice

1

我認爲以下是你需要的。請告訴我,如果這是不正確的,因爲我發現您的原始帖子與您的代碼示例相比存在一些差異。

鑑於你有說add a new row in the index 3 of the sheet if the first cell in the row 3 is empty,我會離開這個。

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var activeSheet = ss.getActiveSheet(); 
    insertEmptyRow(activeSheet); 
    var menuEntries = [{name: "My Menu", functionName: "myFunction"}]; 
    ss.addMenu("First menu", menuEntries); 
} 

function insertEmptyRow(){ 
    //if(activeSheet.getRange(3, 5).getValue() !== "") { <-- I don't know why you are checking the 5th cell here, as you clearly state first cell in third row as above. 

    if(activeSheet.getRange(3, 1).getValue() !== ''){ 
     activeSheet.insertRows(3); 
     Logger.log("activeSheet.getRange(3, 1).getValue() = " + activeSheet.getRange(3, 1).getValue()); <-- I'm also not sure about this, as you check the value of row 3, cell 1 AFTER you have inserted a row. This will always be empty, but you might be doing this for error checking to ensure the process completed properly, so I left it. 
    } 
} 

我不知道爲什麼你有麻煩,它不工作。代碼背後的邏輯無論如何都是錯誤的,我爲你解決了這個問題。不確定你的GID問題。試試這個,讓我知道。

+0

非常感謝@CameronC。但是我的解釋確實犯了一個錯誤。它不是第3行的第一個單元格,但範圍(3,5)和這部分功能是可以的(和你的一樣)。我的問題恰恰與'#gid ='問題有關。它只適用於一個gid! (數字7)。不管怎麼說,還是要謝謝你! – craftApprentice

+0

嘿,我剛剛意識到我在我的答案中犯了一個錯誤。它應該是 'function insertEmptyRow(activeSheet){' 對不起,我無法爲您解決它。只要onOpen腳本與電子表格相關聯,我認爲它適用於所有的事件。 – CameronC

+0

嗨,@CameronC,我改變了原來的問題,添加錯誤消息日誌(對不起,以前沒有做過!)。你能幫我一些嗎? – craftApprentice

相關問題