小白今天闲着没事,在公司摸鱼,觉得今天有事无聊的一天,忽然上头说小子,今天实现一下批量导入Excel数据吧,当时个人心里是拒绝的,而后默默打开idea。java
java自己并不支持读取excel,全部读取excel须要借助一些框架。目前有几种方式,spring
1. Apache POIsql
2. Java Excel APIspringboot
3. easyexcelapp
这里主要讲解的是 Apache POI,Apache POI支持03版以及07年版 区别是后缀不同,03版对应的是xls 07版对应的是xlsx xlsx
这里主要讲解的是07版的框架
1.sheet表示的是xss
excel底部的工做表.ide
对应的是POI的的XSSFSheetui
2.row表示的是行idea
对应的是POI的的XSSFRow
3.cell表示的是每一行的单元格.
对应的是POI的的Cell
1.上传文件使用springboot的MultipartFile
对应
MultipartFile file
2.建立对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
3.获取sheet(默认第一个)
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
@RequestMapping("/import") public void importExcel(@RequestParam("file") MultipartFile file) throws Exception{ InputStream inputStream = file.getInputStream(); //07年的 不兼容以前 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream); XSSFSheet sheet = xssfWorkbook.getSheetAt(0); //获取行数 int lastRowNum = sheet.getLastRowNum(); for (int i = 1; i <= lastRowNum; i++) { XSSFRow row = sheet.getRow(i); QuChannel quChannel = new QuChannel(); if (row.getCell(0) != null){ row.getCell(0).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setChannel(row.getCell(0).getStringCellValue()); } if (row.getCell(1) != null){ row.getCell(1).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setChannelName(row.getCell(1).getStringCellValue()); } if (row.getCell(2) != null){ row.getCell(2).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setRemarks(row.getCell(2).getStringCellValue()); } if (row.getCell(3) != null){ quChannel.setChannelSource((int) row.getCell(3).getNumericCellValue()); } if (row.getCell(4) != null){ quChannel.setActivityType((int) row.getCell(4).getNumericCellValue()); } if (row.getCell(5) != null){ quChannel.setDeliveryTime(row.getCell(5).getDateCellValue()); } if (row.getCell(6) != null){ row.getCell(6).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setOriginalLink(row.getCell(6).getStringCellValue()); } if (row.getCell(7) != null){ row.getCell(7).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setSaLink(row.getCell(7).getStringCellValue()); } if (row.getCell(8) != null){ quChannel.setDeliveryMode((int) row.getCell(8).getNumericCellValue()); } if (row.getCell(9) != null){ quChannel.setCreateGroup((int) row.getCell(9).getNumericCellValue()); } if (row.getCell(10) != null){ row.getCell(10).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setRemark(row.getCell(10).getStringCellValue()); } quChannelMapper.insert(quChannel); } }
1.避免将sql写在for循环里面,改进的话能够建立一个列表list,将对象add进去,而后在循环外面进行批量插入
2.想要去重的话可使用set的不能重复添加特性
3.注意excel的字段与类属性的对应关系,若是excel字段是string,可是累属性是整形的话,可使用枚举类
暂时想到这么多 欢迎指教评论