Python批量提取Word文档表格数据

在大数据处理与信息抽取领域中,Word文档是各类机构和个人普遍采用的一种信息存储格式,其中包含了大量的结构化和半结构化数据,如各类报告、调查问卷结果、项目计划等。这些文档中的表格往往承载了关键的数据信息,如统计数据、项目进度、研究成果等。然而,手动从大量的Word文档中逐一摘取并整理这些表格不仅耗时费力,且易出错,无法满足高效、准确的数据利用需求。因此,利用编程实现批量提取Word文档中的表格成为了一种必要且高效的解决方案。Python作为一种功能强大、易学易用的编程语言,可以有效地实现这一目标,极大地提升数据采集和预处理的工作效率,同时也为后续的数据分析和应用提供强有力的支持。本文将介绍如何使用Python实现对Word文档中表格的提取

文章目录

    • 提取Word文档表格并保存为Excel工作表
    • 提取Word文档表格并保存为CSV文件

本文所使用的方法需要用到Spire.Doc for Python,可从官网获取。如果是将表格保存到Excel工作表,则还需要用到Spire.XLS for Python。

提取Word文档表格并保存为Excel工作表

读取Word文档中的表格并写入Excel工作簿需要同时用到这两个库。以下是操作步骤:

  1. 创建 DocumentWorkbook 对象。
  2. 使用 Document 类的 LoadFromFile() 方法载入指定路径下的 Word 文档。
  3. 清除 Workbook 中的所有工作表。
  4. 遍历加载的 Word 文档中的所有节(Sections)。
  5. 在每个节中,遍历其包含的所有表格(Tables)。
  6. 对于每一个表格,创建一个新的 Excel 工作表,并根据表格索引为其命名。
  7. 遍历表格中的每一行(Rows),并获取当前行对象。
  8. 再次遍历该行中的所有单元格(Cells),获取单元格对象。
  9. 对于每个单元格,将其包含的段落内容合并为一个字符串(cellText)。
  10. 使用 Workbook 的工作表对象的 SetCellValue() 方法将合并后的单元格文本内容写入到对应的工作表中。
  11. 完成所有表格数据的写入后,使用 WorkbookSaveToFile() 方法将 Excel 数据保存到指定路径。

代码示例:

from spire.doc import *
from spire.doc.common import *
from spire.xls import *
from spire.xls.common import *# 创建Document对象
doc = Document()# 载入Word文档
doc.LoadFromFile("示例.docx")# 创建Workbook对象
wb = Workbook()
wb.Worksheets.Clear()# 遍历文档中的节
for i in range(doc.Sections.Count):# 获取一个节section = doc.Sections.get_Item(i)# 遍历节中的表格for j in range(section.Tables.Count):# 获取一个表格table = section.Tables.get_Item(j)# 创建一个工作表ws = wb.Worksheets.Add(f"表 {(j + 1)}")# 将表格数据写入工作表for row in range(table.Rows.Count):# 获取一行tableRow = table.Rows.get_Item(row)# 遍历一行中的单元格for cell in range(tableRow.Cells.Count):# 获取一个单元格tableCell = tableRow.Cells.get_Item(cell)# 获取单元格的内容cellText = ""for paragraph in range(tableCell.Paragraphs.Count):paragraph = tableCell.Paragraphs.get_Item(paragraph)cellText = cellText + paragraph.Text# 将单元格的内容写入工作表ws.SetCellValue(row + 1, cell + 1, cellText)wb.SaveToFile("output/Word表格写入Excel.xlsx", FileFormat.Version2016)
doc.Close()
wb.Dispose()

提取结果

Python提取Word表格保存为Excel工作表

提取Word文档表格并保存为CSV文件

CSV文件以文本的文件的形式储存表格数据,因此,我们可以直接使用Spire.Doc for Python提取Word文档中的表格数据并写入到CSV文件。以下是操作步骤:

  1. 创建 Document 对象。
  2. 使用 Document 类的 LoadFromFile() 方法载入指定路径下的 Word 文档。
  3. 遍历载入的 Word 文档中的所有节(Sections)。
  4. 在每个节内,进一步遍历其包含的所有表格(Tables)。
  5. 对于每个表格,生成对应的 CSV 文件名,并以写模式打开这个文件,设置编码为 UTF-8 并开启新行模式。
  6. 创建 csv.writer 对象用于写入 CSV 文件内容。
  7. 根据表格的列数动态生成 CSV 文件的标题行(列名),并用 writerow() 方法写入到CSV文件中。
  8. 遍历当前表格的每一行(Rows),获取当前行对象。
  9. 对于每一行中的每个单元格,只提取第一个段落的文本内容,形成一行的数据列表。
  10. 使用 csv.writer 对象的 writerow() 方法将这一行的数据列表写入到对应的 CSV 文件中。
  11. 在完成一个表格的所有数据写入后,关闭已打开的 CSV 文件。
  12. 继续处理下一个表格,直至遍历完所有表格。
import csv
from spire.doc import *# 创建Document对象
doc = Document()# 载入Word文档
doc.LoadFromFile("示例.docx")# 遍历文档中的节
for i in range(doc.Sections.Count):# 获取一个节section = doc.Sections.get_Item(i)# 遍历节中的表格for j in range(section.Tables.Count):# 获取一个表格table = section.Tables.get_Item(j)# 创建CSV文件名并打开文件csv_file_name = f"output/CSV/表_{(j + 1)}.csv"with open(csv_file_name, 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)# 遍历表格中的每一行for row in range(table.Rows.Count):# 获取一行tableRow = table.Rows.get_Item(row)# 读取一行中的单元格内容,只取每个单元格的第一个段落row_data = [tableRow.Cells.get_Item(cell).Paragraphs[0].Text for cell in range(tableRow.Cells.Count)]# 将单元格内容写入CSV文件writer.writerow(row_data)doc.Close()

提取结果:

Python提取Word表格保存为CSV文件

以上内容讲述了如何通过Python提取Word文档中的表格,并转换为Excel工作表或CSV文件。
Spire.Doc for Python还支持许多其他功能,请前往Spire.Doc for Python教程查看。

申请免费许可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274480.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

555经典电路

1、555介绍: 555 定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为 555,用 CMOS 工艺制作的称为 7555,除单定时器外,还有对应的双定时器 556/7556。555 定时器的电源电压范围宽,可在 4…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理(Wireshark抓包分析)

继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btst…

Qt Creator常见问题解决方法

Qt Creator源文件重命名的正确方法 光改文件名是不够的,还要在.pro文件中的SOURCES中把名字改成之后的。 中文乱码(字符集设置) 菜单栏-工具-选项-设置为utf-8

DHCP中继实验(华为)

思科设备参考:DHCP中继实验(思科) 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP…

表单进阶(3)-上传文件和隐藏字段

上传文件&#xff1a;<input type"file"> 隐藏字段&#xff1a;<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled&#xff1a;<button disabled"disabled">注册</bu…

Vue2利用创建a标签实现下载本地静态文件到本地电脑上的功能

最近PC项目遇到一个需求&#xff0c;那就是需要前端下载前端代码包里的前端文件到本地&#xff0c;并且可以给下载下来的文件名指定任意的文件名&#xff0c;如下图所示&#xff0c;在前端代码里public里的statics里有个静态文件zswj.pem&#xff0c;页面上有个下载按钮&#x…

扁平数据转树形结构,让数据管理更清晰

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Python学习:基础语法

版本查看 python --version编码 默认情况下&#xff0c;Python 3 源码文件以 UTF-8 编码&#xff0c;所有字符串都是 unicode 字符串。 特殊情况下&#xff0c;也可以为源码文件指定不同的编码&#xff1a; # -*- coding: cp-1252 -*-标识符 第一个字符必须是字母表中字母或…

sentinel prometheus指标收集及资源规则正则表达式实现

sentinel 支持 prometheus 收集指标 实现原理 在 sentinel-extension 模块下&#xff0c;新增 sentinel-prometheus-metric-exporter 模块。依赖Prometheus 提供的 simpleclient 和 simpleclient_httpserver 来实现 exporter。 依赖 simpleclient 主要是为了实现自定义Collect…

数学建模-模糊性综合评价模型

中医药是中国传统文化的重要组成部分&#xff0c;凝聚了中华民族千百年来智慧的结晶。作为中医的发源地&#xff0c;中国政府一直致力于保护、发展和推广中医药&#xff0c;采取了一系列政策措施[]。目前&#xff0c;中国面临着老龄化日益加剧&#xff0c;老年人群中慢性疾病和…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本研究详述了一种采用深度学习技术的火焰检测系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别火焰目…

C语言 —— 图形打印

题目1&#xff1a; 思路&#xff1a; 如果我们要打印一个实心正方形&#xff0c;其实就是一个二维数组&#xff0c;i控制行&#xff0c;j控制列&#xff0c;行列不需要控制&#xff0c;arr[i][j]直接打印星号即可。 对于空心正方形&#xff0c;我们只需要控制行和列的条件&…

【Linux基础(三)】信号

学习分享 1、信号的基本概念2、查看信号列表3、常见信号名称4、signal库函数5、发送信号kill6、kill - signal &#xff08;无参信号&#xff09;示例6.1、kill - signal (不可靠信号)示例6.2、kill - signal (可靠信号)示例 7、信号分类7.1、信号运行原理分类7.2、信号是否携带…

HTML 学习笔记(十一)表单

一、分块 1.单行文本框控件–文本框和密码框 文本框控件通过单标签input实现&#xff0c;其具有必要属性type来控制输入控件的类型(默认为text即文本信息)&#xff0c;密码框的type为password(口令)。   表单的动作属性定义了目的文件的文件名。由动作属性定义的这个文件通常…

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意&#xff1a;ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200

【考研数学】660/880/1000/1800 使用手册

开门见山&#xff0c;直接介绍几个热门的习题册 660&#xff1a;660表面上叫基础通关660&#xff0c;但实际上很多题的难度并不适合基础阶段&#xff0c;建议在强化阶段搭配着 严选题做660&#xff0c;对提升做小题的速度和能力非常有帮助。 880&#xff1a;题量适中&#xf…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-2、线条平滑曲面(原始颜色)但不去除无效点

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

NTFS安全权限

NTFS是新技术文件系统&#xff08;New Technology File System&#xff09;的缩写&#xff0c;是一种用于Windows操作系统的文件系统。NTFS提供了高级的功能和性能&#xff0c;包括文件和目录的权限控制、加密、压缩以及日志等。它被广泛应用于Windows NT、Windows 2000、Windo…

基于Springboot的高校汉服租赁网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校汉服租赁网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

蚂蚁集团2025届暑期实习开始啦~

蚂蚁集团2025届暑期实习开始啦&#xff5e;欢迎大家投递信贷事业群-风险管理部的算法岗&#xff0c;找我内推哦&#xff5e;社招也有hc&#xff0c;欢迎大家沟通&#xff01;