将 spreadsheet 中的 sheet 保存为同一个 google 驱动器文件夹中的 pdf

save a sheet from spreadsheet as pdf in same google drive folder

我正在尝试制作一个代码,从 google 驱动器文件夹中获取所有文件,然后将所有文件转换为 excel 并保存在同一文件夹中,并从第二个 sheet 'V2' 每个传播sheet 并保存在同一文件夹中。

我成功创建了 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 的简单解决方案?

解释:

您需要指定 spreadsheet 文件的 id 以及 文件的 gid sheet本身。

替换

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,这是此脚本附加到的传播sheet。

也使用我在解决方案中定义的 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.

    }
  }
}