0

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 スプレッドシートを消去する方法を誰かが知っていれば、なおさらです!)

4

1 に答える 1

1

トリガー関数にはイベント オブジェクトが渡されますが、パラメーター リストでそのオブジェクトに名前を付けない限り、arguments.

これを試して:

function onFormSubmit(e) {

関数を機能させるために必要なことはこれだけです。

または、 を使用する場合はarguments、コードを次のように変更する必要があります。

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

ただし、まだ他の問題があります。Range.clearContents()以前の回答はすべて消去されますが、質問/ヘッダー行も消去され、回答範囲はリセットされません。

この回答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);
}
于 2013-06-03T17:06:24.550 に答える