Google apps script 如何将图元转换为与第一个选定图元相同的大小?
我想将所有元素的大小设置为第一个选定元素的大小。但我的代码似乎有点问题,第一个元素的大小对其他元素不起作用 请参阅所附的脚本Google apps script 如何将图元转换为与第一个选定图元相同的大小?,google-apps-script,resize,google-slides,Google Apps Script,Resize,Google Slides,我想将所有元素的大小设置为第一个选定元素的大小。但我的代码似乎有点问题,第一个元素的大小对其他元素不起作用 请参阅所附的脚本 /* * Make all elements same size */ function sameSizeElements() { var selection = SlidesApp.getActivePresentation().getSelection(); var selectionType = selection.getSelectionType();
/*
* 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());
}
}
}
/*
*使所有元素大小相同
*/
函数sameSizeElements(){
var selection=SlidesApp.getActivePresentation().getSelection();
var selectionType=selection.getSelectionType();
var pageElements=selection.getPageElementRange().getPageElements();
//迭代所选页面元素以获取每个位置的值
对于(var i=0;i
下面是您可以放入ScriptEditor>code.js默认文件并刷新幻灯片的选项。它将按照您想要调试的方式工作
已更新
我们正在与谷歌应用程序脚本问题跟踪团队进行讨论-
作为当前的解决方法,该方法如何 问题和解决方法: 不幸的是,在现阶段,这一问题似乎仍未解决。这样,在您的情况下,无法检索第一个选定的图像。我认为这是你目前问题的原因 为了实现您的目标,作为当前的解决方案,我想提出以下流程
- 图像的对象ID将保存到PropertiesService
函数所有菜单(){
var slideUi=SlidesApp.getUi();
slideUi.createMenu('LAK')
.addSeparator()
.add子菜单(slideUi.createMenu('size'))
.addItem('选择基本图像','选择基本图像')//已添加
.addItem('Same Size','sameSizeElements'))
.addToUi();
}
// 1. 首先,它保存一个用作基础图像的图像。
函数selectBaseImage(){
var selection=SlidesApp.getActivePresentation().getSelection();
var pageElements=selection.getPageElementRange().getPageElements();
如果(pageElements.length==1){
PropertiesService.getScriptProperties().setProperty(“baseImage”,pageElements[0]。getObjectId());
}否则{
抛出新错误(“选择一个图像”);
}
}
// 2. 下一步,将使用保存的图像调整选定图像的大小。
函数sameSizeElements(){
var prop=PropertiesService.getScriptProperties();
var objectId=prop.getProperty(“baseImage”);
如果(objectId!=“”){
var selection=SlidesApp.getActivePresentation().getSelection();
var baseImage=selection.getCurrentPage().getPageElementById(objectId);
var pageElements=selection.getPageElementRange().getPageElements();
对于(var i=0;i
结果:
参考资料:
ctx
对象发送到/invoke
端点,该端点除其他信息(会话idssid
、文档iddocId
、修订号rev
、应用程序类型app
)外,包含有关属性值中当前选定的PageElement
s的数据,键为sel
值是字符串和数字数组的数组,其中只有一个元素包含字符串-如果仔细观察,这些字符串是按选择顺序排列的对象ID(可以使用方法确认)
至少这证实了选择的顺序是可以遵守的,但是上面提到的列表在服务器端的管理方式改变了顺序。不幸的是,我无法确认元素(除了形式为g8edc62556\u 0\u 0
的ID分组)如何通过返回的任何特定顺序。getSelection().getPageElementRange().getPageElements()
方法链:
您可以分享一个测试演示文稿示例吗?以下是您可以放入ScriptEditor->code.js默认文件并刷新幻灯片的完整代码。它将按照您想要调试的方式工作。谢谢@RafaGuillermo@OlegValter“此项目在Chrome V8支持的新应用程序脚本运行时上运行。”@puzzdboy-谢谢,我们之前与Tanaike讨论过这个问题-这是两个运行时常见的不一致性-在服务器端对所选元素的解释中存在错误,你没有做错什么。我想我们可能会为此打开一个bug问题或FR谢谢你的最佳解决方案,抱歉,我不能将其分为两个步骤。“我将从你的最佳实践中学习。”困惑的男孩谢谢你的回答。很抱歉,我的建议与您期望的方向不同。谢谢。您是否可以与他人分享您的代码,您已经给出了这个强有力的技术答案。
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.");
}
}