From Excel To Database
前言
Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。(摘自百度百科)
用户想用Excel就必须在本地安装相应的软件,但是有些特殊的群体只想查看Excel里面的数据。这些人仅仅是看看比如这个季度的销售统计表等,根本谈不上编辑,但是也要装上这么一套的软件,那么有没有不用装就可以查看这些表格呢。回答当然是有的,Apache软件基金会就有这么一个项目“Apache POI”,下面简称“POI”。POI提供API对Microsoft Office格式文档的读和写,当然这里我们只用到读的功能。
简单了解下POI
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint等文件。
本项目的产物是何东西
通过本项目的完成我们可以实现用户上传EXCEL,用户选择要入库的SHEET(可能有多张SHEET表),然后输入表头和表左侧的固定的列数(一般称为表头),最后倒入到指定的数据库。完成后用户将在此基础上浏览查询,甚至可以进行统计功能。
准备工作
第三方依赖
Apache POI组件:
目前官方的最新稳定版本是Apache POI 3.7 本程序将选择此版本,当然喜欢尝新的同学可以尝试使用3.8 Beta5版本,原则上生成环境一律用稳定版本。
Struts2框架
Struts2目前最新版本已经更新至2.3.1,由于当初开发的时候官方的稳定版本是2.2.1所以将继续沿用2.2.1的版本。
开发工具
建议选用最新版的Eclipse IDE for Java EE Developers版本可以提高开发效率,如果你手上有MyEclipse也可以用,但是你电脑要有一定高的配置不然会出现假死状态。
数据库
这里我们选择微软的SQL Server 2008 Express版本。因为本项目重点在Excel解析那块所有选个简单的数据库就足以。
数据库驱动
这里要特别的注意下微软官方下载的驱动下有两个驱动sqljdbc.jar和sqljdbc4.jar。这里简单说下这两个区别sqljdbc.jar提供对JDBC2.0的支持,要修使用JRE的版本是5.0,如果你在JRE6.0环境上使用会报错得;sqljdbc4.jar类库提供对JDBC4.0的支持,而且包括了sqljdbc.jar的所有功能还新增JDBC4.0的方法,sqljdbc4.jar需要使用JRE6.0及以上的环境,当然如果在低于也会报错。本项目开发机器上为JRE6.0所以改选用sqljdbc4.jar。
项目的框架
ExcelManage 项目的名称
|-src
|-action Struts2 Action类
|-config 数据库和系统配置文件
|-dao 数据访问层
|-dao.impl 数据访问层实现(jdbc)
|-domain 实体类
|-select 查询
|-select.impl 查询的实现
|-service 数据服务层
|-service.impl 数据服务层实现
|-test 测试类
|-util 辅助类
|-WebRoot 网站目录
|-WEB-INF web.xml和jar包
|-META-INF
|-其他 jsp页面、javascript等
数据库的设计
Tables表
说明:用于存放Excel表中sheet的名字
主要字段:唯一编号(PK)、名称、描述
Category表
说明:分类表
主要字段:唯一编号(PK)、分类名称、分类父ID(FK,Category)
Cate_Tab 表
说明: Tables表和Category表的关系表
主要字段:唯一编号(PK)、分类ID(FK,Category)、SheetID(FK,Tables)
Files表
说明:存放已经上传的EXCEL文件
主要字段:唯一编号(PK)、文件EXCEL名称、文件EXCEL地址
File_Tab表
说明:Files和Tables的关系表
主要字段:唯一编号(PK)、EXCEL文件ID(FK,Files),SheetID(FK,Tables)
Fields表
说明:用于存放表头字段
主要字段:唯一编号(PK),父ID(FK,Fields)、字段名称、SheeID(FK,Tables)、字段类型(行还是列)、序列(控制最后显示换行,其实也可以不要)、跨多少行、跨多少列。
Data表
说明:存放Sheet中数据区域部分(除表头之外的部分)
主要字段:唯一编号(PK)、SheeID(FK,Tables)、X坐标、Y坐标、具体数据
备注(X,Y坐标和Fields表中唯一编号挂钩,具体可以参照字段类型)
根据上面的需求我们可以来先把项目在eclipse里面搭建起来,把改要的jar包都添加进来做一些工作前的准备。搭建好了最后写个测试类测试action和数据库连接,最好也安装Apache POI官方文档写个POI的例子。
下面将会着重讲解对Excel的操作,至于数据库的写入和查询数据等操作可能就简单的提下,不会具体贴出详细代码。