我正在尝试使用onFormSubmit事件来“远程”删除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电子表格的方法,那就更好了!)
答案 0 :(得分:1)
您的触发器功能正在传递一个事件对象,但除非您在参数列表中命名该对象,否则您必须通过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);
}