Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script ocr图像来自URL列表,并将结果存储在电子表格中_Google Apps Script_Google Drive Api_Ocr - Fatal编程技术网

Google apps script ocr图像来自URL列表,并将结果存储在电子表格中

Google apps script ocr图像来自URL列表,并将结果存储在电子表格中,google-apps-script,google-drive-api,ocr,Google Apps Script,Google Drive Api,Ocr,您好,我有一个包含数字的图像URL列表,我想对它们进行OCR,并将结果存储在谷歌电子表格中 我在ocr图像中找到了这些谷歌脚本 1- 2- 但我不知道如何创建请求变量,所以我用URL变量替换了请求变量,如下所示: function doGet(url) { if (url != undefined && url != "") { var imageBlob = UrlFetchApp.fetch(url).getBlob(); var resource = {

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

1-

2-

但我不知道如何创建请求变量,所以我用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包含谷歌电子表格中图像的url,以进行OCR,并在单元格C1中获取结果文本,它表示驱动变量未定义


希望很快得到答复

代码正常。v2api仍然有效。看见您只需启用高级驱动器服务。在脚本编辑器中,选择Resources>Advanced Google services并打开Drive API(只有v2是可选的)。那么你的代码就可以正常工作了。

好的,我修改了你的脚本并制作了一张表格来展示一个例子。工作表为(任何人都可以编辑),其脚本如下。应启用高级驱动器服务的驱动器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);
}
函数onOpen(){ var ss=SpreadsheetApp.getActive(); 变量菜单项=[ {name:'RUN',functionName:'doGet2'} ]; ss.添加菜单(“OCR”,菜单项); } 函数doGet2(){ var ROW_START=3; var URL_COL=1; var TEXT_COL=2; var ss=SpreadsheetApp.getActive(); var sheet=ss.getActiveSheet(); var URL=sheet.getRange(ROW_START,URL_COL,sheet.getLastRow()-ROW_START+1,1).getValues(); var文本=[];
for(var i=0;i
Drive
已被弃用并成为
DriveApp
,您列出的帖子已过期。请查看此帖子。您提到的链接也使用了Drive函数,我不知道如何修改函数doGet()所以它完成了任务,谢谢你是对的。我会搜索更多。它似乎工作,但它生成了一个错误,说“需要登录”但是我已经登录了XDI发现了这个链接,但没有任何帮助,它在第4点中说:Google向用户显示一个同意屏幕,要求他们授权你的应用程序请求他们的一些数据。但是它没有出现在工作表中,但是它在debugYes中显示。是的,你不能在工作表上运行脚本,因为它需要驱动API授权n、 从
doGet
return ContentService
中可以看到,脚本是用于web应用程序的,而不是用于自定义功能。请阅读。我建议您在工作表中列出许多URL,然后在编辑器或通过某个菜单运行脚本(查找
addMenu
功能)。无论哪种方式,你都应该修改脚本的输入和输出。为什么和如何修改?因为我需要ocr图像的功能,所以在输入中我给出的是图像的url,在输出中我需要ocr文本,我没有看到其他方式。我想,我必须添加一些代码来验证和授权脚本在google driv中操作文件e、 在项目属性中,它说脚本需要3个OAuth作用域:googleapis.com/auth/documents googleapis.com/auth/drive googleapis.com/auth/script.external\u请求如何在代码中提供它们。这个例子是给blogger的,非常感谢你救了我的命