ExcelReader
import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.Cell; 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.ss.usermodel.WorkbookFactory; public class ExcelReader { private Workbook wb; private Sheet sheet; private Row row; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); /** * * @param filepath Excel文件路径 * @throws Exception */ public ExcelReader(String filepath) throws Exception { InputStream is = new FileInputStream(filepath); wb = WorkbookFactory.create(is); sheet = wb.getSheetAt(0); } public ExcelReader(InputStream is) throws Exception { wb = WorkbookFactory.create(is); sheet = wb.getSheetAt(0); } public ExcelReader(String filepath,int sheetNo) throws Exception { InputStream is = new FileInputStream(filepath); wb = WorkbookFactory.create(is); sheet = wb.getSheetAt(sheetNo); } public ExcelReader(InputStream is,int sheetNo) throws Exception { wb = WorkbookFactory.create(is); sheet = wb.getSheetAt(sheetNo); } /** * 读取Excel数据内容 */ public void readExcelContent(RowHandler rowHandler) throws Exception { readExcelContent(rowHandler,0); } /** * 读取Excel数据内容 */ public void readExcelContent(RowHandler rowHandler,int startRow) throws Exception { // 得到总行数 int rowNum = sheet.getLastRowNum(); if(startRow > rowNum){ return; } for (int i = startRow ; i <= rowNum; i++) { row = sheet.getRow(i); if(row == null){ continue; } int colNum = row.getPhysicalNumberOfCells(); List<Object> cellValueList = new ArrayList<Object>(colNum); for (int j = 0; j <= colNum; j++) { cellValueList.add(getCellFormatValue(row.getCell(j))); } rowHandler.handle(cellValueList); } } /** * 根据XSSFCell类型设置数据 * @param xssfCell * @return */ private String getCellFormatValue(Cell cell) { String cellvalue = ""; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: { // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); cellvalue = sdf.format(date); } else { // 如果是纯数字取得当前Cell的数值 cellvalue = String.valueOf(cell.getNumericCellValue()); } break; } // 如果当前Cell的Type为STRING case HSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString(); break; // 默认的Cell值 default: cellvalue = ""; } } return cellvalue; } public interface RowHandler { void handle(final List<Object> row) throws Exception; } }