Google apps script ocr图像来自URL列表,并将结果存储在电子表格中
您好,我有一个包含数字的图像URL列表,我想对它们进行OCR,并将结果存储在谷歌电子表格中 我在ocr图像中找到了这些谷歌脚本 1- 2- 但我不知道如何创建请求变量,所以我用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 = {
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的,非常感谢你救了我的命