Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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图像在Col1中的URL,在Col2中输出文本?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 谷歌表单OCR图像在Col1中的URL,在Col2中输出文本?

Google apps script 谷歌表单OCR图像在Col1中的URL,在Col2中输出文本?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,在Google工作表中,我尝试使用一个函数对URL位于a列的图像进行OCR,并在B列输出OCR文本。我尝试使用的代码来自以下线程: 函数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

在Google工作表中,我尝试使用一个函数对URL位于a列的图像进行OCR,并在B列输出OCR文本。我尝试使用的代码来自以下线程:

函数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文本=[];
对于(var i=0;i当我看到您的共享电子表格时,我注意到您正在尝试使用
doGet2()
作为自定义公式。在这种情况下,由于自定义函数的规范,无法使用Drive API、
DocumentApp.openById
setValues
等。此外,我认为您的自定义公式已经出现错误。这如何?谢谢@Tanaike,是的,我已经确定当前脚本不会出现错误工作。我提供它主要是作为一个工作解决方案的跳板。你知道可以更改什么以适应我的需要吗?谢谢你的回答。如果你想使用自定义函数实现这一点,很遗憾,由于规范的原因,它无法实现。因此,在这种情况下,需要更改执行脚本的方法。但是关于这一点,我不确定你期望的目标。我为我糟糕的英语技能道歉。顺便说一句,关于
是的,我已经确定当前脚本不起作用。
,我认为关于你的问题的详细信息应该包括在你的问题中。@Tanaike我明白,这个函数不能用作公式。但是我确实按照最初的计划让它工作了,所以这很重要。谢谢你的帮助!Hello@cyberspectre,你介意将你找到的解决方案作为答案发布吗?这样其他人可以从中受益。谢谢!当我看到你的共享电子表格时,我注意到你正在尝试使用
doGet2()
作为自定义公式。在这种情况下,由于自定义函数的规范,无法使用Drive API、
DocumentApp.openById
setValues
等。此外,我认为您的自定义公式已经出现错误。这如何?谢谢@Tanaike,是的,我已经确定当前脚本不会出现错误工作。我提供它主要是作为一个工作解决方案的跳板。你知道可以更改什么以适应我的需要吗?谢谢你的回答。如果你想使用自定义函数实现这一点,很遗憾,由于规范的原因,它无法实现。因此,在这种情况下,需要更改执行脚本的方法。但是关于这一点,我不确定你期望的目标。我为我糟糕的英语技能道歉。顺便说一句,关于
是的,我已经确定当前脚本不起作用。
,我认为关于你的问题的详细信息应该包括在你的问题中。@Tanaike我明白,这个函数不能用作公式。但是我确实按照最初的计划让它工作了,所以这很重要。谢谢你的帮助!Hello@cyberspectre,你介意将你找到的解决方案作为答案发布吗?这样其他人可以从中受益。谢谢!
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);
}