【发布时间】:2019-06-26 14:07:29
【问题描述】:
我正在为 Google 表格创建一个插件,我当地的高中志愿者俱乐部可以使用它来跟踪其成员的志愿者时间。大多数代码已经完成并且运行良好,我目前正在开发一个系统,该系统将向成员发送一个电子表格,其中列出了他们记录的所有志愿者事件。我让 GAS 创建了一个单独的电子表格,然后发送一封电子邮件,其中包含以 PDF 格式附加的单独电子表格。收到电子邮件后,除了页面左上角的单个空单元格外,PDF 为空。
我对 GAS 很陌生,但能够很容易地掌握内容。我只尝试了一种发送电子表格的方法,那就是使用 .getAs(MimeType.PDF)。当我将“PDF”更改为“GOOGLE_SHEETS”时,GAS 返回错误:“Blob 对象必须具有此操作的非空数据。”我不完全确定 Blob 对象是什么,也没有找到任何网站或视频对其进行了充分解释,因此我不确定如何解决该错误。
我认为我在获取文件时遇到了问题,因为它要么发送一个空 PDF,要么返回一个错误,声称它需要“非空数据”。
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
【问题讨论】:
-
嗨,我曾经尝试将文件添加为附件时遇到了类似的问题,我的解决方案是将 url 添加到电子邮件的正文中,您可以通过将 sendEmail 调用更改为:@ 987654323@ 驱动器 URL 链接为电子邮件正文中的附件,在您的情况下,它将作为电子表格发送
标签: google-apps-script google-sheets