2013-06-03 3 views
0

Я пытаюсь использовать событие onFormSubmit для удаленного удаления всех строк в Google Таблице. Например, когда я включаю слово «Purge» в поле, затем очищаем все строки.Очистить все записи из таблицы 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 

Что я могу сделать по этому поводу? (Или, если кто-либо знает способ стереть электронную таблицу Google из Access или Excel VBA, тогда еще лучше!)

ответ

1

Ваша триггерная функция передается объект события, но если вы не назовете этот объект в списке параметров, вы будете должны получить к нему доступ через arguments.

Попробуйте это:

function onFormSubmit(e) { 

Вот и все, что нужно, чтобы сделать вашу работу функции.

В качестве альтернативы, если вы хотите использовать arguments, вы должны изменить свой код, чтобы сделать что-то вроде этого:

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

У вас еще есть другие проблемы, хотя. Range.clearContents() удалит все ваши предыдущие ответы, но также удалит строку вопроса/заголовка и не сбросит диапазон ответов.

Я переписал ваш сценарий, чтобы использовать вариант функции tidy() от this answer. Это оставит ваши заголовки и полностью удалит строки, содержащие все предыдущие ответы.

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 сообщение отправить команду очистки от excel! Я спрыгну с этого моста, когда я доберусь до него! – user2448450

+0

Просто глупое примечание: в Javascript (и скрипте приложений) вы можете получить доступ к параметрам функции, даже не назвав его. Просто проверьте массив 'arguments'. –

+0

@HenriqueAbreu - согласился, хотя он менее дружелюбен для самонадеянных noobs. Я обновил ответ на примере использования 'arguments'. (Уже использовал его в 'tidy()'.) – Mogsdad

Смежные вопросы