python自动化之word 操作

研发逻辑就是讲解逻辑,一般从上往下,遵循:What - Why - HowWhy - What - How 思路;这章节学的有点晕,比较多要记住的,当然搞会了像我这类懒人固定套格式就好了。后续在复习吧

新建空白word并插入文字

import os
os.chdir(r'C:\Users\晴天\Desktop\python学习')          #改变当前工作目录
os.getcwd()
# 导入库
from docx import Document
# 新建空白文档
doc_1 = Document()
# 添加标题(0相当于文章的题目,默认级别是1,级别范围为0-9)
doc_1.add_heading('新建空白文档标题,级别为0',level = 0)
doc_1.add_heading('新建空白文档标题,级别为1',level = 1)
doc_1.add_heading('新建空白文档标题,级别为2',level = 2)
# 新增段落
paragraph_1 = doc_1.add_paragraph('这是第一段文字的开始\n请多多关照!')
# 加粗
paragraph_1.add_run('加粗字体').bold = True
paragraph_1.add_run('普通字体')
# 斜体
paragraph_1.add_run('斜体字体').italic =True# 新段落(当前段落的下方)
paragraph_2 = doc_1.add_paragraph('新起的第二段文字。')# 新段落(指定端的上方)
prior_paragraph = paragraph_1.insert_paragraph_before('在第一段文字前插入的段落')# 添加分页符(可以进行灵活的排版)
doc_1.add_page_break()
# 新段落(指定端的上方)
paragraph_3 = doc_1.add_paragraph('这是第二页第一段文字!')# 保存文件(当前目录下)
doc_1.save('doc_1.docx')
# 导入库
from docx import Document
# 新建空白文档
办公学习 = Document()
# 添加标题(0相当于文章的题目,默认级别是1,级别范围为0-9)
doc_1.add_heading('第三课,级别为0',level = 0)
doc_1.add_heading('办公自动化学习,级别为1',level = 1)
doc_1.add_heading('python与word,级别为2',level = 2)
# 新增段落
paragraph_1 = doc_1.add_paragraph('开始如何学习写入!')
# 加粗
paragraph_1.add_run('word').bold = True
paragraph_1.add_run('学习')
# 斜体
paragraph_1.add_run('增强记忆').italic =True# 新段落(当前段落的下方)
paragraph_2 = doc_1.add_paragraph('代码输入数据')# 新段落(指定端的上方)
prior_paragraph = paragraph_1.insert_paragraph_before('欢迎回来')# 添加分页符(可以进行灵活的排版)
doc_1.add_page_break()
# 新段落(指定端的上方)
paragraph_3 = doc_1.add_paragraph('继续输入!')# 保存文件(当前目录下)
doc_1.save('python的学习.docx')

2.2python自动化之word操作

  • 文档 - Document
  • 段落 - Paragraph 段落的对象
  • 文字块 - Run 是最基本的单位

2.2.1整体页面结构介绍

# 导入库
from docx import Document
from docx.shared import RGBColor, Pt,Inches,Cm
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn# 新建文档
doc_1 = Document()
# 字体设置(全局)
'''只更改font.name是不够的,还需要调用._element.rPr.rFonts的set()方法。'''
doc_1.styles['Normal'].font.name = u'宋体'
doc_1.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')# 添加标题(0相当于文章的题目,默认级别是1,级别范围为0-9,0时候自动带下划线)
heading_1 = doc_1.add_heading('周杰伦',level = 0)
heading_1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER   #居中对齐,默认居左对齐# 新增段落
paragraph_1 = doc_1.add_paragraph()
'''
设置段落格式:首行缩进0.75cm,居左,段后距离1.0英寸,1.5倍行距。
'''
paragraph_1.paragraph_format.first_line_indent = Cm(0.75)
paragraph_1.paragraph_format.alignment =  WD_PARAGRAPH_ALIGNMENT.LEFT
paragraph_1.paragraph_format.space_after =  Inches(1.0)
paragraph_1.paragraph_format.line_spacing =  1.5text = '中国台湾华语流行歌手、' \'音乐创作家、作曲家、作词人、' \'制作人、杰威尔音乐公司老板之一、导演。' \'近年涉足电影行业。周杰伦是2000年后亚洲流行乐坛最具革命性与指标' \'性的创作歌手,有“亚洲流行天王”之称。他突破原有亚洲音乐的主题、形' \'式,融合多元的音乐素材,创造出多变的歌曲风格,尤以融合中西式曲风的嘻哈' \'或节奏蓝调最为著名,可说是开创华语流行音乐“中国风”的先声。周杰伦的' \'出现打破了亚洲流行乐坛长年停滞不前的局面,为亚洲流行乐坛翻开了新的一页!'r_1 = paragraph_1.add_run(text)
r_1.font.size =Pt(10)    #字号
r_1.font.bold =True       #加粗
r_1.font.color.rgb =RGBColor(255,0,0)      #颜色# 保存文件(当前目录下)
doc_1.save('周杰伦.docx')
print('周杰伦.docx')
key_location = r"C:\Users\晴天\Desktop\python学习"
os.listdir(key_location)#查看整个文件夹下的文件有哪些
周杰伦.docx['doc_1.docx','python的学习.docx','wenjian.txt','~$伦为营口加油.docx','周杰伦.docx','周杰伦为营口加油.docx','字体设置1.docx','字体设置2.docx','音乐.docx','音乐44.docx']

思考:如何把写入的内容读取出来。
用task1学的
“helloFile = open(‘D:\hello.txt’)
print(helloFile.read())” 发现报错编码问题,故使用以下代码读取内容

#读取docx中的文本代码示例
import docx
#获取文档对象
file=docx.Document(r"C:\Users\晴天\Desktop\python学习\周杰伦.docx")
print("段落数:"+str(len(file.paragraphs)))#段落数为13,每个回车隔离一段#输出每一段的内容
for para in file.paragraphs:print(para.text)#输出段落编号及段落内容
for i in range(len(file.paragraphs)):print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)
style_font = document.styles.add_style('楷体', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '楷体'
document.styles['楷体']._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷体')
# 将段落中的所有字体
段落数:2
周杰伦
中国台湾华语流行歌手、音乐创作家、作曲家、作词人、制作人、杰威尔音乐公司老板之一、导演。近年涉足电影行业。周杰伦是2000年后亚洲流行乐坛最具革命性与指标性的创作歌手,有“亚洲流行天王”之称。他突破原有亚洲音乐的主题、形式,融合多元的音乐素材,创造出多变的歌曲风格,尤以融合中西式曲风的嘻哈或节奏蓝调最为著名,可说是开创华语流行音乐“中国风”的先声。周杰伦的出现打破了亚洲流行乐坛长年停滞不前的局面,为亚洲流行乐坛翻开了新的一页!
第0段的内容是:周杰伦
第1段的内容是:中国台湾华语流行歌手、音乐创作家、作曲家、作词人、制作人、杰威尔音乐公司老板之一、导演。近年涉足电影行业。周杰伦是2000年后亚洲流行乐坛最具革命性与指标性的创作歌手,有“亚洲流行天王”之称。他突破原有亚洲音乐的主题、形式,融合多元的音乐素材,创造出多变的歌曲风格,尤以融合中西式曲风的嘻哈或节奏蓝调最为著名,可说是开创华语流行音乐“中国风”的先声。周杰伦的出现打破了亚洲流行乐坛长年停滞不前的局面,为亚洲流行乐坛翻开了新的一页!---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-65-10fcb4e1e9f2> in <module>12 for i in range(len(file.paragraphs)):13  print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)
---> 14 style_font = document.styles.add_style('楷体', WD_STYLE_TYPE.CHARACTER)15 style_font.font.name = '楷体'16 document.styles['楷体']._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷体')E:\anaconda3\lib\site-packages\docx\styles\styles.py in add_style(self, name, style_type, builtin)67         style_name = BabelFish.ui2internal(name)68         if style_name in self:
---> 69             raise ValueError("document already contains style '%s'" % name)70         style = self._element.add_style_of_type(71             style_name, style_type, builtinValueError: document already contains style '楷体'

2.2.2字体设置

'''字体设置1.py'''
#导入库
from docx import Document
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPEdocument = Document() # 新建docx文档# 设置宋体字样式
style_font = document.styles.add_style('宋体', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '宋体'
document.styles['宋体']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')# 设置楷体字样式
style_font = document.styles.add_style('楷体', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '楷体'
document.styles['楷体']._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷体')
# 将段落中的所有字体# 设置华文中宋字样式
style_font = document.styles.add_style('华文中宋', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '华文中宋'
document.styles['华文中宋']._element.rPr.rFonts.set(qn('w:eastAsia'), u'华文中宋')paragraph1 = document.add_paragraph() # 添加段落
run = paragraph1.add_run(u'天气太热了', style='宋体') # 设置宋体样式font = run.font #设置字体
font.name = 'Cambira' # 设置西文字体
paragraph1.add_run(u'真的很热', style='楷体').font.name = 'Cambira'
paragraph1.add_run(u'热的不行了', style='华文中宋').font.name = 'Cambira'document.save('字体设置1.docx')

'''字体设置2.py'''
#导入库
from docx import Document
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE#定义字体设置函数
def font_setting(doc,text,font_cn):style_add = doc.styles.add_style(font_cn, WD_STYLE_TYPE.CHARACTER)style_add.font.name = font_cndoc.styles[font_cn]._element.rPr.rFonts.set(qn('w:eastAsia'), font_cn)par = doc.add_paragraph()text = par.add_run(text, style=font_cn)doc = Document()
a = '小朋友 你是否有很多问号'
b = '为什么 别人在那看漫画'
c = '我却在学画画 对着钢琴说话'font_setting(doc,a,'宋体')
font_setting(doc,b,'华文中宋')
font_setting(doc,c,'黑体')doc.save('字体设置2.docx')

疑问?如果在已经有了的文档里如何设置呢?

os.chdir('C:\Users\晴天\Desktop\OfficeAutomation(2)\OfficeAutomation')          #改变当前工作目录
os.getcwd()

2.2.3插入图片与表格

#导入库
from docx import Document
from docx.shared import Inches#打开文档
doc_1 = Document('周杰伦.docx')   #上面脚本存储的文档
#新增图片
doc_1.add_picture(r'C:\Users\晴天\Desktop\OfficeAutomation(2)\OfficeAutomation\图片\周杰伦.jpg',width=Inches(1.0), height=Inches(1.0))
# 创建3行1列表格
table1 = doc_1.add_table(rows=2, cols=1)
table1.style='Medium Grid 1 Accent 1'  #表格样式很多种,如,Light Shading Accent 1等# 修改第2行第3列单元格的内容为营口
table1.cell(0, 0).text = '营口'
# 修改第3行第4列单元格的内容为人民
table1.rows[1].cells[0].text = '人民'# 在表格底部新增一行
row_cells = table1.add_row().cells
# 新增行的第一列添加内容
row_cells[0].text = '加油'doc_1.save('周杰伦为营口加油.docx')

2.2.4设置页眉页脚

在python-docx包中则要使用节(section)中的页眉(header)和页脚(footer)对象来具体设置。

#设置页眉页脚
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTdocument = Document() # 新建文档header = document.sections[0].header # 获取第一个节的页眉
print('页眉中默认段落数:', len(header.paragraphs))
paragraph = header.paragraphs[0] # 获取页眉的第一个段落
paragraph.add_run('这是第一节的页眉') # 添加页面内容
footer = document.sections[0].footer # 获取第一个节的页脚
paragraph = footer.paragraphs[0] # 获取页脚的第一个段落
paragraph.add_run('这是第一节的页脚') # 添加页脚内容'''在docx文档中又添加了2个节,共计3个节,页面和页脚会显示了“与上一节相同”。
如果不使用上一节的内容和样式要将header.is_linked_to_previous的属性或footer.is_linked_to_previous的属性设置为False,
用于解除“链接上一节页眉”或者“链接上一节页脚”。'''
document.add_section() # 添加一个新的节
document.add_section() # 添加第3个节
header = document.sections[1].header # 获取第2个节的页眉
header.is_linked_to_previous = False # 不使用上节内容和样式#对齐设置
header = document.sections[1].header # 获取第2个节的页眉
header.is_linked_to_previous = False # 不使用上节内容和样式
paragraph = header.paragraphs[0]
paragraph.add_run('这是第二节的页眉')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置页眉居中对齐
document.sections[1].footer.is_linked_to_previous = False
footer.paragraphs[0].add_run('这是第二节的页脚') # 添加第2节页脚内容
footer.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置第2节页脚居中对齐
header = document.sections[2].header # 获取第3个节的页眉
header.is_linked_to_previous = False # 不使用上节的内容和样式
paragraph = header.paragraphs[0] # 获取页眉中的段落
paragraph.add_run('这是第三节的页眉')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT # 设置页眉右对齐
document.sections[2].footer.is_linked_to_previous = False
footer.paragraphs[0].add_run('这是第三节的页脚') # 添加第3节页脚内容
footer.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT # 设置第3节页脚右对齐
document.save('页眉页脚1.docx') # 保存文档
页眉中默认段落数: 1

2.2.5代码延伸

'''对齐设置'''
from docx.enum.text import WD_ALIGN_PARAGRAPH
#LEFT: 左对齐
#CENTER: 文字居中
#RIGHT: 右对齐
#JUSTIFY: 文本两端对齐'''设置段落行距'''
from docx.shared import Length
# SINGLE :单倍行距(默认)
#ONE_POINT_FIVE : 1.5倍行距
# DOUBLE2 : 倍行距
#AT_LEAST : 最小值
#EXACTLY:固定值
# MULTIPLE : 多倍行距paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY #固定值
paragraph_format.line_spacing = Pt(18) # 固定值18磅
paragraph.line_spacing_rule = WD_LINE_SPACING.MULTIPLE #多倍行距
paragraph_format.line_spacing = 1.75 # 1.75倍行间距'''设置字体属性'''
from docx.shared import RGBColor,Pt
#all_caps:全部大写字母
#bold:加粗
#color:字体颜色#double_strike:双删除线
#hidden : 隐藏
#imprint : 印记
#italic : 斜体
#name  :字体
#shadow  :阴影
#strike  :  删除线
#subscript  :下标
#superscript  :上标
#underline  :下划线## 3.项目实践### 3.1需求>  你是公司的行政人员,对合作伙伴进行邀请,参加公司的会议;
>
>  参会人名单如下:![](.\图片\参会人名单.png)拟定的邀请函样式如下:![](.\图片\邀请函样式.png)**根据参会人名单,利用python批量生成邀请函。**需求分析:
> - 获取 Excel 文件中每一行的信息,提取 参数;结合获取的参数设计邀请函样式并输出
> - 设计word段落及字体等样式。### 3.3项目需求代码```python
# 导入库
from openpyxl import load_workbook
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import RGBColor, Pt,Inches,Cm
from docx.oxml.ns import qnpath = r'C:\Users\晴天\Desktop\OfficeAutomation(2)\OfficeAutomation\图片'
# 路径为Excel 文件所在的位置,可按实际情况更改workbook = load_workbook(path + r'\excel到word.xlsx')
sheet = workbook.active   #默认的WorkSheetn = 0   #为了不遍历标题(excel的第一行)
for row in sheet.rows:if n:company = row[0].valueoffice = row[1].valuename = row[2].valuedate = str(row[3].value).split()[0]print(company, office, name, date)doc = Document()heading_1 = '邀 请 函'paragraph_1 = doc.add_heading(heading_1, level=1)# 居中对齐paragraph_1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 单独修改较大字号for run in paragraph_1.runs:run.font.size = Pt(17)greeting_word_1 = '尊敬的'greeting_word_2 = '公司'greeting_word_3 = ',您好:'paragraph_2 = doc.add_paragraph()paragraph_2.add_run(greeting_word_1)r_1 = paragraph_2.add_run(company)r_1.font.bold = True  # 加粗r_1.font.underline = True    #下划线paragraph_2.add_run(greeting_word_2)r_2 = paragraph_2.add_run(office)r_2.font.bold = True  # 加粗r_2.font.underline = True    #下划线r_3 = paragraph_2.add_run(name)r_3.font.bold = True  # 加粗r_3.font.underline = True    #下划线paragraph_2.add_run(greeting_word_3)paragraph_3 = doc.add_paragraph()paragraph_3.add_run('现诚挚的邀请您于2021年10月27日参加DataWhale主办的享受开源2050活动,地点在北京鸟巢,希望您届时莅临参加。')paragraph_3.paragraph_format.first_line_indent = Cm(0.75)paragraph_3.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFTparagraph_3.paragraph_format.space_after = Inches(1.0)paragraph_3.paragraph_format.line_spacing = 1.5paragraph_4 = doc.add_paragraph()date_word_1 = '邀请时间:'paragraph_4.add_run(date_word_1)paragraph_4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHTsign_date = "{}年{}月{}日".format(date.split('-')[0], date.split('-')[1], date.split('-')[2])paragraph_4.add_run(sign_date).underline = Trueparagraph_4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT#设置全文字体for paragraph in doc.paragraphs:for run in paragraph.runs:run.font.color.rgb = RGBColor(0, 0, 0)run.font.name = '楷体'r = run._element.rPr.rFontsr.set(qn('w:eastAsia'), '楷体')doc.save(path + "\{}-邀请函.docx".format(name))n = n + 1
阿里 数据工程师 牛云 2021-02-15
腾讯 数据分析师 牛化腾 2021-02-16
百度 数据架构师 张艳红 2021-02-17
京东 算法工程师 王强东 2021-02-18

本案例也可适用于批量生产固定格式的word,如工资条,通知单等,面对这种相似且重复的任务,python的自动化运行能大幅提升当前的工作效率。

python自动化word操作相关推荐

  1. 〖Python自动化办公篇⑥〗- word文件自动化 - word操作与读取word文件

    说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取 ...

  2. python自动化生成请假条

    利用python自动化word操作: 生成一个请假条: 要求:制作一个自动生成请假条的word文档程序: 要有标题 : 正文部分通过输入姓名.请假原因.请假天数就能生成请假条. 自动填入当天日期. 自 ...

  3. 如何用python实现自动化办公_python自动化办公操作PPT的实现

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍.这里提前做一个说明:python操作PPT,最好是我们提前设计 ...

  4. Python自动化与Word

    Python自动化与Word 在Python中可以使用 python-docx 库进行word文档的相关处理,使用pip install python-docx进行安装. 1.Python-docx相 ...

  5. python 手机自动化操作_Python自动化办公之word操作

    Python自动化办公之word操作,主要是用到python-docx库,针对word操作,对大批量重复性工作,使用python可以节省大量的时间和经历 python-docx word文档中的文字有 ...

  6. Python自动化办公:word文件操作教程

    在后台回复[阅读书籍] 即可获取python相关电子书~ Hi,我是山月. 之前给大家完整的介绍了用python操作excel的几个库:xlrd.xlwt.openpyxl. 山月也已经整理好了,还没 ...

  7. Task 03 python自动化之word操作

    1.课前准备 """学习路径均来源于DataWhale"" python 处理 Word 需要用到 python-docx 库,终端执行如下安装命令: ...

  8. task03:python自动化之word操作

    python自动化之word操作 文章目录 python自动化之word操作 一.课前准备 二.知识要点 1.预热:初步认识docx (1)新建空白word并插入文字 2. 正式:python自动化之 ...

  9. 自动化办公-3.python自动化之word操作

    一.课前准备 python 处理 Word 需要用到 python-docx 库,终端执行如下安装命令: pip3 install python-docx 备注:可能word用的少,这块并没认真,但是 ...

最新文章

  1. 参观 Google 总部是一种什么体验?
  2. 分析思维导图与绘制思维导图方法介绍
  3. 【Linux】【Basis】文件系统
  4. ES6中的Promise使用方法与总结
  5. Hive的相关面试问题
  6. form子句语法错误_用示例语法解释SQL的子句
  7. oc51--循环retain
  8. 许志安刘强东倪震:结构性中年危机下的男人们
  9. 让版面充满空间感的海报PSD分层模板,你一定要看看!
  10. 微软超融合私有云测试02-测试架构描述
  11. 史上最强三千六百道脑筋急转弯(4)
  12. vue项目使用SockJS插件实现webSocket通信
  13. 苹果说全是假的,市面不存在原装贴膜
  14. 被华策、欢瑞等甩下,唐人影视往日荣光已成回忆?
  15. 电商搜索里都有啥?详解闲鱼搜索系统(长文)
  16. KMP(字符串匹配)+字符串哈希
  17. unity打开设置虚拟键的界面
  18. 情感分析(判断文章正负向)
  19. 从SUMSUNG闪存芯片编号识容量
  20. 路由器WAN网口可接入192.168.0.1管理无线密码

热门文章

  1. kd-tree实现KNN
  2. 送30本曹大的《你凭什么做好互联网》
  3. python数据分析期末_Python数据分析期末作业
  4. 百度编辑器上传视频以及视频编辑器预览bug解决
  5. Mac Docker Desktop “Mounts denied: EOF.“解决方法
  6. 【安卓笔记】如何设置模拟器的IP
  7. Python问题:FileNotFoundError: [WinError 2] 系统找不到指定的文件。(已解决)
  8. CacheCloud的入门运用与实战
  9. 计算机管理器里的WiFi不见了,电脑wifi图标不见了也连不上网
  10. U盘为什么需要安全删除才能拔出呢?