首页 > 代码库 > java Excel 导入导出
java Excel 导入导出
使用poi实现springMVC的Excel导入导出
需要jar包:poi.jar poi-ooxml.jar poi-ooxml-schemas.jar xbean.jar(用于解析excel2007)
controller层导出:
1 // 导出excel 2 if (action != null && action.equals("export")) { 3 List<LoadPriceShipownerQueryItem> exportList = priceShipownerService 4 .getPriceShipownerListByCondition(condition, pagingInfo); 5 HSSFWorkbook workbook = priceShipownerService 6 .priceShipownerExportExcel(exportList); 7 String filename = "priceShipowner.xls"; 8 OutputStream out = response.getOutputStream(); 9 response.setHeader("Content-disposition", "attachment;filename="10 + URLEncoder.encode(filename, "UTF-8"));11 response.setContentType("application/msexcel;charset=UTF-8");12 workbook.write(out);13 if (out != null) {14 out.close();15 }16 workbook.close();17 }
controller层导入:
1 // 导入Excel 2 if (action != null && action.equals("import")) { 3 final String memorySize = Config.get("memorySize");// 内存缓冲大小 4 final String sizeMax = Config.get("sizeMax");// 文件允许的最大值 5 if (ServletFileUpload.isMultipartContent(request)) { 6 // 创建磁盘工厂 7 DiskFileItemFactory factory = new DiskFileItemFactory(); 8 // 设置内存缓冲大小 9 factory.setSizeThreshold(Integer.parseInt(memorySize));10 // 设置临时目录11 String tempdir = request.getServletContext().getRealPath(12 "/tempDir");13 File temDirFile = new File(tempdir);14 if (!temDirFile.exists()) {15 temDirFile.mkdir();16 }17 factory.setRepository(temDirFile);18 // 创建处理工具19 ServletFileUpload upload = new ServletFileUpload(factory);20 // 设置最大允许的尺寸21 int setFileSize = Integer.parseInt(sizeMax);22 int fileSize = request.getContentLength();23 upload.setSizeMax(setFileSize);24 if (fileSize <= setFileSize) {25 // 解析26 String contentType = request.getContentType();27 if (contentType == null && "".equals(contentType)) {28 mv.addObject("msg", "文件上传失败");29 }30 List<FileItem> fileItems = upload.parseRequest(request);31 Iterator<FileItem> iter = fileItems.iterator();32 for (; iter.hasNext();) {33 FileItem fileItem = (FileItem) iter.next();34 String fileName = fileItem.getName();35 InputStream is = fileItem.getInputStream();36 priceShipownerService.priceShipownerImportExcel(37 fileName, is);38 }39 }40 }41 }
service层导出:
1 // 第一步,创建一个webbook,对应一个Excel文件 2 HSSFWorkbook workbook = new HSSFWorkbook(); 3 4 // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet 5 HSSFSheet sheet = workbook.createSheet("船东面价管理表"); 6 sheet.setDefaultColumnWidth(10);// 默认列宽 7 // 设置第1列、第4列、第5列、第10列、第11列 的列宽 8 sheet.setColumnWidth(0, 10 * 256); 9 sheet.setColumnWidth(3, 15 * 256); 10 sheet.setColumnWidth(4, 15 * 256); 11 sheet.setColumnWidth(11, 20 * 256); 12 sheet.setColumnWidth(12, 20 * 256); 13 // 合并第一行标题单元格 14 sheet.addMergedRegion(new CellRangeAddress((short) 0, (short) 0, 15 (short) 0, (short) 12)); 16 17 // 第三步,创建单元格样式 18 HSSFCellStyle style = workbook.createCellStyle(); 19 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 20 style.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); 21 // 设置边框 22 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框 23 style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 24 style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 25 style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 26 27 // 第四步,设置Title标题格式和内容 28 HSSFFont font = workbook.createFont(); 29 font.setFontName("黑体");// 设置字体 30 font.setFontHeightInPoints((short) 18);// 设置字体大小 31 HSSFCellStyle titleStyle = workbook.createCellStyle();// 创建样式 32 titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中 33 titleStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 垂直居中 34 // 设置边框 35 titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框 36 titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 37 titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 38 titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 39 titleStyle.setFont(font); 40 41 HSSFRow rowTitle = sheet.createRow(0);// 取得sheet第一行 42 rowTitle.setHeight((short) (40 * 20));// 设置行高 43 HSSFCell cellTitle = rowTitle.createCell(0);// 取得第一行第一列 44 cellTitle.setCellValue("船东面价表");// 设置标题 45 cellTitle.setCellStyle(titleStyle);// 为第一行标题加入样式 46 47 // 第五部,设置Header格式和内容 48 HSSFFont fontHeader = workbook.createFont(); 49 fontHeader.setFontName("黑体"); 50 fontHeader.setFontHeightInPoints((short) 12);// 设置字体大小 51 HSSFCellStyle headerStyle = workbook.createCellStyle(); 52 headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个横向居中 53 headerStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 创建垂直居中 54 // 设置边框 55 headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框 56 headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 57 headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 58 headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 59 headerStyle.setFont(fontHeader);// 设置字体 60 61 // 设置表头 62 HSSFRow rowHeader = sheet.createRow(1); 63 rowHeader.setHeight((short) (25 * 20)); 64 HSSFCell cellHeader = rowHeader.createCell(0); 65 cellHeader.setCellValue("序号"); 66 cellHeader.setCellStyle(headerStyle); 67 cellHeader = rowHeader.createCell(1); 68 cellHeader.setCellValue("航线"); 69 cellHeader.setCellStyle(headerStyle); 70 cellHeader = rowHeader.createCell(2); 71 cellHeader.setCellValue("船公司"); 72 cellHeader.setCellStyle(headerStyle); 73 cellHeader = rowHeader.createCell(3); 74 cellHeader.setCellValue("起运港"); 75 cellHeader.setCellStyle(headerStyle); 76 cellHeader = rowHeader.createCell(4); 77 cellHeader.setCellValue("目的港"); 78 cellHeader.setCellStyle(headerStyle); 79 cellHeader = rowHeader.createCell(5); 80 cellHeader.setCellValue("航程"); 81 cellHeader.setCellStyle(headerStyle); 82 cellHeader = rowHeader.createCell(6); 83 cellHeader.setCellValue("船期"); 84 cellHeader.setCellStyle(headerStyle); 85 cellHeader = rowHeader.createCell(7); 86 cellHeader.setCellValue("币种"); 87 cellHeader.setCellStyle(headerStyle); 88 cellHeader = rowHeader.createCell(8); 89 cellHeader.setCellValue("20GP"); 90 cellHeader.setCellStyle(headerStyle); 91 cellHeader = rowHeader.createCell(9); 92 cellHeader.setCellValue("40GP"); 93 cellHeader.setCellStyle(headerStyle); 94 cellHeader = rowHeader.createCell(10); 95 cellHeader.setCellValue("40HQ"); 96 cellHeader.setCellStyle(headerStyle); 97 cellHeader = rowHeader.createCell(11); 98 cellHeader.setCellValue("有效起始日期"); 99 cellHeader.setCellStyle(headerStyle);100 cellHeader = rowHeader.createCell(12);101 cellHeader.setCellValue("有效结束日期");102 cellHeader.setCellStyle(headerStyle);103 104 // 输出日期格式105 SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");106 107 // 创建Content内容108 for (int i = 0; i < exportList.size(); i++) {109 LoadPriceShipownerQueryItem priceShipowner = exportList.get(i);110 111 // LineCname 转 LineCode112 BacLineModel bacLineModel = new BacLineModel();113 bacLineModel.setLineCode(priceShipowner.getLineCode());114 List<BacLineModel> Linelist = bacLineManger115 .findByExample(bacLineModel);116 String LineCname = Linelist.iterator().next().getLineCname();117 118 // 第六步,创建单元格,并设置值119 HSSFRow rowContent = sheet.createRow(i + 2);120 rowContent.setHeight((short) (17 * 20));121 122 HSSFCell cellContent = rowContent.createCell(0);123 124 cellContent.setCellValue(i + 1);125 cellContent.setCellStyle(style);126 127 cellContent = rowContent.createCell(1);128 cellContent.setCellValue(LineCname);129 cellContent.setCellStyle(style);130 131 cellContent = rowContent.createCell(2);132 cellContent.setCellValue(priceShipowner.getShipownerCname());133 cellContent.setCellStyle(style);134 135 cellContent = rowContent.createCell(3);136 cellContent.setCellValue(priceShipowner.getLoadPortCname());137 cellContent.setCellStyle(style);138 139 cellContent = rowContent.createCell(4);140 cellContent.setCellValue(priceShipowner.getDestPortCname());141 cellContent.setCellStyle(style);142 143 cellContent = rowContent.createCell(5);144 cellContent.setCellValue(priceShipowner.getVoyage());145 cellContent.setCellStyle(style);146 147 cellContent = rowContent.createCell(6);148 cellContent.setCellValue(priceShipowner.getSailingDec());149 cellContent.setCellStyle(style);150 151 cellContent = rowContent.createCell(7);152 cellContent.setCellValue(priceShipowner.getCurrency());153 cellContent.setCellStyle(style);154 155 cellContent = rowContent.createCell(8);156 cellContent.setCellValue(priceShipowner.getPrice20gp());157 cellContent.setCellStyle(style);158 159 cellContent = rowContent.createCell(9);160 cellContent.setCellValue(priceShipowner.getPrice40gp());161 cellContent.setCellStyle(style);162 163 cellContent = rowContent.createCell(10);164 cellContent.setCellValue(priceShipowner.getPrice40hq());165 cellContent.setCellStyle(style);166 167 cellContent = rowContent.createCell(11);168 cellContent.setCellValue(df.format(priceShipowner169 .getValidityStart()));170 cellContent.setCellStyle(style);171 172 cellContent = rowContent.createCell(12);173 cellContent174 .setCellValue(df.format(priceShipowner.getValidityEnd()));175 cellContent.setCellStyle(style);176 }177 return workbook;
service层导入:
1 // 获取当前用户 2 UserSessionEntity userEntity = Context.getCurrentUser(); 3 List<PriceShipownerModel> importLst = new ArrayList<PriceShipownerModel>(); 4 Workbook workbook = null; 5 if (fileName.matches("^.+\\.(?i)(xls)$")) { 6 // Excel2003 7 workbook = new HSSFWorkbook(is); 8 } else if ((fileName.matches("^.+\\.(?i)(xlsx)$"))) { 9 // Excel2007 10 workbook = new XSSFWorkbook(is); 11 } else { 12 throw new Exception("文件类型错误"); 13 } 14 /** 得到第一个shell */ 15 Sheet sheet = workbook.getSheetAt(0); 16 /** 得到Excel的行数 */ 17 int totalRows = sheet.getPhysicalNumberOfRows(); 18 // 设置时间格式 19 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 20 /** 循环Excel的行 */ 21 for (int r = 2; r < totalRows; r++) { 22 Row row = sheet.getRow(r); 23 // LineCname 转 LineCode 24 BacLineModel bacLineModel = new BacLineModel(); 25 bacLineModel.setLineCname(getValue(row.getCell(1))); 26 List<BacLineModel> Linelist = bacLineManger 27 .findByExample(bacLineModel); 28 String LineCode = Linelist.iterator().next().getLineCode(); 29 // ShipownerCname 转 ShipownerCode 30 BacShipownerModel bacShipownerModel = new BacShipownerModel(); 31 bacShipownerModel.setShipownerCname(getValue(row.getCell(2))); 32 List<BacShipownerModel> Shipownerlist = bacShipownerManger 33 .findByExample(bacShipownerModel); 34 String ShipownerCode = Shipownerlist.iterator().next() 35 .getShipownerCode(); 36 // PortEname 转 PortCode 起运港 37 BacPortModel bacLoadPortModel = new BacPortModel(); 38 bacLoadPortModel.setPortEname((getValue(row.getCell(3)))); 39 List<BacPortModel> LoadPortlist = bacPortManager 40 .findByExample(bacLoadPortModel); 41 String LoadPortCode = LoadPortlist.iterator().next().getPortCode(); 42 // PortEname 转 PortCode 目的港 43 BacPortModel bacDestPortModel = new BacPortModel(); 44 bacDestPortModel.setPortEname((getValue(row.getCell(4)))); 45 List<BacPortModel> bacDestPorList = bacPortManager 46 .findByExample(bacDestPortModel); 47 String DestPortCode = bacDestPorList.iterator().next() 48 .getPortCode(); 49 50 if (null != row) { 51 PriceShipownerModel priceShipowner = new PriceShipownerModel(); 52 priceShipowner.setLineCode(LineCode); // 航线 53 priceShipowner.setShipownerCode(ShipownerCode);// 船公司 54 priceShipowner.setLoadPortCode(LoadPortCode);// 起运港 55 priceShipowner.setDestPortCode(DestPortCode);// 目的港 56 priceShipowner.setVoyage(getValue(row.getCell(5)));// 航程 57 priceShipowner.setSailingDec(getValue(row.getCell(6)));// 船期 58 priceShipowner.setCurrency(getValue(row.getCell(7)));// 币种 59 priceShipowner.setPrice20gp(Double.parseDouble(getValue(row 60 .getCell(8))));// 20GP 61 priceShipowner.setPrice40gp(Double.parseDouble(getValue(row 62 .getCell(9))));// 40GP 63 priceShipowner.setPrice40hq(Double.parseDouble(getValue(row 64 .getCell(10))));// 40HQ 65 priceShipowner.setValidityStart(dateFormat.parse(getValue(row 66 .getCell(11))));// 有效日期 //转成Date 67 priceShipowner.setValidityEnd(dateFormat.parse(getValue(row 68 .getCell(12))));// 结束日期 //转成Date 69 importLst.add(priceShipowner); 70 } 71 } 72 if (is != null) { 73 is.close(); 74 } 75 workbook.close(); 76 77 for (PriceShipownerModel model : importLst) { 78 // 唯一性校验 79 PriceShipownerModel priceShipownerModel = new PriceShipownerModel(); 80 priceShipownerModel.setCompanyId(userEntity.getCompanyId()); 81 priceShipownerModel.setShipownerCode(model.getShipownerCode()); 82 priceShipownerModel.setLoadPortCode(model.getLoadPortCode()); 83 priceShipownerModel.setDestPortCode(model.getDestPortCode()); 84 priceShipownerModel.setLineCode(model.getLineCode()); 85 List<PriceShipownerModel> list = priceShipownerManager 86 .findByExample(priceShipownerModel); 87 88 if (list != null && list.size() > 0) { 89 PriceShipownerModel oldModel = list.get(0); 90 oldModel.setPrice20gp(model.getPrice20gp()); 91 oldModel.setPrice40gp(model.getPrice40gp()); 92 oldModel.setPrice40hq(model.getPrice40hq()); 93 oldModel.setValidityStart(model.getValidityStart()); 94 oldModel.setValidityEnd(model.getValidityEnd()); 95 oldModel.setCurrency(model.getCurrency()); 96 oldModel.setSailingDec(model.getSailingDec()); 97 oldModel.setVoyage(model.getVoyage()); 98 this.dao.save(oldModel); 99 } else {100 101 model.setCompanyId(userEntity.getCompanyId());102 model.setAuditingStatus(PriceConst.AUDITING_STATUS_NO);103 model.setIsPublish(PriceConst.PUBLISH_NO);104 this.dao.save(model);105 }106 }107 return 1;
JSP:
<form id="priceShipownerForm" class="form-horizontal" action="${pageContext.request.contextPath}/price/priceShipownerList.shtml" method="post" enctype="application/x-www-form-urlencoded">
<div class="btn-group"> <input type="button" id="import" class="btn btn-primary" style="width: 110px" value="http://www.mamicode.com/Excel导入"></div>
<div class="btn-group"> <input type="button" id="export" class="btn btn-primary" style="width: 110px" value="http://www.mamicode.com/Excel导出"></div>
</form>
<script type="text/javascript">$("#import").click(function(){ $("#uploadfile").click();});$(‘#uploadfile‘).change(function(){ selFile();});
function selFile(){ $("#uploadForm").submit(); }
$(‘#export‘).click(function(){ $(‘#priceShipownerForm‘).attr(‘action‘,"${pageContext.request.contextPath}/price/priceShipownerList.shtml?action=export"); $(‘#priceShipownerForm‘).submit(); $(‘#priceShipownerForm‘).attr(‘action‘,"${pageContext.request.contextPath}/price/priceShipownerList.shtml"); });</script>
java Excel 导入导出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。