我的目标是根据文件夹中的图像自动创建和更新 Google 幻灯片演示文稿:
当前工作正常但我想自动化的工作流程如下:
- 图片位于 Google Drive 文件夹中
- 我使用文件选择器菜单(插入->图像->驱动器)手动将图像添加到每张幻灯片
- 文件夹中的图像由外部脚本定期更新,使用相同的文件名替换以前的图像。图片保留相同的 Google 云端硬盘文件 ID
- 幻灯片中的图像会自动更新,在浏览器中重新加载幻灯片演示文稿时可以看到更改
我试图达到的目标:
不要使用文件选择器一一创建幻灯片和插入图像,而是使用基于驱动器文件夹中的图像文件创建演示文稿的脚本。
我已经使用了Google Developers Pages 上的教程,并且幻灯片的创建工作正常。但是,与手动插入相比,脚本创建的幻灯片中的图像不会更新。该脚本只获取一次图像,并且似乎使用“图像的副本”。
我的测试代码是:
var NAME = "Dynamic Image Insert Test";
var presentation = SlidesApp.create(NAME);
function addImageSlide(fileID, index) {
var slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var imageurl = DriveApp.getFileById(fileID);
var image = slide.insertImage(imageurl);
var imgWidth = image.getWidth();
var imgHeight = image.getHeight();
var pageWidth = presentation.getPageWidth();
var pageHeight = presentation.getPageHeight();
var newX = pageWidth/2. - imgWidth/2.;
var newY = pageHeight/2. - imgHeight/2.;
image.setLeft(newX).setTop(newY);
}
function main() {
var images = [
"Insert ID of a File 1 on Google Drive here",
"Insert ID of a File 2 on Google Drive here"
];
var [title, subtitle] = presentation.getSlides()[0].getPageElements();
title.asShape().getText().setText(NAME);
subtitle.asShape().getText().setText("Insert Files from Drive using File ID");
images.forEach(addImageSlide);
}
此外,在检查幻灯片页面的对象属性时,似乎有 2 个参数:contentUrl 和 sourceUrl:
当使用文件选择器插入时,图像似乎使用sourceUrl,它保持不变,这样当文件在 Drive 上更新时更新图像。当使用 AppScript(或使用 API - 也经过测试)时,图像似乎使用 contentUrl,它在每次创建图像时生成,因此不引用驱动器上的文件,因此不反映对文件的任何更改驱动器。
页面对象属性的记录器输出:
{
"pageElements": [
{
"transform": {
"scaleX": 171.123,
"scaleY": 171.123,
"unit": "EMU",
"translateY": 1288327.54,
"translateX": 2375975
},
"objectId": "MyImage_01",
"image": {
"sourceUrl": "https://lh3.google.com/u/0/d/This-is-the-static-file-id",
"contentUrl": "https://lh6.googleusercontent.com/This-is-the-id-created-when-creating-the-image-on-the-slide",
"imageProperties": {
"shadow": {
"color": {
"rgbColor": {}
},
"blurRadius": {
"unit": "EMU"
},
"type": "OUTER",
"transform": {
"scaleX": 1,
"scaleY": 1,
"unit": "EMU"
},
"alpha": 1,
"propertyState": "NOT_RENDERED",
"rotateWithShape": false,
"alignment": "BOTTOM_LEFT"
},
"outline": {
"dashStyle": "SOLID",
"propertyState": "NOT_RENDERED",
"weight": {
"unit": "EMU",
"magnitude": 9525
},
"outlineFill": {
"solidFill": {
"color": {
"themeColor": "DARK2"
},
"alpha": 1
}
}
}
}
},
"size": {
"width": {
"unit": "EMU",
"magnitude": 23375
},
"height": {
"unit": "EMU",
"magnitude": 15000
}
}
}
]
}
sourceUrl 也没有记录在API 的参考资料中。
任何想法如何在插入幻灯片时使用sourceUrl而不是 contentUrl?如何使用 Google 应用脚本复制与文件选择器相同的插入语句和文件引用?