我正在为Google表格创建一个插件,我当地的高中志愿者俱乐部可以用来跟踪其成员的志愿者时间。大部分代码已完成并且运行良好,并且我目前正在使用一个系统,该系统将向成员发送一个电子表格,其中列出了他们记录的所有志愿者活动。我让GAS创建了一个单独的电子表格,然后发送一封电子邮件,其中包含该单独的电子表格并附带PDF。收到电子邮件后,除页面左上方的单个空白单元格外,PDF为空。
我对GAS并不陌生,但是能够轻松掌握内容。我只尝试了一种发送电子表格的方法,那就是使用.getAs(MimeType.PDF)。当我将“ PDF”更改为“ GOOGLE_SHEETS”时,GAS返回了错误:“此操作的对象必须具有非空数据”。我不能完全确定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
答案 0 :(得分:1)
如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。
Drive.getFilesByName(Name)
,getFilesByName()
中没有Drive
的方法。
HOURS
中的var HOURS = app.create(Name)
。var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS)
,如果是Google文档,则在检索到Blob时,该Blob会自动转换为PDF格式。这也可以用于您的情况。SpreadsheetApp.flush()
。当以上几点反映到您的脚本中时,它如下所示。
请进行如下修改。
从:var file = Drive.getFilesByName(Name);
var file = file.next();
var FORMAT = file.getAs(MimeType.GOOGLE_SHEETS);
至:
SpreadsheetApp.flush();
var FORMAT = HOURS.getBlob();
var ROW = LOOKUP.getLastRow()
。如果我误解了您的问题,而这不是您想要的结果,我深表歉意。