如何将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() : ""); } } } }
关键操作说明
启用Sheets高级服务:
打开脚本编辑器 → 点击左上角「扩展」→「Apps Script」→ 在脚本编辑器中,点击「服务」→「添加服务」→ 找到「Google Sheets API」并启用。核心逻辑:
- 用
getValues()获取原始值,识别标记为"CellImage"的单元格 - 调用Sheets API的
Spreadsheets.get方法,精准获取对应单元格的内嵌图片数据 - 通过
UrlFetchApp下载图片Blob,插入到Docs表格的对应单元格中
- 用
样式调整:
代码中添加了表格边框、图片大小设置,你可以根据实际需求修改参数,让Docs表格和原Sheets样式更匹配。
内容的提问来源于stack exchange,提问作者Daniil
相关产品推荐
相关产品推荐

