有没有办法获取表单回复并将它们放在另一个 sheet 的特定单元格中

is there a way to get form responses and place them in specific cell in another sheet

我已经设置了一个脚本来创建 Google 表单并将其链接到传播sheet,有没有办法收集回复并将它们放在另一个 [= 的某些单元格中21=] 然后取消链接并删除表单响应 sheet.

我需要的脚本必须足够灵活,以至于响应 sheet 的名称无关紧要,因为我将制作多个一次性使用表单,因此我也想删除响应sheet答案搬家后

例如说答案是 A (a1)、B (b1) 和 C (c1),我想将它移动到 sheet 'C' 和 F、G 和 H 列完成后我希望回复 sheet 取消链接并被删除

任何帮助将不胜感激

问题:

您希望将表单响应数据提交到您选择的 sheet,而不是将表单链接到传播时创建的那个 sheet。

解决方案:

在这种情况下,我建议根本不要将表格链接到价差sheet,而是使用 onFormSubmit 触发器将提交的数据写入您想要的 sheet .

工作流程:

  1. 安装一个onFormSubmit触发器。您可以按照 these steps 手动执行此操作,也可以通过执行此函数 once:
  2. 以编程方式执行此操作
const SOURCE_FORM_ID = "YOUR_FORM_ID"; // Change according to your needs

function installOnFormSubmitTrigger() {
  const form = FormApp.openById(SOURCE_FORM_ID);
  ScriptApp.newTrigger("onFormSubmitTrigger")
    .forForm(form)
    .onFormSubmit()
    .create();
}
  1. 安装触发器后,每次有人向表单提交回复时,都会执行一个名为 onFormSubmitTrigger 的函数(不必这样命名)。此函数应将响应数据附加到您想要的 sheet。它可能是这样的(检查内联评论):
const TARGET_SPREADSHEET_ID = "YOUR_SPREADSHEET_ID"; // Change according to your needs
const TARGET_SHEET_NAME = "Sheet1"; // Change according to your needs

function onFormSubmitTrigger(e) {
  const targetSpreadsheet = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID);
  const targetSheet = targetSpreadsheet.getSheetByName(TARGET_SHEET_NAME);
  if (targetSheet.getLastRow() === 0) { // Add headers if they don't exist yet
    const itemTitles = e.source.getItems().map(item => item.getTitle()); // Get item titles
    itemTitles.unshift("Timestamp"); // Append "Timestamp" to the sheet (if desired)
    targetSheet.appendRow(itemTitles); // Append form item titles to the sheet
  }
  const itemResponses = e.response.getItemResponses();
  const responses = itemResponses.map(itemResponse => itemResponse.getResponse()); // Get user responses
  responses.unshift(new Date()); // Add today's date to the responses (if desired)
  targetSheet.appendRow(responses); // Append responses to the sheet
}

注:

  • 如果您不想提交到传播的第一列sheet,只需将空字符串添加到响应数组,或改用 Range.setValues

参考: