您需要指定唯一 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
参考资料: