Initial Site

Initial Site

Initial Site

【GAS】お手軽なOCRの自動化をスプレッドシートで扱いやすくする

  • ヨシモト  2019/08/08 19:44
ai_computer_sousa_robot

開発部 ヨシモトです。

※7月度より開発部所属になりました、そのお話はまた後日。

 

以前書いた、【GAS】OCRを使った画像の文字取得を自動化するという記事について、並べ替えに関するコメントをいただきましたので、スプレッドシートでもう少し扱いやすいように変更いたしました。

 

概要

大まかには前回の記事と似たような流れです。

  1. 1. 文字を読み取りたい画像ファイルがGoogle ドライブにある。
  2. 2. Google ドライブ内の画像から画像ファイルとは別にOCR用のファイル(ドキュメントのファイル)を作る(読み取った文字列や数値がテキストとして、このOCRファイルに入っています)
  3. 3. OCRで文字を読み取る
  4. 4. 読み取った文字列と、ファイル名と、元の画像ファイルがドライブに追加された日時をスプレッドシートに入力する NEW

 

※読み取りたい画像がGmailにある場合は、以下の記事を参照してください。

【GAS】Gmailの添付ファイルを一括でGoogleドライブへ保存する

 

コード

function ocrSample() {
  var picFolderId = PropertiesService.getScriptProperties().getProperty('picFolderId');
  var folder = DriveApp.getFoldersByName('対象フォルダ名').next();
  var images = folder.getFilesByType('image/png');
  
  var sheet = SpreadsheetApp.getActiveSheet();
  
  var titleAndText = [];
  
  while(images.hasNext()){
    var image = images.next();
    var docName = image.getName().split("\.")[0];
    var createDateRaw = image.getDateCreated();
    var createDate = Utilities.formatDate(createDateRaw,"JST","YYYY/MM/dd HH:mm");
    
    var Request_body = {
      title: docName, 
      mimeType: 'image/jpeg'
    }
    Drive.Files.insert(Request_body, image, { ocr: true });
    
    var newFile = DriveApp.getFilesByName(docName).next();
    folder.addFile(newFile);
    DriveApp.getRootFolder().removeFile(newFile);
    
    var docs = folder.getFilesByType('application/vnd.google-apps.document');
    var file = docs.next();
    var docId = file.getId();
    var doc = DocumentApp.openById(docId);
    var text = doc.getBody().getText().split('\n')[2];
    
    titleAndText.push([createDate, docName, text]);
    DriveApp.getFolderById(picFolderId).removeFile(file);
  }
  
  sheet.getRange(1, 1, titleAndText.length, titleAndText[0].length).setValues(titleAndText);
  
  var range = sheet.getDataRange()
  range.sort({column: 1, ascending: false});
}

 

補足

基本的な所は前回の【GAS】OCRを使った画像の文字取得を自動化すると同じなのでまずはこちらをご覧ください。

その他、前回から変更のあった点を補足します。

 

フォルダIDの指定

var picFolderId = PropertiesService.getScriptProperties().getProperty('picFolderId');

GoogleドライブフォルダのIDを指定する箇所があり、そこに直接IDを書き込んでもよいのですが、このようにコードから見えないようにする方法もあります。

これがフォルダのIDです。

folderID

スクリプトのエディタ画面のココをクリックすると

fileMenu

 

こんな画面になるので、このように入力します。

prop

ここに入れた値は PropertiesService.getScriptProperties().getProperty(‘プロパティ名’)で取得することができます。

コードを公開したいけどIDやトークン等、見られたくないものがある時に使いましょう。

 

ファイルがドライブに追加された日時を取得する

var createDateRaw = image.getDateCreated();
var createDate = Utilities.formatDate(createDateRaw,"JST","YYYY/MM/dd HH:mm");

これで追加された日時を取得することができます。あくまでもGoogleドライブに追加された日時の取得です。

Class File| Apps Script | Google Developers

 

配列に日時とファイル名とOCRで取得した文字を格納する

var titleAndText = [];
~~省略~~
titleAndText.push([createDate, docName, text]);

予め空の配列を作っておき、そこに「ファイル追加日時」「ファイル名」「OCRで取得した文字」を配列として格納し、2次元配列にします。

 

配列に日時とファイル名とOCRで取得した文字を格納する

  sheet.getRange(1, 1, titleAndText.length, titleAndText[0].length).setValues(titleAndText);
  
  var range = sheet.getDataRange()
  range.sort({column: 1, ascending: false});

あとはシートに配列をセットして、並び替えをするだけです。

 

今回はファイル追加日の新しい順に並べてますが、適宜置き換えて使ってみてください。

 

今回読み取りに使った画像はこちらです。

ファックス

メール

会社名

電話

これを実行するとこのようになりました。

sheet

前回のものよりはもう少し実用的になったかと思います。

おもしろい使い方がありましたらコメント等で教えてください。

 

その他、スプレッドシートやGASに関する記事はこちらからどうぞ。

GASを使ってGmailから本文の一部を抜き出す

スプレッドシート独自の便利な関数

QUERY関数の便利な使い方

スプレッドシートを使って簡単なスクレイピングをしてみよう

【GAS】正規表現を使ってGmailの本文から文章を抜き出す

【簡単】GASでスプレッドシートの送信リストからメールを送る

【GAS】正規表現を使って複数行の文章をGmailから抜き出す

【GAS】Gmailの添付ファイルを一括でGoogleドライブへ保存する

【難しくない】GASでwebスクレイピングして正規表現でデータを集める

【GAS】OCRを使った画像の文字取得を自動化する

【GAS】お手軽なOCRの自動化をスプレッドシートで扱いやすくする

 

それでは!


コメントをどうぞ

ツールの記事

  1. ai_computer_sousa_robot
    【GAS】お手軽なOCRの自動化をスプレッドシートで扱いやすくする
  2. ai_search
    【GAS】OCRを使った画像の文字取得を自動化する
  3. dance_shoot_dance
    【難しくない】GASでwebスクレイピングして正規表現でデータを集める
  4. bg_kaitenzushi
    【GAS】Gmailの添付ファイルを自動でGoogleドライブへ保存する