POI解决EXCLE导入03,07兼容性问题
来源:互联网 发布:centos6.5图形网络配置 编辑:程序博客网 时间:2024/05/29 19:05
项目中需要用到数据录入,由此需要在项目中做一个EXCLE导入数据功能,原先项目导入是用jxl写的,我进行用poi优化与改造。
我们先写一个工具类来判断文件的格式与版本。
<span style="white-space:pre"></span>/** * 获取文件名称后缀 * @param filename * @return */public static String getExtensionName(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; }导入domain层代码:
/** * 导入 * @param pset */public void insertProjectCform(ParameterSet pset){//楼上获取文件流信息Record record=(Record)pset.get("records");ExcelUploadFile excelUploadFile=(ExcelUploadFile)record.toBean(ExcelUploadFile.class);UploadFile file =excelUploadFile.getCformFile();<span style="font-family: Arial, Helvetica, sans-serif;">//平常的获取路径的写法,是适用于本机。</span>Workbook xwb = null;//定义工作簿try {if(FileUtil.getExtensionName(file.toString()).equals("xls")){xwb = new HSSFWorkbook(file.getInputStream());//System.out.print("xls版本");}else{xwb = new XSSFWorkbook(file.getInputStream());//System.out.print("xlsx版本");}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}/*********读取excel里的数据**************/Sheet uploadsheet=xwb.getSheetAt(0);Row row = null;//对应excle的行//接受数据对象Syj syj = null; //接受数据对象ListList<Syj> list = new ArrayList<Syj>();//定义删除所需的List集合List<String> delList = new ArrayList<String>();//定义批量删除所需的数组Object[] delarray = null;int totalRow = uploadsheet.getLastRowNum();//得到excle的总记录条//企业名称集合List<String> qymcList = new ArrayList<String>();for (int i = 1; i <= totalRow; i++) {row = uploadsheet.getRow(i);qymcList.add(row.getCell(1).toString());}<span style="white-space:pre"></span>//数据集DataSet ds = qcmd.queryJgdmXzqhXzqhdm(qymcList);for (int i = 1; i <= totalRow; i++) { syj = new Syj(); row = uploadsheet.getRow(i); if(row.getCell(0).toString()==""){//数据主件为空则结束循环,EXCLE用户可能并没输入信息但是表格也在也会被读取会报空值错误 break; } String Qymc= row.getCell(1).toString(); Record recordds=GetRecord(Qymc,ds); //java中的Ds并没有检索信息的功能只能自己写了.... syj.setXxxx(row.getCell(0).toString());// Cell cell=row.getCell(7);// cell.setCellType(Cell.CELL_TYPE_STRING);//设置列的类型为String 要不然有时候数是浮点 syj.setLxdh(getCellValue(row.getCell(7)));//调用后面写的格式方法 //对机构代码集合进行遍历,查找出单条数据匹配的对象 //将匹配到的对象,赋值 / // syj.setgggg(zjjdao.queryXXXX(syj.getQymc()));// syj.setxxxzqh(zjjdao.queryAAA(syj.getJgdm()));// syj.setxxxxzqhdm(zjjdao.queryBBB(syj.getJgdm())); //上面的方法对性能来说比较差,每一次都要去数据库匹配这样不行~<span style="white-space:pre"></span> //获取数据集DS中检索出来匹配的记录进行赋值 if(recordds!=null){ syj.setgggg(recordds.get("zzjgdm").toString()); syj.set<span style="font-family: Arial, Helvetica, sans-serif;">xxxzqh</span>(recordds.get("xzqh").toString()); syj.setxxxxzqhdm(recordds.get("xzqhdm").toString()); } <span style="white-space:pre"></span>//批量删除LIST集合 delList.add(syj.getXkzh());<span style="white-space:pre"></span>//批量插入LIST集合 list.add(syj);}delarray = delList.toArray();/*批量操作*/dao.batchDelete(delarray);dao.batchInsert(list);}
更改Cell的类型格式方法:
/* * 依据用户可能输入错误(电话号码不是字符串格式,和日期不是字符串格式) */public String getCellValue(Cell cell){String value = null;switch(cell.getCellType()){case Cell.CELL_TYPE_STRING://字符串类型value = cell.getStringCellValue(); //必须加~要不然调用的时候会变空值break;case Cell.CELL_TYPE_NUMERIC:cell.setCellType(Cell.CELL_TYPE_STRING);//将Excle列格式转换value = cell.getStringCellValue();break;default:break;}return value;}
JAVA中对Dataset的操作:
<span style="white-space:pre"></span>/** * 从数据集ds中检索需要的信息记录并提取出来 * @param qymc * @param ds * @return */public Record GetRecord(String str,DataSet ds){Record R = null;Record R1 = null;for(int i=0;i<=ds.getCount()-1;i++){R1=ds.getRecord(i);if(R1.get("记录中的值").equals(str)){R=R1;}}return R; //返回record}
总结:尽量匹配数据不需要动用数据库就不要动用数据库,将数据存入程序中检索,这对性能上会有极大的提高。
减少数据库语句执行次数也是提升性能的办法之一。有什么疑问,请留言或评论,还有更好的方法可以和我交流分享下
谢谢~
1 0
- POI解决EXCLE导入03,07兼容性问题
- springMVC导入excle poi
- Apache POI 导入导出EXCLE
- POI实现大数据EXCLE导入导出,解决内存溢出问题
- poi(excle)
- 导入Excle
- Excle导入
- Java Poi 操作Excle
- poi读Excle
- POI导出Excle HSSF
- poi读取excle文件
- poi导出excle
- Java Poi 操作Excle
- POI遍历Excle表
- POI导出excle数据
- SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据
- POI导入EXCLE过程中的处理日期类型单元格的一些小技巧
- SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库
- poj 3259 Wormholes 【SPFA&&判断负环】
- 【leetcode】Longest Substring Without Repeating Characters
- Java 将文件打包成 tar 文件
- pyrDown和pyrUp函数
- 今日笔记之 页面跳转 为tableview添加手势关闭键盘 textview获取焦点
- POI解决EXCLE导入03,07兼容性问题
- iOS ARC也会有内存泄露
- mongodb创建集合
- notifyDataSetChanged()刷新ListView(使用JSONArray绑定的Adapter)
- 2015年多校训练总结
- jsapi微信支付v3版
- 数据挖掘学习路线
- Deck
- Android之ExpandableListView的属性(Group不展开)