前段时间财务和消金让笔者优化一下Excel汇总台账,方便汇总数据。目前使用的台账汇总方式比较原始,一般为统计人发邮件给各个机构部门,然后大家再把填好的表再发回来。统计人一般来说邮件很多,如果这个台账要每日更新,那么统计人每天就要浪费精力在发邮件-收邮件-一个一个找谁还没发等情况。而且因为某中软加密软件的原因经常会出现这个机构不小心把台账加密了,导致统计人没法复制粘贴,甚至因为众所周知的原因,某中软加密偶尔会抽风,导致台账文件损坏,如果台账文件没有备份的话,那么就会难以收拾……所以这种方法浪费了很多人力和时间。起初,笔者打算用Excel自带的Vba进行汇总(其实我已经写好了初版),但是仔细一想,有几个问题:1,目前宏病毒泛滥,随着策略的收紧,早晚不再允许使用XLSM(带宏的Excel)文件。2,本来大家用的电脑速度慢、使用宏处理大量的数据很可能导致Excel进程卡死,干了半天白干。3,我们正在进行卸载Excel更换WPS的工作,宏在WPS运行时很多函数和方法运行起来离Excel差的有点远,一言难尽。那么有没有其他解决方式呢?笔者决定使用Python进行数据汇总操作,毕竟Python用记事本就能编辑(现在python安装包自带IDLE,让安装配置复杂还收费的Pycharm有多远走多远),语言简单粗暴,打包成exe后独立运行,不需要数据库和服务器,没有软件非正版化隐患,不会卡死,简直是仅次于php语言的完美语言。首先分析需求,即从特定目录内把某些特定的xls、xlsx文件的指定Sheet里特定行的内容进行复制,丢掉不需要的数据,把所需的数据进行拼接,写入到指定Excel文件里。笔者用了几十分钟,学习了一下pandas库,发现有如下几个问题需要解决:1,从哪些路径读取,需要排除什么文件。2,如何判断文件内哪些是有效数据,哪些是无效数据。3,如何进行数据拼接。4,拼接后的数据如何进行进一步处理。5,写入的Excel文件是累计更新好还是每日生成一份好。6,如何判断哪些机构按时更新了,哪些机构没更新,哪些机构不小心把文件加密了?以上需求看起来多,但解决起来不太复杂(因为笔者认为开发最难的不是解决需求,而是梳理需求):第一步是为各个机构建立不同的台账文件,然后限定了访问权限,让大家只能访问自己机构的文件,这样可以保证文件的安全性。然后是写代码:第二步是要判断从哪些路径的读取需要的文件(因为丁[九虎]同学也要使用这个程序,所以改成了相对路径)。因为某中软加密经常会把文件弄成只读格式,所以经常会出现台账.xlsx、副本台账.xlsx、副本副本台账.xlsx等等情况。所以笔者干脆就指定要读取的具体文件名,如果被改名就会提示统计人。其次要解决的是判断哪些机构按时更新了,哪些机构没更新自己的台账文件,这里用到了OS模块和Time模块:第一步要获取当年时间,然后格式化时间(Python的时间功能太难用了!),获取各个台账的修改时间,和当日日期进行比较,如果不符则代表当日未修改自己的台账文件。如果文件无法读取或者被改名,也需要报错。确定好文件后,就要开始汇总数据,这里使用了pandas来读取文件,在读取之前首先要创建一个空列表和一个空dataframe,并规定好标题,这么做的目的是在操作数据的时候可以直接使用标题来操作相应的列:然后依次判断台账文件中哪些是有效数据,哪些是无效数据,经过和消金沟通,要读取原始数据中的A到O列,使用申请书编号这一列作为判断依据,有申请书编号的数据保留,没有的则丢弃掉。在pandas里丢弃方法是.dropna,看到Drop真是倍感亲切,Dropdatabase,Droptable,从Drop到跑路...然后拼接起读取到的数据,写入的excel中,搞定。差点忘了,还要打包一下py文件变成exe,方便用户使用。因为最后一个需求还在整理,要鸽几天,所以最后祝大家
转载请注明:http://www.aierlanlan.com/grrz/8705.html