从两张Excel表所想到的
前几日,客服妹子发过来几张表,让我给她做下匹配,然后做了,想了,便有了这篇博文,不由感慨,看似简简单单的两张Excel表其实藏着好多东西,记叙如下,与君共勉。
最初的需求:两张表,一张学生信息表,一张学生成绩表,通过准考证号将之关联起来使之完整。
完成需求的四种方法:
第一种方法,通过Navicat for MySQL将两张表导入到mysql中,然后用left join关联,再做导出,方法可行,最后放弃。
第二种方法 ,使用Excel的vlookup函数,由于本人对Excel不熟,未用,但旁边的同事用了,方法可行,但毕竟是手工操作,能不能保证不遗漏数据,存疑。
第三种方法,使用Excel的microsoft query 工具,使用sql语法关联数据,可行,效率太低,放弃。
第四钟方法,coding,做个小程序,匹配数据,这种方法正是现在采用的方式,实现截图如下:
思考问题:
1.为什么一个任务用了四种方法?
答:需求,在需求之初只是两张Excel表,但过后,数据暴涨,变成了给十几个城市的考生做数据匹配,而且通过了解,这种数据对比其实是一项经常性的重复工作,且数据的来源并不是由公司同事录入,数据的格式比较混乱,如信息表里字段叫“姓名”,成绩表了成了“考生姓名”,虽然是同一个东西,但按姓名匹配时,必定要修改字段名称,Excel表格一多,上述的1,2,3种方法效率堪虞,而自己coding,判断字段的时候加个同义词的功能,就能解决,以此得到第一个教训:无论是客户还是同事,面对每一个任务都必须仔细聆听,反复确认,很多人会以为是给同事干活,人家会包容你,但其实是给自己偷懒找个借口,最后偷懒不成,走了弯路,还是自己遭罪。确认需求时,如数据量,任务频率,完成任务时间等等都是很重要的信息。
2.怎么将一个小程序做的专业,为什么要做到专业?[自个儿琢磨的结果,请大神多指教]
答:作为技术,专业与严谨就是立身之本,古语说,不扫一室何以扫天下,一个小程序都不能追求专业,如何指望能做大程序,在这个小程序中,我以三点来说专业:第一,就是刚刚说的字段同义词,很多问题,只要多想一步,就能改变很多;第二,我本来打算使用odbc去连接Excel,但考虑数据格式的不确定性,最后换用NPOI读取数据,虽然工作量增加了,但程序的可用性更好,比如在读取Excel数据的时候,我会把基准表的style一并读取,匹配导出后将样式在还原过去,当同事拿到结果的时候,都不用调整表格的style,虽是细节,但每一个细节都很重要;第三,在匹配的时候,我是在循环里面调用DataTable的select方法,但后面一查,这种方法效率很低,引用他人专业的批语如下:
在数据填充完成之后,设置主键要比在填充数据之前设置主键效率要高的多。设置主键之后,比较了在有无主键的情况下,DataTable.Select 方法在仅对主键字段进行过滤时的性能,结果表明,在仅对主键进行检索时,设置主键之后使用DataTable.Select 方法会比没有主键的情况下的检索速度会快非常多。在相同条件下,如果仅需要查找某一条记录,使用DataTable.Rows.Find会比DataTable.Select快很多。在某些需要频繁操作DataTable查询的时候,要避免在循环体内调用DataTable.Select方法,采用将DataTable转换为等价的Dictionary结构,能够有效解决由于键值重复导致不能创建主键的问题,并且Dicitonary的采用哈希表的方式查找能够极大地提高查询效率。
后来与需求向比对,每一个Excel表的数据量不超过1000条,对于程序性能的影响可忽略不计,也就没有更改程序,但对于程序性能的考虑应成为每一个程序员coding时的下意识考虑,因为这就是素养,必须牢记在心。
3.程序之外的思考。
答:在小程序写好后,由于数据的来源太乱,很多考生找不到相关信息,客服的妹子说最好能用准考证号+身份证号作双关联,思考过之后,程序不动,因为到了这一阶段,准考证号与身份证号都是考生的唯一依据,如果要做双关联,就表示之前的流程出了差错,在此时,你不应是个程序员,而是与客服妹子一起找出问题的原因,向公司提出建议,改善流程,杜绝此类问题的发生,这虽是超出了工作岗位的范畴,但你心里必须清明,什么事是防微杜渐,什么事是敷衍塞责,做哪一种人,决定了你的发展。
4.更多的思考,怎样做个好员工?
1.给公司带来利益
2.不断思考,优化工作流程,给公司文化与流程结构带来积极的影响
3.构建知识库给公司知识库带来积极的影响
4.分享,给公司同事带来利益
5.做好上述的每一步,自然也会给自己带来利益与发展
昨天看到一段话,深有感触,与诸君共勉:
只简单完成老板交代的任务永远只有最多60分,切实明白了老板想要的,并完成了业务需求的算70分,充分挖掘老板想要的能为团队或老板分忧的才能到80分。