您的觸發器函數正在傳遞一個事件對象,但除非您在參數列表中命名該對象,否則必須通過arguments
訪問它。
試試這個:
function onFormSubmit(e) {
這是所有的需要,使您的工作功能。
另外,如果你想使用arguments
,你必須改變你的代碼,做這樣的事情:
var CheckString=arguments[0].values[5];
您還有其他問題,但。 Range.clearContents()
將清除您之前的所有回覆,但也會清除問題/標題行,並且不會重置回覆範圍。
我已將您的腳本重寫爲使用this answer的tidy()
函數的變體。這將留下您的標題,並完全刪除包含所有以前的響應的行。
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);
}
完美。現在想出http post來從excel發送清除命令!當我達到它時,我會跳過那座橋! – user2448450
只是一個愚蠢的一面注意:在JavaScript(和應用程序腳本)中,即使沒有命名它也可以訪問一個函數參數。只要檢查'arguments'數組。 –
@HenriqueAbreu - 同意了,儘管對於自認的新手來說不那麼友好。我用一個使用'arguments'的例子更新了答案。 (已經在'tidy()'中使用了它。) – Mogsdad