【Word自动化办公】使用python-docx对Word进行操作

news/2024/5/20 14:21:51/文章来源:https://blog.csdn.net/qq_38196449/article/details/136854732

目录

一、环境安装

二、文档各组成结构获取

2.1 组成结构讲解

2.2 段落run对象的切分标准

三、获取整篇文档内容

四、写入指定样式的数据

4.1 通过add_paragraph与add_run参数添加样式

4.2 单独设置文本样式

五、添加标题

六、换行符&换页符

七、添加图片数据

7.1 向新文档任意位置添加图片

7.2 向已有文档添加图片

八、添加表格

8.1 添加单个单元格

8.2 批量填充表格

8.3 添加行列

8.4 合并单元格


一、环境安装

pip install -U python-docx==0.7.4

二、文档各组成结构获取

2.1 组成结构讲解

Word文档的组成结构:

  • .docx文档
  • 段落
  • 内容

python-docx使用说明:和纯文本相比,.docx文件有很多结构。这些结构在python-docx中有三种不同的类型来表示。在最高一层,Document对象表示整个文档。Document对象包含一个Paragraph对象的列表,表示文档中的段落(用户在Word文档中输入时,如果按下回车,新的段落就开始了)。每个Paragraph对象都包含一个Run对象的列表。

import docx# 基于Document方法读取word文档
doc = docx.Document('./demo.docx')
# 获取指定段落
print(doc.paragraphs[0].text) # 我正在学习Python数据分析。
print(doc.paragraphs[0].runs[0].text) # 我正在学习Python数据分析。

2.2 段落run对象的切分标准

import docx# 基于Document方法读取word文档
doc = docx.Document('./demo.docx')
# 获取指定段落
print(doc.paragraphs[0].text) # 我正在学习Python数据分析。
print(doc.paragraphs[2].runs[0].text) # Python是世界上最好的语言,
print(doc.paragraphs[2].runs[1].text) # 你觉得呢?
print(doc.paragraphs[4].runs[0].text) # A plain paragraph with some
print(doc.paragraphs[4].runs[1].text) # bold
print(doc.paragraphs[4].runs[2].text) # and some
print(doc.paragraphs[4].runs[3].text) # italic

总结:

  • 中文段落中,是以标点符号进行run的构建/切分
  • 英文段落中,是以单词样式不同进行构建/切分,如这个例子,bold是加粗了,italic是斜体了。

三、获取整篇文档内容

如果你只关心Word文档中的文本,不关心样式信息,就可以利用getText()函数。它接受一个.docx文件名,返回其中文本的字符串,当然getText()函数需要自己实现。

import docxdef getText(filename):doc = docx.Document(filename)fullText = []for para in doc.paragraphs:fullText.append(para.text)return '\n'.join(fullText)print(getText('./demo.docx'))

四、写入指定样式的数据

4.1 通过add_paragraph与add_run参数添加样式

import docx# 创建一个全新的文档对象
dc = docx.Document()
# 添加段落内容
p1 = dc.add_paragraph(text='i am a student!i love reading!', style='Heading1')
p2 = dc.add_paragraph(text='i am a worker!i love Python!', style='Heading5')
# 添加内容
p2.add_run(text='我是内容1')
p2.add_run(text='我是内容2', style='QuoteChar')
dc.save('./new_word.docx')

4.2 单独设置文本样式

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH# 创建一个全新的文档对象
document = Document()
# 添加段落
p = document.add_paragraph()
# 添加内容
run = p.add_run('个人简历')
run.font.size = Pt(26) # 设置字体大小
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
document.save('./new_word.docx')

五、添加标题

  • 添加标题
    • 调用add_heading()将添加一个段落,并使用一种标题样式
    • add_heading()的参数,是一个标题文本的字符串,以及一个从0到4的整数。整数0表示标题是Title样式,这用于文档的顶部。整数1到4是不同的标题层次,1是主要的标题,4是最低层的子标题。add_heading()返回一个paragraph对象,让你不必多花一步从Document对象中提取它。
import docx# 创建一个全新的文档对象
dc = docx.Document()
dc.add_heading('我是标题', 0)
dc.save('./new_word.docx')

六、换行符&换页符

import docx# 创建一个全新的文档对象
dc = docx.Document()
dc.add_paragraph('i am a teacher!')
dc.paragraphs[0].runs[0].add_break() # 添加一个换行符
dc.paragraphs[0].add_run('hello!!!')
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

import docx# 创建一个全新的文档对象
dc = docx.Document()
dc.add_paragraph('i am a teacher!')
dc.paragraphs[0].runs[0].add_break(docx.text.WD_BREAK.PAGE) # 添加一个换页符
dc.paragraphs[0].add_run('hello!!!')
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

七、添加图片数据

7.1 向新文档任意位置添加图片

7.2 向已有文档添加图片

注意:向已有文档添加图片不能放在任意位置,只能追加到最后。

import docx# 创建一个全新的文档对象
dc = docx.Document('./new_word.docx')
dc.add_paragraph('i am a teacher!')
dc.add_picture('./python.jpg', width=docx.shared.Inches(3), height=docx.shared.Cm(5))
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

八、添加表格

8.1 添加单个单元格

import docx# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 返回所有行
print(list(tb.rows))
# 返回所有列
print(list(tb.columns))
# 向单元格中添加数据 第一行的第一个单元格
tb.rows[0].cells[0].add_paragraph('hello')
dc.save('./new_word.docx')

8.2 批量填充表格

import docx# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 批量填充表格
alist = ['泰勒斯', '毕达哥拉斯', '赫拉克利特', '苏格拉底', '柏拉图', '亚里士多德', '伏尔泰', '卢梭', '康德']
i = 0
for row in tb.rows:for cell in row.cells:cell.add_paragraph(text=alist[i])i += 1
dc.save('./new_word.docx')

8.3 添加行列

import docx# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 添加单个行
tb.add_row()
# 添加单个列
tb.add_column()
dc.save('./new_word.docx')

8.4 合并单元格

import docx# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')# 获取第一行第二列的单元格
c1 = tb.cell(0, 1)
# 获取第二行第二列的单元格
c2 = tb.cell(1, 1)# 合并单元格
c1.merge(c2)
dc.save('./new_word.docx')

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

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

相关文章

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统,ip为:192.168.6.6 2G运存 连接外网 Jenkins需要java环境,java的jdk包你可以去网上下载离线包,或者直接去yum安装,我这里使用的是yum安装 再去获取Jenkins的rpm包…

RabbitMQ的使用—实战

RabbitMQ的使用—实战 ​ RabbitMQ是一个开源的消息代理中间件,在分布式系统开发中被广泛应用。它实现了高级消息队列协议(AMQP),提供可靠的消息传递、灵活的路由、消息确认等功能。下面是使用RabbitMQ的基本流程: 安…

(附源码)基于Spring Boot和Vue的前后端分离考研资料分享平台的设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

vue 消息左右滚动(前后无缝衔接)

之前一直用vue-seamless-scroll,无奈此组件有两个缺点不满足实际效果:1)标题过长被截取、2)标题果断也会滚动,无奈我自己封装一个,满足此两个弊端,也能达到vue-seamless-scroll组件的功能&#…

约数个数(数论,蓝桥杯)

题目描述&#xff1a; 给定一个数n&#xff0c;再给出n个数&#xff0c;现在要求你求出这些数的乘积的约数个数总和&#xff0c;结果对1e97取模。 取值范围&#xff1a;1<n<100; 1<ni<2e9; 分析步骤&#xff1a; 第一&#xff1a;要求约数的个数&#xff0c;我们有…

Canine IP-10/CXCL 10 ELISA试剂盒上新

科研用Canine IP-10/CXCL 10 ELISA试剂盒重磅来袭&#xff0c;将在免疫学、癌症研究与神经科学等多个领域助力各位老师们的研究&#xff01; 图1&#xff1a;犬IP-10/CXCL10结构预测&#xff08;图片来源&#xff1a;UniProt&#xff09; C-X-C基序趋化因子(C-X-C motif chemok…

【k8s网络】梳理cni发展脉络

参考 《深入剖析 Kubernetes&#xff08;张磊&#xff09;》 补充 详解 Calico 三种模式&#xff08;与 Fannel 网络对比学习&#xff09;_calico vxlan-CSDN博客 容器网络 容器的网络栈 每个容器有自己的 net namespace net namespace 可以称之为网络栈所谓“网络栈”&…

vue.js+element-ui的基础表单

遇到原生的html小型单页应用时&#xff0c;是脱离了vue框架&#xff0c;而我们又想使用vue的语法和element的组件加快我们的开发速度&#xff0c;这个时候就需要引用他们的js了。技术栈即htmlvue.jselement-ui。而使用它们的方法也很简单&#xff0c;引入对应的js和css文件即可…

智慧交通(代码实现案例)

1.项目简介 目标: 了解智慧交通项目的架构知道智慧交通项目中的模块能够完成智慧交通项目的环境搭建 该项目是智慧交通项目&#xff0c;通过该项目掌握计算机视觉的方法在交通领域的相关应用&#xff0c;包括车道线检测的方法&#xff0c;多目标车辆追踪及流量统计方法&#…

C#学习笔记3:Windows窗口计时器

今日继续我的C#学习之路&#xff0c;今日学习自己制作一个Windows窗口计时器程序&#xff1a; 文章提供源码解释、步骤操作、整体项目工程下载 完成后的效果大致如下&#xff1a;&#xff08;可选择秒数&#xff0c;有进度条&#xff0c;开始计时按钮等&#xff09; &#xf…

基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现

基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

Java基于微信小程序的校园请假系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…

基于单片机的智能花盆设计

摘 要 本文设计了一种智能化的花盆控制系统。该系统采用STC89C51 单片机作为主控制器,通过温湿度传感器对植物生长环境进行检测,将采集的数据信号与系统数值进行比较,从而实现了智能花盆的自动或手动浇水功能。 关键词 智能花盆;STC89C51 单片机;温湿度检测 0 引言 随着…

使用postman调用Vcenter-Api

一、下载postman Postman API Platform 二、Vcenter-APi-文档 Create Session | CIS | vSphere CIS REST APIs 三、如何调用&#xff1f; 一、获取访问凭证 两种方式进行鉴权&#xff0c;这里讲第一种。 二、使用postman调用Api获取凭证 下面就是vmware-api-session-id …

Knowledge Graph Neural Network

利用知识图谱预测药物相互作用&#xff0c;代码&#xff1a;Knowledge Graph Neural Network&#xff0c;原文&#xff1a;KGNN: Knowledge Graph Neural Network for Drug-Drug Interaction Prediction&#xff0c;模型框架如下&#xff1a; 文章目录

2024/03/25(C++·day1)

一、思维导图 二、练习 练习一 定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream&g…

【LeetCode热题100】543. 二叉树的直径(二叉树)

一.题目要求 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 二.题目难度 简单 三.输入样例 示例 1&#xff…

数据挖掘与分析学习笔记

一、Numpy NumPy&#xff08;Numerical Python&#xff09;是一种开源的Python库&#xff0c;专注于数值计算和处理多维数组。它是Python数据科学和机器学习生态系统的基础工具包之一&#xff0c;因为它高效地实现了向量化计算&#xff0c;并提供了对大型多维数组和矩阵的支持…

BGP4+简介

定义 BGP是一种用于自治系统AS&#xff08;Autonomous System&#xff09;之间的动态路由协议&#xff0c;常用版本是BGP-4&#xff0c;BGP-4只能传递IPv4路由。针对IPv6的BGP4扩展&#xff0c;通常称为BGP4。 目的 BGP4用于在AS之间传递路由信息&#xff0c;并不是所有情况…

NFTScan | 03.18~03.24 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.03.18~ 2024.03.24 NFT Hot News 01/ NFT 系列 NodeMonkes 地板价已超越 BAYC 3 月 18 日&#xff0c;据数据显示&#xff0c;NFT 系列 NodeMonkes 地板价已超越 Bored Ape Yacht …