论坛首页 Java企业应用论坛

仿hibernate映射机制对Excel进行读写

浏览 21216 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-08-30   最后修改:2008-12-11

读取和写入使用的是jxl组件

 

昨天项目中遇到了处理Excel的功能.记得在以前写过的读取Excel都是利用坐标之类的来进行的.昨天突发奇想:可不可以把Excel当做数据库的一张表来处理?!经过考虑之后觉得可行.大体实现思路如下:

1.首先建立映射关系文件:excelmapping.xml

  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <excel-mapping>  
  3.   <class name="com.bjce.uum.excel.domain.ExcelBean">  
  4.     <pop excelPop="姓名" classPop="userName">pop>  
  5.     <pop excelPop="性别" classPop="sexName">pop>  
  6.     <pop excelPop="出生日期" classPop="birthday">pop>  
  7.     <pop excelPop="单位编码" classPop="unitCode">pop>  
  8.     <pop excelPop="固定电话" classPop="phone">pop>  
  9.     <pop excelPop="移动手机" classPop="mobilePhone">pop>  
  10.   class>  
  11. excel-mapping>  

 

1.1 class:定义一个Excel的配置信息.

1.2 name:定义存储Excel每一行的类.类似于Hibernate的pojo.

1.3 excelPop:Excel文件中的列名.

1.4 classPop:映射类中的属性

1.                      读取Excel时首先读取excelmapping.xml配置文件.取出映身关系和映射类.读取Excel中的所有行和列,循环每一行的每一列,并取出每列的列名.在映身关系中查找与之对应的类属性.读出此列中的数据写入类属性中.读完整行之后将类写入集合中.循环所有行之后就产生了与Excel相对应的类的集合.

2.                      写入Excel时首先读取excelmapping.xml配置文件.取出映身关系和映射类.将映射文件中配置的Excel列名写入第一行.获得写入的Excel列名.循环整个将要写入Excel的集合.取出集合中的每一个类.根据映射文件描述的Excel列名与类中属性关系.找出Excel中列名对应的类属性.拿出类中此属性的数据并写入Excel中对应的列名下

 

此方法只能适用于简单的Excel读写.

  • 大小: 32.6 KB
   发表时间:2007-08-31  
刚好昨天有个项目也是用到excel.自动生成excel,我是poi做的。你们呢?你小子想法挺新颖得,这个应该和数据库有区别吧。有合并单元格,取单元格属性怎么办呢?
0 请登录后投票
   发表时间:2007-08-31  
这样做的确只能用于简单的Excel操作.
poi和jxl同样都是操作Excel的组件.我只是做了一点封装.
对于复杂的操作肯定要来定义Excel的格式了.

是长青?
0 请登录后投票
   发表时间:2007-08-31  
封装的方法只试用于下面两种经常出现的情况

1.批量新增,将Excel上传到服务器.进行读取.取出集合+入数据库
2.将一个查询后的集合写入Excel

对于复杂或其它特殊格式的.大家有什么好的想法说出来看看
0 请登录后投票
   发表时间:2007-08-31  
我们开发中用得也是jxl
我觉得你的突发奇想挺好,但好像不怎么适用
既然产生映射,那映射文件肯定固定不意修改。Excel在项目中使用起来,读取列和存入字段都是未知的。所以不能作为系统的Util
而本身持久化对象就是存储在内存之外,我没有试你的想法,不知道会不会增加事务的负担,感觉还是不如用流
0 请登录后投票
   发表时间:2007-08-31  
我把代码传上来.其实这样做的目的就是简化模版类的Excel读和写.而不需要写:

Label label = new Label(col, row, "test");
ws.addCell(label);


这样的代码了


0 请登录后投票
   发表时间:2007-08-31  
xml 代码
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <Excel>  
  3.     <columns class="cn.bupt.insky.po.User">  
  4.         <column name="ID" property="id" type="java.lang.Integer" />  
  5.         <column name="Name" property="name" type="java.lang.String" />  
  6.         <column name="Email" property="email" type="java.lang.String" />  
  7.         <column name="Description" property="descn" type="java.lang.String" />  
  8.         <column name="Date" property="date" type="java.util.Date" />  
  9.     </columns>  
  10. </Excel>  

说来也巧,也是刚刚实现了这个效果,客户端上传excel,通过读取excel配置xml文件,转化成po。原来大家都做了类似的东西哦。

兄弟的xml文件是如何写的?

0 请登录后投票
   发表时间:2007-09-01  
思路很不错,但是楼主也说了,把excel当成数据表来使用,这也就是意味着我们的excel只是一个数据承载体,而对格式等都要忽略了。

如果遇到这种excel,我一般把它弄到数据库一张临时表,处理完了就删掉,呵呵
0 请登录后投票
   发表时间:2007-09-01  
关于定义数据类型也考虑过.甚至想过可以定义对象类型,可是Excel中给出的数据并不是可以直接插入或者更新进数据库的.所以索性不考虑数据类型.全部以String类型进行处理,得到数据后在进行业务的处理
0 请登录后投票
   发表时间:2007-09-01  
有点意思.

不过搞复杂了,楼主下载处理excel的jdbc驱动程序,就可以象访问数据库那样访问excel
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics