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

请求协助实现Google Sheet图片提取至Drive并插入链接功能

Google Sheets 图片提取、上传与自动化管理方案

步骤1:配置脚本基础信息

打开目标Google表格,点击「扩展程序」→「Apps脚本」,清空默认代码,粘贴以下脚本并修改配置参数:

// 配置参数
const SHEET_NAME = "Sheet1"; // 你的工作表名称
const IMAGE_COLUMN = 2; // 图片所在列(B列=2)
const LINK_COLUMN = 3; // 链接插入列(C列=3)
const DRIVE_FOLDER_ID = "替换为你的Drive文件夹ID"; // 存储图片的Drive文件夹ID
const IMAGE_WIDTH = 800; // 自定义图片宽度(像素)
const IMAGE_HEIGHT = 600; // 自定义图片高度(像素)

/**
 * 提取表格图片并上传至Drive,插入链接到C列
 */
function extractAndUploadImages() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const images = sheet.getImages();
  
  images.forEach(image => {
    const anchorCell = image.getAnchorCell();
    if (!anchorCell) return;
    
    const row = anchorCell.getRow();
    const col = anchorCell.getColumn();
    
    // 仅处理目标列的图片
    if (col !== IMAGE_COLUMN) return;
    
    try {
      // 获取图片Blob并调整尺寸
      const originalBlob = image.getBlob();
      const resizedBlob = resizeImage(originalBlob, IMAGE_WIDTH, IMAGE_HEIGHT);
      
      // 生成唯一文件名(避免重复)
      const fileName = `表格图片_${row}_${new Date().toISOString().slice(0,10)}`;
      
      // 上传至指定Drive文件夹
      const folder = DriveApp.getFolderById(DRIVE_FOLDER_ID);
      const file = folder.createFile(resizedBlob).setName(fileName);
      
      // 设置图片为公开可查看(按需调整权限)
      file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
      
      // 插入图片链接到C列
      const imageUrl = file.getUrl();
      sheet.getRange(row, LINK_COLUMN).setValue(imageUrl);
      
      // 可选:删除原单元格内的图片
      // image.remove();
    } catch (error) {
      console.error(`处理第${row}行图片失败:${error.message}`);
    }
  });
}

/**
 * 删除当日上传的图片
 */
function deleteImages() {
  const folder = DriveApp.getFolderById(DRIVE_FOLDER_ID);
  const today = new Date();
  const startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate());
  const endOfDay = new Date(startOfDay.getTime() + 24 * 60 * 60 * 1000 - 1);
  
  const files = folder.getFiles();
  while (files.hasNext()) {
    const file = files.next();
    const createdDate = file.getDateCreated();
    
    // 删除今日创建的图片
    if (createdDate >= startOfDay && createdDate <= endOfDay) {
      file.setTrashed(true);
    }
  }
}

/**
 * 调整图片尺寸辅助函数
 */
function resizeImage(blob, width, height) {
  const image = ImageApp.open(blob);
  return image.resize(width, height).getBlob();
}

如何获取Drive文件夹ID?

  • 打开Google Drive,创建或进入目标文件夹
  • 复制浏览器地址栏中folders/后的字符串,即为文件夹ID

步骤2:授权脚本

点击脚本编辑器右上角的「运行」,首次执行会提示授权:

  1. 点击「查看权限」→ 选择你的Google账号
  2. 点击「高级」→「前往XXX(不安全)」(此为Google对自定义脚本的默认提示,脚本仅访问你的表格和Drive)
  3. 勾选权限并授权

步骤3:设置自动化触发

  1. 在脚本编辑器中点击左侧「触发器」图标(闹钟形状)
  2. 点击「添加触发器」:
    • 每日9:15提取图片:
      • 选择函数:extractAndUploadImages
      • 选择事件源:「时间驱动」
      • 选择类型:「日计时器」
      • 选择时间:「上午9:00-10:00」(如需精确到9:15,选择「特定时间」并设置具体时分)
    • 每日15:30删除图片:
      • 选择函数:deleteImages
      • 事件源:「时间驱动」
      • 类型:「日计时器」
      • 时间:「下午3:00-4:00」
    • 每月执行:
      • 类型选择「月计时器」,设置具体日期和时间

步骤4:手动执行

如需手动触发,直接在脚本编辑器中选择对应函数(extractAndUploadImages或deleteImages),点击「运行」即可。

注意事项

  • 仅支持提取内嵌图片(而非通过=IMAGE()函数插入的图片)
  • 可根据需求调整IMAGE_WIDTH和IMAGE_HEIGHT参数,或注释掉尺寸调整逻辑使用原图
  • 权限设置可按需修改:如需仅内部人员查看,将DriveApp.Access.ANYONE_WITH_LINK改为DriveApp.ACCESS_DOMAIN或DriveApp.ACCESS_PRIVATE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:24:50