【发布时间】:2020-06-30 13:45:50
【问题描述】:
我正在尝试将所有工作表导出为 PDF,从单元格 D5 中获取文件名并将它们保存到 Google 驱动器中的特定文件夹中,但是,我得到了一堆与第一张工作表同名的副本。有什么建议么?还更改了 DriveApp.getRootFolder();对于 getFolderbyName,似乎无法识别实际文件夹,代码中的其他所有内容都可以正常工作。
function savePDFs( optSSId, optSheetId ) {
var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
var url = ss.getUrl().replace(/edit$/,'');
var parents = DriveApp.getFileById(ss.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();
}
else {
folder = DriveApp.getFolderbyName('Invoices');
}
var sheets = ss.getSheets();
for (var i=0; i<sheets.length; i++) {
var sheet = sheets[i];
if (optSheetId && optSheetId !== sheet.getSheetId()) continue;
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
+ '&gid=' + sheet.getSheetId() //the sheet's Id
// 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(url + url_ext, options);
var ss2= SpreadsheetApp.getActiveSpreadsheet();
var valor = SpreadsheetApp.getActiveSheet().getRange('D5').getValue()
var blob = response.getBlob().setName(valor + '.pdf');
folder.createFile(blob);
}
}
【问题讨论】:
-
关于
I'm getting a bunch of duplicates with the same name as the first sheet. Any suggestions?,可以问一下你的目标细节吗? -
当然,将所有工作表导出为 PDF,每个工作表在每个工作表范围 D5 中都有不同的名称
-
感谢您的回复。我不得不为我糟糕的英语水平道歉。我想确认我对您的目标的理解。我认为在您当前的脚本中,只有
optSheetId的工作表被导出为 PDF 文件。您的目标是使用工作表名称到文件名将电子表格中的所有工作表导出为 PDF 文件。我的理解正确吗? -
无论如何,感谢您的帮助,脚本循环遍历所有工作表,并将它们中的每一个导出为 PDF 并将它们保存在驱动器中,但我需要脚本将每个 PDF 命名为每张纸的单元格 D5 中的值。
-
感谢您的回复。根据您的回复,我提出了一个修改后的脚本作为答案。你能确认一下吗?
标签: google-apps-script google-sheets