【发布时间】:2018-07-11 15:22:01
【问题描述】:
我编写了一些代码来自动将用户名添加到模板 Google 幻灯片文件中。这个模板本质上是一个证书,我正在尝试为每个用户自动生成所述证书。
不幸的是,当我尝试将幻灯片文件转换为 PDF 时,它会转换没有用户名的幻灯片 - 例如基本上只是模板文件被导出。它肯定会提取正确的文件 ID,但仍然无法正常工作。我能想到的唯一问题是,当代码从DriveApp 获取 blob 数据时,演示文稿还没有保存更改。
function buildCertificate() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'),
rows = sheet.getDataRange().getValues(),
template = DriveApp.getFileById('some file id'),
destination = DriveApp.getFolderById('some folder id'),
i = 1;
while (i < rows.length) {
if (rows[i][3] != 'Y') {
var file = template.makeCopy(rows[i][0] + ' ' + rows[i][1], destination),
id = file.getId(),
slide = SlidesApp.openById(id).getSlides()[0],
shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 60, 207, 600, 110),
textRange = shape.getText(),
textStyle = textRange.getTextStyle();
textRange.setText([rows[i][0] + ' ' + rows[i][1]]);
textStyle.setFontSize(40);
textStyle.setForegroundColor('#F9B300');
var paragraphStyle = textRange.getParagraphs()[0].getRange().getParagraphStyle();
paragraphStyle.setParagraphAlignment(SlidesApp.ParagraphAlignment.CENTER);
var theBlob = DriveApp.getFileById(id).getBlob().getAs('application/pdf').setName('test'),
newFile = DriveApp.getFolderById("some folder id").createFile(theBlob);
}
sheet.getRange(i + 1, 4).setValue('Y');
i++;
}
}
【问题讨论】:
-
在使用
DriveApp获取文件数据之前,您需要关闭打开的演示文稿以刷新挂起的写入操作 -
尝试在 slidesapp 对象上添加 saveandclose() 方法
标签: google-apps-script export-to-pdf google-slides-api