最近工作中用到次表格的读写,用python写的脚本,用到的库是openpyxl
,这里记录一下常见的使用方法,做个备忘。
以前经常使用xlwt
和xlrd
对excel进行读写,但这两个库不支持excel2010以后的版本,也就是xlsx
后缀的表格,该工具没办法支持。所以找到一个更新的工具库openpyxl
可以同时对excel进行读写操作。
openpyxl
的官方文档的地址在:https://openpyxl.readthedocs.io/en/stable/index.html
1. 打开文件和创建文件
读写excel的第一步就是打开文件或者创建新文件,openpyxl
库对打开excel文件就是获取到workbook
对象,一共有两个常用的方法:load_workbook()
和Workbook()
,使用方法如下:
1 | workbook = openpyxl.Workbook() |
打开文件后就要创建或者读取表格中的sheet,有如下方法
1 | sheet = workbook.active # 获取到当前激活的sheet |
2. 读写表格
读取表格
在获取到sheet
对象后,就能够通过sheet获取到rows
迭代器,可通过rows遍历表格中存在数据的所有行。在遍历rows时,又可以得到cols迭代器,然后通过cols可以遍历每个单元格中的具体的数据。
openpyxl
把每个单元格定义为Cell
,一般通过Cell.value
属性读取具体的单元格存放的值。
具体的读取代码如下:
1 | workbook = openpyxl.load_workbook(filename) |
需要说明的是,如果cell单元格没有数据,那么读取的值就为None
,这个值也方便后续对数据的处理。
openpyxl
的另一个特殊的地方是,所有的下标均是从1开始的,所以在使用python迭代器遍历的时候,需要在下标加上1。
一般读取的表格会带有title,所以需要从第二行开始读,而sheet.rows
返回的是一个迭代器,无法使用切片对其进行操作,所以要将迭代器转换为list,然后使用切片,就有如下代码:list(sheet.rows)[2:]
。
openpyxl
在读取表格的时候,对于合并单元格的内容,会依次读取,合并后的单元格第一行能读取到值,后续行则为None
,也就是合并单元格并不会影响到openpyxl
的读取,所以只能自行在程序中对合并的单元格进行处理,这个比较麻烦一点。样例代码可参考如下:
1 | row = 2 |
写表格
openpyxl
在写表格的时候要麻烦一些,需要找到对应的cell进行一格一格的进行写入操作。
具体的代码如下:
1 | sheet.cell(row=1, column=1, value='value') |
通过shell对象的cell方法进行写入操作,需要指定具体的row
和colum
,然后value
为具体写入的值。
3. 保存表格
保存表格很简单,在对sheet
对象是从workbook
对象获取到的,所以只需要调用workbook
对象的save()
方法即可保存文件。
代码如下:
1 | workbook.save(filename) |
这样会在当前目录保存命名的文件。
4. 合并单元格
还有个较为常用的方法就是合并单元格,用程序可以指定合并单元格的范围。
1 | self.row_alpha = 'ABCDEFGHIJKL' |
用该代码可以指定具体列进行合并单元格操作,用到的关键方法就是merge_cells
。