【发布时间】:2020-10-22 20:10:54
【问题描述】:
我知道之前在Using Google Apps Script to save a single sheet from a spreadsheet as pdf in a specific folder 下提出过类似类型的问题
使用的代码对我有用,如下所述:
function generatePdf() {
// Get active spreadsheet.
var sourceSpreadsheet = SpreadsheetApp.getActive();
// Get active sheet.
var sheets = sourceSpreadsheet.getSheets();
var sheetName = sourceSpreadsheet.getActiveSheet().getName();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
// Set the output filename as SheetName.
var pdfName = sheetName;
// Get folder containing spreadsheet to save pdf in.
var parents = DriveApp.getFileById(sourceSpreadsheet.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();
} else {
folder = DriveApp.getRootFolder();
}
// Copy whole spreadsheet.
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))
// Delete redundant sheets.
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];
// Repace cell values with text (to avoid broken references).
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);
// Save to pdf.
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile = folder.createFile(theBlob);
// Delete the temporary sheet.
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}
我遇到的问题是我的源工作表有一些字段是使用vlookup 自动填充到工作表中的。这些字段在此脚本创建的临时文件中导出,因为我检查了垃圾并且存在字段值,但代码生成的 PDF 缺少所有 vlookup 数据。
PDF示例图如下,其中vlookup缺失的条目用黄色标记:
虽然垃圾箱中的临时 google 工作表具有相应单元格中的值。相同的屏幕截图如下,vlookup 字段以红色突出显示。
请帮助我解决问题。
【问题讨论】:
标签: google-apps-script google-sheets pdf-generation