目錄
TogglePython Excel 轉換 PDF 教學總覽
在專案管理、團隊協作與數據分析等工作場景中,將Excel檔案轉換為PDF格式是一項常見需求。PDF格式具備不可編輯、跨平台易於分享的特性,適合用於報表、審核、客戶溝通等場合。透過Python自動化轉檔,不僅能節省大量手動操作時間,也能結合自動化流程,提升團隊效率。
本教學將從多種主流方法切入,逐步解析安裝、程式範例、格式設定、批次處理與常見問題,協助你根據實際需求選擇最合適的解決方案。
常見Excel轉PDF方法比較
不同的Python方法適用於不同平台與需求。以下表格整理主流方案的比較:
方法 | 適用平台 | 需安裝軟體 | 支援格式 | 批次處理 | 格式美化 | 難易度 | 特色與限制 |
---|---|---|---|---|---|---|---|
pdfkit + wkhtmltopdf | Windows/Mac/Linux | wkhtmltopdf | xls/xlsx | 支援 | 強 | 中 | 跨平台、需額外安裝wkhtmltopdf |
win32com | Windows | Excel | xls/xlsx | 支援 | 強 | 易 | 需安裝Excel、僅限Windows |
fpdf | 全平台 | 無 | xls/xlsx | 支援 | 弱 | 中 | 純Python、格式需自行設計 |
openpyxl + reportlab | 全平台 | 無 | xlsx | 支援 | 弱 | 中 | 純Python、格式自訂、較彈性 |
選擇建議:
– 需高度格式還原、跨平台:建議pdfkit + wkhtmltopdf
– 僅限Windows且已安裝Excel:可用win32com,操作簡單
– 追求純Python、格式自訂:可考慮fpdf或openpyxl + reportlab
方法一:使用pdfkit與wkhtmltopdf(跨平台推薦)
前置準備與環境需求
- 適用平台:Windows、Mac、Linux
- Python版本:建議3.7以上
- 需安裝:pandas、openpyxl、pdfkit(Python套件),wkhtmltopdf(系統工具)
各套件用途說明:
– pandas:讀取與處理Excel資料
– openpyxl:支援讀取xlsx格式
– pdfkit:將HTML轉換為PDF
– wkhtmltopdf:實際執行HTML轉PDF的底層工具
安裝步驟詳解
-
安裝Python套件(於命令列執行):
pip install pandas openpyxl pdfkit
-
安裝wkhtmltopdf
- 前往 wkhtmltopdf官方下載頁 下載對應作業系統版本
-
安裝後,確認wkhtmltopdf已加入系統PATH,或記下安裝路徑
-
常見安裝錯誤與排查
- 找不到wkhtmltopdf:確認安裝路徑已加入環境變數,或於程式中指定完整路徑
- 安裝權限問題:以管理員權限安裝,或於終端機提升權限
Excel轉PDF完整範例程式碼
以下範例示範將單一Excel檔案轉換為PDF,並支援多工作表、批次處理:
import pandas as pd
import pdfkit
import os
# wkhtmltopdf安裝路徑(如未在PATH,請指定完整路徑)
config = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf') # Mac/Linux範例
# Windows範例:config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')
def excel_to_pdf(excel_path, pdf_path):
# 讀取所有工作表
xls = pd.ExcelFile(excel_path)
html_list = []
for sheet in xls.sheet_names:
df = pd.read_excel(xls, sheet_name=sheet)
html = df.to_html(index=False, border=1)
html_list.append(f'<h2>{sheet}</h2>{html}')
# 合併所有工作表HTML
full_html = "<html><body>" + "".join(html_list) + "</body></html>"
# 轉換為PDF
pdfkit.from_string(full_html, pdf_path, configuration=config)
# 單檔轉換
excel_to_pdf('sample.xlsx', 'output.pdf')
# 批次轉換資料夾內所有Excel檔
folder = 'excel_folder'
for file in os.listdir(folder):
if file.endswith('.xlsx') or file.endswith('.xls'):
excel_path = os.path.join(folder, file)
pdf_path = os.path.join(folder, file.rsplit('.', 1)[0] + '.pdf')
excel_to_pdf(excel_path, pdf_path)
格式美化與頁面設定
- 調整表格樣式:可自訂to_html()產生的HTML,加上CSS樣式提升美觀
- 設定PDF頁面尺寸、橫直向:pdfkit支援options參數,如:
python
options = {
'page-size': 'A4',
'orientation': 'Landscape', # 或 'Portrait'
'encoding': "UTF-8"
}
pdfkit.from_string(full_html, pdf_path, configuration=config, options=options) - 加入頁首/頁尾、公司Logo:可於HTML模板中插入相關元素
常見問題與錯誤排查
- wkhtmltopdf未安裝或路徑錯誤:請確認安裝並於pdfkit.configuration指定正確路徑
- Excel格式不支援:xls需安裝xlrd,xlsx建議使用openpyxl
- 轉檔後格式跑掉:調整to_html()參數,或自訂HTML/CSS
- 中文字亂碼:確保HTML指定UTF-8編碼,或於wkhtmltopdf安裝中文字型
方法二:使用win32com(僅限Windows)
適用情境與限制
- 僅支援Windows
- 需安裝Microsoft Excel
- 適合需高度還原Excel格式的用戶
安裝與範例程式碼
-
安裝pywin32套件
pip install pywin32
-
範例程式碼(單檔與批次處理):
import win32com.client as win32
import os
def excel_to_pdf_win(excel_path, pdf_path):
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(excel_path)
ws = wb.Worksheets
for sheet in ws:
sheet.PageSetup.Zoom = False # 可調整列印比例
sheet.PageSetup.FitToPagesWide = 1
sheet.PageSetup.FitToPagesTall = False
wb.ExportAsFixedFormat(0, pdf_path)
wb.Close(False)
excel.Quit()
# 單檔轉換
excel_to_pdf_win(r'C:\path\to\sample.xlsx', r'C:\path\to\output.pdf')
# 批次轉換資料夾內所有Excel檔
folder = r'C:\path\to\excel_folder'
for file in os.listdir(folder):
if file.endswith('.xlsx') or file.endswith('.xls'):
excel_path = os.path.join(folder, file)
pdf_path = os.path.join(folder, file.rsplit('.', 1)[0] + '.pdf')
excel_to_pdf_win(excel_path, pdf_path)
優缺點與注意事項
- 優點:高度還原Excel原始格式、支援列印設定、支援多工作表
- 缺點:僅限Windows,需安裝Excel,無法於Linux/Mac執行
- 注意:執行時Excel需未被其他程式佔用,建議批次處理時監控Excel程序釋放
其他轉檔方案簡介
- fpdf:純Python產生PDF,需自行設計表格格式,適合自訂報表
- openpyxl + reportlab:讀取Excel資料後用reportlab繪製PDF,彈性高但需自行處理排版
- 第三方雲端工具:如Monday.com、ClickUp等,部分支援自動化報表產生與PDF匯出,適合團隊協作與流程整合
常見FAQ
Q1:如何批次轉換多個Excel檔案?
A:可用os.listdir()遍歷資料夾,搭配上述程式碼自動批次轉檔。
Q2:轉檔後表格格式跑掉怎麼辦?
A:建議調整to_html()產生的HTML樣式,或於win32com方法中設定列印格式。
Q3:支援哪些Excel格式?
A:pdfkit支援xls/xlsx(需pandas/openpyxl),win32com同樣支援xls/xlsx。
Q4:如何設定PDF頁面尺寸與橫直向?
A:pdfkit可用options參數設定,win32com可用PageSetup調整。
Q5:有純Python解法嗎?
A:fpdf、openpyxl+reportlab皆為純Python,但格式需自行設計。
Q6:遇到wkhtmltopdf找不到或安裝失敗?
A:請確認安裝路徑,於pdfkit.configuration明確指定,或檢查環境變數。
Q7:轉檔後中文字顯示異常?
A:請於HTML指定UTF-8編碼,並確認wkhtmltopdf安裝了中文字型。
結語與進階應用
選擇合適的Excel轉PDF方法,能大幅提升數據報表自動化效率。pdfkit + wkhtmltopdf適合跨平台、格式彈性需求;win32com則適合Windows用戶追求高度格式還原。若需進一步整合自動化流程、團隊協作或報表排程,建議結合如Monday.com等專業專案管理工具,實現自動產出、即時分享與權限控管,讓數據流轉更順暢。