如何通过Google Slides API多次复制多张幻灯片?
问题:Google Slides API无法复制第三张幻灯片的解决方案
我需要多次复制3张幻灯片(数量可根据演示文稿调整),参考相关方案后发现无法复制第三张幻灯片,当前使用的代码如下:
function duplicateSlide() { var presentationId = "1J14grlx5pMrcsglMvmDVB22vTf89Qt0JUaq394Rltfc"; // Please set the Slides ID. var pageId1 = "g1399daed6c0_0_89"; // Please set the page ID of the source slide. var pageId2 = "g1399daed6c0_0_9"; // Please set the page ID of the source slide. var pageId3 = "g1399daed6c0_0_15"; // Please set the page ID of the source slide. var newID1 = ["First_1", "First_2", "First_3", "First_4"]; // Please set the unique ID here. var newID2 = ["Second_1A", "Second_2B", "Second_3C", "Second_4D"]; // Please set the unique ID here. var newID3 = ["Third_1A1", "Third_2B2", "Third_3C3", "Third_4D4"]; // Please set the unique ID here. var requests = newID1.reverse().map(function(id) { var obj = {}; obj[pageId1] = id; return {duplicateObject: {objectId: pageId1, objectIds: obj}}; }); var requests = newID2.reverse().map(function(id) { var obj = {}; obj[pageId2] = id; return {duplicateObject: {objectId: pageId2, objectIds: obj}}; }); var requests = newID3.reverse().map(function(id) { var obj = {}; obj[pageId3] = id; return {duplicateObject: {objectId: pageId3 , objectIds: obj}}; }); // requests.push({deleteObject: {objectId: pageId}}); Slides.Presentations.batchUpdate({'requests': requests}, presentationId); }
问题原因
你三次对requests变量重新赋值,前两次生成的复制请求数组被第三次覆盖,最终只有第三张幻灯片的复制请求被执行,前两张的请求全部丢失。
修正后的代码
将三个幻灯片的复制请求数组合并到同一个数组中,确保所有请求都能被批量执行:
function duplicateSlide() { var presentationId = "1J14grlx5pMrcsglMvmDVB22vTf89Qt0JUaq394Rltfc"; // 请设置幻灯片ID var pageId1 = "g1399daed6c0_0_89"; // 源幻灯片1的ID var pageId2 = "g1399daed6c0_0_9"; // 源幻灯片2的ID var pageId3 = "g1399daed6c0_0_15"; // 源幻灯片3的ID var newID1 = ["First_1", "First_2", "First_3", "First_4"]; // 幻灯片1的新ID列表 var newID2 = ["Second_1A", "Second_2B", "Second_3C", "Second_4D"]; // 幻灯片2的新ID列表 var newID3 = ["Third_1A1", "Third_2B2", "Third_3C3", "Third_4D4"]; // 幻灯片3的新ID列表 // 生成幻灯片1的复制请求 var requests1 = newID1.reverse().map(function(id) { var obj = {}; obj[pageId1] = id; return {duplicateObject: {objectId: pageId1, objectIds: obj}}; }); // 生成幻灯片2的复制请求 var requests2 = newID2.reverse().map(function(id) { var obj = {}; obj[pageId2] = id; return {duplicateObject: {objectId: pageId2, objectIds: obj}}; }); // 生成幻灯片3的复制请求 var requests3 = newID3.reverse().map(function(id) { var obj = {}; obj[pageId3] = id; return {duplicateObject: {objectId: pageId3 , objectIds: obj}}; }); // 合并所有请求 var requests = requests1.concat(requests2).concat(requests3); Slides.Presentations.batchUpdate({'requests': requests}, presentationId); }
补充说明
- 使用
reverse()是因为复制的幻灯片会插入到源幻灯片之后,倒序生成请求能让新幻灯片的顺序与你定义的新ID列表顺序一致;若不需要该顺序,可移除reverse() - 确保所有新ID唯一,避免与现有幻灯片ID冲突
内容的提问来源于stack exchange,提问作者Stephanie
相关产品推荐
相关产品推荐

