我正在寻找一个脚本,该脚本将根据保存在 Google 表格中相邻单元格(即 B1、B2)中的两个图像 URL 替换 Google 幻灯片中的两个图像。图像都在同一张幻灯片上。我不确定如何循环遍历图像,同时循环遍历表格单元格(即,图像 1 根据单元格 B1 中的 URL 替换,然后图像 2 根据单元格 B2 中的 URL 替换)。对示例脚本的任何帮助(我是新手!!)将不胜感激。
1 回答
这是各种东西的混搭。我已经为此工作了几个小时,终于能够替换幻灯片演示文稿上的几张图像。但这无论如何都不是一个完善的解决方案。
第一个函数会弹出一个提示对话框,让您输入幻灯片演示 ID。然后它遍历所有幻灯片和所有页面元素,寻找 SlidesApp.PageElementType.IMAGE 类型的页面元素,当它找到它们时,它会记录下一个函数所需的imageObjectId 。
function runOne() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var resp=SpreadsheetApp.getUi().prompt("Presentation Id", "Enter Presentation Id", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
var presentationId=resp.getResponseText();
var p=SlidesApp.openById(presentationId);
var slds=p.getSlides();
var n=1;
var html=Utilities.formatString('<br /><strong>Presentation Name:</strong> %s<br /><strong>Presentation Id:</strong> %s<br /><hr>',p.getName(), presentationId);
for(var i=0;i<slds.length;i++) {
var pageObjectId=slds[i].getPageElements()[0].getParentPage().getObjectId();
//var imageObjectId=slds[i].getPageElements()[0].asImage().getObjectId()
if(pageObjectId) {
var elementsA=slds[i].getPageElements();
html+=Utilities.formatString('<br /><strong>Page:</strong> %s <strong>pageObjectId:</strong> %s', i+1, pageObjectId);
for(var j=0;j<elementsA.length;j++) {
if(elementsA[j].getPageElementType()==SlidesApp.PageElementType.IMAGE) {
var imageObjectId=elementsA[j].asImage().getObjectId();
html+=Utilities.formatString('<br /> <strong>Page Element:</strong> %s <strong>imageObjectId:</strong> %s', j+1,imageObjectId);
}
}
html+='<br /><hr width="50%" align="left">';
}
}
var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000);
SpreadsheetApp.getUi().showModelessDialog(userInterface, "Slide Image Properties")
}
}
此函数进行实际替换,它需要presentationId、imageObjectId 和replacementUrl。您还必须启用高级幻灯片 API。它使用了 batchUpdate,但我没有设置它来使用多个请求,只是为了保持简单。
function replaceSlideImage(presentationId,imageObjectId,replacementUrl) {
var resource={"requests": [{"replaceImage": {"imageObjectId":imageObjectId,"url":replacementUrl}}]};
Slides.Presentations.batchUpdate(resource, presentationId)
}
所以第一个函数有你需要的大部分信息,除了replacementUrl。我获取此 url 的方式是将任何我想用于几乎任何东西的图像上传到照片库。有时最简单的做法是将其下载到我的计算机上,然后将其上传到库中。一旦它在库中单击它,将打开一个变暗的屏幕以显示图像。在此移动到图像并右键单击并选择“复制图像地址”并将其用于您的替换网址。
如果您对幻灯片演示文稿进行任何编辑,则该页面的 imageObjectId 可能会发生变化,您可能需要更新它们才能使此代码正常工作。您可以在 API Explorer 上玩所有这些。