space ocr
文章文件
convert

把掃描的 PDF 轉成 Excel:表格匯出成 CSV,中文不亂碼

掃描的 PDF 其實是圖片,無法複製,貼進 Excel 後中文又會亂碼、整筆明細還會擠成一格。把 PDF 拖進 space-ocr 的應用程式,每一頁會自動轉成圖片,事先設好欄位後就是「一頁=一列」,並輸出成 UTF-8 BOM 的 CSV。用 Excel 直接開也不會亂碼,要匯入 freee、Money Forward、彌生等會計軟體也沒問題。辨識失敗不收費。

8 分鐘閱讀· 2026-06-25

打開掃描來的發票或收據 PDF,第一個發現往往是這個 ── 沒辦法複製。想選取文字卻拖不動,連一個數字都撈不出來。原因很簡單:掃描 PDF 並不是表格資料,而是 「拍下表格的一張圖片」。在人眼裡明明排得整整齊齊的列、欄、合計,對電腦來說只是一堆像素而已。

於是大多數人接下來做的事都差不多。打開 Excel,一邊看著 PDF 一邊一行一行手動輸入;或是硬把它複製貼上,結果就是 ── 中文變成 譁�蟄怜喧 這樣整片亂碼,整筆明細全擠進同一格,版面徹底崩掉。如果你是搜尋「掃描 PDF 轉 Excel」「PDF 表格轉 CSV」「Excel 中文亂碼」才找到這篇文章,那痛點應該就在這裡 ── 你真正想要的,不過是一份欄位對齊、能匯進會計軟體的資料而已。

結論:不用手動輸入,也不用複製貼上

你要做的,就只是把 PDF 直接 拖進 space-ocr 的應用程式。程式會自動把每一頁轉成圖片,並把頁面裡的值讀成有名稱的欄位。只要把欄位(往來對象、日期、合計、明細…)設定好一次,就會以 一頁=一列 的方式堆進試算表,最後再 輸出成 CSV

關鍵就在這份 CSV:它是以 UTF-8 BOM 寫出的,所以即使在 Excel 裡雙擊打開,中文也不會亂碼。明細不會被擠成一格,而是好好地展開成各自的列與欄。語言判斷由引擎自動完成,不需要你指定。

先花 10 秒,不用上傳就先試試

下面這個範例不需要上傳就能直接玩。它是實際把一張掃描收據解析出來的真實結果。把游標移到任一欄位上,就會用方框亮出這個值是從圖片的哪個位置讀出來的。每個值還附有一個比對率,顯示「這個值有幾成的字元真的在頁面上找得到」,讓你在輸出前就能當場抽查。

Source receipts with extracted-field bounding boxes
Verified fields
KINSHO · 合計 2,045
ライフ · 合計 4,286

Every value carries a verified on-page location — bbox + 4-point vertices + match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.

為什麼掃描檔沒辦法「直接」放進 Excel

當紙本被掃描的那一刻,檔案的內容就和照片一樣,是一張點陣圖。裡面並沒有嵌入文字資訊,所以 Excel 的「取得資料」或複製貼上都撈不到表格。因此你需要兩個步驟:

  1. 讀懂圖片並結構化(每一頁 → 一列有名稱的欄位)
  2. 把那些列寫成 CSV(用 Excel 能乖乖打開的格式)

在 space-ocr 的應用程式裡,把 PDF 丟進去後,會 先把每一頁自動轉成圖片(PNG),再做 OCR。所以你不需要自己動手把頁面切成圖片 ── 拖進 PDF 就好。真正的難點在第 ① 步「讀取」,把這一步做得準確,就是徹底根除亂碼與明細擠壓的捷徑。

原始圖片 → 萃取試算表:讓掃描檔變成「欄位」

拖進去的文件,它的值不會以一面文字牆的形式出現,而是變成有名稱的欄位。你可以讓引擎幫你提議結構(schema),也可以選用內建範本(發票、收據、採購單、出貨單、名片等),或自己定義欄位都行。來看看一張掃描檔如何變成一列帶標籤的資料。

Demo把文件拖進去,值就落進<b>具名欄位</b> ── 這就是之後在 Excel 裡排好的那一「列」。
把文件拖進去,值就落進具名欄位 ── 這就是之後在 Excel 裡排好的那一「列」。

像明細列(發票的品項、收據的商品)這種會重複的列,就在 array 型別的欄位裡宣告子欄位。如此一來,頁面上的每一行明細都會變成各自獨立的一列,在 Excel 裡就能直接加總 ── 這正是「明細被擠成一格」問題的解法。明細的組法在 讀取發票・出貨單並轉成 Excel 也有更詳細的說明。

POST /ocr/fields → 請求主體(欄位=schema 的宣告範例)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "image": "https://example.com/scan-invoice-p01.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

座標不是 AI 憑空想像出來的。 語言模型回傳的只有值的文字,以及「用了哪些詞元(token)」這樣的提示,並不會回傳方框本身。引擎會先把這個值的字元,與視覺 OCR 實際在頁面上偵測到的符號逐字比對(以字元層級的比對為主要路徑),再把方框放到真正的像素位置上。接著為每個值附上一個 比對率 ── 也就是有幾成的字元真的在頁面上找到了。如果模型有回傳詞元提示,有時會用它來覆寫部分欄位的位置;但在重複列裡提示可能會張冠李戴,所以不會照單全收,而是透過欄位叢集(column clustering)與列的一致性檢查來驗證、修正。重點不是「AI 不會出錯」,而是 每一個值都一定會與頁面比對,並留下一個比對到多少的分數。座標以 xmin / ymin / xmax / ymax0–1000 normalized(不是像素)回傳。

匯入前先抽查一下

在放進 Excel 或會計軟體之前,你可以當場確認讀取結果。把游標移到某個值上,原始掃描圖片裡對應的位置就會亮起來,不用重讀整份文件,視線一下子就跳到那裡。比對率 1.0 代表所有字元都在頁面上找到了;低於 0.85 的值則是「保險起見最好確認一下」的訊號。

Demo把游標移到欄位上,和原始掃描檔對照 ── 在<b>匯入試算表之前</b>就抓出讀錯的地方。
把游標移到欄位上,和原始掃描檔對照 ── 在匯入試算表之前就抓出讀錯的地方。

輸出一份 Excel 能打開的 CSV

值確認無誤後,就把試算表 輸出成 CSV。標題列會排好欄位名稱,array 欄位會展開成 欄位名.子欄位名,重複的明細則展開成子列。檔案是 UTF-8 BOM 格式 ── 這正是讓 Excel 只要雙擊就能正確打開中文、日文、韓文的那個關鍵點。你手動改過的儲存格,會在輸出時覆寫原本的 OCR 值並反映進去。

Demo一鍵輸出 <b>UTF-8 BOM 的 CSV</b> ── 雙擊就能讓 Excel 以欄位對齊的列打開。
一鍵輸出 UTF-8 BOM 的 CSV ── 雙擊就能讓 Excel 以欄位對齊的列打開。

用 Excel 打開的步驟很簡單 ── 雙擊 .csv 就好。多虧有 BOM,Excel 會自動辨識為 UTF-8,不用走文字匯入精靈,也不會亂碼。如果你需要原生的活頁簿,再從這裡 另存新檔 → .xlsx 即可。

要直接拿去會計軟體也一樣,出口都是同一份 CSV。freee、Money Forward(マネーフォワード)、彌生(弥生) 等軟體,就用各自的 CSV 匯入功能把它讀進去(這不是透過官方 API 的自動串接,而是匯入 CSV 檔案)。只把收據轉成 CSV 的做法,另外整理在 把收據轉成 CSV

批次處理:用 API 跑大量掃描檔

想一次處理整個掃描檔資料夾時,先建立一張帶有欄位 schema 的試算表,再把頁面圖片上傳進去。每張圖片都會依照那個 schema 讀取、以列的形式追加進去,最後就能輸出成一份 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=/請求書 2026" \
  -F "files=@scan-p01.png" \
  -F "files=@scan-p02.png" \
  -F "wait=true"
Why it matters

收費很透明。 每張 ¥10 的用量計費、每月 100 張免費額度(不需信用卡)、團隊適用的定額方案 Pro $39/月。而且 辨識失敗的部分不收費 ── 沒有結果就不計費。費用好估算,所以你可以先拿手邊的掃描檔試過再決定。

把掃描 PDF 轉成 Excel 的步驟

  1. 把 PDF 拖進應用程式
    把掃描 PDF 拖進 space-ocr 的應用程式。程式會先把每一頁自動轉成圖片(PNG)再做 OCR,所以你不必自己把頁面切成圖片。
  2. 決定欄位(schema)
    用內建範本、自訂欄位定義、或自動提議三者之一,決定往來對象、日期、合計等欄位。像發票品項這種會重複的明細,在 array 型別裡宣告子欄位,每一行明細就會變成各自獨立的一列。
  3. 抽查各個值
    把游標移到欄位上,原始掃描檔的對應位置就會亮起。比對率 1.0 代表所有字元都在頁面上找到了,低於 0.85 則是想確認、修正的值的訊號。
  4. 輸出 CSV
    把試算表輸出成 CSV。檔案帶 UTF-8 BOM,array 的明細會展開成子列,手動的修正會覆寫原本的 OCR 值並反映進去。
  5. 用 Excel 或會計軟體打開
    雙擊 CSV,Excel 會把 BOM 辨識為 UTF-8,中文不亂碼,以欄位對齊的列打開。需要原生格式就用另存新檔轉成 .xlsx。要匯入 freee、Money Forward、彌生,則用各軟體的 CSV 匯入功能讀進去。
也支援日文(或其他語言)的掃描檔嗎?
支援。語言判斷由引擎自動完成,不需要你指定。日文、韓文、中文、英文都用同一套引擎處理,並會正規化全形/半形、各種連字號異體、括號、CJK 空白、直書漢字,以及多種文字混排。手機照片的傾斜與旋轉(EXIF)也會自動校正。
可以直接處理 PDF,還是得先轉成圖片?
應用程式支援 PDF。把 PDF 拖進去後,每一頁會自動轉成圖片(PNG)再做 OCR,所以你不必手動把頁面切成圖片。不過如果是直接送往公開 API,輸入則必須是點陣圖(JPEG、PNG、GIF、BMP、TIFF、WebP)。
輸出的 CSV,用 Excel 打開中文會不會亂碼?
不會。CSV 是以 UTF-8 BOM 寫出的。這正是讓 Excel 能自動判別編碼的關鍵,只要雙擊,中文、日文、韓文就會進到正確的欄位裡,不必走文字匯入精靈。
可以匯入 freee、Money Forward 或彌生嗎?
輸出的是 Excel 能打開的 CSV,所以是用各家會計軟體的 CSV 匯入功能把它讀進去。這不是透過官方 API 的自動串接,而是匯入 CSV 檔案。欄位名稱與明細的展開,都可以先在試算表這邊整理好再輸出。
怎麼確認準確度?個資安全嗎?
每一個值都會附上它在頁面上經過驗證的位置(bounding box)與比對率。把游標移到欄位上,原始掃描檔的對應位置就會亮起;比對率 1.0 代表所有字元都找到了,低於 0.85 則是要確認的訊號。也就是說,匯入前就能把值和原本的文件對照、稽核。費用方面,辨識失敗的部分不收費。

把掃描 PDF,變成 Excel 的一列

免費額度每月 100 張、不需信用卡。拖進 PDF 就讀成欄位,輸出成 Excel 能直接打開的 CSV(UTF-8 BOM)。辨識失敗不收費。

相關文章