
前段时间,温老师找我说财务处的某老师平日处理大量的Excel,很多都是机械的重复劳动,不胜其烦。和我简单说了下需求,看我能不能写个程序帮一下忙。
需求简述如下:
一个多行多列的Excel文档有一列为“项目代码”,总共有多行各不相同数据,而“项目代码”这列下为无次序出现的重复数据。需求是将相同的“项目代码”所在行的数据挑选出来,并单独生成一个以此项目代码命名的sheet,在此sheet中将数据按照顺序排列。

显然这个是通过财务处网站导出的Excel,首先想到的是,应该多设计几个接口,直接在服务端用SQL语句解决这个问题。但是现状是没有设计这些功能,那么只能在这个文件上做文章。那么,首先想到的就是Python,py处理这些简单数据应该是最便捷的。不过之前还没有做过,需要做一些准备工作。
首先确定用需要用到处理表格数据的模块,xlrd、xlwt或者pandas,因为pandas听上去比较萌,这里选择这个,但是比较难受的一点是pandas 没有中文文档,有些操作想查询需要啃英文。
我的思路是这样的:
1.首先把Excel文件读取到内存中,但是文件不是固定和单一的,考虑到使用者,较简单的方式是让用户输入需要处理的文件的绝对路径。
2.获取“项目代码”这列的所有数据,去重,排序,保存到一个project_code_list中。
3.循环读取这个project_code_list中的值,比如读到“1064801601”这个值后,遍历内存中的DataFrame,获取所有项目代码为“1064801601”的数据,将其保存在一个新的DataFrame中。
4.同时循环在源文件里写入新的sheet(使用project_code来命名),同时往这个sheet里写入数据。
5.考虑用户友好,需要写一定的异常抛出与处理。
接下来就是编码部分
思路确实很简单,但是需要编码实现,以及如何尽量写得优雅,又是另外一回事了。
因为手上还有其他事要做,所以代码没有写得很规范,异常处理也没有写,瑕疵比较多,但是既然功能实现了,也就懒得改了。

没有做异常处理与用户提示,假如用户输入了不存在的路径,那么程序会直接炸掉。所有这些都要注意。

没有做异常处理。

这个函数写得很臃肿,其实应该另外定义一个handleExcel方法来专门处理数据,再用write2Excel来专门写入,另外相同的问题也是没有做异常处理。

最后就是考虑打包的问题,因为财务处老师办公室电脑上是肯定没有Python3环境和模块依赖的,最好直接给他一个exe可执行文件。查了资料,这边使用pyInstaller直接打包。

下面看下运行及处理效果


数据没什么问题,该处理的也完成了,哎,就这样吧。
网友评论