スキャンしたPDFをExcelに変換する
スキャンしたPDFをExcelに変換する方法。各ページを画像として構造化フィールドに読み取り、元画像と照合してスポットチェックしたうえで、Excelできれいに開けるUTF-8 BOM付きCSVに書き出します。
スキャンしたPDFは、ファイルの中に表計算データが隠れているわけではありません。それはドキュメントを撮った「画像」です。各ページは行・列・合計が並んだ画像で、人間の目には表に見えても、コンピューターにとってはただのピクセルの集まりにすぎません。スキャンに「Excelへエクスポート」ボタンがほとんど用意されていないのはそのためです。エクスポートすべきセルなど存在せず、あるのは画像だけだからです。本物の行を取り出すには、ページを構造化されたフィールドとして読み戻し、それをExcelで開けるファイルとして書き出す必要があります。
ここで紹介するのは、まさにそのワークフローです。ドキュメント画像(スキャンしたページ、スマホで撮った写真、FAXで届いたレシートなど)を取り込み、その値を名前付きフィールドとして抽出し、Excelでそのまま開けるCSVとして書き出します。CSVはBOM(バイトオーダーマーク)付きのUTF-8なので、日本語・韓国語・中国語のテキストも文字化けせず、正しい列にきちんと収まります。「スキャンPDFをExcelに変換する」という作業の成果物が、このCSVです。
なぜスキャンはそのままExcelにできないのか
紙の請求書をスキャンすると、出力されるのはラスター画像です。JPEG写真とまったく同じ種類のファイルです。space-ocrはこうしたラスター形式をそのまま受け付けます。対応形式はJPEG、PNG、GIF、BMP、TIFF、WebPです。元データが複数ページのPDFの場合は、2つの方法があります。PDFをそのままspace-ocrアプリにドロップすれば、各ページを自動的に画像へレンダリングしてくれます。あるいは、REST APIを直接呼び出すなら、先に各ページを画像(PNGまたはTIFF)として書き出して送信します。いずれの場合も、OCRはページ画像に対して実行されます。
エンジンは各画像を読み取り、値を見つけ出し、すべてのフィールドにページ上の検証済みの位置を付与します。ページがフィールドへと構造化されてしまえば、あとはCSVをダウンロードするだけでExcel化は完了です。難しく、そして手を抜いてはいけないのは「読み取り」であって、エクスポートではありません。
ドキュメント画像から構造化フィールドへ
ドキュメント画像をアップロード — あるいは写真やPDFをそのままドロップするだけ — で、値は文字の羅列ではなく名前付きフィールドとして出てきます。いちばん速いのは、アプリにフィールドを提案させる方法です。ページをドロップすれば、設定もテンプレート選択も不要で、自動的にスキーマを提案してくれます。もちろん、組み込みテンプレートを適用することも(レシートと名刺はワンタップのプリセット、請求書・発注書・納品書などはピッカーから選べます)、自分でフィールドを定義することもできます。スキャンがラベル付きの列へと変わる様子をご覧ください。
請求書の明細行やレシートの商品一覧のように、繰り返し現れる行を含むドキュメントには、子列を持つarrayフィールドを宣言します。ページ上の各行がそれぞれ独立した行になり、合計を計算する必要がある表ではまさにこれが求められます。こうした繰り返し行を専門的に扱いたい場合は、フィールド仕様の詳細を解説した請求書から明細行を抽出するを参照してください。
{
"image": "https://example.com/scanned-page-01.png",
"imageType": "url",
"fields": [
{ "name": "vendor", "type": "string" },
{ "name": "invoice_date", "type": "string" },
{ "name": "total", "type": "string" },
{
"name": "line_items", "type": "array",
"children": [
{ "name": "description", "type": "string" },
{ "name": "unit_price", "type": "string" },
{ "name": "qty", "type": "string" }
]
}
]
}値はそのまま(verbatim)返ってきます。 印字された7,855は7,855のまま。カンマ、小数点、全角文字もページ上の通りに正確に保持されるので、合計の整合が取れます。アプリ上で見える通貨記号はUI上の装飾であって、値の一部ではありません。数値が正規化されるのは、フィールドのdescriptionで明示的に指定したときだけです。
確認してから、Excelへ書き出す
Excelに取り込む前に、読み取り結果を念のため確認しましょう。値にマウスを乗せると、元画像上の該当箇所がハイライトされるので、スキャン全体を見直さなくても、視線がそのまま正しい場所へ向かいます。match_ratioが1.0なら、その値のすべての文字がページ上で見つかったということ。0.85を下回る場合は、もう一度確認する価値があります。
Excelで開けるCSVを書き出す
フィールドが正しく見えたら、シートを書き出します。出力されるのは<sheetName>.csvで、列名を並べたヘッダー行が付きます。arrayフィールドはcolumn.childという列に展開され、繰り返しの明細行はサブ行として展開されます。ファイルはBOM付きのUTF-8で、これこそがダブルクリックしたときにExcelがCJKテキストをきれいに開いてくれる決め手です。手動で修正した内容は、エクスポート時に元のOCR値を上書きします。
Excelで開くには、.csvをダブルクリックするだけです。BOMがあるおかげで、Excelは自動的にUTF-8として読み込みます。テキストファイルウィザードも、文字化けもありません。そこから、ネイティブのワークブックが必要なら名前を付けて保存 → .xlsxへ。最終的なゴールがExcelそのものではなくシンプルなCSVパイプラインであれば、姉妹ガイドのスキャン文書をCSVにするが同じエクスポートを最初から最後までカバーしています。
APIで大量に処理する
スキャンのフォルダーをまとめて処理するには、まず列スキーマを持つシートを一度作成し、そのシートにページ画像をアップロードします。各画像はそのスキーマに沿って読み取られ、行として追加されていくので、あとでまとめて1つのCSVとして書き出せます。リクエスト/レスポンスの完全な形式はAPIドキュメントにあります。
curl -X POST https://api.space-ocr.com/upload \
-H "Authorization: Bearer $SPACE_OCR_API_KEY" \
-F "path=/Invoices 2026" \
-F "files=@scan-page-01.png" \
-F "files=@scan-page-02.png" \
-F "wait=true"スキャンしたPDFをExcelに変換する手順
- PDFまたはページ画像を追加するspace-ocrアプリでは、PDFをドロップするだけです。各ページが自動的に画像へラスタライズされるので、変換するものは何もありません。REST APIを直接呼び出す場合は、エンジンがPDFのバイトではなくラスター画像(JPEG、PNG、GIF、BMP、TIFF、WebP)を読み取るため、先に各ページをラスター画像として書き出してください。
- ページをフィールドとして読み取る値を名前付きフィールドとして抽出します。いちばん速いのは、アプリにページからフィールドを自動提案させる方法です。組み込みテンプレートを適用したり、自分でフィールド仕様を定義したりすることもできます。繰り返しの明細行にはarrayフィールドを宣言します。
- 値を確認するフィールドにマウスを乗せると、元のスキャンのどこから読み取られたかがハイライトされます。マッチ率が1.0ならすべての文字が特定できたということで、0.85を下回る値は確認や修正の対象として目印になります。
- CSVを書き出すシートをCSVとして書き出します。BOM付きのUTF-8で、arrayの明細行はサブ行に展開され、手動での修正があれば元のOCR値を上書きします。
- Excelで開くCSVをダブルクリックします。ExcelはBOMを読み取り、列が揃いCJKテキストもそのままの状態で行を開きます。ネイティブのワークブックが必要なら、名前を付けて保存で.xlsxにします。