package com.hx.util; import com.hx.exception.TipsException; import jxl.CellType; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * Excel工具类(兼容poi4.0+) */ public class ExcelFileUtil { /** * 读取 Excel文件内容 * * @param file * @param header 是否包括表头 * @return * @throws Exception */ public static List> readExcelByeFileData(MultipartFile file, boolean header) throws Exception { // 结果集 List> list = new ArrayList<>(); if (file == null){ return list; } String fileName = file.getOriginalFilename(); if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { throw new TipsException("上传文件格式不正确"); } Workbook hssfworkbook = WorkbookFactory.create(file.getInputStream()); int num = hssfworkbook.getNumberOfSheets(); if (num == 0){ return list; } List rowList; for (int k = 0; k< num ; k++) { Sheet sheet = hssfworkbook.getSheetAt(k); for (int i = 0; i <= sheet.getLastRowNum(); i++) { rowList = new ArrayList<>(); // 获取第i行的数据 Row row = sheet.getRow(i); // getLastCellNum() 获取这一行中单元格的数量 for (int j = 0; j < row.getLastCellNum(); j++) { // 获取第i行第j列的单元格数据 rowList.add(row.getCell(j).toString()); } list.add(rowList); } } return list; } /** * 读取 Excel文件内容 * * @param file * @param header 是否包括表头 * @return * @throws Exception */ public static List> readExcelByeFileData(File file, boolean header) throws Exception { // 结果集 List> list = new ArrayList<>(); if (file == null){ return list; } String fileName = file.getName(); if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { throw new TipsException("上传文件格式不正确"); } Workbook hssfworkbook = WorkbookFactory.create(new FileInputStream(file)); int num = hssfworkbook.getNumberOfSheets(); if (num == 0){ return list; } List rowList; for (int k = 0; k< num ; k++) { Sheet sheet = hssfworkbook.getSheetAt(k); for (int i = 0; i <= sheet.getLastRowNum(); i++) { rowList = new ArrayList<>(); // 获取第i行的数据 Row row = sheet.getRow(i); // getLastCellNum() 获取这一行中单元格的数量 for (int j = 0; j < row.getLastCellNum(); j++) { // 获取第i行第j列的单元格数据 rowList.add(row.getCell(j).toString()); } list.add(rowList); } } return list; } private static String objToString(Object obj) { if (obj == null) { return ""; } else { if (obj instanceof String) { return (String) obj; } else if (obj instanceof Date) { return null; } else { return obj.toString(); } } } }