应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

python操作word,自动化办公

10056人阅读 2020/8/7 15:01 总访问:5194521 评论:2 收藏:0 手机
分类: Python

安装依赖:

  1. pip install requests
  2. pip install python-docx
  3. pip install fake-useragent


说一下使用的版本:
requests:2.28.1
python-docx:0.8.11
fake-useragent:0.1.11

简单的写入一点内容:

  1. import docx
  2. file=docx.Document() #创建内存中的word文档对象
  3. file.add_paragraph("窗前明月光") #写入若干段落
  4. file.add_paragraph("疑是地上霜")
  5. file.add_paragraph("举头望明月")
  6. file.add_paragraph("低头思故乡")
  7. file.save("E:\静夜思.docx") #保存才能看到结果

添加的时候可以写入样式,表格等:

  1. #插入有序列表,段落的前面会有序号123
  2. doc2.add_paragraph('把冰箱门打开',style='List Number')
  3. doc2.add_paragraph('把大象装进去',style='List Number')
  4. doc2.add_paragraph('把冰箱门关上',style='List Number')
  5. #插入无序列表,段落的前面没有序号
  6. doc2.add_paragraph('AA',style='List Bullet')
  7. doc2.add_paragraph('BB',style='List Bullet')
  8. doc2.add_paragraph('CC',style='List Bullet')
  9. #插入一个6行6列的表格
  10. table=doc2.add_table(rows=6,cols=6,style='Table Grid')
  11. for i in range(0,6):
  12.   for j in range(0,6):
  13.     table.cell(i,j).text="第{i}行{j}列".format(i=i+1,j=j+1)
  14. #插入照片
  15. doc2.add_picture('FLAMING MOUNTAIN.JPG',width=docx.shared.Inches(5))

添加段落的样式有这么多可以选择的,具体的效果大家可以试试:

  1. Normal
  2. Body Text
  3. Body Text 2
  4. Body Text 3
  5. Caption
  6. Heading 1
  7. Heading 2
  8. Heading 3
  9. Heading 4
  10. Heading 5
  11. Heading 6
  12. Heading 7
  13. Heading 8
  14. Heading 9
  15. Intense Quote
  16. List
  17. List 2
  18. List 3
  19. List Bullet
  20. List Bullet 2
  21. List Bullet 3
  22. List Continue
  23. List Continue 2
  24. List Continue 3
  25. List Number
  26. List Number 2
  27. List Number 3
  28. List Paragraph
  29. Macro Text
  30. No Spacing
  31. Quote
  32. Subtitle
  33. TOCHeading
  34. Title

段落样式,表格样式等官方文档:
https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html

设置页眉

  1. file=docx.Document() #创建内存中的word文档对象
  2. head=file.sections[0].header
  3. head.paragraphs[0].text="Left Text\tCenter Text\tRight Text"
  4. head.paragraphs[0].style =file.styles["Header"]
  5. head.is_linked_to_previous=False

设置页眉的距离

有些毕业论文或者公文之类的,会有要求页眉距文本顶端的距离是多少多少,所以也写一下,怎么设置页眉距离

  1. doc = Document('1.docx')
  2. doc.sections[0].header_distance = Cm(10)
  3. doc.save('1.docx')

设置奇偶数页页眉

  1. doc = Document('1.docx')
  2. doc.settings.odd_and_even_pages_header_footer = True
  3. doc.sections[0].even_page_header.paragraphs[0].text = "这是偶数页页眉"
  4. doc.sections[0].header.paragraphs[0].text = "这是奇数页页眉"
  5. doc.save('1.docx')

设置页眉的方向

先引入对应的内容

  1. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT #引入-设置对其方式

然后在设置

  1. head.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT#靠右
  2. head.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#居中

页脚的设置基本是一样的,看看这样的

  1. footer = document.sections[0].footer # 获取第一个节的页脚
  2. paragraph = footer.paragraphs[0] # 获取页脚的第一个段落
  3. paragraph.add_run('')#添加内容
  4. paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#居中

设置页眉的官方文档:
https://python-docx.readthedocs.io/en/latest/user/hdrftr.html

设置字体样式(字体与大小)

  1. from docx.shared import Pt
  2. file=docx.Document() #创建内存中的word文档对象
  3. #设置字体样式(字体大小与)
  4. mystyle = file.styles["Header"]
  5. font = mystyle.font
  6. font.size = Pt(10.5)
  7. font.name = '宋体'
  8. head.paragraphs[0].style = mystyle

其中字号与数字的对应如下:

初号=42磅 小初=36磅 一号=26磅 小一=24磅?二号=22磅 小二=18磅 三号=16磅 小三=15磅?四号=14磅 小四=12磅 五号=10.5磅 小五=9磅?六号=7.5磅 小六=6.5磅 七号=5.5磅 八号=5磅?

注意设置中文字体的时候直接是不行的

需要使用如下的写法,两个一起用

  1. #这里需要引入一个qn
  2. from docx.oxml.ns import qn
  3. mystyle = file.styles["Normal"]
  4. font = mystyle.font
  5. font.size = Pt(10.5)
  6. font.name = u'宋体'
  7. font._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
  8. head.paragraphs[0].style = mystyle

当然如果想全局设置字体的话可以这样做

  1. from docx.oxml.ns import qn
  2. document.styles['Normal'].font.name = u'宋体'
  3. document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

docx内置的样式都可以通过document.styles取到。
正文是Normal, 标题样式根据标题声明的基本,分别从Heading 1 到Heading 9, 另外还有table、list等各种word对应的样式。可以通过遍历document.styles查看。

标题与字体

  1. # 导入库
  2. from docx import Document
  3. from docx.shared import Pt
  4. from docx.shared import Inches
  5. from docx.oxml.ns import qn
  6. from docx.shared import RGBColor
  7. # 新建空白文档
  8. doc1 = Document()
  9. # 新增文档标题
  10. doc1.add_heading('如何使用 Python 创建 Word',0)
  11. # 创建段落描述
  12. doc1.add_paragraph('我们平时使用 Word 用来做文章的处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')
  13. # 创建一级标题
  14. doc1.add_heading('安装 python-docx 库',1)
  15. # 创建段落描述
  16. doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')
  17. # 创建二级标题
  18. doc1.add_heading('第一步:安装 Python',2)
  19. # 创建段落,添加文档内容
  20. paragraph = doc1.add_paragraph('这是第一步的安装描述!')
  21. # 段落中增加文字,并设置字体字号
  22. run = paragraph.add_run('(注意:这里设置了字号为20)')
  23. run.font.size = Pt(20)
  24. # 设置英文字体
  25. run = doc1.add_paragraph('这里设置英文字体:').add_run('This Font is Times New Roman ')
  26. run.font.name = 'Times New Roman'
  27. # 设置中文字体
  28. run = doc1.add_paragraph('这里设置中文字体:').add_run('当前字体为黑体')
  29. run.font.name='黑体'
  30. r = run._element
  31. r.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
  32. # 设置斜体
  33. run = doc1.add_paragraph('这段设置:').add_run('文字的是斜体 ')
  34. run.italic = True
  35. # 设置粗体
  36. run = doc1.add_paragraph('这段再设置:').add_run('这里设置粗体').bold = True
  37. # 设置字体带下划线
  38. run = doc1.add_paragraph('这段为下划线:').add_run('这里设置带下划线').underline = True
  39. # 设置字体颜色
  40. run = doc1.add_paragraph('这段字体为红色:').add_run('这里设置字体为红色')
  41. run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
  42. # 增加引用
  43. doc1.add_paragraph('axj', style='Intense Quote')
  44. # 保存文件
  45. doc1.save('myword.docx')

官方文档:
https://python-docx.readthedocs.io/en/latest/user/styles-using.html

设置段落行高与对齐方式等

对齐方式修改

  1. from docx.enum.text import WD_ALIGN_PARAGRAPH
  2. paragraph.alignment=WD_ALIGN_PARAGRAPH.CENTER # 居中对齐

paragraph.alignment=对齐方式,可选的对齐方式:LEFT、CENTER、RIGHT、JUSTIFY、DISTRIBUTE、JUSTIFY_MED、JUSTIFY_HI、JUSTIFY_LOW、THAI_JUSTIFY,具体的效果自己尝试

行间距设置

  1. paragraph.paragraph_format.line_spacing=2.0 # 修改行间距

使用paragraph.paragraph_format.line_spacing=2.0的方法,修改行间距,使用浮点数,2.0就表示两倍行间距!

修改段落间距

  1. paragraph.paragraph_format.space_before=Pt(12)
  2. paragraph.paragraph_format.space_after=Pt(10)

修改段前和段后间距,使用以上代码。Pt(12)表示12磅

注意设置了行间距后要把:在相同样式的段落间不添加空格勾勾去掉才能起作用,不然会有问题的


设置样式这些还没有玩得很转,不然配合python强大的爬虫能力真的可以减少好多工作量


其他的可以参考一下官方文档

https://python-docx.readthedocs.io/en/latest/


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

雨雨雨雨辰

2020/8/7 17:12:59

[good]

2020/8/7 17:18:19 回复

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:['tom',‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---> https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s="<div>jsdlfjsl</div>" #html编...