2013-06-03 47 views
0

我試圖使用onFormSubmit事件'遠程'刪除Google Spreadsheet中的所有行。例如,當我在字段中包含「清除」一詞時,清除所有行。清除Google電子表格中的所有記錄

我嘗試這樣做:

function onFormSubmit() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var first = ss.getSheetByName("Form Responses"); 
    var CheckString=e.values[5]; 

    if (CheckString == ['purge']) 
    first.clearContents(); 

} 

,但我得到的錯誤:

Start   Function  Error Message            Trigger  End 
6/3/13 10:01 AM onFormSubmit ReferenceError: "e" is not defined. (line 4, file "purge4") formSubmit 6/3/13 10:01 AM 

我能做些什麼呢? (或者,如果有人知道從Access或Excel VBA中擦除Google Spreadsheet的方法,那麼甚至更好!)

回答

1

您的觸發器函數正在傳遞一個事件對象,但除非您在參數列表中命名該對象,否則必須通過arguments訪問它。

試試這個:

function onFormSubmit(e) { 

這是所有的需要,使您的工作功能。

另外,如果你想使用arguments,你必須改變你的代碼,做這樣的事情:

var CheckString=arguments[0].values[5]; 

您還有其他問題,但。 Range.clearContents()將清除您之前的所有回覆,但也會清除問題/標題行,並且不會重置回覆範圍。

我已將您的腳本重寫爲使用this answertidy()函數的變體。這將留下您的標題,並完全刪除包含所有以前的響應的行。

function onFormSubmit(e) { 
    var CheckString=e.values[5]; 

    if (CheckString == ['purge']) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var first = ss.getSheetByName("Form Responses"); 
    var numResponses = first.getDataRange().getNumRows() - 1; 
    tidy(first,numResponses); 
    } 

} 

/** 
* Prompt user for the number of form response rows to remove, then delete them. 
* Assumes that the form responses are in the active sheet, that there is one 
* row of 'headers' followed by responses (in row 2). 
* 
* @param {Sheet} sheet Sheet to be tidied. 
* @param {number} thisMany (Optional) The number of rows to remove. If not 
*       specified, user will be prompted for input. 
*/ 
function tidy(sheet,thisMany) { 
    if (tidy.arguments.length == 0) { 
    // Exception if no sheet provided 
    throw new Error('Parameter "sheet" not defined'); 
    } 

    // else we assume we have a Sheet object for first argument 

    if (tidy.arguments.length == 1) 
    thisMany = Browser.inputBox("How many responses should be tidied?"); 

    sheet.deleteRows(2, thisMany); 
} 
+0

完美。現在想出http post來從excel發送清除命令!當我達到它時,我會跳過那座橋! – user2448450

+0

只是一個愚蠢的一面注意:在JavaScript(和應用程序腳本)中,即使沒有命名它也可以訪問一個函數參數。只要檢查'arguments'數組。 –

+0

@HenriqueAbreu - 同意了,儘管對於自認的新手來說不那麼友好。我用一個使用'arguments'的例子更新了答案。 (已經在'tidy()'中使用了它。) – Mogsdad

相關問題