【第一次发博客】项目中遇到需要读取Excel文件内容,网上查了一波资料,发现poi比较好用,记录一下。
实现了一个小DEMO,只取了第一个sheet,该函数参数为文件地址,返回一个二维list,并兼容了两种Excel格式。附代码:
import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.*;
public static ArrayList<ArrayList> readExcelData(String dataPath) throws IOException { ArrayList<Map> resultData = new ArrayList<>(); FileInputStream fis = new FileInputStream(dataPath); Workbook workbook = null; //判断excel的两种格式xls,xlsx if(dataPath.toLowerCase().endsWith("xlsx")){ workbook = new XSSFWorkbook(fis); }else if(dataPath.toLowerCase().endsWith("xls")){ workbook = new HSSFWorkbook(fis); } //得到第1个sheet Sheet sheet = workbook.getSheetAt(0); //得到行的迭代器 Iterator<Row> rowIterator = sheet.iterator(); //循环每一行 while (rowIterator.hasNext()) { //得到一行对象 Row row = rowIterator.next(); //跳过第一行标题 if(row.getRowNum()==0) { continue; } ArrayList<Object> cellData= new ArrayList<>(); //循环每一列 for(int j=0;j<row.getLastCellNum();j++) { //得到单元格对象 Cell cell = row.getCell(j); //检查数据类型 switch(cell.getCellTypeEnum()){ case STRING: cellData.add(cell.getStringCellValue()); break; case BLANK: cellData.add(""); break; case NUMERIC: if(HSSFDateUtil.isCellDateFormatted(cell)) //日期判断 { SimpleDateFormat sdf = null; sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = cell.getDateCellValue(); cellData.add(sdf.format(date)); } else{ //不是日期则为数字 cellData.add(cell.getNumericCellValue()); } break; } } resultData.add(cellData); } fis.close(); return resultData; }
用最多的梦面对未来