Excel 报表导入导出
来源:互联网 发布:windows exec函数 编辑:程序博客网 时间:2024/04/28 08:50
使用 Excel 进行报表的导入导出,首先下载相关的 jar 和 excel util。
Excel Util 下载地址
引入依赖:
<!-- poi office --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.9</version></dependency>
把相应的 jar 和 util 类放到项目中就可以在需要打印出来的实体类的get方法加上注解@ExcelField
Excel 报表数据模板下载代码:
controller层:
/** * 下载导入Excel表信息数据模板 */ @RequiresPermissions("metermessage:meterMessage:view") @RequestMapping(value = "import/template") public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes, String houseType) { try { meterMessageService.importFileTemplate(response); return null; } catch (Exception e) { addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage()); } return "redirect:" + Global.getAdminPath() + "/metermessage/meterMessage/?repage&houseType=" + houseType; }
service层://Excel表信息数据模板public void importFileTemplate(HttpServletResponse response) throws IOException {String fileName = "Excel表信息数据导入模板.xlsx"; List<MeterMessage> list = Lists.newArrayList(); MeterMessage meter = new MeterMessage(); meter.setOfficeName("*****"); meter.setUnitNumber("1"); meter.setFloor("1"); meter.setRoomNumber("01"); meter.setMeterNo("001"); meter.setRate(new Double(10)); meter.setMeterTypeLabel("水表"); list.add(meter); new ExportExcel("Excel表信息数据", MeterMessage.class, 2).setDataList(list).write(response, fileName).dispose();}
Excel表信息导入代码:
controller层:
/** * 导入Excel信息数据 */ @RequiresPermissions("metermessage:meterMessage:edit") @RequestMapping(value = "import", method = RequestMethod.POST) public String importFile(MultipartFile file, RedirectAttributes redirectAttributes, String houseType) { if (Global.isDemoMode()) { addMessage(redirectAttributes, "演示模式,不允许操作!"); return "redirect:" + Global.getAdminPath() + "/metermessage/meterMessage/?repage&houseType=" + houseType; } try { String message = meterMessageService.importFile(file); addMessage(redirectAttributes, message); } catch (Exception e) { addMessage(redirectAttributes, "导入Excel信息失败!失败信息:" + e.getMessage()); } return "redirect:" + Global.getAdminPath() + "/metermessage/meterMessage/?repage&houseType=" + houseType; }
service层://导入excel信息数据@Transactional(readOnly = false)public String importFile(MultipartFile file) throws Exception {int successNum = 0; int failureNum = 0; int row = 3; StringBuilder failureMsg = new StringBuilder(); ImportExcel ei = new ImportExcel(file, 1, 0); List<MeterMessage> list = ei.getDataList(MeterMessage.class); Map<String, Object> map = new HashMap<String, Object>();// 去重复查询用 for (int i = 0; i < list.size(); i++) { MeterMessage meter = list.get(i); String officeName = meter.getOfficeName(); String unitNumber = meter.getUnitNumber(); String floor = meter.getFloor(); String roomNumber = meter.getRoomNumber(); String meterTypeLabel = meter.getMeterTypeLabel(); String meterNo = meter.getMeterNo(); Double rate = meter.getRate(); if (StringUtils.isNoneBlank(officeName)) { if (!map.containsKey(officeName)) { List<Office> officeList = officeDao.findOfficeByName(officeName); if (officeList != null && officeList.size() > 0) { meter.setOffice(officeList.get(0)); map.put(officeName, officeList.get(0)); } else { failureMsg.append("<br/>第" + row + "行数据:小区' " + officeName + "' 不存在,请先去'平台设置-->单位管理'创建该小区 ;"); failureNum++; } } else { meter.setOffice((Office) (map.get(officeName))); } } else { failureMsg.append("<br/>第" + row + "行数据:小区 不可为空 "); failureNum++; } String officeId = meter.getOffice().getId(); if (StringUtils.isNoneBlank(officeId) && StringUtils.isNoneBlank(unitNumber) && StringUtils.isNoneBlank(floor) && StringUtils.isNoneBlank(roomNumber)) { if(!map.containsKey(officeId+unitNumber+floor+roomNumber)) { HouseInformation house = houseInformationDao.findHouseIdByCondition(officeId, unitNumber, floor, roomNumber); if(house != null) { meter.setHouse(house); map.put(officeId+unitNumber+floor+roomNumber, house); } else { failureMsg.append("<br/>第" + row + "行数据:房屋' " + officeName + "' 不存在;"); failureNum++; } } else { meter.setHouse((HouseInformation) (map.get(officeId+unitNumber+floor+roomNumber))); } } else { failureMsg.append("<br/>第" + row + "行数据:房屋 不可为空 "); failureNum++; } if (StringUtils.isNoneBlank(meterTypeLabel)) { if(!map.containsKey(meterTypeLabel)) { String meterType = DictUtils.getDictValue(meterTypeLabel, "meter_type", "1"); if (StringUtils.isNoneBlank(meterType)) { meter.setMeterType(meterType); map.put(meterTypeLabel, meterType); } else { failureMsg.append("<br/>第" + row + "行数据:仪表类型 '" + meterTypeLabel + "' 不存在,请先去'平台设置-->系统设置-->字典管理'创建该仪表类型 "); failureNum++; } } else { meter.setMeterType((String)(map.get(meterTypeLabel))); } } else { failureMsg.append("<br/>第" + row + "行数据:仪表类型 不可为空 "); failureNum++; } if (StringUtils.isNoneBlank(meterNo)) { meter.setMeterNo(meterNo); } else { failureMsg.append("<br/>第" + row + "行数据:仪表编号 不可为空 "); failureNum++; } if (rate != null) { meter.setRate(rate); } else { failureMsg.append("<br/>第" + row + "行数据:倍率 不可为空 "); failureNum++; } meter.preInsert(); row++; } if (failureNum > 0) { failureMsg.insert(0, ",失败 " + failureNum + " 条Excel信息,导入信息如下:"); } else { try { if (list != null && list.size() > 0) { dao.insertMeterList(list); successNum = list.size(); } } catch (ConstraintViolationException ex) { failureMsg.append("<br/>excel信息 导入失败:"); List<String> messageList = BeanValidators.extractPropertyAndMessageAsList(ex, ": "); for (String message : messageList) { failureMsg.append(message + "; "); failureNum++; } } catch (Exception ex) { failureNum++; failureMsg.append("<br/>excel信息 导入失败:" + ex.getMessage()); } } return "已成功导入 " + successNum + " 条excel信息" + failureMsg;}
0 0
- Excel 报表导入导出
- 企业级报表Excel导入导出
- Excel 导入导出,统计报表(C#)
- 报表开发之批量导入导出Excel
- 报表开发之批量导入导出Excel
- c# 导入excel处理数据,导出excel报表
- 使用工具类 使用poi导入导出excel报表
- POI报表导入导出
- PHP 导出EXCEL报表
- 导出Word、Excel报表
- .net 导出Excel报表
- java 导出 Excel 报表
- 采用excel导出报表
- C#导出Excel报表
- 导出excel报表
- C# 导出EXCel报表
- 导出excel报表
- Excel报表的导出
- android 四大组件之Activity
- Dom3
- 业精于勤荒于嬉
- Shell编程(1)
- 前端经典面试题: 从输入URL到页面加载发生了什么?
- Excel 报表导入导出
- 剑指offer-28.数组中出现次数超过一半的数字
- E
- PAT1007. 素数对猜想 (20)
- Codeforces803G Periodic RMQ Problem
- 解决VMware中的linux能上网不能ping通
- Python笔记(函数)
- URAL
- SRM589 Div1Medium GearsDiv1