如何使用Google Apps Script提取单元格内图片中的文本
使用Google Apps Script提取单元格图片中的文本
你完全可以先将包含图片的单元格(或单元格内的图片)保存为图片文件,再借助Google Drive的内置OCR功能提取文本。以下是两种常见场景的实现代码:
场景1:提取单元格内嵌入的图片文本
如果图片是通过「插入>图片>放在单元格内」的方式嵌入到目标单元格中的,直接获取图片Blob即可进行OCR:
function extractImageTextFromCell() { // 激活当前工作表 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 指定目标单元格(替换为你的单元格位置,比如"B2") const targetCell = sheet.getRange("A1"); // 获取单元格内的所有图片 const images = targetCell.getImages(); if (images.length === 0) { Logger.log("目标单元格中没有嵌入图片"); return; } // 提取第一张图片的Blob对象 const imageBlob = images[0].getBlob(); // 在Drive中创建临时图片文件 const tempFile = DriveApp.createFile(imageBlob); tempFile.setName("临时OCR识别图片"); // 调用Drive API执行OCR并提取文本(zh代表中文,可改为en/ja等) const ocrContent = Drive.Files.export( tempFile.getId(), "text/plain", { ocr: true, ocrLanguage: "zh" } ); // 打印识别结果到日志 Logger.log("识别到的文本:\n" + ocrContent); // 自动删除临时文件(移至回收站) tempFile.setTrashed(true); }
场景2:将整个单元格区域转为图片后提取文本
如果需要把整个单元格(包含背景、内容等)导出为图片再识别,用以下代码:
function extractCellAsImageText() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 指定目标单元格区域(支持多单元格,比如"A1:C3") const targetRange = sheet.getRange("A1"); // 将单元格区域导出为PNG格式的Blob const imageBlob = targetRange.getAs("image/png"); // 创建Drive临时文件 const tempFile = DriveApp.createFile(imageBlob); // 执行OCR识别 const ocrContent = Drive.Files.export( tempFile.getId(), "text/plain", { ocr: true, ocrLanguage: "zh" } ); Logger.log("识别结果:\n" + ocrContent); // 清理临时文件 tempFile.setTrashed(true); }
关键注意事项
- 启用Drive API:首次运行代码前必须开启Drive API:
- 在脚本编辑器中点击「资源>高级Google服务」
- 找到「Drive API」,开启后点击确定
- 语言适配:根据图片文本语言修改
ocrLanguage参数,比如英文用"en",日文用"ja" - 识别准确率:确保图片文本清晰、无模糊,否则OCR结果会受影响
- 临时文件:代码会自动将临时文件移至回收站,若需保留可删除
setTrashed(true)这一行
内容的提问来源于stack exchange,提问作者HRGM
相关产品推荐
相关产品推荐

