You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Apps Script将Google Sheets多JPEG URL打包为Zip并写入链接

批量打包Google Sheets图片URL为Zip文件方案

核心思路

  1. 读取目标单元格中逗号分隔的图片URL,拆分为可遍历的数组
  2. 逐个下载图片到Google Drive临时文件夹
  3. 用Zip Utilities将临时文件夹内的图片打包为Zip文件
  4. 将Zip文件的共享链接写入目标单元格的相邻列
  5. 自动清理临时文件夹节省空间

完整脚本代码

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参数限制访问范围

使用步骤

  1. 打开目标Google表格,点击「扩展程序」→「Apps 脚本」
  2. 删除默认代码,粘贴上述脚本
  3. 根据你的表格结构,修改urlColIndex和zipLinkColIndex的数值(数组索引从0开始)
  4. 保存脚本并命名,点击运行按钮,首次运行需完成权限授权
  5. 运行结束后,相邻列会自动生成对应Zip文件的访问链接

常见问题修复

  • TypeError: Cannot read properties of null:一般是无效URL导致下载失败,脚本已添加捕获,可查看日志定位具体URL
  • 最后一个URL下载失败:原脚本未处理字符串末尾的空格或空值,当前脚本的trim()+filter()已解决此问题
  • Zip文件为空:检查所有URL是否可正常访问,若部分URL失败会在单元格标注「部分图片下载失败」

内容的提问来源于stack exchange,提问作者RBautomate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:27:34