修改Google Apps Script:逐行写入幻灯片URL并支持单元格覆盖
修改后的Google Apps Script代码
以下是修改后的脚本,实现了逐行处理后立即写入缩略图URL,并强制覆盖目标单元格已有数据的需求,同时解决了原脚本超时导致数据丢失的问题:
function changeSlideTextAndDuplicate() { var presentationId = "11i9F3qH-xX1c4FGO6cSSAaTGNwTRowk-6W183lntLRA"; // 替换为你的Google幻灯片ID var folderId = "1q0zcPGCttQkMrG14HdtORsahcJwkBnGA"; // 替换为存储缩略图的Drive文件夹ID var folder = DriveApp.getFolderById(folderId); var sheet = SpreadsheetApp.getActiveSheet(); // 如需指定工作表,改为`getSheetByName("你的工作表名称")` var lastRow = sheet.getLastRow(); var presentation = SlidesApp.openById(presentationId); var templateSlide = presentation.getSlides()[0]; // 逐行遍历处理数据(从第4行开始) for (var row = 4; row <= lastRow; row++) { var name = sheet.getRange(row, 1).getDisplayValue(); var guests = sheet.getRange(row, 2).getDisplayValue(); // 姓名或宾客数为空时,清空对应URL单元格 if (!name || !guests) { sheet.getRange(row, 3).setValue(""); continue; } // 基于模板创建新幻灯片并填充内容 var newSlide = presentation.appendSlide(templateSlide); newSlide.getShapes()[0].getText().setText(name); newSlide.getShapes()[1].getText().setText("No. of Guests: " + guests); // 保存幻灯片确保新内容生效 presentation.saveAndClose(); // 获取缩略图并保存到Drive var { contentUrl } = Slides.Presentations.Pages.getThumbnail(presentationId, newSlide.getObjectId(), { "thumbnailProperties.thumbnailSize": "LARGE" }); var blob = UrlFetchApp.fetch(contentUrl).getBlob().setName(name); var fileUrl = folder.createFile(blob).getUrl(); // 立即将URL写入对应单元格(强制覆盖已有数据) sheet.getRange(row, 3).setValue(fileUrl); // 重新打开幻灯片以继续处理下一行 presentation = SlidesApp.openById(presentationId); } // 脚本结束前关闭幻灯片释放资源 if (presentation) { presentation.saveAndClose(); } }
关键修改说明
- 逐行处理+即时写入:放弃原批量处理逻辑,改用
for循环逐行处理数据,每完成一行的幻灯片生成与缩略图保存后,立刻将URL写入对应单元格,彻底避免超时导致已生成数据丢失。 - 强制覆盖逻辑:移除了原脚本中「已有URL则跳过」的判断,只要姓名和宾客数有效,就重新生成内容并覆盖目标单元格的原有数据。
- 资源优化:脚本结束前增加了幻灯片关闭操作,确保释放占用的资源。
内容的提问来源于stack exchange,提问作者Tasneem Ghoor
相关产品推荐
相关产品推荐

