当前位置: 首页 > 知识库问答 >
问题:

谷歌表单-如何将数据收集到不同的表单

郁景龙
2023-03-14

我有一个谷歌表单,它将数据收集到电子表格中(表单响应1)。因为我认为有4m行的限制,所以如何以编程方式创建新的工作表并将响应存储到新创建的工作表中。

注意:这不是将响应复制到新工作表中。

共有1个答案

宇文航
2023-03-14

对于“新工作表”,电子表格中的大小限制约为200万个单元格(而不是400万行)。参考

窗体应用脚本参考中提供了创建新电子表格并将其设置为窗体目标的示例:

// Open a form by ID and create a new spreadsheet.
 var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
 var ss = SpreadsheetApp.create('Spreadsheet Name');

 // Update the form's response destination.
 form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());

该脚本的这种更复杂的演变可以在达到一些预先设定的目标(例如每100个响应)时自动创建一个新文件,并生成符合谷歌表单命名约定的新文件名:

/**
 * Check number of responses and switch to new destination if needed.
 * Set up as a trigger function to run on Form submission.
 */
function checkResponseCount(e) {
  var form = e.source;
  var numResponses = form.getResponses().length;

  // Start a new destination spreadsheet after each 100 responses
  if (numResponses % 100 == 0) {
    startNewDestinationSpreadsheet();
  }
}

/**
 * Google Form script to start a new spreadsheet in the user's "root"
 * directory, for the form's responses.
 *
 * If no new name is provided, it will be automatically created based on the
 * name of the current spreadsheet destination, by incrementing the counter
 * in a standard destination name, e.g. "My Form (Responses 5)".
 *
 * @param {string}    OPTIONAL New spreadsheet name.
 *
 * @returns {string}           ID of new spreadsheet
 */
function startNewDestinationSpreadsheet(ssName) {
  var form = FormApp.getActiveForm();
  var curDest = DriveApp.getFileById(form.getDestinationId());
  var curName = curDest.getName();

  // Expect that current name is either in standard form (ENGLISH - adjust as needed)
  // or that a new name has been provided as ssName.
  if (!ssName || ssName === '') {
    if (curName.search(/\(Responses.*\)/) == -1) {
      ssName = curName+" (Responses 2)";
    }
    else if (curName.indexOf("(Responses)") !== -1) {
      ssName = curName.replace("Responses","Responses 2");
    }
    else {
      // Increment number
      ssName = curName.replace(/(\d+)+/g, function(match, number) {
         return parseInt(number)+1;
      });
    }
  }

  // Create new spreadsheet, and set as form destination
  var newSheetId = SpreadsheetApp.create(ssName).getId();
  form.setDestination(FormApp.DestinationType.SPREADSHEET, newSheetId);

  // The new destination just had ALL existing responses copied to it - wipe them
  Utilities.sleep(10000); // Wait for sheet to be updated
  var sheet = SpreadsheetApp.openById(newSheetId).getActiveSheet();
  sheet.deleteRows(2, sheet.getMaxRows()-2);  // Cannot delete all non-frozen rows, so leave one

  return newSheetId;
}

不过有个问题。将电子表格设置为表单的目标时,所有现有响应都会复制到新目标中。如果您担心目标电子表格中的空间不足,那么这显然是没有帮助的。

正因为如此,你不想要的答案——把答案复制到另一张纸上——才是你最好的选择。

 类似资料:
  • 此函数工作正常。当当前工作表不是Google表单响应工作表时。我正在使用(每分钟)触发器 图像:沙子数据(主数据)表至(共享数据1)表 我正在寻找一个,当用户提交的谷歌表格的状态是(支付),数据应该在第二页,这是(shareData1) 这里的问题是,当我使用谷歌表单响应表时,这个函数将不再工作。它显示了一个错误。错误图像 在降级的错误图像中,我手动运行此函数,相同的错误显示在AppScript面

  • 我正在尝试将表单序列化值发布到控制器(WebAPI自宿主)。我无法理解为什么没有正确绑定NameValueCollection。使用jQuery的客户端: 使用Web API自主机的服务器端: 非常感谢。

  • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说

  • 问题内容: 是否可以在Struts2的操作中将表单的数据提交到Java Set? 动作代码: 表单代码: 问题答案: 该仅仅是一个集合,Struts2的对任何类型的集合的内部支持。但是对于这种类型的集合,您不能在OGNL表达式中使用索引。尝试

  • 我想创建一个动态谷歌表单的边栏,理想情况下是从(谷歌)地图中选择要输入表单的坐标。 从文档和试用版中,我可以创建表单编辑器/设计器的侧栏(https://docs.google.com/forms/d/ID/edit),而不是活的形式本身(https://docs.google.com/forms/d/ID/viewform).表单对于文档和工作表应用程序是不同的,存在这两种视图。 例如: 第一个

  • 我正在设置我的第一个不和谐机器人,它将能够从谷歌电子表格、官方应用编程接口中获取数据,并将其作为不和谐的嵌入信息。问题是在. addField()级别,我不能输入单元格的值。我该怎么做呢? 我期望输出“Terrassycup 3”,但实际输出是控制台中的“ReferenceError:cell未定义”。日志