Моя цель - автоматизировать создание и обновление презентации Google Slides на основе изображений в папке:
Текущий рабочий процесс, который работает правильно, но который я хочу автоматизировать, выглядит следующим образом:
- Изображения находятся в папке на Google Диске
- Я вручную добавляю изображения на каждый слайд с помощью меню выбора файлов (Вставка -> Изображение -> Диск).
- Изображения в папке периодически обновляются внешним сценарием, заменяя предыдущие изображения с тем же именем файла. Изображения сохраняют тот же идентификатор файла на Google Диске.
- Изображения в слайдах обновляются автоматически, и изменения видны при перезагрузке презентации слайдов в браузере.
Чего я пытаюсь достичь:
Вместо создания слайдов и вставки изображений с помощью средства выбора файлов по одному используйте сценарий, который создает презентацию на основе файлов изображений в папке на Диске.
Я использовал Учебник на страницах разработчиков Google и создал Слайды работают нормально. Однако, в отличие от ручной вставки, изображения на слайдах, созданных сценарием, не обновляются. Скрипт выбирает изображения только один раз и, кажется, использует «копию изображений».
Мой тестовый код:
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, который остается неизменным, и таким образом обновляет изображение при обновлении файла на Диске. При использовании 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 при вставке слайдов? Как я могу воспроизвести тот же оператор Insert и ссылку на файл, что и средство выбора файлов, с помощью скрипта приложения Google?