依赖jar
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency>
ExcelUtils.java
package javax.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; 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; /** * Excel 工具类(兼容xls和xlsx) * * @author Logan * @createDate 2019-03-07 * @version 1.0.0 * */ public class ExcelUtils { private static final String XLS = "xls"; private static final String XLSX = "xlsx"; /** * 读取Excel文件第一页 * * @param pathname 文件路径名 * @return 第一页数据集合 * @throws IOException 错误时抛出异常,由调用者处理 */ public static List<List<Object>> readExcelFirstSheet(String pathname) throws IOException { File file = new File(pathname); return readExcelFirstSheet(file); } /** * 读取Excel文件第一页 * * @param file Excel文件 * @return 第一页数据集合 * @throws IOException 错误时抛出异常,由调用者处理 */ public static List<List<Object>> readExcelFirstSheet(File file) throws IOException { try ( InputStream inputStream = new FileInputStream(file); ) { if (file.getName().endsWith(XLS)) { return readXlsFirstSheet(inputStream); } else if (file.getName().endsWith(XLSX)) { return readXlsxFirstSheet(inputStream); } else { throw new IOException("文件类型错误"); } } } /** * 读取xls格式Excel文件第一页 * * @param inputStream Excel文件输入流 * @return 第一页数据集合 * @throws IOException 错误时抛出异常,由调用者处理 */ public static List<List<Object>> readXlsFirstSheet(InputStream inputStream) throws IOException { Workbook workbook = new HSSFWorkbook(inputStream); return readExcelFirstSheet(workbook); } /** * 读取xlsx格式Excel文件第一页 * * @param inputStream Excel文件输入流 * @return 第一页数据集合 * @throws IOException 错误时抛出异常,由调用者处理 */ public static List<List<Object>> readXlsxFirstSheet(InputStream inputStream) throws IOException { Workbook workbook = new XSSFWorkbook(inputStream); return readExcelFirstSheet(workbook); } /** * 读取Workbook第一页 * * @param book Workbook对象 * @return 第一页数据集合 */ public static List<List<Object>> readExcelFirstSheet(Workbook book) { return readExcel(book, 0); } /** * 读取指定页面的Excel * * @param book Workbook对象 * @param page 页码 * @return 指定页面数据集合 */ public static List<List<Object>> readExcel(Workbook book, int page) { List<List<Object>> list = new ArrayList<>(); Sheet sheet = book.getSheetAt(page); for (int i = 0; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); // 如果当前行为空,则加入空,保持行号一致 if (null == row) { list.add(null); continue; } List<Object> columns = new ArrayList<>(); for (int j = 0; j < row.getLastCellNum(); j++) { Cell cell = row.getCell(j); columns.add(getValue(cell)); } list.add(columns); } return list; } /** * 解析单元格中的值 * * @param cell 单元格 * @return 单元格内的值 */ private static Object getValue(Cell cell) { if (null == cell) { return null; } Object value = null; switch (cell.getCellType()) { case BOOLEAN: value = cell.getBooleanCellValue(); break; case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { value = cell.getDateCellValue(); } else { value = cell.getNumericCellValue(); } break; default: value = cell.toString(); break; } return value; } }
.