解决
在New Sheets中,我想创建一个分配给按钮的脚本,通过指定打印选项,包括活动范围,导出和下载工作表的PDF,而不保存文件,绕过必须使用打印对话框到Google云端硬盘。
我按crewstyle,Serge insas,Eric Koleda和其他方式查询了代码,但由于a Google bug,当muteHttpExceptions为时,.fetch当前无法对电子表格服务进行身份验证真正。但是this workaround完全绕过了身份验证并回答了我的问题。
结果是模仿本机打印行为,除了在下载时临时打开一个新选项卡,这是次要的,但我仍然希望尽可能修复它。我也很乐意以编程方式重命名下载的文件,但这并不重要。
function printPdf() {
SpreadsheetApp.flush();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var gid = sheet.getSheetId();
var pdfOpts = '&size=0&fzr=false&portrait=false&fitw=true&gridlines=false&printtitle=false&sheetnames=false&pagenum=UNDEFINED&attachment=true&gid='+gid;
var row2 = sheet.getMaxRows() - 3;
var printRange = '&c1=1' + '&r1=1' + '&c2=42' + '&r2='+row2; // B2:APn
var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + pdfOpts + printRange;
var app = UiApp.createApplication().setWidth(200).setHeight(50);
app.setTitle('Print this sheet');
var link = app.createAnchor('Download PDF', url).setTarget('_self');
app.add(link);
ss.show(app);
}