30分でできる名刺管理ツールbyGAS

Googleドライブに名刺管理用のフォルダを作る

作成したフォルダ内にスプレッドシートを作成する

スプレッドシート名を「名刺データ」にする。

1行目のA列からI列に見出しを入力する。
A列:ファイルパス
B列:サブフォルダ名
C列:ファイル名
D列:OCRテキスト
E列:所属
F列:名前
G列:メールアドレス
H列:名刺交換日
I列:メモ

シート名を「名刺データ」にしておく

2行目(見出し行の次の行)のA~I列にダミーテキスト(なんでもいいので何か文字)を入れておく
※自分用メモ
プログラムをちゃんと書けばこれは不要。
今のプログラムではこのダミーデータがないとスクリプトが動かない。

名刺管理フォルダに名刺画像格納用のフォルダ「名刺IMG」を作成する

作成したフォルダ「名刺IMG」の中に名刺のカテゴリー別のフォルダを作成する。いくつでも可。

名刺をスキャンしてjpgで保存する

スキャンした名刺画像をGoogleドライブのカテゴリー別のサブフォルダにアップロードする

スプレッドシートを開いてAppScriptにコードを書く

下準備

フォルダ「名刺IMG」のフォルダIDをメモしておく
フォルダIDはURLのhttps://………../folders/の後ろの部分

スプレッドシートのメニューバー「拡張機能」から「Apps Script」を選択

Apps Scriptの画面で左側のメニューにある「サービス」の中から「Drive API」を追加しておく

注意:バージョンは「V2」を選択する

スクリプトを書いて「OCR処理.gs」など任意の名前で保存する

※コードは画像の下にあります ↓

function listFilesAndOCR_AppendOnly() {
  const folderId = '12oIaaaaaaaaaFY2ibaWm2ct'; // ← 対象のフォルダIDに置き換えてください
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('名刺データ');
  const existingData = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues().flat(); // A列の既存ファイルパス

  const parentFolder = DriveApp.getFolderById(folderId);
  const newData = [];
  traverseFolder(parentFolder, '', newData);

  for (const [path, subfolder, name, id] of newData) {
    if (existingData.includes(path)) {
      continue; // 既に登録済みのファイルはスキップ
    }

    const ocrText = extractTextFromFile(id);
    sheet.appendRow([path, subfolder, name, ocrText]);
  }
}

function traverseFolder(folder, currentPath, result) {
  const folderName = folder.getName();
  const fullPath = currentPath ? `${currentPath}/${folderName}` : folderName;

  const files = folder.getFiles();
  while (files.hasNext()) {
    const file = files.next();
    result.push([
      `${fullPath}/${file.getName()}`,
      folderName,
      file.getName(),
      file.getId()
    ]);
  }

  const subfolders = folder.getFolders();
  while (subfolders.hasNext()) {
    const subfolder = subfolders.next();
    traverseFolder(subfolder, fullPath, result);
  }
}

function extractTextFromFile(fileId) {
  try {
    const file = DriveApp.getFileById(fileId);
    const blob = file.getBlob();
    const resource = {
      title: file.getName(),
      mimeType: blob.getContentType()
    };

    const ocrFile = Drive.Files.insert(resource, blob, {
      ocr: true,
      ocrLanguage: 'ja'
    });

    const text = DocumentApp.openById(ocrFile.id).getBody().getText();
    DriveApp.getFileById(ocrFile.id).setTrashed(true);
    return text;
  } catch (e) {
    return `OCRエラー: ${e.message}`;
  }
}

ちなみに、このコードはChatGPTに書いてもらいました。ChatGPTとのやり取りは以下の通りです

上のやり取りで一度スクリプトを生成してもらいましたが微調整が必要だったので以下のやり取りを追加

その結果、できたのが今回のスクリプトです。

スクリプトを実行する

初回のみ「承認が必要です」と出るので「権限を確認」をクリックする

自分のアカウントが表示されるのでクリックする

「このアプリはGoogleで確認されていません」とアラートが出るので「詳細」をクリックして
「無題のプロジェクト(安全ではないページ)に移動」をクリックする

「すべての権限」にチェックをして「続行」

スクリプトが実行されて処理が終わると「実行完了」と表示される

データの確認

スプレッドシートを開くと名刺のデータが読み込まれている

あとは、D列に記録されたOCRデータから所属(E列)に会社名を、名前(F列)に人名を、メールアドレス(G列)にメールアドレスをコピー&ペーストする。名刺交換日は手入力。メモも必要に応じて手入力。

🗂  未分類