论坛首页 Java企业应用论坛

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

浏览 21215 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-01  
wangweij 写道
关于定义数据类型也考虑过.甚至想过可以定义对象类型,可是Excel中给出的数据并不是可以直接插入或者更新进数据库的.所以索性不考虑数据类型.全部以String类型进行处理,得到数据后在进行业务的处理

牵涉到的类型无非就那么几种,整型,日期处理起来难度都不大,无非就多一个判断而已。全部String类型放到业务中再处理,这样耦合度不就高了?
个人愚见应该是抛給业务的已经是全部处理好的pojo集合了。
0 请登录后投票
   发表时间:2007-09-01  
说的有道理.一般类型的都可以处理.最好也是返回一个"处理好的"POJO(处理好..有点渗入业务代码的味道)
不过想返回一个业务需要的POJO试想下是否可能实现?
比如:

用户:User
public class User{

      private Integer userID;

      private String userName;

      private Sex sex;  

      private Folk folk;

      private Degree degree;
}


Excel给出如下:


用户名称  性  别   民  族   学  历
  xxx     男性      汉      大学



难道也要将Sex等数据也处理好?
0 请登录后投票
   发表时间:2007-09-03  
我在应用中碰到的情况一般通过excel读入的都是需要持久化的数据。而excel中数据一般只是po的一部分。而且涉及到导入到多张表的时候通过配置文件就比较麻烦了。
0 请登录后投票
   发表时间:2007-09-06  
crossgrass 写道
我在应用中碰到的情况一般通过excel读入的都是需要持久化的数据。而excel中数据一般只是po的一部分。而且涉及到导入到多张表的时候通过配置文件就比较麻烦了。

这里不太明白您说的麻烦是什么意思?能具体说下需求吗?po的一部分就只需取excel对应列的数据就ok了,多表掺杂起来也不会影响处理难度的哦。您能给下您的具体excel模板与pojo类看下?
0 请登录后投票
   发表时间:2007-09-06  
发现这个题目的资料不是很多,多是excel读写或者转换成xml的内容,问下各位大牛,google这个项目相关的英文资料该搜什么关键词?
0 请登录后投票
   发表时间:2007-09-07  
有没有处理复杂的EXCEL的解决方法呢?
我的工作中经常要解析EXCEL文档,分大格和小格
0 请登录后投票
   发表时间:2007-09-07  

 

 

 

性别这一列是user的一个对象.像这种的就不可能封入到PO中直接用了.但是如果此列中的数据是性别的ID.就应该能解决了.

在配置文件中置配

 

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" type="string">pop>  
  5.     <pop    
  6.             excelPop="性别"    
  7.             classPop="sex"  
  8.             type="com.bjce.uum.excel.domain.Sex"    
  9.             tableId="sex_id"  
  10.             table="XXX_SEX">  
  11.     pop>  
  12.     <pop excelPop="出生日期" classPop="birthday" type="date">pop>  
  13.     <pop excelPop="单位编码" classPop="unitCode" type="integer">pop>  
  14.     <pop excelPop="固定电话" classPop="phone" type="string">pop>  
  15.     <pop excelPop="移动手机" classPop="mobilePhone" type="integer">pop>  
  16.   class>  
  17. excel-mapping>  

可惜.用户是不可能也不想知道性别的ID的.所以此方法基本不可行

  • 大小: 22.9 KB
0 请登录后投票
   发表时间:2007-09-07  
用XML来做模板  做一个通用类 来导出EXCEL  我用C#做了一个

<?xml version="1.0" encoding="utf-8" ?>
<report>
  <page>  <!-- 页面设置 -->
    <add key="cols"  value="1" />
    <add key="1" tmn="1.2" bmn="1.2" lmn="1" rmn="1" hmn="0" lhr="" chr="" rhr="" fmn="0" lfr="" cfr="" rfr="" prno="0" bds="0" prs="33" pcs="7" />
  </page>

  <titile>  <!--  标题 -->
    <add key="cols"  value="1" />
    <add key="1" txt="旬 总 表" font="宋体" size="20" bold="1" rows="1" col1="1" col2="7" width="0" height="90" bds="0" align="2" valign="2" />
  </titile>

  <brow>  <!-- 表眉 -->
    <add key="cols"  value="2" font="黑体" size="11" bold="0"  rows="1" />
    <add key="1" txt="年  份:" font="黑体"  size="11"  bold="0"  rows="1"  col1="1"  col2="6"  width="0"  height="20"  align="2"  valign="1"  tbr="0"  bbr="0"  lbr="0"  rbr="0"  field="yf"  fadd="0"  rowadd="0" />
    <add key="2" txt=""         font="宋体"  size="11"  bold="0"  rows="1"  col1="7"  col2="7"  width="0"  height="20"  align="2"  valign="3"  tbr="0"  bbr="0"  lbr="0"  rbr="0"  field="#pageno"  fadd="0"  rowadd="0" />
  </brow>

  <head>  <!--  表头 -->   <!-- rows 表示行数 -->
    <add key="cols"  value="7"   font="黑体"  size="11" bold="0"  rows="1" />
    <add key="1"  txt="票据类型"      font="黑体"  size="11"  bold="0"  rows="1"  col1="1"  col2="1"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
    <add key="2"  txt="期初结存份数"  font="黑体"  size="11"  bold="0"  rows="1"  col1="2"  col2="2"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
    <add key="3"  txt="本旬领入份数"  font="黑体"  size="11"  bold="0"  rows="1"  col1="3"  col2="3"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
    <add key="4"  txt="本旬核销份数"  font="黑体"  size="11"  bold="0"  rows="1"  col1="4"  col2="4"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
    <add key="5"  txt="本旬核销废票"  font="黑体"  size="11"  bold="0"  rows="1"  col1="5"  col2="5"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="0"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
    <add key="6"  txt="本旬核销金额"  font="黑体"  size="11"  bold="0"  rows="1"  col1="6"  col2="6"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
    <add key="7"  txt="期末结存份数"  font="黑体"  size="11"  bold="0"  rows="1"  col1="7"  col2="7"  width="0"  height="20"  align="2"  valign="2"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field=""  fadd="0"  rowadd="0" />
  </head>

  <data>  <!-- 数据区 -->
    <add key="cols"  value="7" font="宋体" size="11" bold="0" tbr="1"  bbr="1"  lbr="1"  rbr="1" border="1" height="20"/>
    <add key="1" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="1"  col2="1"  width="13"  height="20"  align="2"  valign="1"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="Shty"  fadd="0"  rowadd="0" />
    <add key="2" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="2"  col2="2"  width="12"  height="20"  align="2"  valign="3"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="GetBe"         fadd="0"  rowadd="0" />
    <add key="3" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="3"  col2="3"  width="12"  height="20"  align="2"  valign="3"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="GetEn"         fadd="0"  rowadd="0" />
    <add key="4" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="4"  col2="4"  width="12"  height="20"  align="2"  valign="3"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="UseBe"         fadd="0"  rowadd="0" />
    <add key="5" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="5"  col2="5"  width="12"  height="20"  align="2"  valign="3"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="UseEn"         fadd="0"  rowadd="0" />
    <add key="6" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="6"  col2="6"  width="12"  height="20"  align="2"  valign="3"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="TotBe"         fadd="0"  rowadd="0" />
    <add key="7" txt=""  font="宋体"  size="11"  bold="0"  rows="1"  col1="7"  col2="7"  width="12"  height="20"  align="2"  valign="3"  tbr="1"  bbr="1"  lbr="1"  rbr="1"  field="TotEn"         fadd="0"  rowadd="0" />
  </data>

  <foot>  <!-- 表脚 -->
    <add key="cols"  value="3" font="黑体" size="11" bold="0" rows="1" />
    <add key="1" txt="负责人:"  font="黑体"  size="11"  bold="0"  rows="1"  col1="1"  col2="2"  width="0"  height="20"  align="2"  valign="1"  tbr="0"  bbr="0"  lbr="0"  rbr="0"  field="fzr"  fadd="0"  rowadd="0" />
    <add key="2" txt="审  核:"  font="黑体"  size="11"  bold="0"  rows="1"  col1="3"  col2="4"  width="0"  height="20"  align="2"  valign="1"  tbr="0"  bbr="0"  lbr="0"  rbr="0"  field="shr"  fadd="0"  rowadd="0" />
    <add key="3" txt="制表人:"  font="黑体"  size="11"  bold="0"  rows="1"  col1="5"  col2="7"  width="0"  height="20"  align="2"  valign="1"  tbr="0"  bbr="0"  lbr="0"  rbr="0"  field="zbr"  fadd="0"  rowadd="0" />
  </foot>

</report>


0 请登录后投票
   发表时间:2007-09-07  
xml 代码
  1. <pop        
  2.             excelPop="性别"        
  3.             classPop="sex"      
  4.             type="com.bjce.uum.excel.domain.Sex"        
  5.             tableId="sex_id"      
  6.             table="XXX_SEX">      
  7.     pop>    

这里的性别您自己又定义了一个Sex类?性别不应该是user的一个属性吗?为什么又单独定义一个类?如果是user的属性的话,读取出来的是string类型这里加一个判断,转换下塞给user类不就ok了?

楼上的c#代码??没太看明白,但好像您没有看明白我们讨论的问题。

=============================

大家觉得通用性的通过xml配置文件处理Excel文件有实际应用价值吗?会不会太简单而没研究价值?查了好多paper,国内似乎真没这个方面的,是太过简单还是不值得发?

Tks all

0 请登录后投票
   发表时间:2007-09-07  

因为user中sex是一个性别对象,从Excel中得到的只是sex.name....需要转为sex对象后才可以直接用.否则得到的集合还是需要进行转换的.

可以在读取Excel时进行处理.但有些时候处理这种问题通常有一个处理规则.也许这种规则很复杂.

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

上面的置配文件中.配了sex属性对应的对象.表名,主键.这样的话可以根据XXX_SEX和主键来查出对应类在放入对象.

如果Excel中性别这一列中数据为sex主键的话:)

0 请登录后投票
论坛首页 Java企业应用版

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