我怎样才能直接从 Google 表单中获取回复,然后发送到新的电子表格?

How can I get the responses directly form a Google Form and send then to a new spreadsheet?

我一直在努力制作一个脚本,直接从 Google 表单获取所有回复并将其发送(或复制)到传播sheet。我还想在创建副本后将 spreadsheet 发送到 Google 驱动器(我已经设法完成这部分)

当我 运行 脚本时,它没有显示任何错误。 spreadsheet 已创建并存储在给定的驱动器文件夹中,但 sheet 为空。

这是脚本:


function getItemResponses() {

// Open a form by ID and create a new spreadsheet.
var form = FormApp.openById('1ohh3SYGm0F1wzIGeQenk6Vt-epeXY2UHgdYXtH5knWA');


//Prepare new name
var formattedDate = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy' 'HH:mm:ss");
var name = form.getTitle() + " Copy " + formattedDate;

//Prepare file system objects
var oldfile = DriveApp.getFileById(form.getId());
destination = DriveApp.getFolderById("1u6HQQUWXKIkpakInbS9u6opWK10T91Ez");

//create new spreadsheet
var newSpreadsheet = SpreadsheetApp.create(name);

//Copy to newSpreadSheet
var form = FormApp.openById('1ohh3SYGm0F1wzIGeQenk6Vt-epeXY2UHgdYXtH5knWA'),getItemResponses,newSpreadsheet


//move to destination folder
var newFile = DriveApp.getFileById(newSpreadsheet.getId());
var parents = newFile.getParents();
while (parents.hasNext()) {
    var parent = parents.next();
     parent.removeFile(newFile); //remove from default folder
}
destination.addFile(newFile);

}


提前感谢您的帮助。

我相信你的目标如下。

  • 您想从现有 Google 表单中检索所有响应值。
  • 您想将检索到的值放在新的电子表格中。
  • 您想将新电子表格放在特定文件夹中。

修改点:

  • 在您的脚本中,创建了新的电子表格。但是没有放置响应值。我认为这可能是您遇到问题的原因。
  • 为了从 Google 表单中检索所有响应值,我认为这个示例脚本可能会被使用。
  • 为了将创建的电子表格移动到特定文件夹,在这种情况下,您可以使用moveTo

当以上几点体现在你的脚本中,就变成了下面这样。

修改后的脚本:

function getItemResponses() {
  var form = FormApp.openById('1ohh3SYGm0F1wzIGeQenk6Vt-epeXY2UHgdYXtH5knWA');
  var formattedDate = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy' 'HH:mm:ss");
  var name = form.getTitle() + " Copy " + formattedDate;
  destination = DriveApp.getFolderById("1u6HQQUWXKIkpakInbS9u6opWK10T91Ez");
  
  // Create new Spreadsheet.
  var newSpreadsheet = SpreadsheetApp.create(name);

  // Move the created Spreadsheet to the specific folder.
  var newFile = DriveApp.getFileById(newSpreadsheet.getId());
  newFile.moveTo(destination);

  // Retrieve all response values from Google Form and put them to the created Spreadsheet.
  var sheet = newSpreadsheet.getSheets()[0];
  var titles = form.getItems().map(e => e.getTitle());
  var formResponses = form.getResponses();
  var values = formResponses.map(f => f.getItemResponses().reduce((o, i) => {
    var r = i.getResponse();
    return Object.assign(o, {[i.getItem().getTitle()]: Array.isArray(r) ? r.join(",") : r});
  }, {})).map(o => titles.map(t => o[t] || ""));
  values.unshift(titles);
  sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
}
  • 当此脚本为 运行 时,将创建一个新的电子表格并将其移动到特定文件夹,并从 Google 表单中检索所有响应值并将它们放入创建的电子表格.

参考文献: