Apps 脚本 - 在表单提交失败时创建新文档并创建新的空白 pdf

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

以下代码应该收集提交的谷歌表单的响应,并创建一个谷歌文档并将它们添加到目标文件夹中。该代码使用在表单提交时激活的触发器。但是,目前提交论坛时只能创建空白pdf文件,请问是什么问题? createTrigger 函数是我用来创建在表单提交上运行代码的触发器的函数。我已经搞乱了很长一段时间,但我只用它来创建空白pdf,而不是使用表单数据创建谷歌文档。我是这方面的初学者,而且真的只对Python很感兴趣,所以要持保留态度。

    function onFormSubmitTrigger() {
      var formResponse = getLastFormResponse();
      createDocFromFormResponse(formResponse);
    }

    function getLastFormResponse() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var lastRow = sheet.getLastRow();
      var lastRowValues = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
      return lastRowValues;
    }

    function createDocFromFormResponse(formResponse) {
      var folderName = "Spa Job Log Repository";

      var parentFolder = DriveApp.getFolderById("Spa Job Log Repository");

      var targetFolder = parentFolder.getFoldersByName(folderName).next();

      if (targetFolder) {
        var newDoc = DocumentApp.create("Form Response Document");
        var newDocFile = DriveApp.getFileById(newDoc.getId());
        targetFolder.createFile(newDocFile);

        var doc = DocumentApp.openById(newDoc.getId());
        var body = doc.getBody();

        for (var i = 0; i < formResponse.length; i++) {
          body.appendParagraph("Response " + (i + 1) + ": " + formResponse[i]);
        }

        doc.saveAndClose();
      } else {
        Logger.log("Folder '" + folderName + "' not found.");
      }
    }

    function createTrigger() {
      var form = FormApp.openById('1jGAWZXcOHOfbM1uk88QMBg-yl4VdSHxynRM-NHawASQ');
      ScriptApp.newTrigger('onFormSubmitTrigger')
        .forForm(form)
        .onFormSubmit()
        .create();
    }

createTrigger 函数是我用来创建在表单提交上运行代码的触发器的函数。我已经搞乱了很长一段时间,但我只用它来创建空白pdf,而不是使用表单数据创建谷歌文档。我是这方面的初学者,而且真的只对Python很感兴趣,所以要持保留态度。

exception google-apps-script eventtrigger
1个回答
0
投票

我相信您的目标如下。

  • 您想要创建一个新的 Google 文档,并希望将创建的文档放入
    targetFolder

修改要点:

  • 在您的脚本中,我认为 Google 文档是在根文件夹中创建的。但是,通过
    targetFolder.createFile(newDocFile);
    ,创建的文档将转换为 PDF 格式,并将 PDF 文件放入
    targetFolder
    。在现阶段,当
    createFile
    创建Google Docs文件(文档、电子表格、幻灯片)时,mimeType会自动转换为PDF。我猜这就是您当前问题的原因。

当这些点都体现在你的脚本中时,下面的修改如何?

修改后的脚本:

在此修改中,修改了功能

createDocFromFormResponse

function createDocFromFormResponse(formResponse) {
  var folderName = "Spa Job Log Repository";

  var parentFolder = DriveApp.getFolderById("###"); // Please set your folder ID.

  var targetFolder = parentFolder.getFoldersByName(folderName).next();
  if (targetFolder) {
    var newDoc = DocumentApp.create("Form Response Document");
    var newDocFile = DriveApp.getFileById(newDoc.getId());
    newDocFile.moveTo(targetFolder);
    var doc = DocumentApp.openById(newDoc.getId());
    var body = doc.getBody();
    for (var i = 0; i < formResponse.length; i++) {
      body.appendParagraph("Response " + (i + 1) + ": " + formResponse[i]);
    }
    doc.saveAndClose();
    // targetFolder.createFile(doc.getBlob()); // If you want to also create a PDF file into "targetFolder", please use this line.
  } else {
    Logger.log("Folder '" + folderName + "' not found.");
  }
}

注:

  • 在您的脚本中,在
    var parentFolder = DriveApp.getFolderById("Spa Job Log Repository");
    处,如果您使用文件夹名称
    getFolderById
    ,则会发生错误。请注意这一点。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.