Excel作为流行的个人计算机数据处理软件,混迹于各个领域,在程序员这里也是常常被处理的对象,可以处理Excel格式文件的Python库还是挺多的,比如xlrd, xlwt, xlutils, openpyxl, xlwings等等,但是每个库处理Excel的方式不同,有些库在处理时还会有一些局限性。
接下来对比一下几个库的不同,然后主要记录一下xlwings这个库的使用,目前这是个人感觉使用起来比较方便的一个库了,其他的几个库在使用过程中总是有这样或那样的问题,不过在特定情况下使用也是挺不错的。
Excel被称为电子表格,其实际可以保存的格式分为很多种,但是“Excel工作簿(* .xlsx)”和“Excel 97 - 2003工作簿(* xls)”是其中比较常用的两种,可以认为xls格式的表格是03版Excel之前常用的格式,而.xlsx是03版之后,一般指07版Excel之后常用的格式。
一般的Excel程序对于上述的两种格式都可以打开编辑,也可以相互转化存储,不过还是建议在没有特殊要求的情况下使用新版本的格式,一方面新的稳定版本可能会修复之前的一些错误,同时也会带来进行一些优化。
我也是在写这篇总结之前才发现,一个空的.xlsx格式的文件大小有7 kb,而一个空的xls格式的文件大小有24 kb,当我分别写入一个相同的汉字后,两个文件大小变成了10 kb和30 kb,差距还是不小的,还有一个问题就是在将.xlsx格式的文件另存为xls格式时还会有兼容性提示,提醒用户有些设置可能会丢失,所以能选新版本还是尽量用新版本吧。
因为很多应用程序是不断迭代的,相对应的Python库也是不断迭代的,这里尽可能的给出版本号,不同的版本可能会有不同的问题:
-
<李>操作系统:Windows 10随意版李>
<李> Python: 3.75 李>
<李> xlrd: 1.2.0李>
李1.3.0 <李> xlwt:版本>
<李> xlutils: 2.0.0李>
<李> openpyxl: 3.0.3李>
<李> xlwings: 0.18.0李>
以上各个程序库使用之前自行安装就行,安装方法就不赘述了,不过可以提供一个可以快速安装镜像源,使用<代码> pip安装- https://pypi.doubanio.com/simple库名> 代码可以尽可能解决下载安装缓慢的问题。
关于使用Python具体操作Excel的方法可以分为三组,配合使用xlrd, xlwt, xlutils操作作为第一组,使用库openpyxl作为第二组,而xlwings作为第三组,这篇总结重点总结xlwings的使用,其他两组简单了解。
<强>
强>
这一组操作Excel的库名字很形象,一个读,一个写,一个小工具,凑到一起就可以对Excel肆意妄为了、下面做个小练习,打开一个Excel文件然后修改第一个单元格的值,再另存为一个新文件,代码如下:
进口xlrd 进口xlwt 进口xlutils.copy def save_as_new_file (file_name new_file_name): #打开Excel文件 rb=xlrd.open_workbook (file_name) #创建一个可写入的副本 世行=xlutils.copy.copy (rb) #获得第一个单页签 ws=wb.get_sheet (0) 第号一个单元格写入测试值 ws。写(0,0,测试值) #另存为一个新文件 wb.save (new_file_name)
上述代码无论是操作.xlsx文件还是操作xls文件都不会报的错,但是另存为的.xlsx格式的文件会打不开,同时你会发现正常存储的xls文件打开后格式全都没了,怎么办,改个参数试试,将打开文件的代码修改如下:
rb=xlrd。open_workbook (file_name formatting_info=True)
其中参数formatting_info=True就表示打开Excel时保留原有的格式,但是这是相对于xls格式的文件,对于.xlsx格式的文件直接跑出异常提高NotImplementedError (formatting_info=True尚未实施),就因为处理不了.xlsx格式的文件,我暂时没有使用这几个库操作Excel。
还有一点,这几个库操作单元格时,行和列的索引是从0开始的。
首先说这个库主要用来操作.xlsx格式的文件,对于xls格式的文件无法打开,会报openpyxl老xls文件格式不支持这样的错误,但是可以存储成这样的格式,再次打开时会有格式不匹配的警告,但是基础的数据还在,所以还是优先用来操作xls格式的文件吧。
写一个新文件的常见用法:
从openpyxl进口工作簿 从openpyxl进口load_workbook 从openpyxl。风格导入字体、填充、对齐、PatternFill def write_new_excel (file_name): #创建一个excel文档 世行=工作簿() #获得当前激活的表对象 ws=wb.active #给A2单元格赋值 ws (A2的)='这是A2细胞” #一行添加多列数据 ws。追加([1,2,'你好']) #添加新的表 ws=wb.create_sheet (title=癗ewInfo”,指数=0) #设置单元格的值 ws (“A1”)='这是新表” #保存excel wb.save (file_name)Python操作Excel工作簿的示例代码(\ * .xlsx)