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

如何将Google Sheets单元格内的图片复制到Google文档

解决Google Sheets内嵌图片复制到Google Docs的问题

你的问题出在getDisplayValues()只会提取单元格文本内容,完全忽略内嵌图片;而getImages()仅能获取工作表上的浮动图片,无法读取单元格内嵌的剪贴板粘贴图。要处理这类图片,需要借助Google Sheets高级服务获取图片数据,再逐个插入到Docs表格对应位置。

修改后的完整代码

function copySheetWithImagesToDoc() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("mysheet");
  const range = sheet.getDataRange();
  const values = range.getValues(); // 获取包含CellImage标记的原始值
  const numRows = range.getNumRows();
  const numCols = range.getNumColumns();

  // 创建文档并移动到指定文件夹
  const folderId = "FOLDER_ID";
  const folder = DriveApp.getFolderById(folderId);
  const doc = DocumentApp.create("KPI report");
  const docFile = DriveApp.getFileById(doc.getId());
  docFile.moveTo(folder);
  const body = doc.getBody();

  // 构建Docs表格框架
  const table = body.appendTable();
  table.setBorderWidth(1); // 可选:设置表格边框,对齐Sheets样式

  // 遍历每一行
  for (let rowIdx = 0; rowIdx < numRows; rowIdx++) {
    const tableRow = table.appendTableRow();
    // 遍历每一列单元格
    for (let colIdx = 0; colIdx < numCols; colIdx++) {
      const cellValue = values[rowIdx][colIdx];
      const tableCell = tableRow.appendTableCell();

      // 判断是否为单元格内嵌图片
      if (cellValue === "CellImage") {
        // 通过Sheets高级服务获取图片数据
        const sheetId = sheet.getSheetId();
        const cellA1 = range.getCell(rowIdx + 1, colIdx + 1).getA1Notation();
        const response = Sheets.Spreadsheets.get(ss.getId(), {
          ranges: [`${sheet.getName()}!${cellA1}`],
          fields: "sheets/data/rowData/values/effectiveValue/imageValue"
        });

        // 提取图片Blob并插入单元格
        const imageValue = response.sheets[0].data[0].rowData[0].values[0].effectiveValue.imageValue;
        if (imageValue) {
          const imageBlob = UrlFetchApp.fetch(imageValue.contentUrl).getBlob();
          tableCell.appendImage(imageBlob);
          // 可选:调整图片大小适配单元格
          const image = tableCell.getImages()[0];
          image.setWidth(100); // 根据需求调整宽度
          image.setHeight(80);
        }
      } else {
        // 普通文本单元格直接插入内容
        tableCell.setText(cellValue ? cellValue.toString() : "");
      }
    }
  }
}

关键操作说明

  1. 启用Sheets高级服务:
    打开脚本编辑器 → 点击左上角「扩展」→「Apps Script」→ 在脚本编辑器中,点击「服务」→「添加服务」→ 找到「Google Sheets API」并启用。

  2. 核心逻辑:

    • 用getValues()获取原始值,识别标记为"CellImage"的单元格
    • 调用Sheets API的Spreadsheets.get方法,精准获取对应单元格的内嵌图片数据
    • 通过UrlFetchApp下载图片Blob,插入到Docs表格的对应单元格中
  3. 样式调整:
    代码中添加了表格边框、图片大小设置,你可以根据实际需求修改参数,让Docs表格和原Sheets样式更匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:38:16