《自动化办公》Python-操控-Word

虽然Word不好用, 但还必须得用它, python-docx是专门用于编辑Word文档的一个工具库, 它有两大用途, 自动化生成word文档 and 自动化修改文档

python word

1. 自定义样式

自定义样式

python可以自定义三类样式
  • 段落样式
  • 字符样式
  • 表格样式(一般用不到)

这三类样式的创建方式基本一致, 只是创建参数 略有不同(1为段落样式, 2为字符样式, 3为表格样式)

以设置段落样式为例
	# 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)
	UserStyle1 = document.styles.add_style('UserStyle1', 1)
	# 设置字体尺寸
	UserStyle1.font.size = Pt(40)
	# 设置字体颜色
	UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
	# 居中文本
	UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
	# 设置中文字体
	UserStyle1.font.name = '微软雅黑'
	UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

2.理解结构关系

结构关系

  • 往文档中插入文本内容, 首先要插入一个段落, 段落后面可追加字符, 但文档不能直接插入字符
  • 段落之间会自动以 回车符号 分隔
  • 段落 和 字符 可 各自设置独立的样式
实例: 插入段落, 插入段落后追加字符
	# 使用自定义段落样式
	document.add_paragraph('自定义段落样式', style = UserStyle1)

	# 使用自定义字符样式
	document.add_paragraph('').add_run('正月里采花无哟花采,二月间采花花哟正开,二月间采花花哟正开。三月里桃花红哟似海,四月间葡萄架哟上开,四月间葡萄架哟上开。', style = UserStyle2)

3. 插入图片

python-docx支持将图片插入文档, 且可以设置图片大小

插入图片

实例代码:
	document.add_picture('少女17087938.jpg', width=Inches(5))

4.插入列表

插入列表

插入有序列表
	document.add_paragraph('把冰箱门打开', style='List Number')
	document.add_paragraph('把大象装进去', style='List Number')
	document.add_paragraph('把冰箱门关上', style='List Number')

插入无序列表
	document.add_paragraph('天地匆匆 惊鸿而过 路有千百个', style='List Bullet')
	document.add_paragraph('遑遑无归 闲云逸鹤 人间红尘过', style='List Bullet')
	document.add_paragraph('引势而流 鸿门乱局 各有各选择', style='List Bullet')
	document.add_paragraph('乾震坎艮 坤巽离兑 定一切生克', style='List Bullet')

5.插入表格

插入表格

把表格看做二维数组, 然后往数组中填数据

	rows_num = 5
	cols_num = 6
	table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')

	for r in range(rows_num):
		for c in range(cols_num):
			table.cell(r, c).text = "第{r}行{c}列".format(r = r+1, c = c+1)

完整源码文末领取!:

from docx import Document
from docx.shared import Inches
from docx.dml.color import ColorFormat
from docx.shared import Pt
from docx.shared import RGBColor
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE
from docx.enum.text import WD_ALIGN_PARAGRAPH

def main():
	# 创建文档对象
	document = Document()

	# 设置默认字体
	document.styles['Normal'].font.name = '微软雅黑'
	document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
	
	# 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)
	UserStyle1 = document.styles.add_style('UserStyle1', 1)
	# 设置字体尺寸
	UserStyle1.font.size = Pt(40)
	# 设置字体颜色
	UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
	# 居中文本
	UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
	# 设置中文字体
	UserStyle1.font.name = '微软雅黑'
	UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

	
	# 创建自定义字符样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)
	UserStyle2 = document.styles.add_style('UserStyle2', 2)
	# 设置字体尺寸
	UserStyle2.font.size = Pt(15)
	# 设置字体颜色0c8ac5
	UserStyle2.font.color.rgb = RGBColor(0x0c, 0x8a, 0xc5)
	# 设置段落样式为宋体
	UserStyle2.font.name = '宋体'
	UserStyle2._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')



	# 使用自定义段落样式
	document.add_paragraph('自定义段落样式', style = UserStyle1)

	# 使用自定义字符样式
	document.add_paragraph('').add_run('正月里采花无哟花采,二月间采花花哟正开,二月间采花花哟正开。三月里桃花红哟似海,四月间葡萄架哟上开,四月间葡萄架哟上开。', style = UserStyle2)


	# 设置粗体字
	document.add_paragraph('设置粗体字:').add_run('粗体字').bold = True

	# 设置斜体字
	document.add_paragraph('设置斜体字:').add_run('斜体字').italic = True

	# 设置字号50
	document.add_paragraph('设置字号50:').add_run('50').font.size = Pt(50)

	# 设置字体颜色为 af2626
	document.add_paragraph('设置字体颜色:').add_run('颜色').font.color.rgb = RGBColor(0xaf, 0x26, 0x26)

	# 样式叠加: 将字体改到30号并且将字体改成特定颜色;
	doubleStyle =  document.add_paragraph('同时设置文字颜色和字号:').add_run('颜色和尺寸')
	doubleStyle.font.size = Pt(30)
	doubleStyle.font.color.rgb = RGBColor(0xaf, 0x26, 0x26)

	# 添加分页符
	document.add_page_break()


	# 创建 有序列表	
	document.add_paragraph('').add_run('有序列表').font.size = Pt(30)
	document.add_paragraph('把冰箱门打开', style='List Number')
	document.add_paragraph('把大象装进去', style='List Number')
	document.add_paragraph('把冰箱门关上', style='List Number')

	# 创建 无序列表
	document.add_paragraph('').add_run('无序列表').font.size = Pt(30)
	document.add_paragraph('天地匆匆 惊鸿而过 路有千百个', style='List Bullet')
	document.add_paragraph('遑遑无归 闲云逸鹤 人间红尘过', style='List Bullet')
	document.add_paragraph('引势而流 鸿门乱局 各有各选择', style='List Bullet')
	document.add_paragraph('乾震坎艮 坤巽离兑 定一切生克', style='List Bullet')

	# 添加分页符
	document.add_page_break()
	# 添加图片
	document.add_paragraph('').add_run('添加图片').font.size = Pt(30)
	document.add_picture('少女17087938.jpg', width=Inches(5))

	# 添加分页符
	document.add_page_break()

	document.add_paragraph('').add_run('创建表格').font.size = Pt(30)
	# 创建两行两列的表格
	rows_num = 5
	cols_num = 6
	table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')

	for r in range(rows_num):
		for c in range(cols_num):
			table.cell(r, c).text = "第{r}行{c}列".format(r = r+1, c = c+1)
	# 保存文档
	document.save('Python生成的文档.docx')

if __name__ == '__main__':
	main()

将源码保存为单独的python文件后,安装python-docx, 找一张图片,命名为少女17087938.jpg, 将图片与python文件放到同一个目录, 然后再python3环境下运行python文件即可! 最后附测试图片一张:

少女17087938.jpg

最终效果:

最终效果.png

自动化修改文档

保留格式并替换

实例: 将当前目录下, 所有docx文件内的"海南大学", 替换为"Hainan University", 并将新文件添加前缀new后, 保存到当前目录下

转换前

转换后

终端打印

import docx
import os
import re

# 传入三个参数, 旧字符串, 新字符串, 文件对象
def replace_text(old_text, new_text, file):
	# 遍历文件对象
	for f in file.paragraphs:
		# 如果 旧字符串 在 某个段落 中
		if old_text in f.text:
			print("替换前:", f.text)
			# 将段落存入 inline
			inline = f.runs
			# 遍历 段落 生成 i
			for i in inline:
				# 如果 旧字符串 在 i 中
				if old_text in i.text:
					# 替换 i.text 内文本资源
					text = i.text.replace(old_text, new_text)
					i.text = text
			print("替换后===>", f.text)

def main():
	# 获取当前目录下所有的文件名列表
	old_file_names = os.listdir()

	# 获取所有docx文件名列表
	docx_file_names = []
	for old_file_name in old_file_names:
		if re.match(r'^[^~].*\.docx', old_file_name):
			print(old_file_name)
			docx_file_names.append(old_file_name)

	for docx_file_name in docx_file_names:
		try:
			# 获取文件对象
			file=docx.Document(docx_file_name)
			# 三个参数: 旧的字符串, 新的字符串, 文件对象
			print("开始替换:", docx_file_name)
			replace_text('海南大学', 'Hainan University', file)
			file.save('new_'+docx_file_name)
			print(docx_file_name, "替换成功")
		except:
			print(docx_file_name, "替换失败")
			pass

if __name__ == '__main__':
	main()

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码免费领取保证100%免费

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

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

相关文章

C++11:超进化--lambda表达式

目录 一、lambda表达式的引入 二、lambda表达式的语法 2.1lambda表达式各部分说明 2.2lambda函数的初步使用 2.3详谈捕捉列表 2.3.1[var][&var] 2.3.2[]传值捕捉当前域所有对象 2.3.3[&]传引用捕捉所有对象 2.3.4[&,val]混合捕捉 ​编辑 三、lambda底层、la…

windows远程桌面RDP提示登录密码失败次数过多帐户被锁定的解决方法

网上说的那些都不靠谱,乱来的,其实很简单,在计算机地址栏IP或域名后面空格加上“/admin”就可以登录进去,意思应该是以管理员的身份登录进去,这个用户必须要有管理员的权限, 这个操作秘密真的是深藏不露啊…

实战要求下,如何做好资产安全信息管理

文章目录 一、资产安全信息管理的重要性二、资产安全信息管理的痛点三、如何做好资产安全信息管理1、提升资产安全信息自动化、集约化管理能力,做到资产全过程管理2、做好资产的安全风险识别3、做好互联网暴露面的测绘与管空4、做好资产安全信息的动态稽核管理 “摸…

mysql中表的设计

我们可以根据实际的需求场景,明确当前要创建几个表,每个表内部有什么,这些表之中哪些表是存在着一定联系的. 先梳理清楚需求看需要哪些表,表里面需要哪些内容 再确定好表与表之间的"关系" 表与表之间的关系有: 一对一 一个学生…

【软考】哈希表

目录 一、概念1.1 定义 二、哈希函数的构造方法2.1 说明2.2 特性 三、处理冲突的方法3.1 说明3.2 开放定址法3.2.1 说明3.2.2 线性探测 3.3 链地址法3.4 再哈希法3.5 建立公共溢出区 四、哈希表的查找4.1 查找过程4.2 查找特点4.3 装填因子 一、概念 1.1 定义 1.一般存储结构由…

服务器数据恢复—V7000存储raid5数据恢复案例

服务器数据恢复环境: P740AIXSybaseV7000存储阵列柜,阵列柜上有12块SAS机械硬盘(包括1块热备盘)。 服务器故障: 管理员在日常巡检过程中发现阵列柜中有一块磁盘发生故障,于是更换磁盘并同步数据&#xff0…

大厂面试:找出数组中第k大的数的最佳算法

一.前置条件 假如数组为a,大小为n,要找到数组a中第k大的数。 二.解决方案 1.使用任意一种排序算法(例如快速排序)将数组a进行从大到小的排序,则第n-k个数即为答案。 2.构造一个长度为k的数组,将前k个数复制过来并降序…

一站式解读多模态——Transformer、Embedding、主流模型与通用任务实战(上)

本文章由飞桨星河社区开发者高宏伟贡献。高宏伟,飞桨开发者技术专家(PPDE),飞桨领航团团长,长期在自媒体领域分享AI技术知识,博客粉丝9w,飞桨星河社区ID为GoAI 。分享分为上下两期,本…

数学基础:矩阵

来自: https://www.shuxuele.com/algebra/matrix-determinant.html 一、矩阵的行列式 二、矩阵简单知识 三、矩阵乘法 四、单位矩阵 五、逆矩阵一:简单2阶矩阵求法 六、逆矩阵二:3、4阶逆矩阵求法 6.1 求余子式矩阵 6.2 求代数余子式矩阵 6.3 求伴随矩阵…

AcWing282.石子合并

【题目链接】acwing.com/problem/content/284/ 输入样例&#xff1a; 4 1 3 5 2输出样例&#xff1a; 22 【注意】本题与哈夫曼树做法的区别&#xff0c;哈夫曼树是可以合并任意两堆&#xff0c;而区间DP模型只能合并相邻两堆 【代码及详细注释】 #include<bits/stdc.h…

基于springboot实现美发门店管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现美发门店管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了美发门店管理系统的开发全过程。通过分析美发门店管理系统管理的不足&#xff0c;创建了一个计算机管理美发门店管理系…

postgresql uuid

示例数据库版本PG16&#xff0c;对于参照官方文档截图&#xff0c;可以在最上方切换到对应版本查看&#xff0c;相差不大。 方法一&#xff1a;自带函数 select gen_random_uuid(); 去掉四个斜杠&#xff0c;简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…

vue通过echarts实现数据可视化

1、安装echarts cnpm install echarts -Sechart官方图表示例大全&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-line 2、代码实现 <template><div><div class"box" ref"zhu"></div><div class&…

Ubuntu Desktop 免费的文件 / 目录差异比较工具 (Beyond Compare 为收费软件)

Ubuntu Desktop 免费的文件 / 目录差异比较工具 [Beyond Compare 为收费软件] 1. Installation2. Meld Diff Viewer3. Lock to LauncherReferences Meld - Visual diff and merge tool https://meldmerge.org/ Meld helps you compare files, directories, and version contro…

【MySQL】C# 连接MySQL

C# 连接MySQL 1. 添加MySQL引用 安装完MySQL之后&#xff0c;在安装的默认目录 C:\Program Files (x86)\MySQL\Connector NET 8.0 中查找MySQLData.dll文件。 在Visual Studio 中为项目中添加引用。 2. 引入命名空间 using MySql.Data.MySqlClient;3. 构建连接 private …

DHCP服务器的高可靠、高可用+负载均衡配置

一、适用场景 1、DHCP地址池集中化的管理环境中&#xff08;本例建立了200个C类网24位的地址池&#xff09;&#xff1b; 2、全网仅1台合法的DHCP服务器&#xff08;要是它宕机全部断网&#xff0c;本例旨在提高服务器的可靠性、可用性&#xff0c;双DHCP服务器性能上负载均衡…

mp4转flv怎么转?电脑怎么把视频转成flv?

MP4&#xff08;MPEG-4 Part 14&#xff09;是一种多媒体容器格式&#xff0c;广泛用于包含视频、音频、字幕等多种数据流。MP4因其高度灵活性、压缩效率和兼容性成为视频领域的主流格式&#xff0c;支持范围涵盖从在线视频到移动设备的各类应用场景。 FLV文件格式的多个优点 …

Spring MVC体系结构和处理请求控制器(一)

一、MVC模式 MVC模式是指Model-View-Controller&#xff08;模型-视图-控制器&#xff09;模式&#xff0c;是开发Web应用程序时常用的一种代码分层模式MVC模式是软件工程中的一种架构模式&#xff0c;会强制行的把系统的输入、处理和输出分开&#xff0c;是系统从功能上形成M…

[VMware] 修改参数的一个问题

最近在修改VMware虚拟机的时候遇到一个易用性的问题&#xff0c;比如要给一个VM设置一个参数需要在vSphere里点开设置&#xff0c;打开高级选项&#xff0c;添加配置ethernet0.coalescingScheme比如&#xff1a; 如果想要改的VM个数是十个八个&#xff0c;这种方法也许可以&a…

STM32+ESP8266水墨屏天气时钟:文字取模和图片取模教程

项目背景 本次的水墨屏幕项目需要显示一些图片和文字&#xff0c;所以需要对图片和文字进行取模。 取模步骤 1.打开取模软件 2.选择图形模式 3.设置字模选项 注意&#xff1a;本次项目采用的是水墨屏&#xff0c;并且是局部刷新的代码&#xff0c;所以设置字模选项可能有点…