【问题标题】:Google Apps script created file is not PDFGoogle Apps 脚本创建的文件不是 PDF
【发布时间】:2025-12-15 23:35:01
【问题描述】:

我正在尝试使用以下代码创建 PDF 文件:

var name = "test.pdf";
  var url = 'https://docs.google.com/spreadsheets/d/' + newSpreadsheetID + '/export?exportFormat=pdf&format=pdf' +
  '&size=A4' + 
  '&portrait=true' + 
  '&fitw=true' +       // fit to width, false for actual size
  '&sheetnames=false&printtitle=false&pagenumbers=false' +
  '&gridlines=false' + 
  '&fzr=false' +       // do not repeat frozen rows on each page
  '&gid='+SheetID;       //the sheet's Id

  var pdf = UrlFetchApp.fetch(url);
  var pdf = pdf.getBlob().setName(name);

  DocsList.createFile(pdf);

这段代码创建了一个文件,但文件只包含纯文本,你们能帮我把它变成 PDF 格式吗?

【问题讨论】:

  • 那么它是创建 .txt 文件还是 .pdf 文件?
  • 它在 Google 驱动器中显示为 .pdf,但它只有一个蓝色图标,当我打开它时,它包含很多文本
  • 文本文件包含一个 HTML 文件

标签: pdf google-apps-script


【解决方案1】:

首先,DocsList 已被弃用 (https://developers.google.com/apps-script/reference/docs-list/docs-list)。所以我认为我们这次应该使用 DriveApp。

我忽略了你用来格式化pdf的参数,脚本可以简单为-

var sheet = DriveApp.getFileById(spreadsheetId);
DriveApp.createFile(sheet.getAs("application/pdf"));

如果您需要详细说明,请告诉我。 :)

【讨论】:

  • 那行得通,但我用这个解决方案得到了网格线。我怎样才能摆脱那些? :)
【解决方案2】:

我做了一些更改,让您的电话正常工作。我不知道导出设置的文档在哪里,但其中一些不起作用,例如“网格线”。下面还有一个两行相同的例子。

function makePDF(){

var newSpreadsheetID = SpreadsheetApp.getActive().getId()
var SheetID="Sheet1";

var name = "test.pdf";
  var url = 'https://docs.google.com/spreadsheets/d/' + newSpreadsheetID + '/export?exportFormat=pdf&format=pdf'; +
  '&size=A4' + 
  '&portrait=true' + 
  '&fitw=true' +       // fit to width, false for actual size
  '&sheetnames=false&printtitle=false&pagenumbers=false' +
  '&gridlines=false' + 
  '&fzr=false'; +       // do not repeat frozen rows on each page
  '&gid='+SheetID;       //the sheet's Id

var pdf = UrlFetchApp.fetch(url,{headers: {authentication:"Bearer " + ScriptApp.getOAuthToken()}, muteHttpExceptions:true}).getBlob();
  pdf.setName(name);
DriveApp.createFile(pdf);

}

function simplePDFConvert(){
     var ss = SpreadsheetApp.openById( spreadSheetId );
     DriveApp.createFile(ss.getBlob());
}

【讨论】:

    最近更新 更多