用Python提取PDF表格到Excel文件

在对PDF中的表格进行再利用时,除了直接将PDF文档转换为Excel文件,我们还可以提取PDF文档中的表格数据并写入Excel工作表。这样做可以避免一些不必要的文本和格式带来的干扰,获得更易于分析和处理的表格数据,并方便进行更多的格式设置。利用Python,我们可以实现对PDF表格数据的批量提取,并写入Excel工作表中,实现高效的提取写入操作。本文将介绍如何使用Python提取PDF文档中的表格并写入Excel文件中。

本文所使用的方法需要用到Spire.PDF for Python和Spire.XLS for Python,PyPI:pip install spire.pdf, spire.xls。

申请免费License

Python提取PDF表格数据写入Excel工作表

提取表格需要用到Spire.PDF for Python中的PdfTableExtractor类。我们可以使用载入的PDF文档创建一个PdfTableExtractor对象,然后使用PdfTableExtractor.ExtractTable()方法直接提取指定页面的所有表格返回为列表。然后,我们可以使用PdfTable.GetText()来获取表格指定单元格的文本,再使用Spire.XLS for Python新建工作表并写入读取的数据到工作表中的相应位置。最后,对工作表进行合适的格式设置,即可完成PDF表格数据到Excel工作表的提取。

以下是详细操作步骤:

  1. 导入所需模块。
  2. 创建 PdfDocument 对象,并使用 PdfDocument.LoadFromFile() 方法加载PDF文档。
  3. 创建一个 Workbook 对象,并使用 Workbook.Worksheets.Clear() 方法清除默认工作表。
  4. 为加载的PDF文档创建一个 PdfTableExtractor 对象。
  5. 使用 PdfTableExtractor.ExtractTable() 方法提取文档中每一页的表格。
  6. 遍历每个表格
    • 使用 Workbook.Worksheets.Add() 方法为每个表格在工作簿中添加一个工作表。
    • 使用 Table.GetText() 方法遍历各行各列以获取单元格值,并通过 Worksheet.Range[].Text 属性将其插入工作表的相应位置。
    • 设置单元格格式。
  7. 使用 Workbook.SaveToFile() 方法保存工作簿。
  8. 释放资源。

代码示例

python 复制代码
from spire.pdf import *
from spire.xls import *

# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("示例.pdf")

# 创建一个 Workbook 对象
workbook = Workbook()
# 清除默认工作表
workbook.Worksheets.Clear()

# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)

# 从每个 PDF 页面提取表格
for pageIndex in range(pdf.Pages.Count):
    tables = extractor.ExtractTable(pageIndex)
    # 如果有多个表格则迭代
    if tables is not None:
        for tableIndex in range(len(tables)):
            # 获取一个表格
            table = tables[tableIndex]
            # 为该表格创建一个工作表
            sheet = workbook.Worksheets.Add(f"Page{pageIndex + 1}-Table{tableIndex + 1}")
            # 迭代表格的行和列
            for rowIndex in range(table.GetRowCount()):
                for colIndex in range(table.GetColumnCount()):
                    # 获取单元格的值
                    text = table.GetText(rowIndex, colIndex)
                    cellText = text.replace("\n", "")
                    # 将单元格的值写入工作表中的相应单元格
                    sheet.Range[rowIndex + 1, colIndex + 1].Text = cellText
            # 设置表头行样式
            sheet.Rows.get_Item(0).Style.Font.FontName = "HarmonyOS Sans SC"
            sheet.Rows.get_Item(0).Style.Font.Size = 12
            sheet.Rows.get_Item(0).Style.Font.IsBold = True
            sheet.Rows.get_Item(0).Style.HorizontalAlignment = HorizontalAlignType.Center
            # 设置数据行样式
            for i in range(1, sheet.Rows.Count):
                sheet.Rows.get_Item(i).Style.Font.FontName = "HarmonyOS Sans SC"
                sheet.Rows.get_Item(i).Style.Font.Size = 12
                sheet.Rows.get_Item(i).Style.HorizontalAlignment = HorizontalAlignType.Left
            # 自动调整列宽
            for j in range(1, sheet.Columns.Count):
                sheet.AutoFitColumn(j)

# 保存工作簿
workbook.SaveToFile("output/PDFTableToExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()
pdf.Close()

结果

本文演示了如何使用Python提取PDF文档表格数据到Excel文件中。

更多PDF文档操作技巧请前往Spire.PDF for Python教程查看。

相关推荐
Ai-_Man6 分钟前
ChatGPT还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·javascript·人工智能·chatgpt·小程序·ecmascript
问天_观心9 分钟前
模型微调学习(二)
开发语言·人工智能·学习·语言模型·github
小羊没烦恼!11 分钟前
深入浅出SQL Server中的死锁
java·开发语言·前端·数据库·后端·spring·c#
白露与泡影11 分钟前
Java 面试八股文及答案整理 | 后端面试高频题(2026)
java·开发语言·面试
夜晚回家17 分钟前
Python 赋值运算符详解 | 从 = 到 +=,一张记账单讲清复合赋值
开发语言·python
布莱克60525 分钟前
QtWidgets 与 QML:两大 UI 开发框架的全面对比
开发语言·c++·qt·ui·架构
Maya动画技术26 分钟前
pptx批量转png图片工具
python
张伯毅35 分钟前
External Shuffle Service(spark3_shuffle):原理、配置与排障
java·开发语言·spark·yarn
geovindu1 小时前
rust: Template Method Pattern
开发语言·后端·设计模式·rust·行为模式·模板方法模
MoRanzhi12031 小时前
第4篇 · 使用 PyQt5 实现 2048:平滑动画与性能优化
python·性能优化·qtimer·pyqt5·qpainter·gui动画·2048游戏