1. 依賴
<!-- excel導出 start--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version> </dependency> <!-- excel導出 end-->
2. 導入工具類
/** * 將 Excel內容轉為List * * @param file 上傳的Excel文件 * @param name Excel表格中第一個sheet的名字 * @return 對應的map集合 **/ public static List<Map<String, Object>> excelToList(MultipartFile file, String name) throws Exception { Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheet(name); //行數 int num = sheet.getLastRowNum(); //列數 int col = sheet.getRow(0).getLastCellNum(); List<Map<String, Object>> list = new ArrayList<>(); String[] colName = new String[col]; //獲取列名 Row row = sheet.getRow(0); for (int i = 0; i < col; i++) { String[] s = row.getCell(i).getStringCellValue().split("-"); colName[i] = s[0]; } //將一行中每列數據放入一個map中,然后把map放入list for (int i = 1; i <= num; i++) { Map<String, Object> map = new HashMap<>(); Row row1 = sheet.getRow(i); if (row1 != null) { for (int j = 0; j < col; j++) { Cell cell = row1.getCell(j); if (cell != null) { cell.setCellType(Cell.CELL_TYPE_STRING); map.put(colName[j], cell.getStringCellValue()); } } } list.add(map); } return list; }
3. 導入業務代碼
public void importExcel(MultipartFile file) { try { List<Map<String, Object>> importList = ExcelUtil.excelToList(file, "Sheet1"); List<User> list = getUserList(importList); int flag = 0; List<User> userList = new ArrayList<>(16); for (User u : list) { userList.add(h); flag++; if (0 == flag % 500 || flag == list.size()) { UserDao.addBatchUser(userList); userList.clear(); log.info("執行前 {} 條成功", flag); } } } catch (Exception e) { log.info("導入Excel失敗"); e.printStackTrace(); } }
private List<User> getUserList(List<Map<String, Object>> importList) {
List<User> list = new ArrayList<>(16);
importList.forEach(e -> {
User user = new User();
if (Objects.nonNull(e.get("姓名"))) {
user.setUsername(e.get("姓名").toString());
}
if (Objects.nonNull(e.get("年齡"))) {
user.setAge(e.get("年齡").toString());
}
if (Objects.nonNull(e.get("手機號"))) {
user.setPhone(e.get("手機號").toString());
}
list.add(user);
});
return list;
}
==========================================================================================
1. 導出Excel工具類
/** * 導出 excel * * @param response 響應下載 * @param name 文件名字 * @param list 導出的數據list * @return **/ public static void exportToExcel(HttpServletResponse response, String name, List<LinkedHashMap<String, Object>> list) { try { //文件名稱 String fileName = name + ".xls"; HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet hssfSheet = hssfWorkbook.createSheet(name); int rowNum = 0; //新建行 HSSFRow hssfRow = hssfSheet.createRow(rowNum++); //列 int j = 0; if (list.size() > 0) { for (String i : list.get(0).keySet()) { //新建第一行 hssfRow.createCell(j++).setCellValue(i); } //將數據放入表中 for (int i = 0; i < list.size(); i++) { //新建一行 HSSFRow row = hssfSheet.createRow(rowNum++); Map map = list.get(i); System.out.println(map); j = 0; for (Object obj : map.values()) { if (obj != null) { row.createCell(j++).setCellValue(obj.toString()); } else { row.createCell(j++); } } } } // 告訴瀏覽器用什么軟件可以打開此文件 response.setHeader("content-Type", "application/vnd.ms-excel"); // 下載文件的默認名稱 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); hssfWorkbook.write(response.getOutputStream()); } catch (Exception e) { e.printStackTrace(); } }
2. 導出業務代碼
public void exportExcel(HttpServletResponse response, String name) { List<LinkedHashMap<String, Object>> list = new ArrayList<>(16); UserDto userDto = new UserDto(18);//設置導出哪些數據 List<User> userList = userDao.selectByCon(userDto); userList.forEach(e->{
LinkedHashMap<String, Object> map = new LinkedHashMap<>(16); map.put("姓名",e.getUsername()); map.put("年齡",e.getAge()); map.put("手機號",e.getPhone()); list.add(map); }); ExcelUtil.exportToExcel(response,name,list); }
3. 可以在瀏覽器訪問接口,直接下載,也可以調用postman->send and download請求下載