如何提取 Word 文档中的表格并导出为 Excel(Python 教程) VBA (Visual Basic for Applications)Office 自带的脚本语言可以快速将 Word 中的表格导出。虽然无需安装第三方库但其语法陈旧、调试困难且高度依赖 Microsoft Office 环境无法在没有安装 Office 的服务器或 Linux 环境上运行具有一定的设备局限性。开源 Python 库如 python-docx这类工具灵活性高但在处理复杂格式如嵌套表格、复杂的行列跨度映射时往往需要编写大量底层逻辑代码开发成本较高需要具备一定的编程知识。专业类库Spire 系列组件功能强大、API 简单易懂。它最大的优势在于独立性无需安装 Office和高集成度。它将复杂的 Word DOM 结构映射与 Excel 坐标系转换进行了底层封装开发者只需通过简单的 API 调用就可以精准保留原文档的逻辑结构和文本格式。方案对比表维度手动操作VBA 宏开源 Python 库Spire 系列专业组件执行效率极低中高极高环境依赖需人工参与需安装 Office需配置多种依赖独立运行零依赖合并单元格支持差易乱序较好一般需自行实现逻辑完美支持复杂场景适配难较难难易API 高级封装综合来看对于追求高效率和系统稳定性的企业级开发使用Spire.Doc for Python配合Spire.XLS for Python是当前最优的实战选型。环境准备在开始编写脚本之前请确保你的 Python 环境中已安装相关组件。这两个库分别负责解析 Word 的流式文档结构和构建 Excel 的行列坐标体系pip install Spire.Doc pip install Spire.XLS你可以分别安装 Word 和 Excel 组件也可以直接安装 Spire.Office for Python它包含了 Spire.Doc for PythonSpire.XLS for PythonSpire.Presentation for Python 和 Spire.PDF for Python。此外所有组件都提供免费版用于小项目或测试。如何构建 Python 导出表格的代码为了让你更清晰地理解 Spire.Doc 和 Spire.XLS 导出 Word 表格的逻辑我们将整个实现过程拆解为以下核心步骤1. 引入必要的类库首先我们需要在脚本开头引入 Spire 的核心模块。通过引入spire.doc和spire.xls及其通用常量模块我们才能在 Python 中调用其封装好的文档处理引擎从而实现对 Word DOM 树的解析和 Excel 工作簿的构建。from spire.doc import * from spire.doc.common import * from spire.xls import * from spire.xls.common import * import os2. 初始化对象与加载源文件分别创建Document和Workbook对象。随后使用LoadFromFile方法加载待处理的源 Word 文档并调用Worksheets.Clear()移除工作簿中默认生成的空白表以确保输出结果不受默认工作表的干扰。# 创建 Word 文档对象并加载文件 document Document() document.LoadFromFile(E:/input/项目进度.docx) # 创建 Excel 工作簿并清空默认工作表 workbook Workbook() workbook.Worksheets.Clear()3. 遍历 Word 文档多层级结构Word 的数据存储具有明显的层级性Section Table Row Cell。我们需要使用嵌套循环依次遍历文档中的Section (节)和Table (表格)。对于每一个发现的表格我们通过workbook.Worksheets.Add()动态创建一个工作表并通过sheet_index实现自动命名确保一表一页。sheet_index 0 for s in range(document.Sections.Count): section document.Sections.get_Item(s) tables section.Tables for t in range(tables.Count): table tables.get_Item(t) # 动态创建工作表并递增索引 sheet workbook.Worksheets.Add(fTable_{sheet_index 1}) # ... (后续数据提取) sheet_index 14. 提取单元格文本与格式映射由于 Word 单元格内可能包含多个段落所以我们需要遍历Paragraphs集合并手动拼接换行符\n以保留文本的原始换行结构。最后通过Style.WrapText True开启 Excel 的自动换行功能。# 遍历行与列 for r in range(table.Rows.Count): row table.Rows.get_Item(r) for c in range(row.Cells.Count): cell row.Cells.get_Item(c) cell_text for p in range(cell.Paragraphs.Count): paragraph cell.Paragraphs.get_Item(p) cell_text paragraph.Text.strip() \n # 写入 Excel 坐标并设置换行 sheet.Range[r 1, c 1].Text cell_text.strip() sheet.Range[r 1, c 1].Style.WrapText True5. 自动化布局优化与资源释放数据填充完成后利用AutoFitColumns()和AutoFitRows()方法让程序自动根据内容调整列宽和行高。最后释放内存确保系统资源回收。完整代码示例将上述的步骤整合即可得到这个高效的 Word 表格导出脚本from spire.doc import * from spire.doc.common import * from spire.xls import * from spire.xls.common import * import os # 创建 Word 文档对象并加载文件 document Document() document.LoadFromFile(/input/项目进度.docx) # 创建 Excel 工作簿并删除默认工作表 workbook Workbook() workbook.Worksheets.Clear() # 遍历 Word 文档中的所有节 sheet_index 0 for s in range(document.Sections.Count): section document.Sections.get_Item(s) # 获取当前节中的所有表格 tables section.Tables for t in range(tables.Count): # 获取当前表格 table tables.get_Item(t) # 新建工作表 sheet workbook.Worksheets.Add(fTable_{sheet_index 1}) # 遍历表格行 for r in range(table.Rows.Count): row table.Rows.get_Item(r) # 遍历单元格 for c in range(row.Cells.Count): cell row.Cells.get_Item(c) # 提取单元格中的文本 cell_text for p in range(cell.Paragraphs.Count): paragraph cell.Paragraphs.get_Item(p) cell_text paragraph.Text.strip() \n # 去除末尾换行 cell_text cell_text.strip() # 写入 Excel 单元格 sheet.Range[r 1, c 1].Text cell_text # 设置自动换行 sheet.Range[r 1, c 1].Style.WrapText True # 自动调整列宽行高 sheet.AllocatedRange.AutoFitColumns() sheet.AllocatedRange.AutoFitRows() sheet_index 1 # 保存为 Excel 文件 workbook.SaveToFile(/output/word表格.xlsx, ExcelVersion.Version2016) document.Close() workbook.Dispose()下面是原始 Word 文档与提取到的表格的对比示意图