在快節(jié)奏的職場(chǎng)生活中,我們經(jīng)常會(huì)遇到需要從PDF文件中提取表格數(shù)據(jù)并整理到Excel中的情況。這不僅耗時(shí)耗力,而且容易出錯(cuò)。今天,我要為大家介紹一款由我們社區(qū)群技術(shù)大佬開發(fā)的PDF表格提取器,它能夠讓你輕松一鍵將PDF中的所有表格信息匯總到一個(gè)Excel工作簿中,極大地提升你的工作效率。
下載地址:
pdf2exl鏈接: https://pan.baidu.com/s/1JC2bNZYl_LRojhA0uAPLqw?pwd=2ghg 提取碼: 2ghg
工具介紹
這款PDF表格提取器,通過直觀的圖形用戶界面(GUI),讓你可以輕松地選擇PDF文件,一鍵提取所有表格到Excel文件。它支持多種PDF格式,并且可以處理包含復(fù)雜表格的文檔。
功能亮點(diǎn)
批量處理:一次性處理整個(gè)PDF文件中的所有表格。
智能識(shí)別:自動(dòng)識(shí)別PDF中的表格并提取數(shù)據(jù)。
實(shí)時(shí)日志:操作過程中實(shí)時(shí)顯示處理日志,讓你隨時(shí)了解進(jìn)度。
用戶友好的界面:簡(jiǎn)潔的界面讓操作變得簡(jiǎn)單易懂。
使用步驟
選擇PDF文件:瀏覽并選擇包含需要提取表格的PDF文件。
開始提取:點(diǎn)擊開始按鈕,工具將自動(dòng)提取所有表格到Excel文件。
查看日志:在操作過程中,你可以通過日志窗口實(shí)時(shí)查看處理詳情。
核心代碼
import os
import threading
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from tkinter.scrolledtext import ScrolledText
import tabula
from openpyxl import Workbook
class TabulaExtractor(tk.Tk):
def __init__(self):
super().__init__()
self.title("PDF 表格提取器 (Tabula)")
self.geometry("640x480")
self.resizable(False, False)
self.pdf_path = tk.StringVar()
self.xlsx_path = tk.StringVar()
self.build_ui()
self.xlsx_path.set(os.path.join(os.getcwd(), "提取結(jié)果.xlsx"))
def build_ui(self):
style = ttk.Style(self)
style.theme_use("clam")
ttk.Label(self, text="PDF → Excel 表格提取器", foreground="#0078D4",
font=("Microsoft YaHei", 16, "bold")).pack(pady=12)
frm = ttk.Frame(self)
frm.pack(fill="x", padx=15, pady=6)
ttk.Label(frm, text="PDF 文件:").grid(row=0, column=0, sticky="e")
ttk.Entry(frm, textvariable=self.pdf_path,
width=50).grid(row=0, column=1)
ttk.Button(frm, text="??", width=3, command=self.browse_pdf).grid(
row=0, column=2, padx=4)
ttk.Label(frm, text="輸出 Excel:").grid(row=1, column=0, sticky="e")
ttk.Entry(frm, textvariable=self.xlsx_path,
width=50).grid(row=1, column=1)
ttk.Button(frm, text="??", width=3, command=self.browse_xlsx).grid(
row=1, column=2, padx=4)
ctl = ttk.Frame(self)
ctl.pack(fill="x", padx=15, pady=8)
self.progress = ttk.Progressbar(ctl, length=320, mode="determinate")
self.progress.pack(side="left", padx=5)
ttk.Button(ctl, text="?? 開始提取", command=self.start_thread).pack(
side="left", padx=10)
self.stat_lbl = ttk.Label(ctl, text="就緒")
self.stat_lbl.pack(side="left")
log_frame = ttk.LabelFrame(self, text="實(shí)時(shí)日志", padding=5)
log_frame.pack(fill="both", expand=True, padx=15, pady=6)
self.log_text = ScrolledText(
log_frame, height=10, state="disabled", font=("Consolas", 9))
self.log_text.pack(fill="both", expand=True)
def browse_pdf(self):
f = filedialog.askopenfilename(filetypes=[("PDF文件", "*.pdf")])
if f:
self.pdf_path.set(f)
if not self.xlsx_path.get():
self.xlsx_path.set(os.path.splitext(f)[0] + ".xlsx")
def browse_xlsx(self):
f = filedialog.asksaveasfilename(defaultextension=".xlsx",
filetypes=[("Excel文件", "*.xlsx")])
if f:
self.xlsx_path.set(f)
def start_thread(self):
if not self.pdf_path.get():
messagebox.showerror("錯(cuò)誤", "請(qǐng)選擇 PDF 文件")
return
self.progress["value"] = 0
threading.Thread(target=self.extract, daemon=True).start()
def log(self, msg):
self.log_text.config(state="normal")
self.log_text.insert("end", msg + "\n")
self.log_text.see("end")
self.log_text.config(state="disabled")
def extract(self):
pdf = self.pdf_path.get()
xlsx = self.xlsx_path.get()
self.log("正在讀取 PDF 表格...")
dfs = tabula.read_pdf(
pdf, pages="all", multiple_tables=True)
if not dfs:
messagebox.showinfo("提示", "未檢測(cè)到表格")
return
wb = Workbook()
for idx, df in enumerate(dfs, 1):
ws = wb.create_sheet(title=f"表{idx}")
for row in df.values.tolist():
ws.append(row)
del wb["Sheet"]
wb.save(xlsx)
self.log(f"? 已保存 {len(dfs)} 張表到 {xlsx}")
self.stat_lbl["text"] = "完成!"
messagebox.showinfo("完成", f"已提取 {len(dfs)} 張表到\n{xlsx}")
if __name__ == "__main__":
TabulaExtractor().mainloop()
結(jié)語
在這個(gè)信息爆炸的時(shí)代,掌握一些自動(dòng)化辦公工具,無疑能夠讓我們的工作更加高效。PDF表格提取器就是這樣一款能夠提升我們工作效率的秘密武器。
閱讀原文:https://mp.weixin.qq.com/s/3jn1ocD6W0hk3rhCpxi3dw
該文章在 2025/8/28 16:28:59 編輯過