Python办公自动化Day3-python-docx

目录

  • 文章声明⭐⭐⭐
  • 让我们开始今天的学习吧!
    • 新建打开保存
      • 新建与保存
      • 打开
    • 操作段落
      • 添加段落/查询段落数
      • 删除段落内容但未删除段落
      • 插入段落
      • 插入分页符
    • 段落样式
      • 对齐方式
      • 自带样式
      • 缩进与间距
    • Run
      • 介绍/读取Run
      • 添加/修改/删除Run
      • Run样式
    • 小案例


文章声明⭐⭐⭐

  1. 该文章为我(有编程语言基础,非编程小白)的 Python办公自动化自学笔记
  2. 知识来源为 B站UP主(冰冷的希望123)的Python办公自动化课程视频,归纳为自己的语言与理解记录于此并加以实践
  3. 关于办公自动化,知识基础、概念我都不会记录于此,更多的是记录实践,即以具体实操代码的形式展现给大家
  4. 不出意外的话,我大抵会 持续更新
  5. 想要了解前端开发(技术栈大致有:Vue2/3、微信小程序、uniapp、HarmonyOS、NodeJS、Typescript)与Python的小伙伴,可以关注我!谢谢大家!

让我们开始今天的学习吧!

新建打开保存

新建与保存

# 导入库,pip install python-docx
from docx import Document# 创建word
my_word = Document()# 保存word
my_word.save('MyWord.docx')

打开

# 导入库,pip install python-docx
from docx import Document# 打开word
my_word = Document('MyWord.docx')

操作段落

添加段落/查询段落数

# 导入库
from docx import Document# 创建word
word = Document()
# 输出段落数
print(len(word.paragraphs))  # 输出0
# 添加段落
p1 = word.add_paragraph('Richie')
# 输出段落数
print(len(word.paragraphs))  # 输出1
# 输出段落内容
print(p1.text)  # 输出Richie
# 修改段落内容
p1.text = 'Taylor Swift'
# 输出段落内容
print(p1.text)  # 输出Taylor# 保存word
word.save('MyWord.docx')

word中内容如下:
在这里插入图片描述

删除段落内容但未删除段落

# 导入库
from docx import Document# 打开word
word = Document('MyWord.docx')
# 添加段落
p = word.add_paragraph('Richie')
print(p.text)  # 输出Richie
# 删除段落内容 1.赋值空字符串
p.text = ''
print(p.text)  # 输出空字符串p.text = 'Richie'
print(p.text)  # 输出Richie
# 删除段落内容 2.clear()方法
p.clear()
print(p.text)  # 输出空字符串

插入段落

# 导入库
from docx import Document# 创建word
word = Document()
# 添加段落
p1 = word.add_paragraph('这是段落一')
p2 = word.add_paragraph('这是段落二')
p3 = word.add_paragraph('这是段落三')
print(len(word.paragraphs))  # 输出3
# 插入段落
p2.insert_paragraph_before('这是插入进来的段落,在段落二之前')
print(len(word.paragraphs))  # 输出4# 保存word
word.save('MyWord.docx')

word内容如下:
在这里插入图片描述

插入分页符

# 导入库
from docx import Document# 创建word
word = Document()
# 添加段落
p1 = word.add_paragraph('这是段落一')
# 插入分页符,分页符也算一个段落
word.add_page_break()
p2 = word.add_paragraph('这是段落二')
p3 = word.add_paragraph('这是段落三')
print(len(word.paragraphs))  # 输出4
# 插入段落
p2.insert_paragraph_before('这是插入进来的段落,在段落二之前')
print(len(word.paragraphs))  # 输出5
# 保存word
word.save('MyWord.docx')

word内容如下:
在这里插入图片描述


段落样式

对齐方式

# 导入库
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT# 创建word
word = Document()# 添加段落
p1 = word.add_paragraph('左对齐')
p2 = word.add_paragraph('居中对齐')
p3 = word.add_paragraph('右对齐')
p4 = word.add_paragraph('两端对齐')
p5 = word.add_paragraph('分散对齐')
# 设置对齐方式
p1.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
p2.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p3.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
p4.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY
p5.alignment = WD_PARAGRAPH_ALIGNMENT.DISTRIBUTE# 保存word
word.save('MyWord.docx')

效果如下:
在这里插入图片描述
因为是枚举,所以从源码中可知,可以简化写法:
在这里插入图片描述

自带样式

查看有哪些自带样式:

# 导入库
from docx import Document
from docx.enum.style import WD_STYLE_TYPE# 创建word
word = Document()# 查看段落自带样式有哪些
styles = word.styles
paragraph_styles = [style for style in styles if style.type == WD_STYLE_TYPE.PARAGRAPH]
for style in paragraph_styles:print(style.name)-------------------------------------
Normal # 正文
Header
Footer
Heading 1 # 标题一
Heading 2 # 标题二
Heading 3
Heading 4
Heading 5
Heading 6
Heading 7
Heading 8
......还有很多不予展示了

使用这些样式:

# 导入库
from docx import Document# 创建word
word = Document()# 添加段落
p1 = word.add_paragraph('段落一', style='Normal')
p2 = word.add_paragraph('段落二', style='Header')
p3 = word.add_paragraph('段落三', style='Heading 1')
p4 = word.add_paragraph('段落四', style='Heading 2')
p5 = word.add_paragraph('段落五', style='Heading 3')# 保存word
word.save('MyWord.docx')

效果如下:
在这里插入图片描述

缩进与间距

# 导入库
from docx import Document
from docx.shared import Pt# 创建word
word = Document()# 添加段落
p1 = word.add_paragraph('床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。', style='Normal')
# 行间距
p1.paragraph_format.line_spacing = Pt(20)
# 首行缩进
p1.paragraph_format.first_line_indent = Pt(10)# 用来对比的段落
p2 = word.add_paragraph('床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。', style='Normal')# 保存word
word.save('MyWord.docx')

效果如下:
在这里插入图片描述


Run

介绍/读取Run

首先看一下此时word里的内容:
在这里插入图片描述
此时word里的这一段内容,被python-docx自动分为5个Run对象(因为它们样式不同):“大家”、“好,”、“我”、“是”、“Richie”

代码如下:

# 导入库
from docx import Document# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 循环所有run对象
for run in p.runs:print(run.text)-------------------------------------
大家
好,
我
是
Richie

添加/修改/删除Run

添加Run,代码如下:

# 导入库
from docx import Document# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 循环所有Run
for run in p.runs:print(run.text)
# 添加Run,add_run()方法返回一个Run对象
p.add_run('!!!')
# 再次循环所有Run
print(' ')
for run in p.runs:print(run.text)-------------------------------------
大家
好,
我
是
Richie大家
好,
我
是
Richie
!!!

修改Run,代码如下:

# 导入库
from docx import Document# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 修改Run
print(p.runs[-1].text)
p.runs[-1].text = 'Taylor'
print(p.runs[-1].text)-------------------------------------
Richie
Taylor

原数据如下:
在这里插入图片描述
删除Run,代码如下:

# 导入库
from docx import Document# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 使用clear()方法,删除最后一个Run
p.runs[-1].clear()
# 当然也可以这样
# p.runs[-1].text = ''# 保存word
word.save('MyWord.docx')

删除后如下:
在这里插入图片描述

Run样式

# 导入库
from docx import Document
from docx.enum.text import WD_COLOR_INDEX
from docx.opc.oxml import qn
from docx.shared import Pt, RGBColor# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 获取第一个Run对象
run = p.runs[0]
# Run样式
run.bold = True  # 加粗
run.italic = True  # 斜体
run.underline = True  # 下划线
run.font.name = 'Times New Roman'  # 设置西文
run.element.rPr.rFonts.set(qn('r:eastAsia'), '宋体')  # 设置中文字体
run.font.size = Pt(30)  # 字体大小
run.font.color.rgb = RGBColor(0, 0, 255)  # 字体颜色
run.font.highlight_color = WD_COLOR_INDEX.YELLOW  # 文本高亮颜色
run.font.shadow = True  # 阴影
run.font.strike = True  # 删除线# 保存word
word.save('MyWord.docx')

小案例

为四位同学分别生成几个段落来模拟表彰,效果如下:
在这里插入图片描述
代码如下:

# 导入库
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt# 创建word
word = Document()
# 学生表
student_list = [{'专业': '工业工程','班级': '201','姓名': '吕全'}, {'专业': '服装与设计','班级': '204','姓名': 'Taylor'}, {'专业': '计算机','班级': '202','姓名': '刘志豪'}, {'专业': '化学','班级': '203','姓名': '陈泽'}
]# 开始制作案例
# 循环学生列表,为每个学生制作一个段落
for student in student_list:# 创建一个段落p = word.add_paragraph()# 首行缩进p.paragraph_format.first_line_indent = Pt(10)# 创建Runrun1 = p.add_run('兹证明,')run2 = p.add_run(f"    {student['专业']}    ")run3 = p.add_run('专业')run4 = p.add_run(f"    {student['班级']}    ")run5 = p.add_run('班')run6 = p.add_run(f"    {student['姓名']}    ")run7 = p.add_run('同学')run8 = p.add_run('近期学习表现良好,特此奖励10000元,望继续坚持,好好努力!')# 创建新段落p1 = word.add_paragraph('中原工学院')p2 = word.add_paragraph('2023年12月28日')# 靠右对齐p1.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHTp2.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT# 需要单独添加样式,且需要添加的样式一致的Run数组need_handle = [run2, run4, run6]# 循环该数组添加样式for run in need_handle:# 添加下划线run.underline = True# 循环所有run,设置通用样式for run in p.runs:# 设置字体大小run.font.size = Pt(15)
# 保存word
word.save('MyWord.docx')

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

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

相关文章

通过Python将PDF转为文本,快速提取PDF中的文字

快速高效地从PDF文档中提取信息对于专业人士来说非常重要。处理大量PDF文件时,将PDF转换为可编辑的文本格式可以节省时间和精力。而强大的Python语言正是在这些方面发挥其作用。利用Python中丰富的API,我们可以轻松在Python程序中将PDF转换为文本&#x…

《深入理解C++11:C++11新特性解析与应用》笔记四

第四章 新手易学,老兵易用 4.1 右尖括号>的改进 在 C98 中,有一条需要程序员规避的规则:如果在实例化模板的时候出现了连续的两个右尖括号 >,那么它们之间需要一个空格来进行分隔,以避免发生编译时的错误。C98 会将>&g…

MidJourney笔记(9)-daily_theme-docs-describe

/daily_theme 切换 #daily-theme 频道更新的通知。 但我发现在对话框那里,是没有这个命令的: 但官网是有介绍,不知道是不是版本问题还是这个命令已经无效。 但后来,我发现这个命令是要在Midjourney服务对话框那里才有,在我们后面添加的Mid

Linux的账号及权限管理

一.管理用户账号 1.1 用户账户的分类 1.1.1 用户账号的分类 超级用户:(拥有至高无上的权利) root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,系统中超级用户是唯一的。普通用户: …

2023年12月电子学会Scratch图形化编程一级真题及答案

2023年12月电子学会Scratch图形化编程一级真题及答案 一、单选题(共25题,共50分) 1. 观察下列每个圆形中的四个数,找出规律,在括号里填上适当的数?( ) A. 9 B. 17 C. 21 D. 5 试题编号:202306…

信息网络协议基础-IPv6协议

文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…

第十二章:实验案例:使用rsync构建镜像网站

实验环境 某公司在深圳、北京两地各放置了---台网站服务器,分别应对南北大区内不断增长的客户访问需求.两台服务器的网站文档必须保持--致,如图12.3所示,同步链路已通过VPN专用线路实现。 需求描述 1,服务器A(北京〉…

k8s快速搭建

VMware16Pro虚拟机安装教程VMware16.1.2安装及各版本密钥CentOS7.4的安装包:提取码:lp6qVMware搭建Centos7虚拟机教程 搭建完一个镜像 关机 拍摄一个快照,克隆两个作为子节点 0. 环境准备 在开始之前,部署Kubernetes集群机器需要满足以下几个条件&#…

使用Python Flask搭建一个简单的Web站点并发布到公网上访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程…

【linux】touch的基本使用

碎碎念 刚接触linux时候的几个最基础的命令之一,用来创建文件。如果使用touch --help的时候会发现作者对于touch的简介:Update the access and modification times of each FILE to the current time.用于修改文件的访问和时间戳 带我的leader属于那种…

Mediapipe绘制实时3d铰接骨架图——Mediapipe实时姿态估计

一、前言 大约两年前,基于自己的理解我曾写了几篇关于Mediapipe的文章,似乎帮助到了一些人。这两年,忙于比赛、实习、毕业、工作和考研。上篇文章已经是一年多前发的了。这段时间收到很多私信和评论,请原谅无法一一回复了。我将尝…

vue3老项目如何引入vite

vue3老项目如何引入vite 安装 npm install vite vitejs/plugin-vue --save-dev Vite官方中文文档修改package.json文件 在 npm scripts 中使用 vite 执行文件 "scripts": {"serve": "vite","build": "vite build","pr…

关于Redis面试题

前言 之前为了准备面试,收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv Redis 是什么 全名:远程字典服务。这是一个开源的在内存中的数据结构存…

一、C++简介

C语言的发展史 1983年,贝尔实验室(Bell Labs)的Bjarne Stroustrup发明了C。 C在C语言的基础上进行了扩充和完善,是一种面向对象程序设计(OOP)语言。 Stroustrup说:“这个名字象征着源自于C语言变…

模式识别与机器学习-SVM(线性支持向量机)

线性支持向量机 线性支持向量机间隔距离学习的对偶算法算法:线性可分支持向量机学习算法线性可分支持向量机例子 谨以此博客作为复习期间的记录 线性支持向量机 在以上四条线中,都可以作为分割平面,误差率也都为0。但是那个分割平面效果更好呢&#xff1…

Postman常见问题及解决方法

1、网络连接问题 如果Postman无法发送请求或接收响应,可以尝试以下操作: 检查网络连接是否正常,包括检查网络设置、代理设置等。 确认请求的URL是否正确,并检查是否使用了正确的HTTP方法(例如GET、POST、PUT等&#…

Linux操作系统——进程(六) 进程地址空间

进程地址空间 C/C程序员一般将我们所写的程序看成如下这种结构: 我们所写的程序通过编译编译之后就可以以这样的方式进行分布. 我们先通过编写一段C语言代码来进行验证: 运行结果: 我们可以看出来上述地址遵循的就是我们上面画的一种结构。…

H5向微信小程序发送信息(小程序web-view打开H5)

引入weixin-js-sdk npm i weixin-js-sdk 页面引入 // 引入wxjsimport wx from "weixin-js-sdk"; 点击触发方法 methods: {goweap(id){console.log(wx);// H5传递数据 (navigateBack)wx.miniProgram.navigateBack({delta: 1});wx.min…

探究element-ui 2.15.8中<el-input>的keydown事件无效问题

一、问题描述 今天看到一个问题&#xff0c;在用Vue2element-ui 2.15.8开发时&#xff0c;使用input组件绑定keydown事件没有任何效果。 <template><div id"app"><el-input v-model"content" placeholder"请输入" keydown&quo…

播放海康摄像头直播流使用笔记

1、将海康摄像头绑定到萤石云平台&#xff0c;并查看直播流 2、项目中使用 1、安装hls cnpm i hls.js 2、封装组件&#xff08;在components文件夹下新建bodyCapture文件夹下index.vue&#xff09; <template><el-dialogtitle"遗体抓拍"class"bo…