如何获取单元格值(Sheet1 来自 Google Form,Sheet2 来自 Formula)到 google 文档模板

How to get the cell values (Sheet1 from Google Form, Sheet2 from Formula) to google doc template

我有2张。 Sheet1 来自 Google 表格并将它们查询到 Sheet2 然后制作公式。我想从它们获取单元格值到 Google Doc 模板并发送电子邮件。我可以从 Sheet1 获取值,但不能从 Sheet2 获取值。请帮我解决这个问题。谢谢你。 enter image description here enter image description here

function onFormSubmit(e){
  var docs_email = e.values[1];
  var Name = e.values[2];
  var Date1 = e.values[3];
  var Date2 = e.values[4];
  var Money1 = e.values[5];
  var Money2 = e.values[6];

  //Values from Sheet2
  var TotalDate = e.values[7];
  var Money3 = e.values[8];
  var TotalMoney = e.values[9];

  var copyId = DriveApp.getFileById('Doc ID')  //Temp document ID
  .makeCopy('Report-'+Name)
  .getId();
  var copyDoc = DocumentApp.openById(copyId);
  copyDoc.getBody()
  var copyBody = copyDoc.getActiveSection();
  copyBody.replaceText('keyName', Name);
  copyBody.replaceText('keyDate1', Date1);
  copyBody.replaceText('keyDate2', Date2);
  copyBody.replaceText('keyMoney1', Money1);
  copyBody.replaceText('keyMoney2', Money2);
  copyBody.replaceText('keyTotalDate', TotalDate);
  copyBody.replaceText('keyMoney3', Money3);
  copyBody.replaceText('keyTotalMoney', TotalMoney);
  copyDoc.saveAndClose();

  //convert to pdf
  var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");

  //Send the email
  var subject = "Your Report";
  var body = "Dear " +Name+" \n\n"+"<br> This is your report";
  GmailApp.sendEmail(docs_email, subject, body,{htmlBody: body, attachments: pdf});

} 

这个答案怎么样?

修改点:

  • 为了检索“Sheet2”中“H”到“J”列的值,使用了 getValues
  • 根据你的问题,我了解到“H”到“J”列有公式。所以我想 getLastRow() 可能不能直接使用。所以我认为需要检索“A”列的第一个空行。

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本:

请按如下方式修改您的脚本。

从:
var TotalDate = e.values[7];
var Money3 = e.values[8];
var TotalMoney = e.values[9];
到:
SpreadsheetApp.flush();  // This might be not required.
var sheet = e.source.getSheetByName("Sheet2");  // Values are retrieved from the sheet name of "Sheet2".
var row = 0;
for (var i = 1; i < sheet.getLastRow(); i++) {
  if (sheet.getRange(i, 1).isBlank()) {
    row = i - 1;
    break;
  }
}
var [TotalDate, Money3, TotalMoney] = sheet.getRange(row, 8, 1, 3).getValues()[0];

参考文献: