首页 > 解决方案 > 使用 getBlob() 和 activesheet 创建 pdf 缺少最近的更新

问题描述

我正在尝试将单页电子表格保存为 pdf。许多博客解释了如何使用 getBlob() 来做到这一点,所以我最终得到了这个:

var theBlob = jobSpreadSheet.getBlob().getAs('application/pdf');
var newFile = getPdfFolder().createFile(theBlob.setName(fileName + ".pdf"));

为了创建 jobSpreadSheet,我创建了一个新的电子表格:

var tempSpreadsheet = SpreadsheetApp.create(name);
var driveTempFile = DriveApp.getFileById(tempSpreadsheet.getId());
var jobsFolder = getJobsFolder();
var driveNewFile = driveTempFile.makeCopy(name, jobsFolder);
var jobSpreadsheet = SpreadsheetApp.open(driveNewFile);

接下来,我将一个模板复制到新的电子表格中并删除空的第一张表:

var jobCard = jobCardTemplate.copyTo(jobSpreadSheet).setName('Job Card');
jobSpreadSheet.deleteSheet(jobSpreadSheet.getSheets()[0]);

然后我更新了 jobCard 中的几个单元格,最后创建了 pdf。除了创建 pdf 之外,所有步骤都有效。pdf 已创建,它包含模板,但不包含更新的值。我是否应该让创建 pdf 步骤以某种方式等待更新被保存?

标签: pdfgoogle-apps-script

解决方案


您是否在脚本中的任何位置调用 .saveChanges() ?(在获取 blob 之前。)不确定工作表是否需要这样做,但我在文档中遇到了类似的问题,因为在获取 blob 之前我没有保存更改。

编辑:

刚刚使用以下代码进行了测试,似乎不需要 .saveChanges:

function test() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");

sheet.getRange(1, 1, 1, 1).setValue("Test");

var file = DriveApp.getFileById(ss.getId());
var blob = file.getBlob().getAs('application/pdf');

DriveApp.createFile(blob);


}

推荐阅读