Python+Excel操作对⽐
前⾔
从⽹页爬下来的⼤量数据需要excel清洗
成堆的科学实验数据需要导⼊excel进⾏分析
作为⼀名⾯向逼格的Python程序员
该如何合理⽽⼜优雅的选择⽣产⼒⼯具呢?
得益于⾟勤劳作的python⼤神们,处理excel已经有⼤量python包,主流代表有:
:简单强⼤,可替代VBA
:简单易⽤,功能⼴泛
:使⽤需要结合其他库,数据处理是pandas⽴⾝之本
:不仅仅是excel,可以处理office;
:
丰富多样的特性,直接创造⼀份美观⼤⽅的excel,代码即⼀切;
:作为插件内嵌到excel中,可替代VBA,在excel中优雅的使⽤python
xlutils:结合xlrd/xlwt,⽼牌python包,需要注意的是你必须同时安装这三个库
⾯对形形⾊⾊的扩展包,有时候会感到困惑,到底哪个包才是最适合⾃⼰的呢?
本⽂将从配置环境、⽂档操作、基本功能等⽅⾯⽐较以上扩展,让您能结合⾃⼰的⽣产环境,选择最适合⾃⼰的Excel操作库,同时⾃信的对其他库:你是个好扩展,可我们不合适!
下⾯,我们通过多⽅⾯的⽐较,让您对这些扩展有⼀个基础的了解。
1.环境配置
再好的模块,也需要在正确的 Python 版本以及 Excel 版本才可运⾏。
所有库都⽀持Python2和python3。
需要注意的是Xlutils仅⽀持xls⽂件,即2003以下版本。同时win32com与DataNitro仅⽀持windows
2.⽂档操作
由于设计模式的不同,导致基本的新建⽂件、修改⽂件、保存⽂件等功能在不同的库中存在着⼀定差异,⽐如xlsxwriter并不⽀持打开或修改现有⽂件,xlwings不⽀持对新建⽂件的命名等等,DataNitro作为excel插件依托于excel本⾝的操作。详见下图
python怎么读取xls文件
3.基本功能
由于设计⽬的不同,每个模块通常着重于某⼀⽅⾯功能,各有所长。
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 ⽂件。
4.性能
我们对⼏个库做了最基本的写⼊和读取测试,分别使⽤不同库进⾏添加及读取 1000⾏ * 700列数据操作,得到所⽤时间,重复操作取平均值。另外在不同的电脑配置,不同的环境下结果肯定会有出⼊,数据仅供参考。
5.⼩结
通过以上的分析,相信⼤家对⼏个库都有了简单的了解。在编写⽂章的过程中,笔者也在思考各个库最适合的应⽤场景。
1. 不想使⽤ GUI ⽽⼜希望赋予 Excel 更多的功能,openpyxl 与 xlsxwriter,你可⼆者选其⼀;
2. 需要进⾏科学计算,处理⼤量数据,建议 pandas+xlsxwriter 或者 pandas+openpyxl;
3. 想要写 Excel 脚本,会 Python 但不会 VBA 的同学,可考虑 xlwings 或 DataNitro;
4. ⾄于 win32com,不管是功能还是性能都很强⼤,有 windows 编程经验的同学可以使⽤。不过它相当于是 windows COM 的封装,⾃
⾝并没有很完善的⽂档,新⼿使⽤起来略有些痛苦。
你可根据⾃⼰的需求和⽣产环境,选择合适的 Python-Excel 模块。
6.代码
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 = ll_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 = py(book)
#拿到⼯作薄
worksheet = sheet(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']='A1' # 保存⽂件
workbook.save('test.xlsx')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论