-1

我正在寻找一个脚本,该脚本将根据保存在 Google 表格中相邻单元格(即 B1、B2)中的两个图像 URL 替换 Google 幻灯片中的两个图像。图像都在同一张幻灯片上。我不确定如何循环遍历图像,同时循环遍历表格单元格(即,图像 1 根据单元格 B1 中的 URL 替换,然后图像 2 根据单元格 B2 中的 URL 替换)。对示例脚本的任何帮助(我是新手!!)将不胜感激。

4

1 回答 1

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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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 上玩所有这些。

于 2019-11-22T20:06:28.057 回答