如何解决Google脚本错误:openById发生意外错误
我正在制作一个自动化系统,它将Google电子表格转换为PDF文件并保存在我的Google驱动器中。 我知道此脚本可在我的项目页面上成功运行,但不适用于触发器。 我该如何解决这个问题?
在5:39行出现了错误消息。 在这里
var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
请帮助我!
function savePDFs( optSSId,optSheetId ) {
// If a sheet ID was provided,open that sheet,otherwise assume script is
// sheet-bound,and open the active spreadsheet.
var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
// Get folder containing spreadsheet,for later export
var parents = DriveApp.getFileById(ss.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();
}
else {
folder = DriveApp.getRootFolder();
}
//additional parameters for exporting the sheet as a pdf
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
// Print either the entire Spreadsheet or the specified sheet if optSheetId is provided
+ (optSheetId ? ('&gid=' + sheet.getSheetId()) : ('&id=' + ss.getId()))
// following parameters are optional...
+ '&size=letter' // paper size
+ '&portrait=true' // orientation,false for landscape
+ '&fitw=true' // fit to width,false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
}
}
var response = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/" + url_ext,options);
var blob = response.getBlob().setName(ss.getName() + '.pdf');
//from here you should be able to use and manipulate the blob to send and email or create a file per usual.
//In this example,I save the pdf to drive
folder.createFile(blob);
}
解决方法
在Google Apps脚本中,触发器将事件对象传递给它们所调用的函数。
如果触发器直接调用savePDFs
函数,则将事件对象分配给optSSId
。由于这不是字符串,因此可能是问题的原因。
代替直接调用savePDFs
,将触发器设置为调用另一个函数,然后进行此功能调用savePDFs
,而不传递任何变量。即:
function respondToTimeDrivenTrigger(e){
savePDFs();
}
,
如果传递给id
的{{1}}不正确(有时没有原因),
使用openById发生意外错误
openById()
时会抛出。
如果脚本已绑定,则可以使用SpreadsheetApp.openById()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。