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

目录

一、环境安装

二、文档各组成结构获取

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 docx

def 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')

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

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

相关文章

64位下使用回调函数实现监控(下)

线程监控&保护 PsSetCreateThreadNotifyRoutine 线程监控使用到的API相对于进程监控简单,使用到PsSetCreateThreadNotifyRoutine,而这个值并不能像进程操作的API一样进行操作,这里我们首先先使用这个API来进行线程的监控 NotifyRoutine…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载材质文件Mtl 中的纹理图片最简实例(十六)

文章目录 前言一、3d 立方体 model 属性相关文件1. cube.obj2. cube.Mtl3. 纹理图片 cordeBouee4.jpg二、代码实例1. 依赖库和头文件1.1 assimp1.2 stb_image.h2. egl_wayland_obj_cube.cpp3. Matrix.h 和 Matrix.cpp4. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c5.…

部署Zabbix Agents添加使能监测服务器_Linux平台_Yum源/Archive多模式

Linux平台 一、从yum源脚本安装部署Zabbix-Agent,添加Linux Servers/PC 概述 Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,Zabbix的核心组件,它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。 Zabbix Agent:Zabbix客户端,部署在被监…

使用Python抓取抖音直播间数据的简易指南【第152篇—抓取数据】

使用Python抓取抖音直播间数据的简易指南 说明:本文已脱敏,隐去地址。 在这个数字化时代,直播已经成为了人们获取信息、娱乐和社交的重要方式之一。抖音作为全球知名的短视频平台,其直播功能也备受用户青睐。本文将介绍如何使用Py…

生成式人工智能

生成式人工智能(Generative AI)是人工智能的一个分支,专注于创建或生成新的内容,包括文本、图像、音频和视频等。与识别或分类等任务不同,生成式AI的目标是创造出在某种程度上新颖且具有实际意义的输出。这种类型的AI系…

Vue3 组件之间的通信

一、父子通信 ① props 父传子&#xff08;这种传值方法是只读的&#xff0c;不可以进行修改。&#xff09; 父组件props.vue中 <template><h2>props:我是父组件</h2><hr><props-child msg"我是静态的数据" :num"num" :obj&…

VTK9.2.0+Qt5.14.0 绘制点云

背景 为了显示结构光重建后的点云&#xff0c;开发QT5.14.0VTK9.2.0的上位机软件&#xff0c;用于对结构光3D相机进行控制&#xff0c;并接收传输回来的3D数据&#xff0c;显示在窗口中。 配置QT和VTK VTK9.2.0下载源码&#xff0c;用Cmake编译&#xff0c;编译好的VTK9.2.0…

GitHub gpg体验

文档 实践 生成新 GPG 密钥 gpg --full-generate-key查看本地GPG列表 gpg --list-keys关联GPG公钥与Github账户 gpg --armor --export {key_id}GPG私钥对Git commit进行签名 git config --local user.signingkey {key_id} # git config --global user.signingkey {key_id} git…

30V转5V 1A 30降压12V 1A DCDC低电压恒压IC 车充芯片-H4110

30V转5V和30V转12V的DCDC低电压恒压IC&#xff08;也称为降压恒压芯片或车充芯片&#xff09;工作原理如下&#xff1a; 输入电压识别&#xff1a;芯片首先识别输入的30V电压&#xff0c;并准备进行转换。 PWM控制&#xff1a;芯片内部的控制逻辑生成PWM信号。这个信号用于控制…

JVM—内存可见性

什么是可见性 可见性&#xff1a;一个线程对共享变量值的修改,能够及时地被其他线程看到共享变量&#xff1a;如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 Java内存模型(JMM) Java内存模型(Java Memory Model)描述了Java程序中各种…

Qt教程 — 3.7 深入了解Qt 控件: Layouts部件

目录 2 如何使用Layouts部件 2.1 QBoxLayout组件-垂直或水平布局 2.2 QGridLayout组件-网格布局 2.3 QFormLayout组件-表单布局 在Qt中&#xff0c;布局管理器&#xff08;Layouts&#xff09;是用来管理窗口中控件位置和大小的重要工具。布局管理器可以确保窗口中的控件在…

BAAI 北京智源研究院

文章目录 关于 BAAI产品悟道大模型FlagOpen 大模型技术天演 生物智能九鼎 智算平台 关于 BAAI BAAI : Beijing Academy of Artificial Intelligence 北京智源研究院 官网&#xff1a;https://www.baai.ac.cnhf : https://huggingface.co/BAAI百度百科 https://baike.baidu.co…

物联网云组态是什么?部署物联网云组态有什么作用?

在信息化与工业化的深度融合进程中&#xff0c;物联网云组态以其独特的优势&#xff0c;正在成为企业数字化转型的重要工具。那么&#xff0c;物联网云组态究竟是什么呢&#xff1f;部署物联网云组态又能给企业带来哪些实质性的好处呢&#xff1f;今天&#xff0c;我们将围绕这…

2核4G服务器多少钱?阿里云价格30元起

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

AI智能分析网关V4在养老院视频智能监控场景中的应用

随着科技的快速发展&#xff0c;智能监控技术已经广泛应用于各个领域&#xff0c;尤其在养老院这一特定场景中&#xff0c;智能监控方案更是发挥着不可或缺的作用。尤其是伴随着社会老龄化趋势的加剧&#xff0c;养老院的安全管理问题也日益凸显。为了确保老人的生活安全&#…

Ruby选择结构实战

文章目录 一、Ruby选择结构实战概述二、Ruby选择结构实战案例&#xff08;一&#xff09;闰年判断1、编写程序&#xff0c;实现功能2、程序的解释说明3、运行程序&#xff0c;查看结果 &#xff08;二&#xff09;求解一元二次方程1、编写程序&#xff0c;实现功能2、程序的解释…

界面控件DevExpress ASP.NET Ribbon组件 - 完美复刻Office 365体验!

无论用户是喜欢传统工具栏菜单外观、样式&#xff0c;还是想在下一个项目中复制Office 365 web UI&#xff0c;DevExpress ASP.NET都提供了所需要的工具&#xff0c;帮助用户打造更好的应用程序界面。 P.S&#xff1a;DevExpress ASP.NET Web Forms Controls拥有针对Web表单&a…

ky10.aarch64安装Jenkins

参考地址&#xff1a;《安装部署 Jenkins》 前言 有war包和rpm两种安装方式&#xff0c;如果是长期使用更加推荐rpm的安装方式&#xff0c;可以更好的管理Jenkins&#xff1b; 我此次安装jenkins主要用于测试和简单的个人使用&#xff0c;所以选择更轻便的war安装。 1 下载J…

如何用java使用es

添加依赖 如何连接es客户端 RestHighLevelClient 代表是高级客户端 其中hostname&#xff1a;es的服务器地址&#xff0c;prot端口号 &#xff0c;scheme&#xff1a;http还是https 如果不在使用es可以进行关闭&#xff0c;可以防止浪费一些资源 java如何创建索引&#xff1…

Python RPA简单开发实践(selenium登陆浏览器自动输入密码登陆)

打开csdn博客&#xff0c;简单版 class BS:def __init__(self, url):self.url url# self.password password# self.username usernamedef login_url(self):from selenium import webdriver# 不自动关闭浏览器option webdriver.ChromeOptions()option.add_experimental_opt…