HAP框架EXCEL数据导入开发.docx
- 文档编号:23736436
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:12
- 大小:45.26KB
HAP框架EXCEL数据导入开发.docx
《HAP框架EXCEL数据导入开发.docx》由会员分享,可在线阅读,更多相关《HAP框架EXCEL数据导入开发.docx(12页珍藏版)》请在冰豆网上搜索。
HAP框架EXCEL数据导入开发
EXCEL数据导入开发
Author:
ShenWei
CreationDate:
2016-07-18
LastUpdated:
2016-07-24
DocumentRef:
EXCEL数据导入开发
Version:
1.0
文档控制
更改记录
日期
作者
版本
更改参考
2016-07-18
1.0
无前版本
内容目录
文档控制i
更改记录i
内容目录ii
1.文档说明1
1.1.使用的技术及适用范围1
1.2.POI的使用1
2.使用POI导入EXCEL中的数据3
2.1.解析EXCEL中的数据3
2.2.将得到的数据显示到页面上6
2.3.附件7
3.未结与已结问题8
未接问题8
已结问题8
1.文档说明
本文档主要是讲述了如何使用POI实现导入Excel表格到前台的LigerUIGrid中显示
1.1.使用的技术及适用范围
1.1.1.使用框架
POI
LigerUI
1.1.2.使用范围
POI作为一个通用的导入导出工具,可以在任意的java应用中使用。
这里导出基于HAPLigerUI框架。
1.2.POI的使用
1.2.1.POI的下载以及引用
http:
//poi.apache.org/download.html
到这里下载合适的POI版本,这里使用的是3.14版本并且测试成功
导入其中所有的jar包到项目中。
若使用的是maven项目,那么需要将以下代码添加到pom.xml中
1.2.2.LigerUI的引用
在Hap框架之下,LigerUI是可以直接使用了的。
仅需要在自己所创建的页面顶加上<#include"../include/head.html">以导入在head.xml中已经导入的必要的js文件。
2.使用POI导入EXCEL中的数据
这里首先解析EXCEL中每一行的数据,再将其包装成对象,最后将其显示到LigerUIGrid中
2.1.解析EXCEL中的数据
2.1.1.规定EXCEL的格式
由于需要将解析EXCEL成为对象需要用到反射,那么需要知道属性名以及EXCEL的列名是需要对应的,或者在程序中将它们一一对应起来,而且只支持简单的EXCEL单元格。
2.1.2.解析EXCEL
首先需要加载excel文件
publicvoidinit(Filefile){
FileInputStreamin;
try{
in=newFileInputStream(file);
book=newHSSFWorkbook(in);
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
然后将excel表中间的列名与类的属性名一一对应起来
privatevoidloadHeader(HSSFSheetsheet){
this.header=newHashMap
HSSFRowrow=sheet.getRow(HEADER);
intcolumns=row.getLastCellNum();
for(inti=0;i System.out.println("加载标题栏: "+row.getCell(i).getStringCellValue()); Stringvalue=row.getCell(i).getStringCellValue(); if(null==value){ thrownewRuntimeException("标题栏不能为空! "); } header.put(i,value); } System.out.println("<<<<<<<<<<<<标题栏加载完毕>>>>>>>>>>>"); } 这里实现的是将excel中的数据加载成一个个对象,并且返回一个list public throwsException{ init(file);//加载文件 HSSFSheetsheet=this.book.getSheetAt(0); intcrow=sheet.getLastRowNum();//获取行数 if(crow<1){ returnnewArrayList } this.loadHeader(sheet);//加载列名数据 List for(inti=START;i<=crow;i++){ HSSFRowrow=sheet.getRow(i); intccell=row.getLastCellNum(); Tinstance=(T)clazz.newInstance(); for(intcolumn=0;column HSSFCellcell=row.getCell(column); //判断单元格的数据类型 Stringvalue=loadCellToString(cell); //获取单元格的值 StringcolName=header.get(column); if(null==value){ //如果为必填的则将错误信息记录 if(required){ this.error.add("第"+(i+1)+"行,"+colName+"为空"); System.out.println("第"+(i+1)+"行,"+colName+"为空"); continue; } }else{ //加载实际值 System.out.println("+++++++++++++++++++++"+colName); this.loadValue(clazz,instance,this.associations.get(colName) value,i,colName); } } if(error.size()>MAX_ERROR){ //抛出异常语句 } result.add(instance); } System.out.println("<<<<<装换完成" +(this.hasError()? "有错误信息": "") +",共有对象: "+result.size() +"个"+">>>>>>"); returnresult; } 其中涉及到两个比较重要的方法 将表格中的数据读出: privateStringloadCellToString(HSSFCellcell){ Stringvalue=null; switch(cell.getCellType()){ caseHSSFCell.CELL_TYPE_BOOLEAN: value=String.valueOf(cell.getBooleanCellValue()); break; caseHSSFCell.CELL_TYPE_NUMERIC: //判断当前的cell是否为Date if(HSSFDateUtil.isCellDateFormatted(cell)){ value=this.formateDate(cell.getDateCellValue()); }else{ value=String.valueOf((long)cell.getNumericCellValue()); } break; caseHSSFCell.CELL_TYPE_STRING: value=cell.getStringCellValue(); break; caseHSSFCell.CELL_TYPE_FORMULA: System.out.println("不支持函数! "); break; } returnvalue; } 以及运用反射来封装对象: private throwsSecurityException,NoSuchMethodException,Exception{ StringgetMethod=this.initGetMethod(attrName); //Classtype=clazz.getDeclaredMethod(getMethod, //null).getReturnType(); Classtype=clazz.getMethod(getMethod,null).getReturnType(); Methodmethod=clazz.getMethod(this.initSetMethod(attrName),type); if(type==String.class){ method.invoke(instance,value); }elseif(type==int.class||type==Integer.class){ try{ method.invoke(instance,Integer.parseInt(value)); }catch(NumberFormatExceptione){ //如果数值转换出错就直接赋其代表错误 error.add("第"+(row+1)+"行,"+colName+"字段,数据转换错误,设置为错误值! "); method.invoke(instance,ExcelHelper.ERROR_NUM); } }elseif(type==long.class||type==Long.class){ try{ method.invoke(instance,Long.parseLong(value)); }catch(NumberFormatExceptione){ //如果数值转换出错就直接赋其代表错误 error.add("第"+(row+1)+"行,"+colName+"字段,数据转换错误,设置为错误值! "); method.invoke(instance,ExcelHelper.ERROR_NUM); } }elseif(type==float.class||type==Float.class){ try{ method.invoke(instance,Float.parseFloat(value)); }catch(NumberFormatExceptione){ //如果数值转换出错就直接赋其代表错误 error.add("第"+(row+1)+"行,"+colName+"字段,数据转换错误,设置为错误值! "); method.invoke(instance,ExcelHelper.ERROR_FLOAT); } }elseif(type==double.class||type==Double.class){ try{ method.invoke(instance,Double.parseDouble(value)); }catch(NumberFormatExceptione){ //如果数值转换出错就直接赋其代表错误 error.add("第"+(row+1)+"行,"+colName+"字段,数据转换错误,设置为错误值! "); method.invoke(instance,ExcelHelper.ERROR_DOUBLE); } }elseif(type==BigDecimal.class){ try{ method.invoke(instance,newBigDecimal(value)); }catch(NumberFormatExceptione){ //如果数值转换出错就直接赋其代表错误 method.invoke(instance,ExcelHelper.ERROR_BIGDECIMAL); } }elseif(type==Date.class){ try{ method.invoke(instance,this.parseDate(value)); }catch(NumberFormatExceptione){ //如果数值转换出错就直接赋其代表错误 method.invoke(instance,ExcelHelper.ERROR_DATE); } } } 2.2.将得到的数据显示到页面上 2.2.1.前台LigerUI显示代码 其中由于需要显示错误信息,所以在grid里面通过一个渲染函数将某些不正确的数据以醒目的颜色标记出来,这些数据在上述代码做解析的时候就已经将不正确的数据做过有规则的处理 render: function(item){ varhtml; varv=item.varietyName; if(v.indexOf("不存在")>0){ html=" red'>"+v+""; item.varietyId=0.1; }else{ html=v; } returnhtml; } 2.2.2.显示效果展示 其中红色部分为异常输入的提示。 2.3.附件 3.未结与已结问题 未接问题 序号 问题 解决方案 负责人 目标日期 实际日期 已结问题 序号 问题 解决方案 负责人 目标日期 实际日期
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HAP 框架 EXCEL 数据 导入 开发
![提示](https://static.bdocx.com/images/bang_tan.gif)