Google 表单的 AppScript

问题描述 投票:0回答:1

我想让我的代码读取包含 ID 的工作表,当有人输入错误的 ID 时,代码会从 Google 响应表中删除不匹配的响应。代码需要读取第一列的ID号。

当有人填写 Google 表单时,第一个问题是 ID 号。当他们填写表单并单击“提交”时,如果他们输入的 ID 号与 Google 表单中的 ID 号不匹配,则代码需要删除 Google 表单的表单响应。如果 ID 号存在于 Google 表格中,则代码应仅保留提交的表单。目前还没有这样做。

这是我的代码:

function removeUnmatchedResponses() {
  try {
    // Replace 'SPREADSHEET_ID' with the ID of your Google Sheets document
    var spreadsheet = SpreadsheetApp.openById('1sh5dcQJPRJtbFpe7qVjpo7yIUwi5_mCGKrAnhWm-Hng');
    
    // Get the "IDs" sheet by index (assuming it's the first sheet)
    var idsSheet = spreadsheet.getSheets()[0]; // Change the index if the "IDs" sheet is not the first one

    // Check if "IDs" sheet exists
    if (!idsSheet) {
      throw new Error("IDs sheet not found.");
    }

    // Get the Form Responses sheet
    var formResponsesSheet = spreadsheet.getSheetByName("Form Responses");
    
    // Check if Form Responses sheet exists
    if (!formResponsesSheet) {
      throw new Error("Form Responses sheet not found.");
    }

    // Get all the IDs from the "IDs" sheet
    var idsRange = idsSheet.getRange("A:A");
    var idsValues = idsRange.getValues().flat().filter(Boolean); // Assuming IDs are in column A

    // Get the data range from the Form Responses sheet
    var formResponsesRange = formResponsesSheet.getDataRange();
    var formResponsesValues = formResponsesRange.getValues();

    // Separate matched and unmatched responses
    var matchedResponses = [];
    var unmatchedResponses = [];

    for (var i = 0; i < formResponsesValues.length; i++) {
      var responseId = formResponsesValues[i][0]; // Assuming the ID is in the first column of the Form Responses sheet
      if (idsValues.includes(responseId)) {
        matchedResponses.push(formResponsesValues[i]);
      } else {
        unmatchedResponses.push(formResponsesValues[i]);
      }
    }

    // Clear existing data in the Form Responses sheet
    formResponsesRange.clear();

    // Write back the matched responses
    if (matchedResponses.length > 0) {
      formResponsesSheet.getRange(1, 1, matchedResponses.length, matchedResponses[0].length).setValues(matchedResponses);
    }

    // Append the unmatched responses
    if (unmatchedResponses.length > 0) {
      formResponsesSheet.getRange(formResponsesSheet.getLastRow() + 1, 1, unmatchedResponses.length, unmatchedResponses[0].length).setValues(unmatchedResponses);
    }

    Logger.log("Unmatched responses removed successfully.");
  } catch (error) {
    Logger.log("Error: " + error.message);
  }
}
google-apps-script
1个回答
0
投票

使用表单的 onFormSubmit 触发器尝试此操作。您可以从电子表格或表单中编写代码

function onFormSubmit(e) {//for form
  const ss = SpreadsheetApp.openById('spreadsheetid');
  const idsh = ss.getSheetByName("id sheet name");
  const ids = idsh.getRange("A1:A" + idsh.getLastRow()).getValues().flat().filter(e => e);
  const form = FormApp.openById("editformid");
  const irs = e.response.getItemResponses();
  const ans1 = irs[0].getResponse();//the answer to question one
  if (!~ids.indexOf(ans1)) {
    form.deleteResponse(e.response.getId());
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.