当前位置: 首页 > news >正文

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教程查看。

申请免费许可

相关文章:

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

在大数据处理与信息抽取领域中,Word文档是各类机构和个人普遍采用的一种信息存储格式,其中包含了大量的结构化和半结构化数据,如各类报告、调查问卷结果、项目计划等。这些文档中的表格往往承载了关键的数据信息,如统计数据、项目…...

【Qt】四种绘图设备详细使用

绘图设备有4个: 绘图设备是指继承QPainterDevice的子类—QPixmap QImage QPicture QBitmap(黑白图片) QBitmap——父类QPixmapQPixmap图片类,主要用来显示,它针对于显示器显示做了特殊优化,依赖于平台的,只能在主线程中使用(UI线…...

区块链web3智能合约Solidity学习资源整理

简单说明: Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。 Solidity中文官方文档: ht…...

python学习、开发实用文档分享

今天给大家分享两个好用的关于python django框架使用的在线文档 Django中文在线文档: Django 文档 | Django 文档 | Django django rest framework 文档 1 - Serialization - Django REST framework中文站点 有开发和学习中遇到不会的, 或者需要学习的技能点直接去上面两个…...

Docker compose部署redis哨兵集群

Docker compose部署redis哨兵集群 安装Docker和docker-compose准备docker-compose文件redis exporter本地部署准备Redis配置文件ACL用户权限配置Linux内核参数优化启停Redis实例主从复制配置 环境准备: IP版本角色172.x.x.11RHEL 7.9master172.x.x.12RHEL 7.9repli…...

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-1、线条平滑曲面(原始图形)

环境和包: 环境 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…...

有趣的数学 毕达哥拉斯定理

随便找个学生,让他举出一位著名的数学家——如果他能想到的话,他往往会选择毕达哥拉斯。如果不是,也许他想到的是阿基米德。哪怕是杰出的艾萨克牛顿,在两位古代世界的巨星面前也只能叨陪末座了。阿基米德是一位思想巨人&#xff0…...

理解记忆相关

foreach循环 在 Java 中,foreach 循环(也称为增强型 for 循环)是一种简洁的语法,用于遍历数组或集合(如 List、Set、Map 等)。以下是 foreach 循环的基本用法: 遍历数组: String[] …...

零基础学习JS--基础篇--使用对象

JavaScript 的设计是一个简单的基于对象的范式。一个对象就是一系列属性的集合,一个属性包含一个名和一个值。一个属性的值可以是函数,这种情况下属性也被称为方法。除了浏览器里面预定义的那些对象之外,你也可以定义你自己的对象。本章节讲述…...

DHCP中继实验(华为)

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

【数据结构】初识二叉搜索树(Binary Search Tree)

文章目录 1. 二叉搜索树的概念2. 二叉搜索树的操作1.1 二叉搜索树的查找1.2 二叉搜索树的插入1.3 二叉搜索树的删除 1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它可能是一棵空树,也可能是具有以下性质的二叉树: 若它的左子树不为空&am…...

数据库系统概念(第一周)

⚽前言 🏐四个基本概念 一、数据 定义 种类 特点 二、数据库 三、数据库管理系统(DBMS) 四、 数据库系统(DBS) 🏀数据库系统和文件系统对比 文件系统的弊端 🥎数据视图 数据抽象 …...

如何确定限流阈值:面试官问我,我怎么答?

在面试过程中,系统高并发是经常需要考察的,而熔断限流又是必考的,当面试官问及如何确定限流的阈值时,他们实际上是在考察你是否理解限流的本质及其在实际工作中是否有过经验。限流是一种常用的系统保护措施,用于防止过…...

HW干货集合 | HW面试题记录(1)

整理最近护网面试问的问题 前言 一开始会问问你在工作中负责的是什么工作(如果在职),参与过哪些项目。还有些会问问你之前有没有护网的经历,如果没有的话一般都会被定到初级(技术特牛的另说)。下面就是一…...

数据集踩的坑及解决方案汇总

数据集踩的坑及解决方案汇总 数据集各种格式构建并训练自己的数据集汇总Yolo系列SSDMask R-CNN报错 NotADirectoryError: [Errno 20] Not a directory: /Users/mia/Desktop/P-Clean/mask-RCNN/PennFudanPed2/labelme_json/.DS_StoreFaster R-CNN数据的格式转换划分数据集设定内…...

机器学习流程—数据预处理 Encoding

机器学习流程—数据预处理 Encoding 在机器学习中,我们经常会遇到分类变量,这些分量变量往往机器学习模型没有办法从中学习,往往有两种,一种是字符型,一种是数值型。通常需要对分类型变量做一些处理,常用的方法有两种:label encoding和one hot encoding。 例如,假设数…...

04-微服务 面试题

目录 1.Spring Cloud 常见的组件有哪些? 2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现) 3.你们项目负载均衡如何实现的 ? 4.什么是服务雪崩,怎么解决这个问题? 5.你们服务是怎么监控的? 6.微服务限流(漏桶算法、令牌桶算法) 7.解释一下CAP…...

Qt连接所有同类部件到同一个槽函数

void MainWindow::AutoConnectSignals() {// 查找所有 QSpinBoxconst auto spinBoxes findChildren<QSpinBox*>();for (auto *spinBox : spinBoxes){connect(spinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &ParameterW…...

spring boot 使用 webservice

spring boot 使用 webservice 使用 java 自带的 jax-ws 依赖 如果是jdk1.8,不需要引入任何依赖&#xff0c;如果大于1.8 <dependency><groupId>javax.jws</groupId><artifactId>javax.jws-api</artifactId><version>1.1</version&g…...

【嵌入式】嵌入式系统稳定性建设:最后的防线

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...