zoukankan      html  css  js  c++  java
  • Python通过Openpyxl包汇总表格,效率提升100倍

    最近找了份小兼职,干的全是些无聊的工作,比如说给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当前文件夹,遍历打开表格,把里面的内容复制到汇总表中即可。详细代码可参见我的代码仓库:
    https://code.aliyun.com/15821912398/useful_scripts

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

  • 相关阅读:
    如何唤醒一个处于阻塞状态下的线程
    如何终止一个线程
    网络编程基础_5.1聊天室-客户端
    网络编程基础_4.2TCP-客户端
    网络编程基础_4.1TCP_服务端
    网络编程基础_3.APC队列
    网络编程基础_2.等待事件
    网络编程基础_1.等待句柄
    Window提高_3.1练习_双进程守护
    Windows提高_2.3第三部分:内核区同步
  • 原文地址:https://www.cnblogs.com/ben-future/p/openpyxl.html
Copyright © 2011-2022 走看看