大家好,我是笙笙。
初来乍到,今天来给大家介绍一下python操作word的一个常用库:python-docx。并给出一个从Excel到Word文档的应用案例。
安装:pip install python-docx
参考自官网:https://python-docx.readthedocs.io/en/latest/
一、基础知识简介
1.新建文档
document = Document()
document.save('test.docx') # 保存文档
2、添加标题
document.add_heading('笙笙学数分')
默认情况下,这会添加一个顶级标题,在 Word 中显示为 "标题 1"。
如果您想为某个小节添加标题,只需用 1 到 9 之间的整数指定
document.add_heading('学习目标', level=1)
3、添加段落
paragraph = document.add_paragraph('成为一名优秀的数据分析师')
也可以使用一个段落作为 "光标",然后在其正上方插入一个新段落
prior_paragraph = paragraph.insert_paragraph_before('笙笙努力')
4、添加表格
document.add_heading('学习路线', level=1) #添加标题
table = document.add_table(rows=2, cols=2)
可以通过单元格的行和列指示来访问单元格
cell = table.cell(0, 0) # 第0行第0列
cell.text = '学习内容'
cell = table.cell(0, 1) # 第0行第1列
cell.text = '时间安排'
cell = table.cell(1, 0) # 第1行第0列
cell.text = 'SQL'
cell = table.cell(1, 1) # 第1行第1列
cell.text = '3days'
cell = table.cell(2, 0) # 第2行第0列
cell.text = 'Python'
cell = table.cell(2, 1) # 第2行第1列
cell.text = '3days'
Word 有一套预格式化的表格样式,你可以从表格样式库中挑选。比如像这样将其中一种应用到表格中:
table.style = 'LightShading-Accent1'
5、添加图片
document.add_heading('学习口号', level=1) # 添加标题
document.add_picture('logo.jpg')
Word 允许您使用 "插入">"照片">"来自文件的图片... "菜单项在文档中插入图片。下面是在 python-docx 中的操作方法:
document.add_picture('logo.jpg')
默认情况下,添加的图像以原始尺寸显示。这通常比你想要的要大。原生尺寸以像素/dpi 计算。因此,分辨率为 300 dpi 的 300x300 像素图像会显示在一英寸的正方形中。问题是大多数图像都不包含 dpi 属性,默认为 72 dpi。这将使同一图像显示在 4.167 英寸的边上,约占半个页面。
要获得所需的图像尺寸,可以用方便的单位(如英寸或厘米)指定宽度或高度:
from docx.shared import Inches
document.add_picture('logo.jpg', width=Inches(1.0))
6、应用段落样式
你可以在创建段落时应用段落样式:
document.add_paragraph('这里简要介绍了如何用python操作word,详细内容可参考官方文档。', style='ListBullet')
这种特殊的样式会使段落显示为一个子弹头,非常方便。您还可以在之后应用样式。这两行相当于上面的一行:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,详细内容可参考官方文档。')
paragraph.style = 'List Bullet'
7、应用粗体和斜体
run对象具有 .bold 和 .italic 属性,可以为运行设置它们的值:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,')
run = paragraph.add_run('详细内容')
run.bold = True
paragraph.add_run(' 可参考官方文档。')
无需为 .add_paragraph() 方法提供文本。如果您是在运行过程中创建段落,这样可以简化代码:
paragraph = document.add_paragraph()
paragraph.add_run('这里简要介绍了如何用python操作word, ')
paragraph.add_run('详细内容').bold = True
paragraph.add_run('可参考官方文档。')
8、应用字符样式
除了指定一组段落级设置的段落样式外,Word 还有指定一组运行级设置的字符样式。一般来说,可以将字符样式视为指定一种字体,包括字体的字样、大小、颜色、粗体、斜体等。 与段落样式一样,字符样式必须已在使用 Document() 调用打开的文档中定义。添加新运行时可指定字符样式:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,')
paragraph.add_run('详细内容可参考官方文档。', 'Emphasis')
您也可以在创建运行后对其应用样式。这段代码产生的结果与上面几行相同:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,')
run = paragraph.add_run('详细内容可参考官方文档。')
run.style = 'Emphasis'
9、添加分页符
document.add_page_break()
document.add_paragraph('这里简要介绍了如何用python操作word,详细内容可参考官方文档。', style='ListBullet')
10、效果
完整代码如下:
from docx import Document
from docx.shared import Inches
# 新建文档
document = Document()
# 添加标题
document.add_heading('笙笙学数分')
# 默认情况下,这会添加一个顶级标题,在 Word 中显示为 "标题 1"。
# 如果您想为某个小节添加标题,只需用 1 到 9 之间的整数指定
document.add_heading('学习目标', level=1)
# 添加段落
paragraph = document.add_paragraph('成为一名优秀的数据分析师')
# 也可以使用一个段落作为 "光标",然后在其正上方插入一个新段落
prior_paragraph = paragraph.insert_paragraph_before('笙笙努力')
document.add_heading('学习路线', level=1)
# 添加表格
table = document.add_table(rows=3, cols=3)
# 首先,可以通过单元格的行和列指示来访问单元格:
cell = table.cell(0, 0) # 第0行第0列
cell.text = '学习内容'
cell = table.cell(0, 1) # 第0行第1列
cell.text = '时间安排'
cell = table.cell(1, 0) # 第1行第0列
cell.text = 'SQL'
cell = table.cell(1, 1) # 第1行第1列
cell.text = '3days'
cell = table.cell(2, 0) # 第2行第0列
cell.text = 'Python'
cell = table.cell(2, 1) # 第2行第1列
cell.text = '3days'
# Word 有一套预格式化的表格样式,你可以从表格样式库中挑选。你可以像这样将其中一种应用到表格中:
table.style = 'LightShading-Accent1'
document.add_heading('学习口号', level=1)
# 添加图片
# Word 允许您使用 "插入">"照片">"来自文件的图片... "菜单项在文档中插入图片。下面是在 python-docx 中的操作方法:
document.add_picture('logo.jpg')
# 图像大小
from docx.shared import Inches
document.add_picture('logo.jpg', width=Inches(1.0))
# 应用段落样式
# 你可以在创建段落时应用段落样式:
document.add_paragraph('这里简要介绍了如何用python操作word,详细内容可参考官方文档。', style='ListBullet')
# 这种特殊的样式会使段落显示为一个子弹头,非常方便。您还可以在之后应用样式。这两行相当于上面的一行:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,详细内容可参考官方文档。')
paragraph.style = 'List Bullet'
# 应用粗体和斜体
# run对象具有 .bold 和 .italic 属性,可以为运行设置它们的值:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,')
run = paragraph.add_run('详细内容')
run.bold = True
paragraph.add_run(' 可参考官方文档。')
# 无需为 .add_paragraph() 方法提供文本。如果您是在运行过程中创建段落,这样可以简化代码:
paragraph = document.add_paragraph()
paragraph.add_run('这里简要介绍了如何用python操作word, ')
paragraph.add_run('详细内容').bold = True
paragraph.add_run('可参考官方文档。')
# 应用字符样式
# 添加新运行时可指定字符样式:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,')
paragraph.add_run('详细内容可参考官方文档。', 'Emphasis')
# 您也可以在创建运行后对其应用样式。这段代码产生的结果与上面几行相同:
paragraph = document.add_paragraph('这里简要介绍了如何用python操作word,')
run = paragraph.add_run('详细内容可参考官方文档。')
run.style = 'Emphasis'
# 添加分页符
document.add_page_break()
document.add_paragraph('这里简要介绍了如何用python操作word,详细内容可参考官方文档。', style='ListBullet')
# 保存文档
document.save('test.docx')
二、办公自动化--Excel到Word文档的展示
Excel表格内容如下所示,目的是将Excel里的内容转化到Word里。
首先,将Excel里的某一行内容转化到Word里。代码如下:
from docx import Document
document = Document()
document.add_heading('小熊', level=1)
document.add_heading('这样自拍太有氛围感了!艾特你闺蜜拍起来#摄影技巧 #手机拍摄技巧 #人像摄影 #自拍技巧 #手机自拍', level=2)
document.add_paragraph('你是不是还在这样自拍,这样自拍出来的照片永远只有一张大脸,再好看的风景,你也拍不到啊。而且这样拍脸容易变形。今天我就教你们正确的自拍方式啊,开工,我们把手机放在垃圾桶上面,用矿泉水瓶来固定手机,用这个蓝牙遥控器控制手机拍摄就可以了。')
document.save('demo.docx')
效果如下:
其次,将Excel里的所有行内容转化到Word里。代码如下:
import pandas as pd
from docx import Document
document = Document()
speech_text = pd.read_excel('speech_text.xlsx')
for i in range(len(speech_text)):
# print(speech_text.iloc[i]['品牌'])
document.add_heading(speech_text.iloc[i]['品牌'], level=1)
document.add_heading(speech_text.iloc[i]['视频标题'], level=2)
document.add_paragraph(speech_text.iloc[i]['视频文案'])
document.save('demo.docx')
效果如下:
最后,我们发现可以将Word内容进一步优化,也就是可以将同一个“品牌”的内容放到一起,并把“VideoID”和“视频时长”也提取出来。代码如下:
import pandas as pd
from docx import Document
document = Document()
speech_text = pd.read_excel('speech_text.xlsx')
for i in range(len(speech_text)):
if speech_text.iloc[i]['品牌'] != speech_text.iloc[i-1]['品牌'] or i == 0:
document.add_heading(speech_text.iloc[i]['品牌'], level=1)
document.add_heading(speech_text.iloc[i]['视频标题'], level=2)
document.add_paragraph(f"视频ID:{speech_text.iloc[i]['VideoID'].astype('str')}")
document.add_paragraph(f"视频时长:{speech_text.iloc[i]['视频时长'].astype('str')}ms")
document.add_paragraph(speech_text.iloc[i]['视频文案'])
document.save('demo.docx')
效果如下:
好啦,本期就分享到这里!