google-apps-script - 如何将元素转换为与第一个选定元素相同的大小?

标签 google-apps-script resize google-slides

我想将所有元素的大小设置为第一个选中元素的大小。但我的代码似乎有问题,不知何故第一个元素大小不适用于其他人。

请看附件

/*
 * Make all elements same size
 */
function sameSizeElements() {
  var selection = SlidesApp.getActivePresentation().getSelection();
  var selectionType = selection.getSelectionType();
  var pageElements = selection.getPageElementRange().getPageElements();
  
  //iterate the selected page elements to grab the values of each positiion
  for (var i = 0; i < pageElements.length; i++) {
  
    if(i != 0){
      pageElements[i].setWidth(pageElements[0].getWidth());
      pageElements[i].setHeight(pageElements[0].getHeight());
    }
  }   
}

这是 full code您可以放入 ScriptEditor > code.js 默认文件并刷新幻灯片。它将按照您想要的调试方式工作。

已更新

我们正在与 Google App Script 问题跟踪团队讨论 - https://issuetracker.google.com/issues/162545277

set this protity and check it works

最佳答案

作为当前的解决方法,这个方法怎么样?

问题和解决方法:

不幸的是,目前阶段似乎this bug仍然没有解决。这样,在您的情况下,无法检索第一个选择的图像。我认为这是您当前问题的原因。

为了实现您的目标,作为当前的解决方法,我想提出以下流程。

  1. 选择用作基本尺寸的图像并运行脚本。
    • 图像的对象ID被保存到PropertiesService。
  2. 选择要调整大小的图像并运行脚本。

当您的脚本针对此流程进行修改时,它将变成如下。

修改后的脚本:

function allMenu(){
  var slideUi = SlidesApp.getUi();
  slideUi.createMenu('LAK')
      .addSeparator()
      .addSubMenu(slideUi.createMenu('Sizes')
      .addItem('Select base image', 'selectBaseImage')  // Added
      .addItem('Same Size', 'sameSizeElements'))
      .addToUi();
}

// 1. At first, it saves an image which is used as the base image.
function selectBaseImage() {
  var selection = SlidesApp.getActivePresentation().getSelection();
  var pageElements = selection.getPageElementRange().getPageElements();
  if (pageElements.length == 1) {
    PropertiesService.getScriptProperties().setProperty("baseImage", pageElements[0].getObjectId());
  } else {
    throw new Error("Select one image.");
  }
}

// 2. As the next step, the selected images are resized using the saved image.
function sameSizeElements() {
  var prop = PropertiesService.getScriptProperties();
  var objectId = prop.getProperty("baseImage");
  if (objectId != "") {
    var selection = SlidesApp.getActivePresentation().getSelection();
    var baseImage = selection.getCurrentPage().getPageElementById(objectId);
    var pageElements = selection.getPageElementRange().getPageElements();
    for (var i = 0; i < pageElements.length; i++) {
      pageElements[i].setWidth(baseImage.getWidth());
      pageElements[i].setHeight(baseImage.getHeight());
    }
    prop.deleteProperty("baseImage");
  } else {
    throw new Error("Base image was not found.");
  }
}

结果:

enter image description here

引用资料:

关于google-apps-script - 如何将元素转换为与第一个选定元素相同的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63172078/

相关文章:

javascript - 使用谷歌脚本编辑器

wpf - 禁用调整 ListView 中列的大小

css - 网站宽度超过 100%

google-apps-script - 使用选定的页面元素创建网格 (n,n)

bokeh - 如何将 Bokeh 可视化嵌入到谷歌幻灯片中?

javascript - 从 gmail 中检索 csv 附件文件并将数据放在谷歌电子表格中

javascript - 语法错误 : Unexpected token in object literal in Google Apps script

google-slides - 如何在谷歌幻灯片 API 中将幻灯片导出为 HTML/PDF/DOC

javascript - 在 GAS 嵌入式环境中通过 Javascript 刷新 HTML 文档

html - 调整大小时 float div