【问题标题】:Create the objectIds map with variable keys for a DuplicateObject request使用 DuplicateObject 请求的变量键创建 objectIds 映射
【发布时间】:2018-08-07 13:55:52
【问题描述】:

创建“重复对象”请求时,objectIds 映射不允许我在下面的强调部分放置变量:

var alternateSlideId = 'alternate_' + i;
{ 
    duplicateObject:
    {
        objectId: alternateSlide,
        objectIds: {
            **alternateSlide**: 'Copied_Alternate_Slide_' + i,
        }
    }
}

(i 是循环中的数字) 据我了解,地图功能的工作方式类似于
((objectId to be copied) : (name of new objectId))
我无法在地图函数的左侧使用变量,也无法将'alternate_' + i 放入地图的左侧,我不确定为什么。我需要复制之前已经复制过的多张幻灯片,因此需要有变量名。

如何将变量键分配给objectIds 映射?

【问题讨论】:

    标签: google-apps-script google-slides-api


    【解决方案1】:

    您需要指定唯一 ID。不仅是幻灯片独有的,而且是整个演示文稿所独有的。考虑使用Utilities.getUuid(),就像我在this answer 中所做的那样。

    Google Apps 脚本本质上是 JavaScript 1.6,因此要写入变量属性名称,您需要使用方括号运算符,而不是对象字面量构造函数中的点运算符或变量名称/速记语法。您过去的尝试可能试图从构造函数中执行此操作:

    不起作用(对象字面量构造函数):

    var v = "some prop name";
    var myObj = {
      v: "some prop value",
    };
    console.log(myObj); // {'v': 'some prop value'}
    

    不起作用(点运算符):

    var v = "some prop name";
    var myObj = {};
    myObj.v = "some prop value";
    console.log(myObj); // {'v': 'some prop value'}
    

    不起作用(因为 GAS 不是 ECMAScript2015 或更新版本),并在保存时抛出“Invalid property ID”错误:

    var v = "some prop name";
    var myObj = {
      [v]: "some prop value",
    };
    console.log(myObj);
    

    将起作用(括号运算符):

    var v = "some prop name";
    var myObj = {};
    myObj[v] = "some prop value";
    console.log(myObj); // {'some prop name': 'some prop value'}
    

    因此,您复制由变量 altSlide 表示的幻灯片的代码需要类似于:

    var newAltSlideId = ("copied_altSlide_" + i + "_" + Utilities.getUuid()).slice(0, 50);
    var dupRqConfig = {
      objectId: altSlide.objectId, // the object id of the source slide
      objectIds: {} // map between existing objectIds on the altSlide, and the new ids
    };
    // Set the duplicate's ID
    dupRqConfig.objectIds[altSlide.objectId] = newAltSlideId;
    // If you want to set the objectIds in the duplicate, you need to
    // loop over altSlide's child objects. An example:
    altSlide.pageElements.forEach(function (child, index) {
      dupRqConfig.objectIds[child.objectId] = /** some new id */;
    });
    requests.push({ duplicateObject: dupRqConfig }); // add the request to the batchUpdate list
    

    参考资料:

    【讨论】:

    • 非常感谢,这是一个非常彻底的答案,它解决了我遇到的多个问题!
    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多