如何從 PDF 擷取表格
從 PDF 複製一個表格貼到 Excel,通常只會得到一長串亂掉的值擠在同一欄 — 或什麼都貼不出來。這不是您的問題:PDF 其實根本沒有儲存表格。本指南比較 4 種真正可行的方法,從快速的複製貼上技巧到能處理掃描文件的工具,幫您為手上的檔案挑對做法。
為什麼 PDF 的表格這麼難擷取
PDF 沒有「表格」這個概念。看起來像列與欄的東西,其實只是一段段被放置在 x/y 座標上的文字片段,有時中間畫了幾條線。「表格」只存在於您的眼睛裡 — 檔案本身沒有儲存格、沒有列、也沒有標題。
因此每一種擷取方法本質上都是重建:由演算法猜測哪些文字片段屬於同一個儲存格、哪些儲存格組成一列、欄從哪裡開始。有框線的表格(看得到格線)比較容易重建;只靠空白分隔的表格、合併儲存格、多行儲存格與跨頁表格,正是多數工具失手的地方。
掃描的 PDF 又多了一層難度:整頁其實是一張照片,在 OCR 執行之前完全沒有文字。請依據您的文件屬於哪種情況來挑選方法。
方法 1:複製貼上到 Excel(快速,適合小型框線表格)
面對簡單、框線清楚的表格,直接在 PDF 檢視器裡選取、複製,貼到 Excel 或 Google Sheets 即可。如果所有內容都擠進同一欄,可用「資料 → 資料剖析」(Excel)或「資料 → 將文字分隔成不同欄」(Google Sheets)重新拆分。
一個實用的變化做法:先貼到純文字編輯器,看看結構還剩下多少。如果值之間有一致的空格或 Tab 分隔,資料剖析就能救回表格;如果列已經交錯或被截斷,再怎麼拆分也救不回來。
適用情況:單頁、框線清楚、儲存格內容簡短的表格。失敗情況:合併儲存格、儲存格內含多行文字、帶千分位符號的數字被硬生生拆開,以及任何掃描文件。
方法 2:Excel Power Query 或 Word(內建功能,免裝工具)
新版 Excel 可以直接匯入 PDF 表格:資料 → 取得資料 → 從檔案 → 從 PDF。Excel 會掃描文件、列出所有偵測到的表格並顯示預覽 — 挑選表格、按下載入,它就會成為一個真正的試算表範圍。這是 Windows 上最好的內建選項(需要 Microsoft 365 或 2021 以上版本的授權,且並非所有版本的 Mac 版 Excel 都提供)。
Word 也能直接開啟 PDF(檔案 → 開啟 → 選取該 PDF)。它會把文件轉成可編輯的檔案,簡單的表格通常能以真正的 Word 表格保留下來,再複製進 Excel。
適用情況:數位產生、框線清楚的 PDF。失敗情況:只靠空白分隔的表格常被漏掉或拆錯欄,跨頁表格會被匯入成一段段分開的片段,而掃描 PDF 什麼都擷取不到 — Power Query 不會做 OCR。
方法 3:Python 函式庫 — camelot、tabula-py、pdfplumber(開發者)
如果您需要以程式方式從大量 PDF 擷取表格,成熟的開源選項有 camelot(框線表格表現最好,提供兩種偵測模式)、tabula-py(Java 引擎 Tabula 的包裝層,處理版面一致的報表很穩定),以及 pdfplumber(提供對文字、線條與矩形的低階控制 — 需要自訂邏輯時最合適)。
camelot 的最小範例:pip install camelot-py[cv],然後 tables = camelot.read_pdf("report.pdf", pages="all"),tables[0].df 就是一個 pandas DataFrame,可用 .to_csv() 或 .to_excel() 匯出。
但有個現實問題:每個函式庫都有它偏好的版面風格,而真實世界的文件往往混雜各種風格。請預期要針對每一類文件調整設定(camelot 的 flavor="stream" 對 "lattice"、tabula 的區域提示),而且它們全都無法處理掃描 PDF — 您得先另外跑 OCR,過程中版面資訊也會流失。
想更完整了解 Python 處理 PDF 的做法(不只表格),可參考我們的「用 Python 把 PDF 轉成 Markdown」指南。
方法 4:AI 擷取(掃描 PDF、混合版面、大規模處理)
最新的做法是使用文件理解模型,像人一樣「閱讀」頁面 — 從視覺版面偵測表格結構,而不是依賴框線或座標啟發式規則。這是唯一能在同一趟流程中處理掃描文件、拍照頁面與版面不一致文件的方法類型。
ParseJet 就是這樣運作的:到 parsejet.com/tools/pdf-to-markdown 上傳 PDF,表格會依閱讀順序以乾淨的 Markdown 表格回傳 — 掃描頁面會自動進行 OCR。如果您要的是資料而不是文字,API 可將解析後的文件以結構化輸出回傳(參見 PDF 轉 JSON 工具),每個檔案只需一次 POST 請求,非常適合批次管線。
適用情況:掃描與拍照文件、框線與空白分隔混雜的版面,以及無法針對每份文件個別調校的批次處理。取捨在於:這是託管服務 — 若只是一份乾淨 PDF 上的單一表格,方法 1 或 2 更快。
該選哪一種方法?
一個小型框線表格、只做一次:複製貼上(方法 1),貼出來亂掉就改用 Excel Power Query(方法 2)。
版面固定的週期性報表:試算表使用者用 Power Query,開發者用 camelot 或 tabula-py(方法 3)— 一次性的設定會在之後每個檔案上回本。
掃描文件、照片或混亂的混合版面:AI 擷取(方法 4)實際上是唯一不必重新打字的選項。
數百份版面各異的文件:透過 API 使用方法 4 — 方法 3 那種逐文件調校的做法,超過少數幾種版面類型就撐不住了。
常見問題
如何把 PDF 裡的表格擷取到 Excel?
先試 Excel 內建的匯入功能:資料 → 取得資料 → 從檔案 → 從 PDF,再挑選偵測到的表格。如果 Excel 漏掉或拆壞了表格 — 空白分隔或掃描表格很常見 — 就改用 ParseJet 這類 AI 工具擷取,再把 Markdown 表格貼進 Excel。
可以從掃描的 PDF 擷取表格嗎?
只有具備 OCR 能力的工具做得到。複製貼上、Power Query 與 Python 表格函式庫都需要真正的文字。AI 擷取工具會先對頁面做 OCR,再重建表格 — 把掃描檔上傳到 ParseJet,表格就會以文字回傳。
PDF 表格擷取最好的 Python 函式庫是哪個?
框線表格用 camelot,版面一致的報表用 tabula-py,需要自訂低階邏輯時用 pdfplumber。三者都需要針對版面調校,而且都無法處理掃描頁面,所以輸入內容混亂的管線最後通常會改呼叫解析 API。
為什麼我貼上的表格全擠在同一欄?
您的 PDF 檢視器把表格的列片段序列化成以空格分隔的純文字行,Excel 便把每一行貼進同一個儲存格。可用資料剖析重新拆分,或改用會重建表格結構的方法(Power Query 或擷取工具)。
含合併儲存格的表格擷取效果如何?
多數工具的表現都很糟 — 合併儲存格會破壞所有啟發式規則賴以運作的列欄格線。理解結構的擷取方式處理得最好;但無論用哪種方法,都建議手動核對合併的區域。
可以自動從大量 PDF 擷取表格嗎?
可以 — 把每個檔案 POST 到解析 API。使用 ParseJet 時,/v1/parse/auto/file 會回傳整份文件,表格以 Markdown(或結構化 JSON)呈現;免費 API 帳戶每月包含 300 點數。
相關工具
PDF to Markdown Converter
Convert PDF to Markdown online for free. Preserves headings, lists, tables, and code blocks. No signup required — try it instantly or automate via API.
PDF to JSON Converter
Convert PDF to JSON online for free. Get text, title, and metadata as structured JSON — ready for your app, database, or AI pipeline. API included.
Extract Text from PDF
Extract text from PDF files online for free. Supports scanned documents, multi-page PDFs, and complex layouts. No installation needed — works in your browser.
Related guides
How to Convert PDF to Markdown in Python
Convert PDF to Markdown in Python: PyMuPDF4LLM, Marker, MarkItDown, and a hosted API compared — with working code, accuracy notes, and when to pick each.
How to Copy Text from a PDF
Learn 4 proven ways to copy text from any PDF file — regular, scanned, or protected. Includes free methods, step-by-step instructions, and troubleshooting tips.