我正在开发一个项目,该项目使用脚本通过触摸按钮(分配给所述脚本)来输出 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) ;
}
有人有解决我的问题的建议吗?
关于
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);