1:前言

看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的。

自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开。

所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候,再分享分享。

话说最近外面IT行情飞涨还咋的,人都飞哪去了呢,听说各地的军情都进入紧急状态了。

回归下正题,今天就抽点时间,写写技术文,和大伙分享一下近年在框架设计上的取的一些技术成果。

2:项目背景

在针对运营商(移动、联通、电信、铁塔)的信息类的系统中,由于相关的从业人员习惯于Excel的办公思维。

导致在做该类系统中时,Excel的导入导出功能,几乎成了每个有列表展示的页面上必备功能。

因此,有必要对Excel导入导出进行抽象并组件化设计,以至于后面占了整个开发框架中一个很牛B的位置。

而这一切的演进与进化,始于以下这越来越变态的需求:

3:从模板的指定方式看进化

阶段一:由开发方精心设计Excel模板

我们都知道,要把一批数据导进系统中,最基本的做法,就是约定好导入的模板,然后针对精心设计好的模板进行编码。

而客户则按格式填写好数据后,如无意外的就导入系统中了。

如此如此这般这般之后:

对于开发:会选择一种最简单开发的方式,尽量确保每个字段不需要特殊处理都和数据库对的上,不用做过多的额外代码编写。

对于客户:需要按指定的格式填写数据,需要花不少时间。

阶段二:Excel模板的格式由客户指定

后续的调研进展,客户要亲自指定模板中的列及格式。

如此如此这般这般之后:

对于开发:需要按指定的格式去开发,甚至可能缺少某些列,要做一些额外的查询或代码处理。

对于客户:可以简单的从其它办公的Excel中复制数据到模板,进行简单的修改后导入。

阶段三:从某系统导出Excel数据,要求能直接导入系统

客户越来越牛B了,认为搞模板这东西太复杂了,既然其它系统能导出来,直接弄过去就得了。

如此如此这般这般之后:

对于开发:由于某系统导出的Excel数据,乱七杂八,用API读出来的数据,不符常规则,要做N多兼容处理,工作量翻了N翻。

对于客户:从其它系统导出Excel数据,直接导进系统,真泥玛的省心。

阶段四:要求系统中导出的Excel数据列表,修改数据后可以直接导入系统

客户已经超越牛A与C之间了,哥穿越七八张表,用了N个Case和GroupBy及N层子嵌套才弄出来的报表数据,你要给导回基础表去?

如此如此这般这般之后:

对于开发:45度仰角呼唤你爷。

对于客户:我只要某几个字段改了能回去就行。

4:从模板的复杂度看进化

Stage One:单表导入

好简单的说,使用 CYQ.Data 框架(好久没在文章中介绍了,历经几年低调的发展,有机会再写文)中MDataTable的批量功能,一行代码就完事了。

Stage Two:多表导入

麻烦开始了,两张表就算了,可是你来2,3,4,5,6,7表,一个导入要关联这么多表,还得理解业务,还要分拆一对N关系,一个导入要整好几天。

如果回头客户说改模板,心里瞬时多了几草泥马穿过。。。

Stage Three:要求导出和导入的Excel都有多级表头

又麻烦了,合并的单元头、卧槽还有同名的列头,难道要写死指定第N行的列头就A表名字,N+N行的列头是B表的名字?

如果模板增加字段,换了位置, 心里莫名又多了几只草泥马越过。。。。

Stage Four:表头和数据藏在中间,要求能自动忽略上下左的垃圾数据

模板的上面十几行,是一大堆没用的数据,模板的左边和下面,是一些填写的说明(而这些,是其它系统的数据,跟我们做的系统有毛关系啊,但客户就是这么牛B)

所以,又要增加处理,从第几行读数据,列头跨几个行,右边第N行是无效的,心里刹间又多了几只草泥马踩过。。。

Stage Five:多Sheet导入

模板增加一个分类列就可以搞定的事,客户打死也不要,非要一个分类一个Sheet,然后全部导入。

所以,你得按Sheet名称自动转换成分类名称,来处理这些事。

还有原来一个Sheet多表的一对N关系,要分拆到N个Sheet里去让你处理导入, 心里哗哗已无数只草泥马踏过。。。

5:总结:

在正常的需求阶段,理论上是应该引导用户规避掉一些不合理的设计,但现实有时候就是被客户牵着走。。。

因此,在面对如此这么复杂的场景和变态要求下,如果不设计一套智能组件,则开发成本和开发人员无疑将陷入无限的悲哀中。

好在,我在。

下一文,将与大伙分享Excel的组件化的设计方案

Excel导入导出的业务进化场景及组件化的设计方案(上)的更多相关文章

  1. Mego(04) - NET简单实现EXCEL导入导出

    前言 相信做过信息系统的朋友都会遇到EXCEL导入导出的相关开发,做过不少EXCEL导入导出后总结起来大致有如下几种方式实现: ADO.NET的OldDb或ODBC连接EXCEL使用DataTable ...

  2. TP5.0 excel 导入导出

    引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...

  3. Java基础学习总结(49)——Excel导入导出工具类

    在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...

  4. 如何自动化你的Excel导入导出(Java)?

    GitHub | 中文 | English | 博客 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择用Apache P ...

  5. 基于EPPlus和NPOI实现的Excel导入导出

    基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...

  6. 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

    注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能.过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好. 序 由于 poi 本身只是 ...

  7. 企业级自定义表单引擎解决方案(十六)--Excel导入导出

    Excel对于后端管理系统来说,永远都是绕不开的话题,开发Excel导入导出功能往往都比较麻烦,因为涉及到Excel导入模板制作.Excel表格数据与系统数据库表字段映射.Excel导入数据验证.验证 ...

  8. 利用反射实现通用的excel导入导出

    如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...

  9. 关于Excel导入导出的用例设计

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

随机推荐

  1. linux 如何查找io的进程

    [root@NB ok]# echo chenlin|base64;echo Y2hlbmxpbgo= [root@NB ok]# yum search iotop Loaded plugins: f ...

  2. 与你相遇好幸运,德淘gen8历程

    应该是十月底了 , 在浏览色魔张大妈(smzdm) http://www.smzdm.com/p/6517684/ 的时候看见了这个 , 以前大学就想买个这个 , 苦于没钱.... 然后当时打算买 , ...

  3. ubantu16.04+mxnet +opencv+cuda8.0 环境搭建

    ubantu16.04+mxnet +opencv+cuda8.0 环境搭建 建议:环境搭建完成之后,不要更新系统(内核) 转载请注明出处: 微微苏荷 一 我的安装环境 系统:ubuntu16.04 ...

  4. 【协议分析】Wireshark 过滤表达式实例

    Wireshark 过滤表达式实例   1.wireshark基本的语法 字符 \d          0-9的数字 \D          \d的补集(以所以字符为全集,下同),即所有非数字的字符 ...

  5. 图文介绍如何在Eclipse统计代码行数(转)

    使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expressi ...

  6. Spring MVC注解入门

    注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...

  7. Linux中安装NodeJs 、cnpm 、npm

    一.安装NodeJs 切换到 cd /usr/local/src/ 下载nodejs wget https://nodejs.org/dist/v6.9.3/node-v6.9.3-linux-x64 ...

  8. (转)Lock和synchronized比较详解

    今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不 ...

  9. VirusAnti_didiwei使用说明

    前言 前段时间说要写的一个专杀框架敌敌畏,后改为强撸敌敌畏,以彰显样本查杀时的气势,现在第一版已经完成了,如下图所示,使用的时候强烈建议控制台使用放大模式,这样就可以看见我花了半天才画好了logo , ...

  10. MOD

    题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2318 ///这是哈理工校 ...