最近找了份小兼职,干的全是些无聊的工作,比如说给word调整一下排版啦、把从多方回收来的Excel汇总啦,这些极其催眠又耗时的事,怎么能接受手动去做呢!!(疯了嘛,谁知道以后还有多少类似的表格要汇总啊!)

于是乎,聪明如我,花了一个小时撸了个小脚本,完成本次,再也不用打开几十张表一个个复制粘贴了。

现在进入正题,本次小脚本的开发环境:

  • Python 3.7
  • openpyxl包

怎么安装我就不废话了,pip或者conda都行。

首先要搞清楚Excel表的层级关系,从大到小依次为:

Workbook(工作簿,也就是excel文件) -> Worksheet(工作表,界面下方的标签) -> Cell(单元格)

操作Excel文件的步骤如下:

  • 首先,导入openpyxl包:from openpyxl import *
  • 然后,打开工作簿:wb_main = load_workbook('test.xlsx')这是最终要汇总的目标表格,参数即路径;
  • 接下来,要选中要操作的工作表:ws_main = wb_main.active,我这就一张表,所以就是活动状态的这张。如果有多张表,可以通过wb_main[表名]来选中。
  • 最后就可以对单元格进行操作啦,比如:
  • 改变A1单元格的值:ws_main['A1'].value=123ws_main.cell(1,1).value=123
  • 删除2-3行:ws_main.delete_rows(2,2)
  • 注意:如果有修改,一定要记得保存文件:wb_main.save('test.xlsx')

判断表的行数

除此之外,每个表的行数不同,要保证数据不漏掉,需要判断表的行数,这里仅提供一个思路:

  1. 粗略估计一个行数上限M(可以偏大,但不能小)
  2. 假设有数据的行,第一列都有值(根据你的表自行调整)
  3. 进行二分查找,先判断M/2处是否有值:
  • 若无:判断M/4处是否有值
  • 若有:判断3M/4处是否有值
    这样一直循环就可以得到行数。

要汇总的话,只需要os.walk当前文件夹,遍历打开表格,把里面的内容复制到汇总表中即可。详细代码可参见我的代码仓库:

大家可以继续挖掘这个包里的其他功能,比如“合并单元格” 等等。