【问题标题】:save a sheet from spreadsheet as pdf in same google drive folder将电子表格中的表格另存为 pdf 在同一个谷歌驱动器文件夹中
【发布时间】:2021-01-25 03:14:44
【问题描述】:

我正在尝试编写一个代码,从谷歌驱动器文件夹中获取所有文件,然后将所有文件转换为 excel 并保存在同一个文件夹中,还从每个电子表格的第二张表“V2”制作 pdf 文件并保存在同一个文件夹中.

我成功创建了 excel 文件夹,但 pdf 部分不起作用。我从许多不同的来源复制了代码。

function Generator(){
  //Factors to change every month
  var folderID = '14Bz9LLAiv2BgsT4bowxUtMfG2AsTxk91';
  
  
  // Loop through all the files and save as excel and pdf.
  var reportsFolder = DriveApp.getFolderById(folderID);
  var files = reportsFolder.getFiles();
  var TAB_NAME = 'V2' //For pdf
  while(files.hasNext()) {
    var file = files.next();
    var bnkFile = SpreadsheetApp.getActiveSpreadsheet();
    var name = file.getName();
    //Creating Excel files
    var url = "https://docs.google.com/spreadsheets/d/" + file.getId() + "/export?format=xlsx&access_token=" + ScriptApp.getOAuthToken();
    var blob = UrlFetchApp.fetch(url).getBlob().setName(name + ".xlsx"); // Modified
    reportsFolder.createFile(blob);
    //Creating PDF files
    var VName =  name.replace("REPORT", "V2");
    var V2Sheet = bnkFile.getSheetByName(TAB_NAME);
    var url2 = "https://docs.google.com/spreadsheets/d/" + V2Sheet.getId() + "/export?exportFormat=pdf&format=pdf" + ScriptApp.getOAuthToken();
    var blob2 = UrlFetchApp.fetch(url2).getBlob().setName(VName + ".pdf"); // Modified
    reportsFolder.createFile(blob2);
    
  }
}

任何生成 PDF 的简单解决方案?

【问题讨论】:

    标签: google-apps-script google-sheets pdf-generation


    【解决方案1】:

    解释:

    您需要同时指定电子表格文件的id,以及工作表本身的gid

    替换

    var url2 = "https://docs.google.com/spreadsheets/d/" + V2Sheet.getId() + "/export?exportFormat=pdf&format=pdf" + ScriptApp.getOAuthToken();
    

    var url2 = "https://docs.google.com/spreadsheets/d/"+ file.getId() + "/export?format=pdf&id="+file.getId()+"&gid="+V2Sheet.getSheetId();
    

    替换

    var bnkFile = SpreadsheetApp.getActiveSpreadsheet();
    

    var bnkFile = SpreadsheetApp.openById(file.getId());
    

    获取filespreadsheet 对象。您当前的代码将获得活动的spreadsheet,这是该脚本附加到的电子表格。

    还可以使用我在解决方案中定义的 requestData 对象。


    解决方案:

    function Generator(){
      //Factors to change every month
      var folderID = '14Bz9LLAiv2BgsT4bowxUtMfG2AsTxk91';
      
      // Loop through all the files and save as excel and pdf.
      var reportsFolder = DriveApp.getFolderById(folderID);
      var files = reportsFolder.getFiles();
      var TAB_NAME = 'V2' //For pdf
      while(files.hasNext()) {
        var file = files.next();
        
        if(file.getMimeType()=='application/vnd.google-apps.spreadsheet'){
        
        var bnkFile = SpreadsheetApp.openById(file.getId());
        var name = file.getName();
        //Creating Excel files
        var url = "https://docs.google.com/spreadsheets/d/" + file.getId() + "/export?format=xlsx&access_token=" + ScriptApp.getOAuthToken();
        var blob = UrlFetchApp.fetch(url).getBlob().setName(name + ".xlsx"); // Modified
        reportsFolder.createFile(blob);
        //Creating PDF files
        var VName =  name.replace("REPORT", "V2");
        var V2Sheet = bnkFile.getSheetByName(TAB_NAME);
        var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};
        var url2 = "https://docs.google.com/spreadsheets/d/"+ file.getId() + "/export?format=pdf&id="+file.getId()+"&gid="+V2Sheet.getSheetId();
        var blob2 = UrlFetchApp.fetch(url2,requestData).getBlob().setName(VName + ".pdf"); // Modified
        var pdfFile = reportsFolder.createFile(blob2);
        var pdfUrl = pdfFile.getUrl(); // <- pdfUrl will give you the url of the pdf file.
    
        }
      }
    }
    

    【讨论】:

    • 嗨,Marios,感谢您以正确的方式解释它。我脑子里有些事情已经清楚了。但是代码仍然对我不起作用,因为它在“var url2 =”docs.google.com/spreadsheets/d/"+file.getId()+“/export?format=pdf&id= "+file.getId()+"&gid="+V2Sheet.getSheetId();" 我认为可能是由于没有输入正确的工作表名称,但确认 TAB_NAME = V2 是正确的。可能是什么其他原因?
    • @Ajmul 我认为这正在发生,因为在 same 文件夹中还有其他类型的文件,例如(PDF 或 excel 文件)。请再次尝试我的更新解决方案。我添加了一个 if 条件来仅为 spreadsheet 类型的文件生成 excel 文件和 pdf。另外请确保工作表名称为V2 而不是V2 或`V2` 或V 2v2 等。
    • 太棒了,更改工作表名称有效。在某些工作表中有所不同。
    • 它工作得很好,我开始认为这是不可能的 :D 我有一个小问题:是否可以保存使用“reportsFolder.createFile(blob2);”创建的文件的链接这样我就可以将该链接保存到使用 i++ 创建的每个文件的工作表中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2023-03-22
    相关资源
    最近更新 更多