从微软 Word 中提取数据

从 Microsoft Word 文档中提取数据可以通过编程来实现,有几种常见的方法,其中之一是使用 Python 和 python-docx 库。python-docx 是一个处理 .docx 文件(Microsoft Word 文档)的 Python 库,可以读取和操作 Word 文档的内容。以下就是我如何使用 python-docx 库从 Word 文档中提取数据的步骤和示例代码:

在这里插入图片描述

1、问题背景

我们需要从微软 Word 文件中提取数据到数据库中,以便可以从网络界面中查看这些数据。当前公司的情况是在 Word 文件中记录了大量会议纪要,由于过去的操作习惯和延续性,这种做法一直保留了下来。

但是,这种做法给我们带来了许多不便,需要将会议纪要中的任务提取出来,将任务变成数据库中的记录,并且当任务完成时需要在数据库中更新其状态。我们希望找到一种最佳的方法来完成这一任务。

2、解决方案

我们提出了几种可能的解决方案来完成这一任务:

  • 使用 Word 中的 VBA 宏来创建 CSV 文件,然后将 CSV 文件上传到数据库中。
  • 使用 Word 中的 VBA 宏连接到数据库,然后将数据直接插入到数据库中。
  • 使用 Python 脚本通过 win32com 来提取数据,然后将数据上传到数据库中。

对于最后一种方法,由于需要使用 Django 来开发网络界面,因此我们倾向于采用这种方法。但是,这需要我们在 Python 中使用 win32com 来操作 Word 文件,这是我们从未使用过的。我们希望找到一种方法来解决这个问题。

此外,我们还在提取数据的过程中遇到了一个小问题,当我们从 Word 表格中提取字符串时,在每个字符串的末尾都会出现一个奇怪的小方框字符。我们希望找到一种方法来解决这个问题。

根据以上所述,我们可以选择下面这些方案:

  1. 使用 OpenOffice 来打开 Word 文件,然后使用 Python 宏来提取数据。
  2. 使用 VBA 宏从 Word 中提取数据,并使用 Left() 函数来去除字符串末尾的小方框字符。
  3. 使用 win32com 从 Word 中提取数据,并使用 Left() 函数来去除字符串末尾的小方框字符。

对于第一种方案,使用 OpenOffice 来打开 Word 文件,然后使用 Python 宏来提取数据。这种方案的好处是,OpenOffice 可以直接打开 Word 文件,并且可以使用 Python 宏来提取数据,这对于我们来说比较简单。

对于第二种方案,使用 VBA 宏从 Word 中提取数据,并使用 Left() 函数来去除字符串末尾的小方框字符。这种方案的好处是,我们可以直接在 Word 中运行 VBA 宏,并且使用 Left() 函数来去除字符串末尾的小方框字符,这对于我们来说也比较简单。

对于第三种方案,使用 win32com 从 Word 中提取数据,并使用 Left() 函数来去除字符串末尾的小方框字符。这种方案的好处是,我们可以使用 Python 脚本来提取数据,并且使用 Left() 函数来去除字符串末尾的小方框字符,这对于我们来说也比较简单。

我们最终选择第三种方案,使用 win32com 从 Word 中提取数据,并使用 Left() 函数来去除字符串末尾的小方框字符。这种方案的好处是,我们可以使用 Python 脚本来提取数据,并且使用 Left() 函数来去除字符串末尾的小方框字符,这对于我们来说也比较简单。

以下是一个使用 Python 脚本从 Word 中提取数据的示例代码:

import win32com.clientword = win32com.client.Dispatch('Word.Application')
doc = word.Open('d:\\stuff\\myfile.doc')
doc.SaveAs(FileName='d:\\stuff\\text\\myfile.txt', FileFormat=?)  # not sure what to use for ?

这段代码的功能是,使用 win32com 打开 Word 文件并将其另存为纯文本文件。然后,我们可以使用 Python 来读取纯文本文件并提取数据。

全部代码:

1、安装库
确保你已经安装了 python-docx 库。如果没有安装,可以使用以下命令进行安装:

pip install python-docx

2、编写代码
使用 python-docx 库打开并读取 Word 文档中的文本。以下是一个基本示例:

from docx import Documentdef extract_text_from_docx(file_path):# 打开文档doc = Document(file_path)# 存储所有文本的列表full_text = []# 遍历文档中的每一个段落for paragraph in doc.paragraphs:full_text.append(paragraph.text)# 合并所有段落文本return '\n'.join(full_text)# 指定 Word 文件的路径
file_path = 'example.docx'
text = extract_text_from_docx(file_path)
print(text)

在这个示例中,我们定义了一个函数 extract_text_from_docx,该函数接受 Word 文档的文件路径作为参数,使用 Document 类打开文档,并遍历文档中的每个段落,将段落文本提取并存储到一个列表中,最后合并所有段落文本并返回。

如果你需要提取特定的内容,例如表格数据、特定样式的段落或带有特定格式的文本,可以在遍历文档时添加更多的逻辑处理。例如,下面是一个提取表格数据的示例:

def extract_tables_from_docx(file_path):# 打开文档doc = Document(file_path)tables_data = []# 遍历文档中的每一个表格for table in doc.tables:table_data = []for row in table.rows:row_data = [cell.text for cell in row.cells]table_data.append(row_data)tables_data.append(table_data)return tables_data# 指定 Word 文件的路径
file_path = 'example.docx'
tables = extract_tables_from_docx(file_path)
for table in tables:for row in table:print('\t'.join(row))

在这个示例中,extract_tables_from_docx 函数提取了文档中的所有表格数据,并将其存储为列表的列表(每个表格是一个列表,每个表格的每一行是一个子列表)。最后,打印表格内容。

我们可以根据需要扩展这些示例代码,以提取和处理更多类型的数据。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

windows USB 设备驱动开发-USB带宽

本文讨论如何仔细管理 USB 带宽的指导。 每个 USB 客户端驱动程序都有责任最大程度地减少其使用的 USB 带宽,并尽快将未使用的带宽返回到可用带宽池。 在这里,我们认为USB 2.0 的速度是480Mbps、12Mbps、1.5Mbps,这分别对应高速、全速、低速…

第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)

1 模块需求分析 1.1 模块介绍 课程信息编辑完毕即可发布课程,发布课程相当于一个确认操作,课程发布后学习者在网站可以搜索到课程,然后查看课程的详细信息,进一步选课、支付、在线学习。 下边是课程编辑与发布的整体流程&#…

Python数据处理必备:如何高效校验各种空值?

更多Python学习内容:ipengtao.com 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Py…

数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁 fun.c #include "head.h" //1.双向循环链表的创建 doubleloop_ptr create_list() …

【自用】【高昆轮概率论与数理统计笔记】2.1 分布函数的概念与性质

不定期更新,前面的章节会在学完后补回来,重新学学概率,当年考研考的数学二,没有概率基础,想自己补补,视频课是高昆轮老师讲的浙大四版概率论教材的视频课,地址: 第一章:h…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如: 某个视频下a写了条评论,那a的parent_id就是0;b回复了a,那b的parent_id就是a的id;c回复了b,那c的parent_id就是b的id; 这样,所有评论…

全终端自动化测试框架wyTest

突然有一些觉悟,程序猿不能只会吭哧吭哧的低头做事,应该学会怎么去展示自己,怎么去宣传自己,怎么把自己想做的事表述清楚。 于是,这两天一直在整理自己的作品,也为接下来的找工作多做点准备。接下来…

leetcode--从中序与后序遍历序列构造二叉树

leeocode地址:从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder …

三级_网络技术_12_路由设计技术基础

1.R1、R2是一个自治系统中采用RIP路由协议的两个相邻路由器,R1的路由表如下图(a)所示,当R1收到R2发送的如下图(b)的(V.D)报文后,R1更新的4个路由表项中距离值从上到下依次为0、3、3、4 那么,①②③④可能的取值依次为()。 0、4、…

Git命令常规操作

目录 常用操作示意图 文件的状态变化周期 1. 创建文件 2. 修改原有文件 3. 删除原有文件 没有添加到暂存区的数据直接 rm 删除即可: 对于添加到暂存区的数据 文件或目录: 4. 重命名暂存区数据 5. 查看历史记录 6. 还原历史数据 恢复过程的原…

[安洵杯 2019]easy_serialize_php

源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user"] guest; …

240709_昇思学习打卡-Day21-文本解码原理--以MindNLP为例

240709_昇思学习打卡-Day21-文本解码原理–以MindNLP为例 今天做根据前文预测下一个单词&#xff0c;仅作简单记录及注释。 一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积 &#x1d44a;_0:初始上下文单词序列&#x1d447;: 时间步当生成EOS标签时&a…

HybridCLR + Addressable 热更新篇(一)

目录 前言一、HybridCLR 和 Addressable 是什么&#xff1f;1. HybridCLR2. Addressable 二、使用步骤1.HybridCLR导入2.HybridCLR配置3.Addressable导入4.Addressable配置 前言 随着移动互联网和游戏行业的快速发展&#xff0c;热更新技术变得越来越重要。热更新能够在不重新…

解决树形表格 第一列中文字没有对齐

二级分类与一级分类的文字没有对齐 <el-table:data"templateStore.hangyeList"style"width: 100%"row-key"id":tree-props"{ children: subData, hasChildren: hasChildren }" ><el-table-column prop"industryCode&quo…

金蝶部署常见问题解决

金蝶部署常见问题解决 金蝶版本&#xff1a; Apusic Application Server Enterprise Edition 9.0 SP8 kbc build 202312041121 报错信息&#xff1a; 与金蝶官方人员沟通&#xff0c;发现lib包版本太低&#xff0c;升级后可正常使用。替换lib包后重启服务。 下载lib: 链接: …

中职网络安全B模块渗透测试server2003

通过本地PC中渗透测试平台Kali对服务器场景Windows进⾏系统服务及版本扫描渗透测 试&#xff0c;并将该操作显示结果中Telnet服务对应的端⼝号作为FLAG提交 使用nmap扫描发现目标靶机开放端口232疑似telnet直接进行连接测试成功 Flag&#xff1a;232 通过本地PC中渗透测试平台…

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程&#xff0c;因涉及到非结构化数据的相关处理&#xff0c;遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样&#xff0c;可以参考LLM应用构建前…

【结构性型模式-适配器模式】

定义 将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要求程序员了解现有组件库中的相关组件的内部结…

TAGE predictor

参考文档&#xff1a;分支预测算法&#xff08;一&#xff09;&#xff1a;TAGE|SunnyChen的小窝 TAGE的基础概念 TAGE是现今最经典的分支预测算法&#xff0c;TAGE及其后续的变体都是当今高性能微处理器的分支预测算法基础。因此&#xff0c;要聊分支预测算法的话题必定绕不开…

C语言编程4:复合赋值,递增递减运算符,局部变量与全局变量,本地变量,转义字符

一篇文章带你玩转C语言基础语法4&#xff1a;复合赋值&#xff0c;递增递减运算符&#xff0c;局部变量与全局变量&#xff0c;本地变量&#xff0c;转义字符 一、复合赋值&#x1f33f; 1.1&#x1f4a0;定义 赋值就是给任意一个变量或者常量赋一个值&#xff0c;这个值可以…