背景
最近在开发一个线上用例管理平台,需要使用 Python语言
对 Excel文件
进行一系列的操作,网上大致搜索了下常用的库,最后决定使用 Pandas
库(原因就不具体阐述了)。在使用的过程中,大部分的需求都能满足,但是还是有部分需求通过不断躺坑最终解决了。
Pandas 库常用的方法就不一一阐述了,可以参考如下链接。
在此将整个过程中遇到的一些特定的问题进行记录┑( ̄。。 ̄)┍ ┑( ̄。。 ̄)┍ 。
特殊问题
问题1. 部分Excel文件单元格进行了合并或者单元格内容为空
需要对合并了的单元格或者单元格内容为空的进行内容,通过Debug发现此时值为 Nan
。
解决办法:
1 | # 将单元格的值赋值给data |
问题2. 使用Panads的to_excel方法会覆盖其他所有的sheet
具体问题:在使用pandas的 df.to_excel(file_path)
想要对一个有多张sheet的workbook操作时一定会尴尬的发现:永远只存在最后一次写进去的表,其他的sheet表都被清空了,并且最后一次写进去的表的样式也未保存。
解决办法: 参考链接
1 | import openpyxl |
通过如上的办法就可以将所有表都保存下来,并且保存了原有的样式, sheet1表的内容也修改正确。
问题3. 使用了问题2的办法后,使用Panads.drop()方法在最后出现重复行。
1 | # file_abs_path excel文件的绝对路径 |
具体问题现象如下:存在文件A,里面的sheet1表中有4行数据(如下),通过上述代码的drop删除后, 再调用问题2中的办法进行保存,发现sheet1表中仍然有4行, 内容为原来的第1、4、3、4 行内容,实际预期应该只是第1、4行的内容。
1 | # excel_sheet_handle.drop([1, 2], inplace=True) |
具体原因: 由于问题2中进行了原来的sheet内容读取,所以在writer中也记录了原来的 sheet1 的内容,导致 writer 在写入的时候又重新将原来的第3、4行与实际的 第1、4行进行了合并。
最终解决办法(根据上述的实例):
1 | max_row = 4 |
问题4. 在指定行插入一行数据
具体需求:可能需要通过在不同的行插入指定的数据,比如,sheet表中共10行,需要在第5行插入一条数据。
解决办法:参考链接
1 | # 可以先将表格分开,添加行后再合并,原数据如下, 在第1行(猫之前)插入 羊,数量9, |
总结
只有真的多面对几次现实中的需求,才能真的掌握一个库的使用。。。否则仅仅是最基础的 Demo
演练。