【问题标题】:How to send email from google sheet with the sheet as a PDF attachment如何从谷歌工作表发送电子邮件,工作表作为 PDF 附件
【发布时间】:2020-09-07 21:55:21
【问题描述】:

我有一个 google 表格,其中有两张表格,Form Responsesreportsee here

当表单提交报告表时,最后一个表单或响应表的最后一行发生更改。 我想向提交表格的人发​​送电子邮件并将报告表附加为 PDF 发送电子邮件后,在 e 列中写入 已发送电子邮件see here

电子邮件至:表单回复列 b 主题:一些文本和表单响应列 a 抄送:ABC@yahoo.com 正文:一些文本和表单响应列 f 附:PDF格式的报告表

我使用了这个代码,但它不起作用

 function onSubmit(e){
  Logger.log('submit ran');

 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var lastRow = sheet.getLastRow();
  var sa = sheet.getRange(lastRow, 1).getValue();
  var sB = sheet.getRange(lastRow, 2).getValue();
var sf = sheet.getRange(lastRow, 6).getValue();


  var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
  var sheetgId = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetId();
  var email =  Session.getUser().getEmail();
  var subject = SB;
  var body = Sf;


  var url = "https://docs.google.com/spreadsheets/d/e/..............................................................=0&single=true&output=pdf";


  var result = UrlFetchApp.fetch(url)

  var contents = result.getContent();

 if (emailSent !== "EMAIL_SENT") { 

      MailApp.sendEmail(email,subject ,body, {attachments:[{fileName:SB+".pdf", content:contents, mimeType:"application//pdf"}]});
       sheet.getRange().setValue("EMAIL_SENT");

          SpreadsheetApp.flush();

        }
  }

我从电子表格中获取网址>文件>发布到网络>以 pdf 格式发布报告选项卡


我重写了代码但得到错误“TypeError: report.getAs is not a function (line 36, file "Code")

   function onSubmit(e){


 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getAet();
 
  var calculate = ss.getSheets()[2];
 var Responses = ss.getSheets()[0]; 
var report = ss.getSheets()[1];


  


 var sh = sheet.getRange(lastRow, 8).getValue();
 


   var cell = calculate.getRange("b2");
  cell.setFormula(sh); 
SpreadsheetApp.flush();
 

  var email = sB;
  var subject = 
  var body = se;
  
  var calculate = ss.getSheets()[2];
 vafunction onSubmit(e){
  Logger.log('submit ran');


  var sheet = ss.getActiveSheet();
 
  var calculate = ss.getSheets()[2];
 var Responses = ss.getSheets()[0]; 
var report = ss.getSheets()[1];


  


  var lastRow = Responses.getLastRow();
  var sa = sheet.getRange(lastRow, 1).getValue();
var se = sheet.getRange(lastRow, 5).getValue();
v
  cell.setFormula(sh); 
SpreadsheetApp.flush();
 

  var email = sB;

  var body = se;
  
  var calculate = ss.getSheets()[2];
 var Responses = ss.getSheets()[0]; 

var pdf = report.getAs('application/pdf');

 
     
      MailApp.sendEmail(email,subject ,body,  {attachments:[pdf]});
     sf.setvalue("EMAIL_SENT");
      
          SpreadsheetApp.flush();
  
  }
r Responses = ss.getSheets()[0]; 

var pdf = report.getAs('application/pdf');

 
     
      MailApp.sendEmail(t ,body,  {attachments:[pdf]});
     sf.setvalue("EMAIL_SENT");
      
          SpreadsheetApp.flush();
  
  }

【问题讨论】:

  • 您想将整个回复表作为 PDF 发送给用户,还是只发送在用户填写表单之前保存的回复?如果其他用户之后填写表格,每个用户都会收到第二封电子邮件吗?请发布您迄今为止尝试过的任何代码。
  • 每个用户都应该输入代码(用户名)和密码,然后接收关于他或她的特定数据的电子邮件,并且对于下一个用户数据将更改并且电子邮件仅发送给该用户(不是全部)跨度>

标签: javascript email google-sheets spreadsheet email-attachments


【解决方案1】:

我挖出了一个旧示例并使用 getAs() 发送文档,因此如果您只需要一张表格,您只需创建一个包含您想要发送的信息的新电子表格。

var newSheet = SpreadsheetApp.create(Title,y,x);

设置你想要的任何值,然后

var pdf = newSheet.getAs('application/pdf');
MailApp.sendEmail(email, subject, body, {attachments:[pdf]} );

我建议创建一个新的电子表格,因为您不能只将一个标签转换为 PDF。

【讨论】:

  • TypeError:report.getAs 不是函数(第 36 行,文件“代码”)
【解决方案2】:

我建议您为此使用 Apps 脚本。

您作为表单和回复表的所有者,可以创建绑定脚本并使用 Gmail 和表单服务创建所需的 pdf,并将其发送给您的用户。

您还可以创建触发器来检查何时提交新响应。


参考资料:

【讨论】:

  • 我看到了你添加的代码。看来您在MailApp.sendEmail() 行上有拼写错误。你能分享你遇到的错误吗?理想情况下是哪一行代码抛出了它?
猜你喜欢
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2022-07-11
  • 1970-01-01
  • 2020-09-03
  • 2020-10-01
相关资源
最近更新 更多