【Python办公自动化之Word】

2024-06-21 02:52
文章标签 python word 办公自动化

本文主要是介绍【Python办公自动化之Word】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python办公⾃动化之-Word

python-docx库

文章目录

  • python办公⾃动化之-Word
    • 1、安装python-docx库
    • 2、⽂档的结构说明
    • 3、基本操作语法
      • 3.1 打开⽂档
      • 3.2加⼊不同等级的标题
      • 3.3 添加⽂本
      • 3.4 设置字号
      • 插曲1:实战演示
      • 3.5 设置中⽂字体
      • 3.6 设置斜体
      • 3.7 设置粗体
      • 3.8⾸⾏缩进
      • 插曲2:实战演示
      • 插曲3:实战演示
      • 3.9 对⻬⽅式
      • 插曲4:实战演示
      • 3.10 增加列表
      • 3.11 增加图片
      • 3.12 增加表格
      • 插曲5:实战演示
      • 3.13 再增加3行表格元素
      • 3.14 增加分页
      • 3.15 保存文件
      • 3.16 完整代码
      • 3.17 获取文档操作
      • 3.18 获取段落数量
    • 4、案例
      • 4.1 请假条
      • 4.2 Excel转换为word

1、安装python-docx库

cmd窗⼝或终端输⼊pip install python-docx按下回⻋等待安装完成。
说明

2、⽂档的结构说明

在这里插入图片描述

在word⽂档中,其主要结构如下所述:

  1. 每个document包含多个paragraph,每个paragraph有多个run,每个run包含有(text⽂本,font字体,color颜⾊,字号)
  2. 每个document包含多个tables,table中有多个rows,每个row包含多个cells,每个cell中包含多个paragraph。对于写word表格不论是 head 还是paragraph 基本操作都是先添加对象,然后再添加run就好了
  3. word表格的结构包含head标题、normal 正⽂、Caption表

3、基本操作语法

3.1 打开⽂档

document = Document

不填默认为新建⼀个⽂档

3.2加⼊不同等级的标题

document.add_heading('总标题',0)
document.add_heading('⼀级标题',1)
document.add_heading('⼆级标题',2)

3.3 添加⽂本

 paragraph = document.add_paragraph('⽂本内容')

3.4 设置字号

run = paragraph.add_run('设置字号、')
run.font.size = Pt(34)

插曲1:实战演示

from docx import Document
from docx.shared import Ptdocument = Document()# 添加标题
document.add_heading('总标题', 0)
document.add_heading('一级标题', 1)
document.add_heading('二级标题', 2)paragraph = document.add_paragraph('我是⽂本内容')run = paragraph.add_run('设置字号、')
run.font.size = Pt(34)document.save('test.docx')	#生成的文件名+路径,不设路径默认在工程目录下

运行结果:

在这里插入图片描述

3.5 设置中⽂字体

run = paragraph.add_run('设置中⽂字体、')
run.font.name = '宋体'
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '宋体')

3.6 设置斜体

run = paragraph.add_run('斜体、')
run.italic = True

3.7 设置粗体

 paragraph.add_run('粗体').bold = True

3.8⾸⾏缩进

缩进⽅式属性
左边缩进left_indent
右边缩进right_indent
⾸⾏缩进first_line_indent

插曲2:实战演示

from docx import Document
from docx.oxml.ns import qn
from docx.shared import Ptdocument = Document()# 添加标题
document.add_heading('总标题', 0)
document.add_heading('一级标题', 1)
document.add_heading('二级标题', 2)paragraph = document.add_paragraph('我是文本本内容')
paragraph.add_run('粗体').bold = Truerun = paragraph.add_run('设置字号、')
run.font.size = Pt(34)
run = paragraph.add_run('设置中⽂字体、')
run.font.name = '华文彩云'
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '华文彩云')run = paragraph.add_run('斜体、')
run.italic = Truedocument.save('test.docx')

在这里插入图片描述

插曲3:实战演示

from docx import Document
from docx.shared import Inchesdoc = Document()
paragraph = doc.add_paragraph()
paragraph.add_run('因______,特向您请事假____天。请假时间自_____年___月___日至_____年___月___日。这段时间内原计划安排的课程已做好处理,希望领导批准。' )article2_format = paragraph.paragraph_format
article2_format.first_line_indent = Inches(0.3) #英寸单位
doc.save('请假.docx')

在这里插入图片描述

3.9 对⻬⽅式

名称属性
左对⻬LEFT
居中CENTER
右对⻬RIGHT
⽂本两端对⻬JUSTIFY

插曲4:实战演示

from docx import Document
from docx.enum.text import
WD_PARAGRAPH_ALIGNMENT
doc = Document()
title = doc.add_paragraph()
a2 = title.add_run('标题内容')
title.alignment =
WD_PARAGRAPH_ALIGNMENT.CENTER # 居中
doc.save('test.docx')

在这里插入图片描述

3.10 增加列表

from docx import Document
document = Document()
document.add_paragraph('⽆序列表元素1', style='List Bullet')
document.add_paragraph('⽆序列表元素2', style='List Bullet')
document.add_paragraph('⽆序列表元素3', style='List Bullet')document.add_paragraph('有序列表元素1', style='List Number')
document.add_paragraph('有序列表元素2', style='List Number')
document.add_paragraph('有序列表元素3', style='List Number')document.save('列表.docx')

在这里插入图片描述

3.11 增加图片

png为图⽚名称(必须与代码⽂件在同⼀个⽂件夹内)

document.add_picture('1.png',width=Inches(1.35)

3.12 增加表格

table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Name'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'

插曲5:实战演示

from docx import Document
from docx.shared import Inchesdoc = Document()
# doc.add_picture('dlrb.jpeg', width=Inches(1.35))
doc.add_picture('dlrb.jpeg', width=Inches(1.35), height=Inches(1.35))table = doc.add_table(rows=1, cols=3, style="Table Grid")
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Name'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for i in range(3):row_cells = table.add_row().cellsrow_cells[0].text = 'test'+str(i)row_cells[1].text = str(i)row_cells[2].text = 'desc'+str(i)
doc.save('test.docx')

运行效果:

在这里插入图片描述

3.13 再增加3行表格元素

for i in range(3):row_cells = table.add_row().cellsrow_cells[0].text = 'test'+str(i)row_cells[1].text = str(i)row_cells[2].text = 'desc'+str(i)

3.14 增加分页

document.add_page_break()

3.15 保存文件

document.save('测试.docx')

3.16 完整代码

from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
document = Document()
document.add_heading(u'MS WORD写⼊测试',0)
document.add_heading('⼀级标题',1)
document.add_heading('⼆级标题',2)
paragraph = document.add_paragraph('我们在做⽂
本测试!')
run = paragraph.add_run('设置字号、')
run.font.size = Pt(34)
run = paragraph.add_run('设置中⽂字体、')
run.font.name = '宋体'
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
run = paragraph.add_run('斜体、')
run.italic = True
paragraph.add_run('粗体').bold = True
document.add_paragraph('Intense quote',
style='Intense Quote')
document.add_paragraph('⽆序列表元素1', style='List Bullet'
)
document.add_paragraph('⽆序列表元素3', style='List Bullet'
)
document.add_paragraph('有序列表元素1', style='List Number'
)
document.add_paragraph('有序列表元素3', style='List Number'
)document.add_picture('dlrb.jpeg',width=Inches(1.35))
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Name'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for i in range(3):row_cells = table.add_row().cellsrow_cells[0].text = 'test'+str(i)row_cells[1].text = str(i)row_cells[2].text = 'desc'+str(i)
document.add_page_break()
document.save('测试.docx')

在这里插入图片描述

3.17 获取文档操作

from docx import Documentdoc = Document('test.docx')
paragraphs = doc.paragraphs
# print(len(paragraphs))
for paragraph in paragraphs:print(paragraph.text)

test.tocx

在这里插入图片描述

运行结果:

在这里插入图片描述

3.18 获取段落数量

# 段落数量
print(len(doc.paragraphs ))

4、案例

4.1 请假条

from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt, Inches
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTdoc = Document()
# 全局字体设置
doc.styles['Normal'].font.name = '宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')# 创建标题
title = doc.add_paragraph()
title1 = title.add_run('公司员工请假条')
title1.font.size = Pt(20)
title1.blod = True
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 正文
article1 = doc.add_paragraph()
article2 = article1.add_run('___部:')article3 = doc.add_paragraph()
article4 = article3.add_run('因____________ ,特向您请事假天。请假时间自_年月日 至_年月日。这段时间内原计 划安排的课程已做好处理,希望领导批准。')# ⾸⾏缩进 负值表示悬挂缩进
article3_format = article3.paragraph_format
article3_format.first_line_indent = Inches(0.3)article3 = doc.add_paragraph()
a3 = article3.add_run('请假人:') # 内容
article3.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
article3_format = article3.paragraph_format
article3_format.right_indent = Inches(0.9)nowData = doc.add_paragraph()
n3 = nowData.add_run('年 月 日') # 内容
nowData.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
nowData_format = nowData.paragraph_format
nowData_format.right_indent = Inches(0.3)doc.save('请假条.docx')

在这里插入图片描述

4.2 Excel转换为word

import xlrd
from docx import Document
from docx.enum.section import WD_ORIENTATION
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt, Cm, RGBColor
from docx.oxml.ns import qn
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENTdef read_excel():"""读取Excel"""book = xlrd.open_workbook('test.xlsx')sheet = book.sheet_by_name(book.sheet_names()[0])nrows = sheet.nrows # 行数ncols = sheet.ncols # 列数datas = [] # 存放数据# 第一列 标题keys = sheet.row_values(0)for row in range(1, nrows):data = {} # 每一行数据for col in range(0, ncols):value = sheet.cell_value(row, col) # 取出每一个单元格的数据# 替换到特殊字符value = value.replace('<', '').replace('>', '').replace('$', '')data[keys[col]] = value# 截取第一列元素if col == 0:first = '' # 截取元素 第1second = '' # 截取元素 第2third = '' # 截取元素 第3arrs = value.lstrip('/').split('/') # 去掉第一个/ 然后再以/分组if len(arrs) > 0:if len(arrs) == 1:first = arrs[0]second = firstthird = secondelif len(arrs) == 2:first = arrs[0]second = arrs[1]third = secondelif len(arrs) == 3:first = arrs[0]second = arrs[1]third = arrs[2]else:first = arrs[0]second = arrs[1]third = arrs[2]else:first = value.ltrip('/')second = firstthird = seconddata['first'] = firstdata['second'] = seconddata['third'] = third# 截取第一列结束datas.append(data)return datasdef write_word(datas):"""生成word文件"""if len(datas) < 1:print('Excel没有内容')return# 定义word文档对象doc = Document()# 添加横向section = doc.sections[0] # doc.add_section(start_type=WD_SECTION_START.CONTINUOUS) # 添加横向页的连续节section.orientation = WD_ORIENTATION.LANDSCAPEpage_h, page_w = section.page_width, section.page_heightsection.page_width = page_w # 设置横向纸的宽度section.page_height = page_h # 设置横向纸的高度# 设置字体doc.styles['Normal'].font.name = u'宋体'doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')# 获取第3部分(部门) 并去重data_third = []for data in datas:third = data['third']if data_third.count(third) == 0:data_third.append(third)for third in data_third:h2 = doc.add_heading(third, level=2) # 写入部门,二级标题run = h2.runs[0] # 可以通过add_run来设置文字,也可以通过数组来获取run.font.color.rgb = RGBColor(0, 0, 0)run.font.name = u'宋体'doc.add_paragraph(text='', style=None) # 增加空白行 换行# 开始获取模板data_template = []for data in datas:if data['third'] == third:template = {'first': data['first'], '模板名称': data['模板名称']}if data_template.count(template) == 0:data_template.append(template)# 获取模板完成# 遍历模板for template in data_template:h3 = doc.add_heading(template['模板名称'], level=3) # 插入模板名称,三级标题run = h3.runs[0] # 可以通过add_run来设置文字,也可以通过数组来获取run.font.color.rgb = RGBColor(0, 0, 0)run.font.name = u'宋体'doc.add_paragraph(text='', style=None) # 换行data_table = filter(lambda data: data['third'] == third and data['模板名称'] == template['模板名称'] and data['first'] ==template['first'], datas)data_table = list(data_table)# 新增表格 4行5列doc_table = doc.add_table(rows=4, cols=5)doc_table.style = "Table Grid"doc_table.style.font.size = Pt(9)doc_table.style.font.name = '宋体'# 合并单元格 赋值doc_table.rows[0].cells[1].merge(doc_table.rows[0].cells[4])doc_table.rows[1].cells[1].merge(doc_table.rows[1].cells[4])doc_table.rows[2].cells[1].merge(doc_table.rows[2].cells[4])doc_table.rows[0].cells[0].text = '流程名称:'doc_table.rows[0].cells[1].text = data_table[0]['模板名称']doc_table.rows[1].cells[0].text = '使用人:'doc_table.rows[1].cells[1].text = data_table[0]['first']doc_table.rows[2].cells[0].text = '流程说明:'doc_table.rows[2].cells[1].text = data_table[0]['流程说明']# 设置标题head_cells = doc_table.rows[3].cells # 前面还有三行,特殊处理head_cells[0].text = '节点'head_cells[1].text = '节点名'head_cells[2].text = '处理人员'head_cells[3].text = '处理方式'head_cells[4].text = '跳转信息'# 设置列宽head_cells[0].width = Cm(1.9)head_cells[1].width = Cm(4.83)head_cells[2].width = Cm(8.25)head_cells[3].width = Cm(2.54)head_cells[4].width = Cm(5.64)# 第1 列水平居中,并设置行高,所有单元格内容垂直居中for i in range(0, 4):# 水平居中p = doc_table.rows[i].cells[0].paragraphs[0]p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERdoc_table.rows[i].height = Cm(0.6) # 行高# 垂直居中for j in range(0, 5):doc_table.rows[i].cells[j].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER# 生成表格并填充内容row_num = 0for data in data_table:row = doc_table.add_row()row_cells = row.cellsrow_cells[0].text = str(row_num + 1) # 序号,需要转换成字符串row_cells[1].text = data['节点名称']row_cells[2].text = data['审批人员']row_cells[3].text = data['审批方式']row_cells[4].text = ''# 水平居中p = row_cells[0].paragraphs[0]p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERrow.height = Cm(0.6) # 行高# 垂直居中for j in range(0, 5):row_cells[j].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTERrow_num = row_num + 1doc.add_paragraph(text='', style=None) # 换行doc.save('test.docx')print(write_word(read_excel()))

在这里插入图片描述

在这里插入图片描述

这篇关于【Python办公自动化之Word】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080012

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目