清除Google电子表格中的所有记录

时间:2013-06-03 15:21:27

标签: javascript google-apps-script google-sheets

我正在尝试使用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电子表格的方法,那就更好了!)

1 个答案:

答案 0 :(得分: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);
}