【问题标题】:ocr images from list of urls and store the results in spreadsheet来自 url 列表的 ocr 图像并将结果存储在电子表格中
【发布时间】:2025-12-30 13:50:06
【问题描述】:

您好,我有一个包含数字的图像 URL 列表,我想对它们进行 OCR 并将结果存储在谷歌电子表格中 我已经找到了这些用于 ocr 图像的 google 脚本

1-https://gist.github.com/tagplus5/07dde5ca61fe8f42045d

2-https://ctrlq.org/code/20128-extract-text-from-image-ocr

但我不知道如何创建请求变量,所以我将请求变量替换为 URL 变量,如下所示:

function doGet(url) {
  if (url != undefined && url != "") {
    var imageBlob = UrlFetchApp.fetch(url).getBlob();
    var resource = {
      title: imageBlob.getName(),
      mimeType: imageBlob.getContentType()
    };
    var options = {
      ocr: true
    };

    var docFile = Drive.Files.insert(resource, imageBlob, options);
    var doc = DocumentApp.openById(docFile.id);
    var text = doc.getBody().getText().replace("\n", "");
    Drive.Files.remove(docFile.id);
    return ContentService.createTextOutput(text);
  }
  else {
    return ContentService.createTextOutput("request error");
  }
}

问题是当我调用类似 doGet(B1) 的函数时,其中 B1 包含 google 电子表格中图像的 url 以执行 OCR 并在单元格 C1 中获取结果文本,它表示 Drive 变量未定义

希望尽快得到答复

【问题讨论】:

  • Drive 已弃用并变为 DriveApp 并且您列出的帖子已过时。请改为查看此帖子。 *.com/questions/12481333/…
  • 你提到的链接也使用 Drive 函数,我不知道如何修改函数 doGet() 以便它完成工作,谢谢
  • 哎呀,你是对的。我会搜索更多。

标签: google-apps-script google-drive-api ocr


【解决方案1】:

好的,我修改了您的脚本并制作了一张表格来展示示例。工作表是here(任何人都可以编辑),其脚本如下。应启用 Advanced Drive Service 的 Drive API(v2) 才能运行此脚本。

function onOpen() {
  var ss = SpreadsheetApp.getActive();
  var menuItems = [
    {name: 'RUN', functionName: 'doGet2'}
  ];

  ss.addMenu('OCR', menuItems);
}    


function doGet2() {
  var ROW_START = 3;
  var URL_COL = 1;
  var TEXT_COL = 2;

  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();

  var urls = sheet.getRange(ROW_START,URL_COL, sheet.getLastRow()-ROW_START+1,1).getValues();
  var texts = [];
  for(var i=0; i<urls.length; i++) {
    var url = urls[i];
    if(url != undefined && url != "") {
      var imageBlob = UrlFetchApp.fetch(url).getBlob();
      var resource = {
        title: imageBlob.getName(),
        mimeType: imageBlob.getContentType()
      };
      var options = {
        ocr: true
      };

      var docFile = Drive.Files.insert(resource, imageBlob, options);
      var doc = DocumentApp.openById(docFile.id);
      var text = doc.getBody().getText().replace("\n", "");

      texts.push([text]);
      Drive.Files.remove(docFile.id);
    }
    else {
      texts.push("request error");
    }
  }
  sheet.getRange(ROW_START,TEXT_COL, urls.length,1).setValues(texts);
}

【讨论】:

  • 非常感谢你救了我的命
【解决方案2】:

代码没问题。 V2 API 仍然存在。见this documentation。您只需要启用高级驱动服务。在脚本编辑器中,选择 Resources > Advanced Google services 并打开 Drive API(仅可选择 v2)。然后你的代码就可以工作了。

【讨论】:

  • 它似乎有效,但它产生了一个错误,说“需要登录”,但我已经登录了 XD
  • 我找到了这个链接,但没有任何帮助 developers.google.com/sheets/api/guides/authorizing 它在第 4 点说:Google 向用户显示同意屏幕,要求他们授权您的应用程序请求他们的一些数据。但它没有在工作表中但是它确实在调试中显示它
  • 是的,您不能在工作表上运行脚本,因为它需要 Drive API 授权。从doGetreturn ContentService 可以看出,该脚本是针对Web 应用程序的,而不是针对自定义函数的。阅读this documentation。我建议你在工作表中列出许多 URL,然后在编辑器中运行脚本,或者通过一些菜单(查找 addMenu 函数)。
  • 无论哪种方式,您都应该修改脚本的输入和输出。
  • 为什么以及如何,因为我需要 ocr 图像的功能,所以在输入中我给它的是图像的 url,在输出中我需要 OCRed 文本,我没有看到其他方式。我认为,我必须添加一些代码来验证和授权脚本来操作谷歌驱动器中的文件。并在项目属性中显示脚本所需的 3 个 OAuth 范围:googleapis.com/auth/documents googleapis.com/auth/drive googleapis.com/auth/script.external_request 如何在代码中提供它们。此示例适用于博主gist.github.com/mhawksey/86287ea2fd247899d31a
最近更新 更多