Python使用Spire.XLS for Python實現(xiàn)將Excel轉換為PDF
在日常辦公和數(shù)據(jù)處理工作中,將 Excel 電子表格轉換為 PDF 格式是一項常見且重要的需求。PDF 格式具有跨平臺兼容性、不易被修改、保持固定布局等優(yōu)勢,使其成為分享報表、發(fā)票、數(shù)據(jù)匯總等文檔的理想選擇。通過程序化方式實現(xiàn) Excel 到 PDF 的轉換,可以大幅提升工作效率,特別是在需要批量處理大量文件時。
本文將詳細介紹如何使用 Spire.XLS for Python 庫將 Excel 工作簿轉換為 PDF 格式。我們將涵蓋基本轉換、頁面適配設置、指定范圍轉換、以及批量處理等多種場景,幫助你構建完整的 Excel 轉 PDF 解決方案。
環(huán)境準備
在開始之前,你需要安裝 Spire.XLS for Python 庫??梢允褂?pip 命令進行安裝:
pip install Spire.XLS
安裝完成后,你就可以在 Python 項目中使用該庫來操作 Excel 文檔并進行格式轉換了。
Excel 轉 PDF 的應用場景
在實際工作中,Excel 轉 PDF 有多種典型應用場景:
- 報表分發(fā):將財務報表、銷售數(shù)據(jù)轉換為 PDF 后發(fā)送給相關人員
- 文檔歸檔:將重要電子表格存檔為不可篡改的 PDF 格式
- 打印準備:確保在不同設備上打印時保持一致的布局和格式
- 客戶交付:向客戶提供格式固定的發(fā)票、報價單或對賬單
- 合規(guī)要求:某些行業(yè)要求以 PDF/A 等標準格式保存文檔
Spire.XLS for Python 提供了豐富的 API 來滿足這些不同的轉換需求,讓你能夠靈活控制轉換過程中的各種參數(shù)。
基本的 Excel 轉 PDF 轉換
最基礎的轉換操作是將整個 Excel 工作簿保存為 PDF 格式。以下示例展示了如何完成這一基本任務:
from spire.xls import *
from spire.xls.common import *
def ConvertExcelToPDF():
"""將 Excel 工作簿轉換為 PDF"""
inputFile = "/input/Population.xlsx"
outputFile = "/output/ToPDF.pdf"
# 創(chuàng)建工作簿對象
workbook = Workbook()
# 加載 Excel 文件
workbook.LoadFromFile(inputFile)
# 設置工作表適配頁面(確保內容完整顯示)
workbook.ConverterSetting.SheetFitToPage = True
# 保存為 PDF 格式
workbook.SaveToFile(outputFile, FileFormat.PDF)
workbook.Dispose()
if __name__ == "__main__":
ConvertExcelToPDF()

在這個示例中,我們首先創(chuàng)建一個 Workbook 對象并加載 Excel 文件。關鍵的一步是設置 ConverterSetting.SheetFitToPage = True,這個選項會確保工作表內容自動適配到 PDF 頁面中,避免內容被截斷。最后調用 SaveToFile() 方法并指定 FileFormat.PDF 即可完成轉換。
這種基本轉換適用于大多數(shù)常規(guī)場景,能夠快速將整個工作簿(包括所有工作表)轉換為單個 PDF 文件。
優(yōu)化頁面布局:自適應寬度轉換
當 Excel 工作表包含較多列時,直接轉換可能導致內容被分割到多個頁面上。為了避免這種情況,我們可以設置頁面布局,讓所有內容在寬度上適配到一頁內,而高度則根據(jù)內容自動延伸。以下是具體實現(xiàn):
from spire.xls import *
from spire.xls.common import *
def FitWidthWhenConvertToPDF():
"""轉換時讓內容寬度適配到一頁"""
inputFile = "./Demos/Data/SampleB_2.xlsx"
outputFile = "FitWidthWhenConvertToPDF.pdf"
# 加載 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 遍歷所有工作表,設置頁面適配
for sheet in workbook.Worksheets:
# 設置高度不限制(0 表示自動)
sheet.PageSetup.FitToPagesTall = 0
# 設置寬度適配到 1 頁
sheet.PageSetup.FitToPagesWide = 1
# 保存為 PDF
workbook.SaveToFile(outputFile, FileFormat.PDF)
workbook.Dispose()
print(f"寬度適配轉換完成,PDF 文件已保存至: {outputFile}")
if __name__ == "__main__":
FitWidthWhenConvertToPDF()
這個示例的關鍵在于設置每個工作表的 PageSetup 屬性。FitToPagesWide = 1 表示將所有列壓縮到一頁寬度內,而 FitToPagesTall = 0 表示高度不受限制,會根據(jù)內容自動分頁。這種設置特別適合寬表格的轉換,能夠確保每行數(shù)據(jù)完整顯示在同一頁上,提高可讀性。
轉換指定的單元格范圍
有時你只需要將 Excel 中的特定區(qū)域轉換為 PDF,而不是整個工作表。這種情況下,可以先將目標區(qū)域復制到新工作表,然后僅轉換該工作表。以下示例演示了這一技巧:
from spire.xls import *
from spire.xls.common import *
def ConvertSelectedRangeToPDF():
inputFile = "/input/Population.xlsx"
outputFile = "/output/SelectedRangeToPDF.pdf"
# 加載原始 Excel 文件
source_workbook = Workbook()
source_workbook.LoadFromFile(inputFile)
source_sheet = source_workbook.Worksheets[0] # 獲取第一個工作表
# 創(chuàng)建一個全新的、干凈的臨時 Workbook
target_workbook = Workbook()
target_workbook.CreateEmptySheets(1) # 嚴格控制:只創(chuàng)建 1 個工作表
target_sheet = target_workbook.Worksheets[0]
# 復制指定區(qū)域 (A4:E9) 到新 Workbook 的 A4:E9
source_sheet.Range["A4:E9"].Copy(
target_sheet.Range["A4:E9"],
False, # 不復制公式
True # 復制格式
)
# 自動調整列寬
target_sheet.Range["A4:E9"].AutoFitColumns()
# 保存這個單獨的 Workbook 為 PDF
target_workbook.SaveToFile(outputFile, FileFormat.PDF)
source_workbook.Dispose()
target_workbook.Dispose()
if __name__ == "__main__":
ConvertSelectedRangeToPDF()

這個方法通過以下步驟實現(xiàn)范圍轉換:首先創(chuàng)建一個新工作表作為臨時容器,然后將目標區(qū)域復制過去,接著自動調整列寬以確保內容正確顯示,最后僅轉換這個新工作表。這種方式非常靈活,你可以輕松修改復制的區(qū)域范圍來滿足不同的需求。
將每個工作表轉換為獨立的 PDF 文件
在某些場景下,你可能需要將一個 Excel 文件中的每個工作表分別轉換為單獨的 PDF 文件。這在處理包含多個獨立報表的工作簿時特別有用。以下是實現(xiàn)方法:
from spire.xls import *
from spire.xls.common import *
def ConvertEachWorksheetToSeparatePDF():
"""將每個工作表轉換為獨立的 PDF 文件"""
inputFile = "./Demos/Data/EachWorksheetToDifferentPDFSample.xlsx"
# 加載 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 遍歷所有工作表
for sheet in workbook.Worksheets:
# 使用工作表名稱作為 PDF 文件名
FileName = sheet.Name + ".pdf"
# 將當前工作表單獨保存為 PDF
sheet.SaveToPdf(FileName)
print(f"工作表 '{sheet.Name}' 已轉換為 {FileName}")
workbook.Dispose()
print("所有工作表轉換完成")
if __name__ == "__main__":
ConvertEachWorksheetToSeparatePDF()
這個示例展示了如何使用 sheet.SaveToPdf() 方法直接將單個工作表轉換為 PDF。通過遍歷 workbook.Worksheets 集合,我們可以為每個工作表生成獨立的 PDF 文件,并以工作表名稱命名輸出文件。這種方法非常適合批量處理包含多個獨立報表的工作簿。
轉換為 PDF/A 標準格式
對于需要長期歸檔或符合特定行業(yè)標準的文檔,PDF/A 格式是一個更好的選擇。PDF/A 是 ISO 標準化的 PDF 子集,專為電子文檔的長期保存而設計。以下是如何將 Excel 轉換為 PDF/A-1B 格式的示例:
from spire.xls import *
from spire.xls.common import *
def ConvertToPDFA1B():
"""將 Excel 轉換為 PDF/A-1B 標準格式"""
inputFile = "./Demos/Data/ToPDF_A1BExample.xlsx"
outputFile = "ToPDFA1B.pdf"
# 創(chuàng)建工作簿并加載文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 設置 PDF 一致性級別為 PDF/A-1B
workbook.ConverterSetting.PdfConformanceLevel = PdfConformanceLevel.Pdf_A1B
# 保存為 PDF
workbook.SaveToFile(outputFile, FileFormat.PDF)
workbook.Dispose()
print(f"PDF/A-1B 文件已保存至: {outputFile}")
if __name__ == "__main__":
ConvertToPDFA1B()
通過設置 ConverterSetting.PdfConformanceLevel 屬性,你可以指定輸出的 PDF 遵循的標準。Pdf_A1B 是最常用的 PDF/A 級別之一,它確保文檔在所有兼容的閱讀器中都能正確顯示,并且適合長期存檔。其他可用的選項還包括 Pdf_A2B、Pdf_A3B 等,你可以根據(jù)具體需求選擇合適的標準。
實用技巧與高級應用
從 CSV 文件轉換為 PDF
除了標準的 Excel 文件格式,Spire.XLS 還支持直接從 CSV 文件轉換為 PDF。這在處理導出數(shù)據(jù)時非常有用:
from spire.xls import *
from spire.xls.common import *
def ConvertCSVToPDF():
"""將 CSV 文件轉換為 PDF"""
inputFile = "./Demos/Data/CSVSample.csv"
outputFile = "CSVToPDF.pdf"
# 創(chuàng)建工作簿并加載 CSV 文件
workbook = Workbook()
# 加載 CSV,指定分隔符為逗號,起始行為 1,起始列為 1
workbook.LoadFromFile(inputFile, ",", 1, 1)
# 設置工作表適配頁面
workbook.ConverterSetting.SheetFitToPage = True
# 獲取第一個工作表
sheet = workbook.Worksheets[0]
# 自動調整所有列的寬度
i = 1
while i < sheet.Columns.Length:
sheet.AutoFitColumn(i)
i += 1
# 保存為 PDF
workbook.SaveToFile(outputFile, FileFormat.PDF)
workbook.Dispose()
print(f"CSV 轉 PDF 完成,文件已保存至: {outputFile}")
if __name__ == "__main__":
ConvertCSVToPDF()
這個示例展示了如何加載 CSV 文件并進行格式化處理后轉換為 PDF。LoadFromFile() 方法的第二個參數(shù)指定分隔符(這里是逗號),后面兩個參數(shù)指定數(shù)據(jù)的起始行和起始列。加載后,通過 AutoFitColumn() 方法自動調整每列的寬度,確保內容完整顯示。
批量轉換工具類
在實際項目中,你可能需要批量處理多個 Excel 文件。以下是一個實用的批量轉換工具類:
import os
from spire.xls import *
from spire.xls.common import *
class ExcelToPdfConverter:
"""Excel 轉 PDF 批量轉換器"""
def __init__(self, output_folder=None):
self.output_folder = output_folder or "./PDF_Output"
# 創(chuàng)建輸出文件夾
if not os.path.exists(self.output_folder):
os.makedirs(self.output_folder)
def convert_single_file(self, input_file, output_file=None, fit_to_page=True):
"""轉換單個 Excel 文件為 PDF"""
try:
workbook = Workbook()
workbook.LoadFromFile(input_file)
if fit_to_page:
workbook.ConverterSetting.SheetFitToPage = True
if output_file is None:
base_name = os.path.splitext(os.path.basename(input_file))[0]
output_file = os.path.join(self.output_folder, f"{base_name}.pdf")
workbook.SaveToFile(output_file, FileFormat.PDF)
workbook.Dispose()
print(f"? 轉換成功: {os.path.basename(input_file)}")
return True
except Exception as e:
print(f"? 轉換失敗 {os.path.basename(input_file)}: {str(e)}")
return False
def batch_convert(self, input_folder, file_extension=".xlsx"):
"""批量轉換文件夾中的所有 Excel 文件"""
excel_files = []
# 查找所有 Excel 文件
for filename in os.listdir(input_folder):
if filename.lower().endswith(file_extension):
excel_files.append(os.path.join(input_folder, filename))
if not excel_files:
print(f"在 {input_folder} 中未找到 {file_extension} 文件")
return
print(f"找到 {len(excel_files)} 個文件,開始轉換...")
success_count = 0
fail_count = 0
for excel_file in excel_files:
if self.convert_single_file(excel_file):
success_count += 1
else:
fail_count += 1
print(f"\n轉換完成!")
print(f"成功: {success_count} 個文件")
print(f"失敗: {fail_count} 個文件")
print(f"輸出目錄: {self.output_folder}")
def convert_with_custom_settings(self, input_file, output_file,
fit_wide=True, fit_tall=0):
"""使用自定義頁面設置進行轉換"""
workbook = Workbook()
workbook.LoadFromFile(input_file)
# 設置頁面適配
for sheet in workbook.Worksheets:
sheet.PageSetup.FitToPagesWide = 1 if fit_wide else 0
sheet.PageSetup.FitToPagesTall = fit_tall
workbook.SaveToFile(output_file, FileFormat.PDF)
workbook.Dispose()
print(f"自定義設置轉換完成: {output_file}")
def main():
# 示例 1: 批量轉換
converter = ExcelToPdfConverter("./PDF_Output")
converter.batch_convert("./Excel_Files", ".xlsx")
# 示例 2: 單個文件轉換
# converter.convert_single_file("./Data/Report.xlsx")
# 示例 3: 自定義設置轉換
# converter.convert_with_custom_settings(
# "./Data/WideTable.xlsx",
# "./Output/WideTable.pdf",
# fit_wide=True,
# fit_tall=0
# )
if __name__ == "__main__":
main()
這個工具類提供了多種轉換方法,支持單文件轉換、批量轉換以及自定義頁面設置。你可以根據(jù)實際需求選擇合適的方法,并將其集成到自動化工作流中。
轉換質量優(yōu)化建議
為了獲得最佳的 PDF 輸出效果,注意以下幾點:
頁面設置
- 根據(jù)內容特點選擇合適的頁面方向(橫向或縱向)
- 使用
FitToPagesWide和FitToPagesTall控制分頁 - 適當設置頁邊距,避免內容過于擁擠
字體和格式
- 確保使用的字體在目標系統(tǒng)上可用
- 檢查特殊字符和符號是否正確顯示
- 驗證顏色和圖片在 PDF 中的呈現(xiàn)效果
性能考慮
- 大文件轉換時考慮內存使用情況
- 批量處理時使用循環(huán)而非一次性加載所有文件
- 轉換完成后及時調用
Dispose()釋放資源
常見問題與解決方案
問題 1:轉換后的 PDF 內容被截斷
解決方案:啟用 SheetFitToPage 或設置 FitToPagesWide 和 FitToPagesTall 屬性,確保內容適配頁面。
問題 2:中文或其他特殊字符顯示異常
解決方案:確保 Excel 文件中使用了正確的字體,并且在轉換環(huán)境中安裝了這些字體??梢栽谵D換前檢查字體嵌入設置。
問題 3:轉換速度慢
解決方案:對于大型工作簿,可以考慮只轉換必要的工作表,或者先將數(shù)據(jù)拆分到多個小文件中再分別轉換。
總結
掌握這些技能后,你可將其無縫應用于自動化報表生成、文檔管理系統(tǒng)及數(shù)據(jù)歸檔等場景。通過靈活控制轉換細節(jié),不僅能大幅提升辦公自動化效率,更能確保輸出文檔的專業(yè)與規(guī)范,讓數(shù)據(jù)呈現(xiàn)更加高效、精準。
以上就是Python使用Spire.XLS for Python實現(xiàn)將Excel轉換為PDF的詳細內容,更多關于Python Excel轉PDF的資料請關注腳本之家其它相關文章!
- Python把PDF表格完整轉換成Excel的小白教程
- Python調用Tika實現(xiàn)一站式提取PDF/Word/Excel
- Python實現(xiàn)將Word、Excel、PDF轉換為Markdown格式
- Python實現(xiàn)高效提取PDF中的表格數(shù)據(jù)并導出為 TXT或Excel
- Python提取PDF表格數(shù)據(jù)并導出為TXT、Excel?格式
- Python自動化辦公全攻略之Excel/Word/PDF/郵件批量處理
- Python基于OpenPyxl實現(xiàn)Excel轉PDF并精準控制分頁
- 從入門到實戰(zhàn)詳解Python如何將Excel工作表轉換為PDF
相關文章
詳解Python網(wǎng)絡框架Django和Scrapy安裝指南
這篇文章主要介紹了詳解Python網(wǎng)絡框架Django和Scrapy安裝指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
Python使用execjs模塊運行JavaScript代碼
在編程中,Python和JavaScript是兩種使用廣泛的編程語言,本文將深入探索如何通過execjs模塊在Python中運行JavaScript代碼,有需要的可以參考一下2025-03-03
一文詳解如何基于Python的tkinter庫創(chuàng)建圖形用戶界面
Tkinter是Python中用于創(chuàng)建圖形用戶界面 (GUI) 的標準庫之一,它基于Tk GUI工具包,這篇文章主要介紹了如何基于Python的tkinter庫創(chuàng)建圖形用戶界面的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-07-07
詳解Python 實現(xiàn) ZeroMQ 的三種基本工作模式
ZMQ是一個簡單好用的傳輸層,像框架一樣的一個 socket library,他使得 Socket 編程更加簡單、簡潔和性能更高。 ,這篇文章主要介紹了Python 實現(xiàn) ZeroMQ 的三種基本工作模式,需要的朋友可以參考下2020-03-03
Python元組創(chuàng)建的兩種方式詳解(小括號與tuple函數(shù))
在Python的世界里,元組(Tuple)作為最基礎的不可變序列類型,扮演著舉足輕重的角色,它看似簡單,卻蘊含著許多初學者容易忽視的細節(jié),今天,我們將深入探討元組創(chuàng)建的方方面面,幫你徹底掌握這個看似簡單卻暗藏玄機的基礎知識,需要的朋友可以參考下2026-05-05

