社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

效率成倍提升!使用 Python 来处理 Word\/Excel 文档

一只技术宅 • 5 年前 • 1687 次点击  



这是 Python 小专栏的第 ⑤ 期


在大家日常工作和学习中,Word Excel 文档是经常打交道的。Python 中有很多库提供了对文档和表格的操作处理功能,借助这些库,可以轻松实现文档表格的生成和修改


想象这样的场景:从公司系统中导出的 Excel 数据,要填到 Word 文档中做成报告的形式。如果每天都要这样做,人工去复制各个数据不仅麻烦低效,也很容易出错。借助 Python,只需很少的代码,就能轻松实现这些操作。


今天给大家介绍几个非常实用的 Word 和 Excel 处理的库。篇幅限制,不会对每个库都详细讲解,大家可以搜索库的名字,找到相关的博客文章,但更建议熟悉英文阅读的小伙伴参考给出的官方文档来学习使用。




python-docx


文档地址:http://python-docx.readthedocs.io/en/latest/


这是一个用来生成和修改 Word 文档的库,你可以添加标题、段落、图片、表格,设置格式。


例如官方示例中,通过下面的代码,你就能生成一份如图所示的 Word 文档:

from docx import Documentfrom docx.shared import Inches

document = Document()

document.add_heading('Document Title', 0)

p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = Truep.add_run(' and some ')
p.add_run('italic.').italic = Truedocument.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')

document.add_paragraph(    'first item in unordered list', style='ListBullet')
document.add_paragraph(    'first item in ordered list', style='ListNumber')

document.add_picture('monty-truth.png', width=Inches(1.25))

table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'hdr_cells[1].text = 'Id'hdr_cells[2].text = 'Desc'for item in recordset:
    row_cells = table.add_row().cells
    row_cells[0].text = str(item.qty)
    row_cells[1].text = str(item.id)
    row_cells[2].text = item.desc

document.add_page_break()

document.save('demo.docx')
# 代码来源:官方文档

生成的文档效果:




python-docx-template


文档地址:http://docxtpl.readthedocs.io/en/latest/


这也是操作 Word 文档的库,而且是在上一个 python-docx 的基础之上开发的。主要原因是作者觉得 python-docx 库在生成 Word 文档方面很强大,但是在批量查找替换方面做的不够好。


这个库的 Python 包名叫 docxtpl,借助它,你可以在 Word 文档中使用 jinja2 的模板语法来准备一份 Word 模板,然后在 Python 中传入相关参数就能实现查找替换,批量生成 Word 文档。(熟悉前端开发的小伙伴大概都知道网页的模板引擎,jinja2 是 Python web 开发中广泛使用的一种模板引擎。具体语法请自行搜索)


例如,在 Word 中,可以写这样一段内容:


然后使用 docxtpl 写这段代码:

from docxtpl import DocxTemplate

doc = DocxTemplate("my_word_template.docx")
context = { 'hello' : "今天天气真好" }
doc.render(context)
doc.save("generated_doc.docx")

就能生成下图的 Word 文档。其中 {{hello}} 的位置,替换成了 hello 参数的值。而 你好 这两个字,由于参数中没有 today,不符合 if 的判断条件,就不会输出。



借助 docxtpl,你可以在一份预先排好版的 Word 模板中,预留一些标签占位,然后使用实际数据 render 一下这份模板,就能把数据填进去了。




xlrd, xlwt,xlutils


文档地址:

http://xlrd.readthedocs.io/en/latest/

http://xlwt.readthedocs.io/en/latest/

http://xlutils.readthedocs.io/en/latest/


主要用来处理 Excel 文档的几个库, xlrd 用来读, xlwt 用来写, xlutils 用于做复制、筛选等针对文档文件的操作。


代码示例:


import xlrdimport xlwtimport xlutils# xlrdworkbook = xlrd.open_workbook('myexcel.xls')

worksheet = workbook.sheet_by_index(0)

data = worksheet.cell_value(0,0)# xlwtwb = xlwt.Workbook()

sh = wb.add_sheet('Sheet1')

sh.write(0,0,'data')

wb.save('myexcel.xls')# xlutilsbook = xlrd.open_workbook('myexcel.xls')

new_book = xlutils.copy(book)

worksheet = new_book.getsheet(0)

worksheet.write(0,0,'new data')

new_book.save()# 代码来源:https://www.jianshu.com/p/be1ed0c5218e


通常 Excel 是一张二维表格的形式,通过行号和列号来找到每一个单元格,Python 库中对 Excel 的操作也是如此,指定行号和列号就能定位到一个单元格,可以在这里读取或写入数据,甚至设定格式等。




应用场景


应用场景很广泛,主要适合工作中的报表自动化等环节。例如文章开头提到的场景中,你可以将每天要做的 Word 报告,使用 docxtpl 做成模板,各个位置用 {{var}} 设置好占位符。然后每天拿到 Excel 表格,可以使用 xl** 相关包把数据读取出来,然后自动替换到 Word 模板中。开发这套流程需要一点时间,但一旦做成,生成一份报表只要几秒钟。




相关链接


Python 小专栏已经写了好几期了,之前的内容可以点击下面链接回顾:


① 安装配置环境

② Python 自学教程

③ 来自 Google 的机器学习教程

④ 领取 Python 学习视频(推荐)






快来领 Python 精品学习资料

微信收藏,也可以当云笔记来用

这款百度搜索竟然没广告?

手机阅读,不妨试试微信读书

来自 Google 的机器学习教程

来领 PPT 神器 iSlide 一个月会员

各类学习资料合集限时免费








今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/SdEkywXNgq
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/13894
 
1687 次点击