从两张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. android的百度地图开发(二) 定位

    参考:http://blog.csdn.net/mr_wzc/article/details/51590485 第一步,初始化LocationClient类 //获取地图控件引用 mMapView = ...

  2. flask框架基本使用(3)(session与cookies)

    #转载请留言联系 flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html flask 框架基本使用(2):https://www ...

  3. HDU5469 Antonidas(树分治&&哈希)

    给你一颗点上有字符的树,问一个给定的字符串是否是这棵树上的两点的路径. 树分治的思想就是每次找重心,重心下的子问题分解去做,然后就是合并了.合并的时候用一个总的set<pair<len,h ...

  4. cmake add_executable 与 include_directories

    在cmake里add_executable里如果没有包含.cpp文件,该.cpp文件就不适用include_directories包含文件

  5. 利用js将图片地址进行转义

    利用js将图片地址进行转义 在业务中经常需要将图片从后台获取,然后在前台显示.其中后台存取图片主要分为两种,一种是数据库中获取图片的地址,第二种是存取图片内容的信息.这次主要是前台代码处理第一种情况. ...

  6. HttpRunner 接口自动化测试进阶

    前面说到了httprunner的安装与简单使用,参见: https://www.cnblogs.com/chengtch/p/8735160.html 这里我们介绍一下通过调试源码的方式来做接口测试: ...

  7. 山东多校联合模拟赛 Day1

    矩形计数(rect) Description 给出圆周上的 \(N\) 个点,请你计算出以这些点中的任意四个为四个角,能构成多少个矩 形. 点的坐标是这样描述的,给定一个数组 \(v[1..N]\), ...

  8. geant4开发平台的构建方案的讨论a

    首先比较linux和windows下的平台的不同的功能 linux通过命令进行一系列操作,对于不习惯命令的也可以用鼠标,但是就显得过于落后,因为命令的存在自然表明其先进性. linux下的geant4 ...

  9. LA 3713 Astronauts

    给个题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=sh ...

  10. 浅析Oracle PL/SQL 学习--未完待续

    这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...