Google 电子表格导出到 PDF 脚本隐藏公式结果(值)

问题描述 投票:0回答:1

我正在开发一个项目,该项目使用脚本通过触摸按钮(分配给所述脚本)来输出 PDF。

我遇到的问题是,导出到 PDF 的工作表中存在一些值,这些值是使用公式计算的,但未显示在导出的 PDF 上。

为了更加清楚起见,假设单元格 A1 有 =SUM(1+1),它显示结果 2,它不会在 PDF 上显示它,而是显示一个空单元格。

我正在使用此代码:

function onOpen() {
  var submenu = [{name:"Save PDF", functionName:"generatePdf"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu('Export', submenu);
}

function generatePdf() {
  var sourceSpreadsheet = SpreadsheetApp.getActive();

  var sheets = sourceSpreadsheet.getSheets();
  var sheetName = sourceSpreadsheet.getActiveSheet().getName();
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
  var titleName = sourceSpreadsheet.getRange("G1").getValue();
  var pdfName = titleName;

  var parents = DriveApp.getFileById(sourceSpreadsheet.getId()).getParents();
  if (parents.hasNext()) {
    var folder = parents.next();
  }
  else {
    folder = DriveApp.getRootFolder();
  }

  var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))

  var sheets = destSpreadsheet.getSheets();
  for (i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetName() != sheetName){
      destSpreadsheet.deleteSheet(sheets[i]);
    }
  }

  var destSheet = destSpreadsheet.getSheets()[0];

  var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
  var sourcevalues = sourceRange.getValues();
  var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
  destRange.setValues(sourcevalues);

  var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
  var newFile = folder.createFile(theBlob);

  DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true) ;
} 

有人有解决我的问题的建议吗?

spreadsheet export-to-pdf
1个回答
0
投票

关于

For extra clarity, say cell A1 has =SUM(1+1) which shows the outcome 2, it will not show it on the PDF, it rather shows an empty cell.
,当我使用您的显示脚本对此进行测试时,
2
显示在导出的PDF文件中。不幸的是,我无法复制你的情况。所以,这只是我的猜测。请按如下方式修改您的脚本并再次测试。

来自:

destRange.setValues(sourcevalues);

var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);

致:

destRange.setValues(sourcevalues);
SpreadsheetApp.flush(); // Added
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
© www.soinside.com 2019 - 2024. All rights reserved.