得益于前人的辛勤劳做,Python 处理 Excel 已有不少现成的轮子,使用较多的有:python
http:// docs.xlwings.org/en/sta ble/编程
https:// openpyxl.readthedocs.io /en/latest/windows
http:// pythonexcels.com/python -excel-mini-cookbook/微信
https:// xlsxwriter.readthedocs.io /app
https:// pypi.python.org/pypi/xl utils/学习
上次咱们介绍了下xlutils,很多读者留言表示有比它更好使的模块,因而咱们又把另外几个都体验了一遍。测试
本文将从运行环境、文档操做、基本功能和性能等方面对以上模块进行一次粗浅的比较,供你们参考。ui
再好的模块,也须要在正确的 Python 版本以及 Excel 版本才可运行。
提醒及注意:
虽然你们都是操做 Excel,但即便最基本的新建文件、修改文件、保存文件等功能,在不一样的库中也存在差别。好比 xlsxwriter 并不支持打开或修改现有文件,xlwings 不支持对新建文件的命名,DataNitro 做为 Excel 插件需依托于软件自己,pandas 新建文档须要依赖其余库等等。
因为设计目的不一样,每一个模块一般着重于某一方面功能,各有所长。
xlwings
可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工做。
openpyxl
简单易用,功能普遍,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。
pandas
数据处理是 pandas 的立身之本,Excel 做为 pandas 输入/输出数据的容器。
win32com
从命名上就能够看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操做。须要注意的是,该库不单独存在,可经过安装 pypiwin32 或者 pywin32 获取。
xlsxwriter
拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl类似,优势是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 须要从零开始。
DataNitro
做为插件内嵌到 Excel 中,可彻底替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,协同其余 python 库亦是小事一桩。然而,这是付费插件...
xlutils
基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特色中规中矩,比较大的缺点是仅支持 xls 文件。
咱们对几个库作了最基本的写入和读取测试,分别使用不一样库进行添加及读取 1000行 * 700列 数据操做,获得所用时间,重复操做取平均值。另外在不一样的电脑配置,不一样的环境下结果确定会有出入,数据仅供参考。
注:
经过以上的分析,相信你们对几个库都有了简单的了解。在编写文章的过程当中,笔者也在思考各个库最适合的应用场景。
你可根据本身的需求和生产环境,选择合适的 Python-Excel 模块。
最后,附上一些演示代码,你们可自行体会下不一样模块的使用。
6.1 xlwings基本代码
import xlwings as xw #链接到excel workbook = xw.Book(r'path/myexcel.xlsx')#链接excel文件 #链接到指定单元格 data_range = workbook.sheets('Sheet1').range('A1') #写入数据 data_range.value = [1,2,3] #保存 workbook.save()
6.2 xlsxwriter基本代码
import xlsxwriter as xw #新建excel workbook = xw.Workbook('myexcel.xlsx') #新建工做薄 worksheet = workbook.add_worksheet() #写入数据 worksheet.wirte('A1',1) #关闭保存 workbook.close()
6.3 xlutils基本代码import xlrd #读取数据
import xlwt #写入数据 import xlutils #操做excel #----xlrd库 #打开excel文件 workbook = xlrd.open_workbook('myexcel.xls') #获取表单 worksheet = workbook.sheet_by_index(0) #读取数据 data = worksheet.cell_value(0,0) #----xlwt库 #新建excel wb = xlwt.Workbook() #添加工做薄 sh = wb.add_sheet('Sheet1') #写入数据 sh.write(0,0,'data') #保存文件 wb.save('myexcel.xls') #----xlutils库 #打开excel文件 book = xlrd.open_workbook('myexcel.xls') #复制一份 new_book = xlutils.copy(book) #拿到工做薄 worksheet = new_book.getsheet(0) #写入数据 worksheet.write(0,0,'new data') #保存 new_book.save()
6.4 win32com基本代码
import win32com.client as wc #启动Excel应用 excel_app = wc.Dispatch('Excel.Application') #链接excel workbook = excel_app.Workbooks.Open(r'e:/myexcel.xlsx' ) #写入数据 workbook.Worksheets('Sheet1').Cells(1,1).Value = 'data' #关闭并保存 workbook.SaveAs('newexcel.xlsx') excel_app.Application.Quit()
6.5 openpyxl基本代码
import openpyxl # 新建文件 workbook = openpyxl.Workbook() # 写入文件 sheet = workbook.activesheet['A1']='data' # 保存文件 workbook.save('test.xlsx')
#单一单元格赋值 Cell('A1').value = 'data' #单元区域赋值 CellRange('A1:B2').value = 'data'
其余文章及回答:
Python 与 Excel 不得不说的事 - Crossin的编程教室 - 知乎专栏
爆款游戏《贪吃蛇大做战》的 Python 实现 - Crossin的编程教室 - 知乎专栏
NBA 举办编程马拉松 - 数据分析时代的到来 - Crossin的文章 - 知乎专栏
想用 Python 作数据分析?先玩玩这个再说 - Crossin的文章 - 知乎专栏
用 Python 实现你的量化交易策略 - Crossin的文章 - 知乎专栏
学习编程的过程当中可能会走哪些弯路,有哪些经验能够参考? - Crossin 的回答
你是如何自学 Python 的? - Crossin 的回答
Python 抓取网页乱码缘由分析 - Crossin的编程教室 - 知乎专栏
Crossin的编程教室
微信ID:crossincode
论坛: Crossin的编程教室
QQ群:167478032