说到python读写excel,想到的的就是xlrd、xlwt、openpyxl、pandas这几个库吧,最近用到读写excel,于是初略看了下这几个库的使用,xlrd用于读取excel的,xlwt用于写excel的,但不能写后辍为.xlsx的文件,openpyxl既能读也能写,感觉是前面两个的结合以及结合,用法也基本雷同,pandas功能比较强大,能读能写,还能各种数据分析,在excel表格中能操作的,几乎在pandas中都能做到。xlrd读取数据时,可以直接到表格的一行转成一个列表,比较方便,openpyxl读来每行是以cell为元素的列表,还要再转换一次(或许我还不知道怎么直接转成列表的),所以写用了xlrd。由于xlwt不能写.xlsx的文件,于用写用openpyxl,pandas跃然功能强大,但对我来说感觉pandas还是比较复杂,不好操作,前两个已满足我现在的读写的功能需求。不管是xlrd还是openpyxl,读写的流程基本是一样的,写初始化一个workbook,再获取一个sheet,然后读或者写数据,如果写,还要设置表格的样式,最后workbook.save()下。每次都这样嫌麻烦,于是想写两个方法封装下。
def readExcel(path, sheetName=None):
第一个读的方法,接受一个已存在的Excel路径,还有一个可选参数sheetName,如果不指定,默认读第一个表格,返回一个两层的列表[ [], [] ,....],第二层的列表每一个表示一行的数据,得到每行的数据后,想怎么操作就看自己的了。
def writeExcel(path, data, title=None, row_height=18, merge_row_col=[]):
第二个写的方法
path:写入excel的文件路径,不存在新建,存在的话就覆盖
data:写入excel的数据,格式为[[], [],...]或([], [],...)或[(), (),...]或((),( ),...),第二层每个元素表示一行数据,可以长度不一致,表格的列数以最长的那个元素为准,值为None或者长度达不到最达长度的,写入excel时为空
title:表格名称,就是我们excel中的sheet1,sheet2,类型为字符串
row_height:设置表格行高,默认为18,
merge_row_col:合并单元格的起止位置组合,格式为({},{},...)或[{},{},...],其中元素{}的key-value如下:
{
"start_row": 2,
"start_column": 4,
"end_row": 3,
"end_column": 4
}
然后这个方法把样式写死了,有需求自己改下,把样式的值放方法参数中