从两张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分。

从两张Excel表所想到的的更多相关文章

  1. 两张Excel表比较,两个for循环比较优化使用Contains

    将一个Excel表中的sheet中的一列导出到List<string>,用一个for循环循环另一张表中的数据,看是否在第一张表中的Contains中

  2. 对比两张Excel表数据差异时,遇到数据雷响不一致

    表A中为文本(有绿色三角符号),表B为数字(没有三角符号),而自动对比时会检查数据类型,怎么办? 执行对比: 得到结果: 这时候要解决类型问题(即绿色三角形标志) 点击灰色区域全选 哪个黄色感叹号可以 ...

  3. vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表

    vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...

  4. 取两张mysql表中分别两个字段相同的值

    看起来有点绕口吧,举个例子吧,如图 两张表,字段名也不同字段gs 和另一张表 gsmc  的有些值是相同的 我们要做的就是把这个相同的值找出来 会写这个sql语句就可以 只写重点 $sql2 = &q ...

  5. Mysql多表查询(两张独立表,一张关系表)

    一.数据库设计 1.三个数据表长这样   其中user表记录用户信息,cat主要记录男女性别,mete表是用户id和性别id的对应关系   2.具体数据如下   二.查询目标 查询出所有性别为“男”的 ...

  6. VBA二次学习笔记(2)——两个Excel表内容比较

    说明(2018-9-3 22:38:58): 1. 就是之前问同事要来的作业,有两个格式一样的Excel文件,一个是正确答案,一个是员工作答的.通过代码将两个文件进行比对,把不同之处列出来. 正文: ...

  7. 记录两张数据库表及Ibatis操作

    建表语句 CREATE TABLE `TS_MopayInvoiceComposition` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `RequestID` i ...

  8. oracle 两张关联表执行更新update

    UPDATE T_ASN_DTL ad1 SET ad1.cf03=( SELECT ac.TH003 FROM "T_ASN_DTL_copy" ac WHERE ac.udf0 ...

  9. 【mybatis】mybatis一条sql更新两张数据表,mybatis关联更新多张数据表

    示例sql: <update id="receipt" parameterType="com.pisen.cloud.luna.ms.security.code.b ...

随机推荐

  1. C# 获取农历日期

    //C# 获取农历日期 ///<summary> /// 实例化一个 ChineseLunisolarCalendar ///</summary> private static ...

  2. RANSAC中迭代次数的计算

    假设 $w=\frac{内点个数 }{所有点的个数}$. 则 $p_{0}=w^n$表示采样的$n$个点全为内点的概率(可重复) 则至少有一个为外点的概率$p_{1}=1-p_{0}$ 则重复$K$次 ...

  3. (14)oracle数据字典

    http://czmmiao.iteye.com/blog/1258462 数据字典解释 1.user_tables 查询用户所拥有的所有表 select table_name from user_t ...

  4. 中矿大新生赛 G 甄总搬石头【优先队列/哈夫曼/贪心】

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 https://www.nowcoder.com/ ...

  5. ssh框架整合shiro权限

    关于整合shiro,首先在ssh整合的基础上进行组合 1.首先,要导入几个依赖(整合ssh与shiro的依赖): <properties><shiro.version>1.3. ...

  6. 【spring boot】集成了druid后,同样的mybatis模糊查询语句出错Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'name LIKE '%' ? '%'

    druid版本是 <!-- https://mvnrepository.com/artifact/com.alibaba/druid 数据库连接池--> <dependency> ...

  7. “/”和“\\”和feof();

    filename=c:/test/abc.text filename=c:\\test\\abc.test "\\"为转义字符: feof();函数检测文件是否已经到达末尾(EOF ...

  8. python调用top命令获得CPU利用率

    1.python调用top命令获得CPU利用率 思路:通过python调用top命令获取cpu使用率 #python2代码 [root@zdops-server script]# cat cpu_lo ...

  9. MongoDB系列四:解决secondary的读操作

    http://blog.itpub.net/26812308/viewspace-2124660/ 在Replica sets 中的secondary节点默认是不可读的.使用Replica Sets实 ...

  10. 使用websocket进行消息推送服务

    Websocket主要做消息推送,简单,轻巧,比comet好用 入门了解:https://www.cnblogs.com/xdp-gacl/p/5193279.html /** * A Web Soc ...