利用Python-docx和pandas将Excel表格内容输出到Word文档

一、背景介绍

拿到一份名为‘品牌方案.xlsx’的Excel文档,现在想按照标题和内容依次填入Word文档,方便查看。

二、操作逻辑和使用工具

1、操作逻辑

Excel中已经整理好了各类信息,输出的内容想要按照以下顺序输出,让文章更加清晰。

①品牌

②关键词总结

③slogan

④使命、愿景

⑤推广方法

其中注意:

  • 品牌名称、关键词总结、使命愿景和推广方法等,应该分别属于不同的样式,方便后续统一调整。
  • 在Excel表格中,B、C两列中,是有空值的。
  • Word文档不仅仅只有Excel里的文字内容,如D一列,输出到Word文档之后,前面加上了“关键词总结:”字样。

2、使用工具

Excel、Word、Python(pandas、python-docx)

Pandas 是一种基于 NumPy 的 Python 库,主要用于数据分析、数据清洗、数据处理和数据可视化等。它提供了数据结构,如 Series(一维数组)和 DataFrame(二维表格),可以方便地处理数据。Pandas 可以从各种数据源导入数据,例如 CSV 文件、Excel 表格、数据库等,并支持数据清洗、数据转换、数据筛选、数据分组、数据合并等操作。此外,Pandas 还提供了强大的数据可视化功能,可以绘制直方图、折线图、散点图等图形,方便用户快速分析数据。

python中的docx模块是专门用来处理Microsoft Word文档的模块。它可以用来读取、编辑和创建Word文档,具体包括以下功能:

1.创建新的Word文档。

2.在现有的Word文档中添加文本、表格、图像和其他元素。

3.使用样式来格式化文本和段落。

4.编辑和修改现有的Word文档。

5.读取Word文档并提取其中的文本、表格、图像和其他元素。

6.将Word文档转换为其他格式,如PDF或HTML。

7.批量处理Word文档,如批量替换特定的文本或批量生成相似的文档。

三、具体操作

1、安装相关库

这种方法需要安装python-docx库,在电脑搜索栏输入cmd唤出命令提示符栏,复制粘贴输入

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx

点击回车等待安装完成。

2、输入代码

我使用的是Anaconda工具来写代码。

首先导入要使用的库。

import pandas as pd
from docx import Document

先将excel表格输入python当中:

brands = pd.read_excel('品牌方案.xlsx')

 检查一下表格中的文本类型:

brands.info()

运行之后发现,数据都是object类型,符合我们的要求。

有一些表格导入之后,一些只含有数字的列可能会变成其他类型,需要按使用需要进行转换。

首先建立一个空的Document,命名为demo。

demo = Document()

这时我们可以把demo看成是一个空白的word文档,接下来我们需要提取出Excel表格中的信息,也就是之前定义的brands中的内容,并且依次填入demo中。

我们可以先利用for循环依次访问brands中的内容,循环次数就是brands的长度。

for i in range(len(brands)):

检查一下这时候的变量i输出的是什么内容:

可以把输出的内容看作是多个字典,变量i每遍历一次,得到的内容是一个品牌的slogan、使命、推广方法等内容 ,但是我们需要的只是字典里的值,不需要键,把代码改成以下内容,那输出的就只有每个品牌名称。

demo = Document()
for i in range(len(brands)):
    print(brands.iloc[i]['品牌名称'])

对于其他列的内容,也可以按照同样的方法提取,只要把 ‘品牌名称’改成需要的列的标题,就能够得到相应列的内容。

假设品牌名称是用标题1样式,slogan\使命\愿景和价值主张等都是各自使用标题2样式,推广方法使用正文样式。

我们提取出以上的类容之后,需要将内容输入到demo(word)文档当中,利用docx模块来输入:

demo = Document()
for i in range(len(brands)):
    demo.add_heading(brands.iloc[i]['品牌名称'],level=1)

这次用到了docx中的add_heading()语句,也就是添加一个标题,用法如下(解释不完全,只解释了这次用到的参数,文章中的解释受个人阅历限制)

name.add_heading('words',level=1)
#name指的是创建的Document的名称
#words是要添加的内容
#level=1指的是添加的内容为一级标题样式

如果想添加的文字不是标题样式,而是正文样式的话,可以使用add_paragraph()语句,用法如下

name.add_paragraph('words')
#name指的是预先生成的Document文档
#words指的是想要添加的段落内容(正文内容),如果为空,则生成一个空的段落

我们参照想要生成的word文档的内容顺序,和各个内容所对应的格式依次填入:

demo = Document()
for i in range(len(brands)):
    demo.add_heading(brands.iloc[i]['品牌名称'],level=1)
    demo.add_heading(f'关键词总结:{brands.iloc[i]["品牌价值主张"]}',level=2)
    if pd.notnull(brands.iloc[i]['slogan']):
        demo.add_heading(f'slogan:{brands.iloc[i]["slogan"]}',level=3)
    if pd.notnull(brands.iloc[i]['使命、愿景']):
        demo.add_heading(f'使命、愿景:{brands.iloc[i]["使命、愿景"]}',level=3)
    demo.add_paragraph()
    demo.add_paragraph(brands.iloc[i]['推广方法'])

前面提到,Word文档不仅仅只有Excel里的文字内容,如D一列,输出到Word文档之后,前面加上了“关键词总结:”字样。

所以在这里,我们填入的内容应该用f前缀来格式化字符串,在i遍历时,把不同的内容加上一个同样的前缀填入word文档当中,注意此时要把键名的单引号 ' ' 改成双引号 " ",否则会跟f前缀起冲突

同时,在Excel表格中,B、C两列中,是有空值的。在填入内容之前,应该对这两列进行非空值判断,使用pd.notnull()语句。

pd.notnull()是pandas库中的一个函数,用于判断一个元素是否为空(NaN或None)。它的语法如下:

pd.notnull(obj)

其中,obj可以是一个DataFrame、Series、Panel或者任何可以进行索引的对象。它返回一个布尔值,表示每个元素是否为空。如果元素不为空,则返回True,否则返回False。

最后保存文档,将demo文档命名为“方案.docx”(要加上文件后缀),即可完成,默认保存在python文档的同目录下。

demo.save('方案.docx')

其实发现,最终生成的文档还是有些不美观的,这是因为默认的标题和正文样式中的字体不太匹配,我们可以通过打开生成的word文档,再手动对各个样式进行调整。

四、总结

该方法适用于需要将excel表格中的大量内容转到word文档中,但是仅仅靠代码不能完美地完成目标,需要将excel、python和word结合起来使用。同时,excel中的内容越有序整齐、word的排版、格式需求越简单,则该方法的效率越高,需要按实际情况使用。

完整代码如下:

import pandas as pd
from docx import Document
brands = pd.read_excel('品牌方案.xlsx')
demo = Document()
for i in range(len(brands)):
    demo.add_heading(brands.iloc[i]['品牌名称'],level=1)
    demo.add_heading(f'关键词总结:{brands.iloc[i]["品牌价值主张"]}',level=2)
    if pd.notnull(brands.iloc[i]['slogan']):
        demo.add_heading(f'slogan:{brands.iloc[i]["slogan"]}',level=3)
    if pd.notnull(brands.iloc[i]['使命、愿景']):
        demo.add_heading(f'使命、愿景:{brands.iloc[i]["使命、愿景"]}',level=3)
    demo.add_paragraph()
    demo.add_paragraph(brands.iloc[i]['推广方法'])
demo.save('方案.docx')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值