Google apps script Google Appscript将所有工作表导出为PDF格式,并根据特定单元格值命名-保存在特定文件夹中
我试图将所有工作表导出为PDF格式,从单元格D5获取文件名并将其保存到Google drive中的特定文件夹中,但是,我得到了一堆与第一张工作表同名的副本。有什么建议吗?还更改了DriveApp.getRootFolder();对于getFolderbyName,似乎无法识别实际的文件夹,代码中的其他所有内容都工作正常Google apps script Google Appscript将所有工作表导出为PDF格式,并根据特定单元格值命名-保存在特定文件夹中,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我试图将所有工作表导出为PDF格式,从单元格D5获取文件名并将其保存到Google drive中的特定文件夹中,但是,我得到了一堆与第一张工作表同名的副本。有什么建议吗?还更改了DriveApp.getRootFolder();对于getFolderbyName,似乎无法识别实际的文件夹,代码中的其他所有内容都工作正常 function savePDFs( optSSId, optSheetId ) { var ss = (optSSId) ? SpreadsheetApp.openBy
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);
}
}
函数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();
}
否则{
folder=DriveApp.getFolderbyName(“发票”);
}
var sheets=ss.getSheets();
对于(var i=0;i我相信你的目标如下
- 您希望将
optSheetId
的工作表导出为PDF文件
- 您希望从每张图纸的单元格“D5”中检索值,并将其用于PDF文件的文件名
- 您希望将PDF文件放入
发票
文件夹。如果该文件夹不存在,则使用电子表格的同一文件夹
对于这个问题,这个答案如何
修改点:
- 对于
DriveApp.getFolderbyName(“发票”)
,请将getFolderbyName
修改为getFoldersByName
- 为了从每张工作表的单元格“D5”中检索值,请将
var valor=SpreadsheetApp.getActiveSheet().getRange('D5').getValue()
修改为var valor=sheet.getRange('D5').getValue();
当上述各点反映到脚本中时,它将变成如下所示
修改脚本:
函数savePDFs(optSSId,optSheetId){
var ss=(optSSId)?SpreadsheetApp.openById(optSSId):SpreadsheetApp.getActiveSpreadsheet();
var url=ss.getUrl().replace(/edit$/,“”);
var parents=DriveApp.getFileById(ss.getId()).getParents();
var folders=DriveApp.getFoldersByName('Invoices');//已修改
var folder=folders.hasNext()?folders.next():parents.next();//已修改
var sheets=ss.getSheets();
对于(var i=0;iAbout我收到了一堆与第一张相同名称的副本。有什么建议吗?
,我可以问一下你的目标的细节吗?当然可以,将所有的表导出为PDF格式,每个表的名称不同,每个表的范围D5谢谢你的回复。我不得不为我糟糕的英语技能道歉。我会的ke确认我对您的目标的理解。我认为在您当前的脚本中,只有optSheetId
的工作表被导出为PDF文件。您的目标是使用工作表名称将电子表格中的所有工作表导出为PDF文件。我的理解正确吗?非常感谢您的帮助,脚本是l浏览所有工作表,并将其导出为PDF保存在驱动器中,但我需要脚本将每个PDF命名为每张工作表D5单元格中的值。感谢您的回复。从您的回复中,我提出了一个修改的脚本作为答案。您能确认吗?工作完全符合预期,很好地使用了sheet.getrange作为p上一个在脚本启动时获得了第一张活动工作表,我对此表示感谢。@Excelson感谢您的回复。我很高兴您的问题得到解决。通过您的支持,我可以理解您的问题。也谢谢您。
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();
var folders = DriveApp.getFoldersByName('Invoices'); // Modified
var folder = folders.hasNext() ? folders.next() : parents.next(); // Modified
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 valor = sheet.getRange('D5').getValue(); // Modified
var blob = response.getBlob().setName(valor + '.pdf');
folder.createFile(blob);
}
}