space ocr
ガイド記事料金ドキュメント
convert

スキャンしたPDFをExcelに変換する

スキャンしたPDFをExcelに変換する方法。各ページを画像として構造化フィールドに読み取り、元画像と照合してスポットチェックしたうえで、Excelできれいに開けるUTF-8 BOM付きCSVに書き出します。

7 分で読了· 2026-06-25

スキャンした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をそのままドロップするだけ — で、値は文字の羅列ではなく名前付きフィールドとして出てきます。いちばん速いのは、アプリにフィールドを提案させる方法です。ページをドロップすれば、設定もテンプレート選択も不要で、自動的にスキーマを提案してくれます。もちろん、組み込みテンプレートを適用することも(レシートと名刺はワンタップのプリセット、請求書・発注書・納品書などはピッカーから選べます)、自分でフィールドを定義することもできます。スキャンがラベル付きの列へと変わる様子をご覧ください。

ドキュメント画像をドロップすると、その値が名前付きフィールドに収まります。これが、あなたのExcelファイルに入る行になります。

請求書の明細行やレシートの商品一覧のように、繰り返し現れる行を含むドキュメントには、子列を持つarrayフィールドを宣言します。ページ上の各行がそれぞれ独立した行になり、合計を計算する必要がある表ではまさにこれが求められます。こうした繰り返し行を専門的に扱いたい場合は、フィールド仕様の詳細を解説した請求書から明細行を抽出するを参照してください。

POST /ocr/fields → リクエストボディ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "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" }
      ]
    }
  ]
}
✓ Verified

値はそのまま(verbatim)返ってきます。 印字された7,8557,855のまま。カンマ、小数点、全角文字もページ上の通りに正確に保持されるので、合計の整合が取れます。アプリ上で見える通貨記号はUI上の装飾であって、値の一部ではありません。数値が正規化されるのは、フィールドのdescriptionで明示的に指定したときだけです。

確認してから、Excelへ書き出す

Excelに取り込む前に、読み取り結果を念のため確認しましょう。値にマウスを乗せると、元画像上の該当箇所がハイライトされるので、スキャン全体を見直さなくても、視線がそのまま正しい場所へ向かいます。match_ratio1.0なら、その値のすべての文字がページ上で見つかったということ。0.85を下回る場合は、もう一度確認する価値があります。

フィールドにマウスを乗せて、元のスキャンと照らし合わせて確認。誤った読み取りを、表計算に届く前にキャッチできます。

Excelで開けるCSVを書き出す

フィールドが正しく見えたら、シートを書き出します。出力されるのは<sheetName>.csvで、列名を並べたヘッダー行が付きます。arrayフィールドはcolumn.childという列に展開され、繰り返しの明細行はサブ行として展開されます。ファイルはBOM付きのUTF-8で、これこそがダブルクリックしたときにExcelがCJKテキストをきれいに開いてくれる決め手です。手動で修正した内容は、エクスポート時に元のOCR値を上書きします。

ワンクリックでUTF-8 BOM付きCSVを書き出し。ダブルクリックすれば、Excelが列の揃った行を開きます。

Excelで開くには、.csvをダブルクリックするだけです。BOMがあるおかげで、Excelは自動的にUTF-8として読み込みます。テキストファイルウィザードも、文字化けもありません。そこから、ネイティブのワークブックが必要なら名前を付けて保存 → .xlsxへ。最終的なゴールがExcelそのものではなくシンプルなCSVパイプラインであれば、姉妹ガイドのスキャン文書をCSVにするが同じエクスポートを最初から最後までカバーしています。

APIで大量に処理する

スキャンのフォルダーをまとめて処理するには、まず列スキーマを持つシートを一度作成し、そのシートにページ画像をアップロードします。各画像はそのスキーマに沿って読み取られ、行として追加されていくので、あとでまとめて1つのCSVとして書き出せます。リクエスト/レスポンスの完全な形式はAPIドキュメントにあります。

スキャンしたページ画像をシートにアップロードする
1
2
3
4
5
6
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に変換する手順

  1. PDFまたはページ画像を追加する
    space-ocrアプリでは、PDFをドロップするだけです。各ページが自動的に画像へラスタライズされるので、変換するものは何もありません。REST APIを直接呼び出す場合は、エンジンがPDFのバイトではなくラスター画像(JPEG、PNG、GIF、BMP、TIFF、WebP)を読み取るため、先に各ページをラスター画像として書き出してください。
  2. ページをフィールドとして読み取る
    値を名前付きフィールドとして抽出します。いちばん速いのは、アプリにページからフィールドを自動提案させる方法です。組み込みテンプレートを適用したり、自分でフィールド仕様を定義したりすることもできます。繰り返しの明細行にはarrayフィールドを宣言します。
  3. 値を確認する
    フィールドにマウスを乗せると、元のスキャンのどこから読み取られたかがハイライトされます。マッチ率が1.0ならすべての文字が特定できたということで、0.85を下回る値は確認や修正の対象として目印になります。
  4. CSVを書き出す
    シートをCSVとして書き出します。BOM付きのUTF-8で、arrayの明細行はサブ行に展開され、手動での修正があれば元のOCR値を上書きします。
  5. Excelで開く
    CSVをダブルクリックします。ExcelはBOMを読み取り、列が揃いCJKテキストもそのままの状態で行を開きます。ネイティブのワークブックが必要なら、名前を付けて保存で.xlsxにします。
スキャンしたPDFをExcelに変換するにはどうすればいいですか?
PDFをそのままspace-ocrアプリにドロップしてください。各ページが自動的に画像へラスタライズされ、アプリがフィールドを提案してくれるので、手作業で変換するものは何もありません。値を元画像と照合してスポットチェックしたら、シートをCSVとして書き出します。CSVはBOM付きのUTF-8なので、ダブルクリックするだけでExcelがそのまま開きます。ネイティブのワークブックが必要なら、名前を付けて保存で.xlsxにします。(アプリを使わずREST APIを直接呼び出す場合は、エンジンがラスター画像を受け付けるため、先に各ページを画像として書き出してください。)
space-ocrはPDFファイルを直接読み取れますか?
アプリでは直接読み取れます。PDFをドロップすると、OCRの前に各ページが自動的にPNGへレンダリングされるので、ページを手で分割する必要はありません。一方、公開APIとOCRエンジン自体はラスター画像(JPEG、PNG、GIF、BMP、TIFF、WebP)を受け付けます。そのため、APIを直接呼び出す場合は、先に各ページを画像として書き出してください。いずれの場合も、値がフィールドとして抽出されてしまえば、Excelが開けるCSVへの書き出しはワンクリックです。
書き出したCSVは、日本語や中国語のテキストでもExcelで正しく開けますか?
はい。CSVエクスポートはBOM(バイトオーダーマーク)付きのUTF-8でエンコードされており、これはまさにExcelがエンコーディングを自動判別するために必要なものです。CJKやアクセント付きの文字も、ダブルクリックするだけで正しい列に収まり、テキストファイルウィザードを実行する必要はありません。
請求書の明細行を、それぞれ別の行になるようにするにはどうすればいいですか?
子列を持つarrayフィールドを宣言します(例:description、unit_price、qty)。ページ上で繰り返される各行がそれぞれのサブ行になり、書き出し時にarrayは`column.child`というヘッダーへ展開されるので、Excelで行がきちんと合計されます。
Excelに取り込む前に、抽出が正確だったかを確認するにはどうすればいいですか?
すべての値にはマッチ率と、ページ上の検証済みの位置が付いています。フィールドにマウスを乗せると、元のスキャンのどこから読み取られたかが正確にハイライトされます。マッチ率が1.0ならすべての文字が見つかったということで、0.85を下回る場合は書き出す前にもう一度確認する価値があります。
関連記事