java excel导入数据库
来源:互联网 发布:c语言阶乘怎么写 编辑:程序博客网 时间:2024/06/06 22:38
import java.io.FileInputStream;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.UUID;import javax.annotation.Resource;import org.apache.commons.lang.StringUtils;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.jzsoft.business.module.aud001.entity.Aud001;import com.jzsoft.business.module.aud001.dao.mapper.Aud001Mapper;import com.jzsoft.platform.core.exception.BusinessException;/** * 导入数据库 */ @RequestMapping(value="/import",method = RequestMethod.POST, produces = "application/json; charset=utf-8") @ResponseBody public void aud001Import(MultipartFile upExcel,String fileName){ try { aud001Service.aud001Import(upExcel,fileName); this.printSuccess(); } catch (BusinessException e1) { e1.printStackTrace(); this.printFailure(e1.getMessage()); }catch (Exception e) { e.printStackTrace(); this.printFailure("导入失败"); } }/** * 导入数据库 * @param upExcel */ public void aud001Import(MultipartFile upExcel,String fileName){ try { String originalFilename = fileName;// String originalFilename=upExcel.getOriginalFilename(); if (!originalFilename.endsWith(".xls") && !originalFilename.endsWith(".xlsx")) { throw new BusinessException("文件不是excel类型"); } String uploadPath = "upload/Excel"; String rootPath = SpringMVCUtil.getRequest().getSession().getServletContext().getRealPath("/"); String imagePath = uploadPath + "/" + UUID.getUUID() + originalFilename; try { FileStorageHelper.transferFile(upExcel.getInputStream(), imagePath); } catch (IOException e) { throw new BusinessException("Excel存储失败"); } String paths = rootPath+imagePath; aud001Excel.analysisExcel(paths); } catch (Exception e) { throw new BusinessException(e.getMessage()); } }/** * 解析Excel文件,并导入数据库 * @param originalFilename */ public void analysisExcel(String originalFilename){ FileInputStream fis = null; Workbook wookbook = null; try { // 获取一个绝对地址的流 fis = new FileInputStream(originalFilename); } catch (Exception e) { throw new BusinessException("解析Excel文件失败");//获取地址流失败 } try { // 2003版本的excel,用.xls结尾 wookbook = new HSSFWorkbook(fis);// 得到工作簿 } catch (Exception ex) { // ex.printStackTrace(); try { // 这里需要重新获取流对象,因为前面的异常导致了流的关闭—————————————————————————————加了这一行 fis = new FileInputStream(originalFilename); // 2007版本的excel,用.xlsx结尾 wookbook = new XSSFWorkbook(originalFilename);// 得到工作簿 } catch (IOException e) { throw new BusinessException("解析Excel文件失败");//用2003和2007方法解析Excel都失败 } } // 得到一个工作表 Sheet sheet = wookbook.getSheetAt(0); // 获得表头 Row rowHead = sheet.getRow(0); // 根据不同的data放置不同的表头 Map<Object, Integer> headMap = new HashMap<Object, Integer>(); // 判断表头是否合格 ------------------------这里看你有多少列 if (rowHead.getPhysicalNumberOfCells() != 6) { throw new BusinessException("表头列数与模板不一致");//文件与模板不一致 } try { if (getRightTypeCell(rowHead.getCell(0)).toString().equals("审计类别")) { headMap.put("AItemKbn1", 0); }else{ throw new BusinessException("第1列表头不合规范,请修改后重新导入"); } if (getRightTypeCell(rowHead.getCell(1)).toString().equals("审计编号")) { headMap.put("policyInformationCode", 1); }else{ throw new BusinessException("第2列表头不合规范,请修改后重新导入"); } if (getRightTypeCell(rowHead.getCell(2)).toString().equals("审计项")) { headMap.put("Audit_Items",2); }else{ throw new BusinessException("第3列表头不合规范,请修改后重新导入"); } if (getRightTypeCell(rowHead.getCell(3)).toString().equals("审计程序")) { headMap.put("Audit_Procedure", 3); }else{ throw new BusinessException("第4列表头不合规范,请修改后重新导入"); } if (getRightTypeCell(rowHead.getCell(4)).toString().equals("审计依据")) { headMap.put("Audit_Policy", 4); }else{ throw new BusinessException("第5列表头不合规范,请修改后重新导入"); } if (getRightTypeCell(rowHead.getCell(5)).toString().equals("审计项状态")) { headMap.put("aitemstatus", 5); }else{ throw new BusinessException("第6列表头不合规范,请修改后重新导入"); } } catch (Exception e) { throw new BusinessException(e.getMessage()); } // 获得数据的总行数 int totalRowNum = sheet.getLastRowNum(); if (0 == totalRowNum) { throw new BusinessException("Excel内没有数据!"); }// String Policy_Information_Code; //审计信息编码 String AItemKbn1; //审计项分类1// String policyInformationCode;//审计编号 String Audit_Items; //审计项 String Audit_Procedure; //审计程序 String Audit_Policy; //审计依据 String aitemstatus; //审计状态 Cell cell_1= null; //审计项分类1 Cell cell_2= null; //审计编号 Cell cell_3= null; //审计项 Cell cell_4= null; //审计程序 Cell cell_5= null; //审计依据 Cell cell_6= null; //审计状态 List<Aud001> aud001s = new ArrayList<>(); // 获得所有数据 for (int i = 1; i <= totalRowNum; i++) { int j=i+1; // 获得第i行对象 Row row = sheet.getRow(i); try { cell_1 = row.getCell(headMap.get("AItemKbn1")); cell_2 = row.getCell(headMap.get("policyInformationCode")); cell_3 = row.getCell(headMap.get("Audit_Items")); cell_4 = row.getCell(headMap.get("Audit_Procedure")); cell_5 = row.getCell(headMap.get("Audit_Policy")); cell_6 = row.getCell(headMap.get("aitemstatus")); if (cell_1 == null||cell_3 == null ||cell_4 == null||cell_5 == null || cell_1.getCellType() == HSSFCell.CELL_TYPE_BLANK|| cell_3.getCellType() == HSSFCell.CELL_TYPE_BLANK|| cell_4.getCellType() == HSSFCell.CELL_TYPE_BLANK||cell_5.getCellType() == HSSFCell.CELL_TYPE_BLANK) { throw new BusinessException("第"+j+"行有空数据"); } if(cell_6 ==null || cell_6.getCellType() == HSSFCell.CELL_TYPE_BLANK){ aitemstatus = "2";//审计状态 }else{ aitemstatus = (String) getRightTypeCell(cell_6);//审计状态 } }catch (Exception e) { throw new BusinessException("第"+j+"行数据有误"); } Aud001 aud001= new Aud001(); try { AItemKbn1 = (String) getRightTypeCell(cell_1); //审计项分类1// policyInformationCode = (String) getRightTypeCell(cell_2);//审计编号 Audit_Items = (String) getRightTypeCell(cell_3); //审计项 Audit_Procedure = (String) getRightTypeCell(cell_4); //审计程序 Audit_Policy = (String) getRightTypeCell(cell_5);//审计依据 aitemstatus = (String) getRightTypeCell(cell_6);//审计状态 if(StringUtils.isBlank(AItemKbn1)||StringUtils.isBlank(Audit_Items)||StringUtils.isBlank(Audit_Procedure)||StringUtils.isBlank(Audit_Policy)){ throw new BusinessException("第"+j+"行数据有误"); } } catch (ClassCastException e) { throw new BusinessException("第"+j+"行数据有误"); } Aud001 audit = aud001Mapper.selectByItems(Audit_Items); if(audit==null){ if("起草".equals(aitemstatus)){ aud001.setAitemstatus("0"); }else if("启用".equals(aitemstatus)){ aud001.setAitemstatus("1"); }else if("停用".equals(aitemstatus)){ aud001.setAitemstatus("2"); }else{ aud001.setAitemstatus("1"); } aud001.setAitemkbn1(AItemKbn1); aud001.setAuditItems(Audit_Items); aud001.setAuditProcedure(Audit_Procedure); aud001.setAuditPolicy(Audit_Policy); String id = UUID.randomUUID().toString().replace("-", ""); aud001.setAuditItemid(id); aud001Service.add(aud001); aud001s.add(aud001); }else{ throw new BusinessException("第"+j+"行审计项已存在"); } } } /** * * @param cell * 一个单元格的对象 * @return 返回该单元格相应的类型的值 */ public static Object getRightTypeCell(Cell cell) { Object object = null; // 把数字当成String来读,避免出现1读成1.0的情况 if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { cell.setCellType(Cell.CELL_TYPE_STRING); } switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: { object = cell.getStringCellValue(); break; } case Cell.CELL_TYPE_NUMERIC: { cell.setCellType(Cell.CELL_TYPE_NUMERIC); object = cell.getNumericCellValue(); break; } case Cell.CELL_TYPE_FORMULA: { cell.setCellType(Cell.CELL_TYPE_NUMERIC); object = cell.getNumericCellValue(); break; } case Cell.CELL_TYPE_BLANK: { cell.setCellType(Cell.CELL_TYPE_BLANK); object = cell.getStringCellValue(); break; } } return object; }
阅读全文
1 0
- java excel导入数据库
- java代码EXCEL导入数据库
- java 操作excel 导入数据库
- Java 导入Excel到数据库
- Java实现Excel导入数据库
- java导入excel到数据库
- java导入excel到数据库
- java web excel导入数据库
- java版Excel文件导入数据库源代码
- java批量导入excel到Mysql数据库
- java导入excel数据到mysql数据库
- Java将数据库数据导入Excel
- java实现excel数据导入到数据库
- java将数据库查询数据导入excel
- java将excel导入数据库()
- java实现将Excel表导入数据库
- 用java导入Excel数据到数据库
- Excel 导入导出数据库 Java实现
- javascript多种动画传参
- 介绍一个个人博客中的几篇c++文章
- Annontation注解的应用及介绍
- 笔记|《简明Python教程》:编程小白的第一本python入门书
- ReactJs入门教程
- java excel导入数据库
- Mach-O的动态链接相关知识
- 五(2)、JSP——JavaBean例子
- 59. Spiral Matrix II
- VideoView控制音量(静音\恢复)
- id3决策树
- java byte数组打印
- 数据库切分(7)之一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- 计算机修炼之路------炼气一层的小菜鸟有话说