首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用GAS函数通过电子邮件发送电子表格的有效方法?

使用GAS函数通过电子邮件发送电子表格的有效方法?
EN

Stack Overflow用户
提问于 2019-06-25 19:53:43
回答 1查看 181关注 0票数 2

我正在为Google页面创建一个注释,我所在的高中的志愿者俱乐部可以用它来记录他们成员的志愿者时间。大部分代码都已经完成并且工作得很好,我目前正在开发一个系统,它将向一个成员发送一个电子表格,列出他们记录的所有志愿活动。我有气体创建一个单独的电子表格,然后发送一封电子邮件与该单独的电子表格附加在PDF。当收到电子邮件时,PDF是空的,除了页面左上角的单数空单元格外。

我对汽油很陌生,但能够很容易地掌握内容。我只尝试过一种发送电子表格的方法,即使用.getAs(MimeType.PDF)。当我将"PDF“改为"GOOGLE_SHEETS”时,GAS返回了错误:"Blob对象必须具有此操作的非空数据。“我不完全确定Blob对象是什么,也没有发现任何网站或视频已经完全解释了它,所以我不知道如何去排除这个错误。

我想我在抓取文件时遇到了问题,因为它要么发送一个空PDF,要么返回一个错误,声称它需要“非空数据”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function TigerMail()
{
  var Drive = DriveApp;
  var app = SpreadsheetApp;
  var LOOKUP = app.getActiveSpreadsheet().getSheetByName("Student 
  Lookup");
  var Name = LOOKUP.getRange("E1").getValue();
  Name = Name + "'s Hours";
  //app.openById(Name+"'s Hours");
  var HOURS = app.create(Name);
  var ESheet = HOURS.getSheets()[0];
  var ROW = LOOKUP.getLastRow();
  var arr = LOOKUP.getRange("D1:J"+ROW).getValues();
  var cell = ESheet.getRange("A1:G"+ROW);
  cell.setValues(arr);

////////////////////////////////////////////////////

  var LOOKUP = app.getActiveSpreadsheet().getSheetByName("Student 
  Lookup");
  var cell = LOOKUP.getRange("D1");  
  var Addr = cell.getValue();
  var ROW = LOOKUP.getLastRow();
  var file = Drive.getFilesByName(Name);
  var file = file.next();
  var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS);

  TigerMail.sendEmail(Addr, "Hours", "Attached is a list of all of the 
  events you have volunteered at:", {attachments: [FORMAT]} );
}

最后四行是错误发生的地方。我相信我误解了.next()和.getFilesByName()的工作方式。

(注释行上方:创建小时电子表格)

(注释行下方:抓取电子表格并将其附加到电子邮件中)

下面是到Google工作表的链接:https://docs.google.com/spreadsheets/d/1qlUfTWaj-VyBD2M45F63BtHaqF0UOVkwi04XwZFJ4vg/edit?usp=sharing

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 22:05:40

  • 在您的脚本中,将创建新的电子表格并放置值。
  • 您希望通过附加从创建的电子表格转换为PDF格式的文件发送电子邮件。

如果我的理解是正确的,这次修改怎么样?请把这看作是几个答案中的一个。

修改要点:

  • 不幸的是,关于Drive.getFilesByName(Name)Drive中没有getFilesByName()的方法。
    • 我认为,当您想要使用创建的电子表格时,可以使用HOURS of var HOURS = app.create(Name)

  • 关于var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS),在Google中,当blob被检索时,blob会自动转换为PDF格式。这也可以用于您的情况。
  • 为了保存放到创建的电子表格中的值,它使用SpreadsheetApp.flush()

当以上要点反映到您的脚本中时,如下所示。

修改脚本:

请按以下方式修改。

发自:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var file = Drive.getFilesByName(Name);
var file = file.next();
var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS);

至:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SpreadsheetApp.flush();
var FORMAT = HOURS.getBlob();

注意:

  • 在您的脚本中,似乎没有使用var ROW = LOOKUP.getLastRow()

参考文献:

如果我误解了你的问题,而这不是你想要的结果,我道歉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56764928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文