Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google Appscript将所有工作表导出为PDF格式,并根据特定单元格值命名-保存在特定文件夹中_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script Google Appscript将所有工作表导出为PDF格式,并根据特定单元格值命名-保存在特定文件夹中

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

我试图将所有工作表导出为PDF格式,从单元格D5获取文件名并将其保存到Google drive中的特定文件夹中,但是,我得到了一堆与第一张工作表同名的副本。有什么建议吗?还更改了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);
  }
}


函数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);
  }
}