使用Google Apps Script将Google Sheets多JPEG URL打包为Zip并写入链接
批量打包Google Sheets图片URL为Zip文件方案
核心思路
- 读取目标单元格中逗号分隔的图片URL,拆分为可遍历的数组
- 逐个下载图片到Google Drive临时文件夹
- 用Zip Utilities将临时文件夹内的图片打包为Zip文件
- 将Zip文件的共享链接写入目标单元格的相邻列
- 自动清理临时文件夹节省空间
完整脚本代码
function batchZipImages() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); // 自定义列索引:图片URL所在列(数组从0开始,B列对应1),Zip链接写入列(C列对应2) const urlColIndex = 1; const zipLinkColIndex = 2; values.forEach((row, rowIndex) => { // 跳过表头行,不需要的话直接删除此判断 if (rowIndex === 0) return; const urlString = row[urlColIndex]; if (!urlString || urlString.trim() === '') { sheet.getRange(rowIndex + 1, zipLinkColIndex + 1).setValue('无图片URL'); return; } // 拆分URL并处理空格、空值 const imageUrls = urlString.split(',').map(url => url.trim()).filter(url => url !== ''); // 创建独立临时文件夹 const tempFolder = DriveApp.createFolder(`临时图包_${rowIndex + 1}`); let downloadError = false; // 遍历下载每个图片 imageUrls.forEach((url, index) => { try { const response = UrlFetchApp.fetch(url); const blob = response.getBlob(); tempFolder.createFile(blob).setName(`图片${index + 1}.jpeg`); } catch (e) { Logger.log(`下载失败:${url},错误:${e}`); downloadError = true; } }); if (downloadError) { sheet.getRange(rowIndex + 1, zipLinkColIndex + 1).setValue('部分图片下载失败'); tempFolder.setTrashed(true); return; } // 打包并生成共享链接 try { const zipBlob = Utilities.zip(tempFolder.getFiles(), `图包_${rowIndex + 1}.zip`); const zipFile = DriveApp.getRootFolder().createFile(zipBlob); // 设置链接权限为可公开查看,可根据需求调整为仅限特定用户 zipFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); sheet.getRange(rowIndex + 1, zipLinkColIndex + 1).setValue(zipFile.getUrl()); tempFolder.setTrashed(true); } catch (e) { Logger.log(`打包失败:${e}`); sheet.getRange(rowIndex + 1, zipLinkColIndex + 1).setValue('打包失败'); tempFolder.setTrashed(true); } }); SpreadsheetApp.getUi().alert('批量打包完成'); }
关键逻辑说明
- URL数组处理:通过
split(',')拆分字符串,用trim()清除空格、filter()过滤空值,确保每个URL都能被正确遍历 - 临时文件夹隔离:为每行创建独立临时文件夹,避免不同行的图片文件冲突
- 异常捕获:针对下载、打包环节添加错误捕获,在单元格标注状态并记录日志,方便排查问题
- 权限控制:默认设置Zip文件为公开可查看,可根据实际需求修改
setSharing参数限制访问范围
使用步骤
- 打开目标Google表格,点击「扩展程序」→「Apps 脚本」
- 删除默认代码,粘贴上述脚本
- 根据你的表格结构,修改
urlColIndex和zipLinkColIndex的数值(数组索引从0开始) - 保存脚本并命名,点击运行按钮,首次运行需完成权限授权
- 运行结束后,相邻列会自动生成对应Zip文件的访问链接
常见问题修复
- TypeError: Cannot read properties of null:一般是无效URL导致下载失败,脚本已添加捕获,可查看日志定位具体URL
- 最后一个URL下载失败:原脚本未处理字符串末尾的空格或空值,当前脚本的
trim()+filter()已解决此问题 - Zip文件为空:检查所有URL是否可正常访问,若部分URL失败会在单元格标注「部分图片下载失败」
内容的提问来源于stack exchange,提问作者RBautomate
相关产品推荐
相关产品推荐

