Google表单响应表脚本,用于触发模板电子表格的复制到新文件名

时间:2015-04-02 14:38:06

标签: google-apps-script google-sheets google-form

我创建了:

  1. Google工作表作为主模板(" QC_MasterTemplate")在我的根驱动器中具有我想要的所有格式,以便为每个新的销售订单完成核对清单。

  2. 收到我们的销售人员将用于提交回复的新客户名称,ID和日期订单的Google表单。

  3. Google表格链接到表格存储新订单回复。我还有一个我的脚本在表单上运行,该表单的新条目收集最后一行条目信息。

  4. 我需要帮助:

    响应表中的脚本正在尝试触发我的通知电子邮件,表明已经创建了一个新条目,它会细分每个单元格的详细信息,以便在电子邮件的消息中格式化。

    我尝试自动执行下一步,将新条目信息用于格式化新的电子表格文件名。 (即" companyname-customerid-orderdate-QCChecklist")此变量易于构建,我遇到的问题是获取响应表脚本以获取非当前活动的电子表格(& #34; QC_MasterTemplate")并使用新文件名在同一个根位置制作副本

    我使用的代码是:

    function createNewSheet() {
      // Get Template Filename
      var TemplateFile = DriveApp.getFilesByName("QC_MasterTemplate");
      // Get current spreadsheet for information lookup
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheets()[0];
      // Last row of data to process
      var startRow = sheet.getLastRow();
      // Starting Column of data to process
      var startColumn = 1;
      // Number of rows to process
      var numRows = 1;
      // Number of columns to process
      var numColumns = sheet.getLastColumn();
      // Get range of cells in columns A:E for all rows with entries
      var dataRange = sheet.getRange(startRow, startColumn, numRows, numColumns)
      // Get entries for each row in the Range.
      var data = dataRange.getValues();
      // Set each value to a unique variable
      for (i in data) {
        var cell = data[i];
        var timestamp = cell[0];
        var companyname = cell[1];
        var customerid = cell[2];
        var orderdate = cell[3];
        var employee = cell[4];
        // Build body of email
        var subject = companyname + "-" + customerid + "-" + orderdate + " - QC Checklist";
        var message = 'New QC Checklist Form Received \n' +
          '\nTimestamp: ' + timestamp +
          '\nCompany Name: ' + companyname +
          '\nCompany ID: ' + customerid +
          '\nOrder Date: ' + orderdate +
          '\nEmployee Name: ' + employee;
        var recipient = "username@gmail.com";
        MailApp.sendEmail(recipient, subject, message); 
        // Make copy of Template to new filename
        subject.makeCopy(TemplateFile);
      }
    }
    

    我得到的错误是: TypeError:在对象Striker-37188-20150401-QC Checklist中找不到函数makeCopy。 (第39行,文件"代码")

3 个答案:

答案 0 :(得分:0)

您可以获取电子表格的父文件夹(QC_MasterTemplate),转到该文件夹​​并创建新的电子表格文件。

要获取电子表格的根文件夹(QC_MasterTemplate),您可以使用DriveApp中的getParents()方法。

另外,对于创建电子表格,您必须使用create(name)方法。

希望有所帮助!

答案 1 :(得分:0)

名为subject的变量是一个字符串。没有makeCopy()方法从字符串生成文件。 Google Apps服务是面向对象的编程。您需要从顶部开始,然后按照方法进行操作。有makeCopy()方法:

Google Documentation

但你不能在任何事情上使用这种方法。对于该特定文档,makeCopy()方法仅适用于文件类。所以你首先需要获得一个文件的引用。

您可以通过多种方式制作模板副本。

一种选择是使用Class DriveApp。

function makeCopyOfTemplate() {
  var templateID = 'The File ID of the File'; //Template File ID
  var workingCopy = DriveApp.getFileById(templateID).makeCopy();
  var workingFileID = workingCopy.getId();

  var fileNameToUse = 'CustomerABC Todays Date';
  //Set the file name of the copy file
  workingCopy.setName(fileNameToUse);

  //Open the new copy of the Template
  var workingCopyOfTemplateFile = SpreadsheetApp.openById(workingFileID);

  //To Do:  Inject copy with data
};

答案 2 :(得分:0)

也可以这样使用sourceMe方法吗?

.makeCopy(name, destination)