Python办公自动化--Excel到Word文档的展示

大家好,我是笙笙。

初来乍到,今天来给大家介绍一下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')

效果如下:

好啦,本期就分享到这里!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值