将电子表格转换为PDF会生成无效文档

问题描述

我已经转了好几个小时。我有一些代码将电子表格转换为pdf,并且工作正常。但是,我不得不重写此代码以更改所有者,并且它不再起作用。

我已经编码了一个在互联网上找到的与此相对应的函数

function savePDFs( optSSId,optSheetId ) {
  
  // If a sheet ID was provided,open that sheet,otherwise assume script is
  // sheet-bound,and open the active spreadsheet.
  var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
  
  // Get URL of spreadsheet,and remove the trailing 'edit'
  var url = ss.getUrl().replace(/edit$/,'');
  
  // Get folder containing spreadsheet,for later export
  var parents = DriveApp.getFileById(ss.getId()).getParents();
  if (parents.hasNext()) {
    var folder = parents.next();
  }
  else {
    folder = DriveApp.getRootFolder();
  }
  
  // Get array of all sheets in spreadsheet
  var sheets = ss.getSheets();
  
  // Loop through all sheets,generating PDF files.
  for (var i=0; i<sheets.length; i++) {
    var sheet = sheets[i];
    
    // If provided a optSheetId,only save it.
    if (optSheetId && optSheetId !== sheet.getSheetId()) continue; 
    
    //additional parameters for exporting the sheet as a pdf
    var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
    + '&gid=' + sheet.getSheetId()   //the sheet's Id
    // following parameters are optional...
    + '&size=A4'      // paper size
    + '&portrait=false'   // orientation,false for landscape
    + '&horizontal_alignment=CENTER'  //LEFT/CENTER/RIGHT
    + '&vertical_alignment=MIDDLE'    //TOP/MIDDLE/BottOM
    + '&scale=4'     //1= normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
    + '&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
    
    console.log(url_ext);
    
    var options = {
      headers: {
        'Authorization': 'Bearer ' +  ScriptApp.getoAuthToken()
      }
    }
    
    var response = UrlFetchApp.fetch(url + url_ext,options);
    
    var blob = response.getBlob().setName(ss.getName() + '.pdf').setContentTypeFromExtension();
    
    //from here you should be able to use and manipulate the blob to send and email or create a file per usual.
    //In this example,I save the pdf to drive
    return folder.createFile(blob).getId();
  }
}

当我调用函数时,会进行处理,但是生成的PDF文件已损坏。你知道为什么吗?

请注意,当我测试以下用于生成PDF的网址时,它可以正常工作,并且返回的PDF有效。他们似乎是Mime转换上的问题

https://docs.google.com/spreadsheets/d/ >> / export?exportFormat = pdf&format = pdf&gid = >>&size = A4&portrait = false&horizo​​ntal_alignment = CENTER&vertical_alignment = MIDDLE&scale = 4&sheetnames = false&printtitle = false&pagenumbers = false&r = false

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)