您的位置:首页 > 数据库 > MySQL

通用excel数据导出/转换(一)

2016-02-22 22:25 483 查看
跟excel有关的开发,c#应该是不错的选择,毕竟都是windows的程序。写了一段时间java,突然又写c#,会发现继承、抛出异常之类的东西好不适应。

这次遇到一个使用历史大约有10年的excel工作簿,表大小大概在400列6000行的样子——是的我以为是400列,实际上这些列就像课程,不同专业的学生会修不同的课,一共有400门课,而且每个学生每门课还有不同的成绩。。。这些都在一个表里头,一个表里头,一个表里头——不然还要我转什么excel的数据。

大概来说任务就是把一个有一定规范的excel表转换为我们通常在数据库上看到的二维表。400列的数据肯定不会整到一个表里面,应该像分学院一样把400列拆分为若干组,每组再独立建表。

这个功能看似不难,而且数据量并不是很大,主流的数据库性能是够的,但是也不能像面向过程那样流水式的码出来。暂时觉得这可以用三篇文章来说说

第一篇就写写类的设计。

不多说先来看图,不知道这画得规范不规范



类的继承不应该是从一般到特殊的过程,而是功能封装的过程。这里用三个类来封装:

excel_basicReader:根据传入的文件路径获得excel文件内数据的基本信息,包括表名、给个表的列数、行数

excel_MySql_covertSettings:这次开发用的是MySql,每个表设置多少列、多少行、那个属性是主键等,都放在这个类

excel_tableCreater:创建MySql的空表、读取excel并插入到MySql的表中

按照这样设计三个类我是出于这样考虑的:

excel_basicReader做好对excel的最基本抽象,要获取指定单元格的值时excel_basicReader中的OleConn就可以结合sql语句来查询了

这次用的是MySql,以后如果要使用别的数据库,有关的设定就交给excel_MySql_covertSettings这一层来修改,excel_tableCreater中只需把相应数据库的sql语句格式修改一下就行了

excel_tableCreater中用一个私有方法MysqlExcuter(string strsql),传入sql语句,也算是很好的节省了需要sql语句的代码

嗯,类的设计先说这么多,感觉总有许多不成熟的地方,大家有什么意见欢迎评论或私信我
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息