/**
*解析文件的方法
*@param inputStream 文件输入流,要解析的Excel文件输入流
*@param suffix 文件的后缀名,xls或xlsx,代码决定使用什么方式解析Excel.
*@param startRow 从第几行开始读取数据
*@return List<String[ ]> 集合中的一个元素对应一行解析的数据
* 元素为字符串数组类型,数组中的每个元素对应一列数据
*/
public List<String[ ]> parseExcel(InputStream inputStream,String suffix,int startRow){
//1.定义excel对象变量
Workbook workbook =null;
//2.判断后缀,决定使用哪种的解析方式
if("xls".equals(suffix)){
workbook =new HSSFWorkbook(inputStream); //2003版
}else if(“xlsx”.equals(suffix)){
workbook =new XSSFWorkbook(inputStream); //2007版
}else{
return null; //未知内容
}
//获取工作表excel分为若干个表,sheet
Sheet sheet =workbook.getSheetAt(0);
if(sheet ==null){
return null;
}
//获取表格中最后一行的行号
int lastRowNum =sheet.getLastRowNum();
for(startNum>=lastRowNum){
return null;
}
List<String[ ]> result =new ArrayList<String [ ]>(); //存在结果的list
//定义行变量和单元格变量
Row row =null;
Cell cell =null;
//可以循环读取数据了
for(int rowNum =startNum; rowNum <=lastRowNum; rowNum ++){
row =sheet.getRow(rowNum);
//获取当前的第一列和最后一列的标记
short firstCellNum =row.getFirstCellNum();
short lastCellNum =row.getLastCellNum();
if(lastCellNum !=0){
String[ ] rowArray =new String[lastCellNum ];
for(int cellNum =firstCellNum; cellNum <=lastCellNum; cellNum ++){
cell =row.getCell(cellNum);
//判断单元格是否有数据
if(cell ==null){
rowArray[cellNum] =null;
}else{
rowArray[cellNum] =parseCell(cell);
}
}
result.add(rowArray);
}
}
return result;
}
/**
*解析单元格数据
*@return String 单元格数据
*/
private String parseCell(Cell cell){
String cellStr =null;
//判断单元格的类型
switch(cell.getCellType()){
case HSSFCell.CELL.TYPE_STRING;
//字符串类型单元格
cellStr =cell.getRichStringCellValue().toString();
break;
case HSSFCell.CELL_TYPE_BLANK;
//空数据,标准数据
cell =null;
break;
case HSSFCell.Cell_TYPE_NUMERIC;
//数学类型,数学类型包含日期,时间,数字
//判断日期类型[年月日 2019-12-14| 时分 10:00]类型
if(HSSFDateUtil.isCellDateFormatted(cell)){
//判断具体类型,是日期还是时间
if(cell.getCellType ==HSSFDataFormat.getBuiltinFormat("h:mm")){
//时间
sdf =new SimpleDataFormat("HH:mm");
}else{
//日期
sdf =new SimpleDataFormat("yyyy-MM-dd");
}
Date temp =cell.getDateCellValue();
cellStr =sdf.format(temp);
}else{
//数字
double temp =cell.getNumericCellValue();
//数学格式化工具
DecimalFormat format =new DecimalFormat();
//查看单元格中的具体样式类型
String formatStr =cell.getCellStyle().getDataFormatString();
if(formatStr.equals("General")){
//定义格式化正则,使用具体有效数据进行格式化,且值保留有效数据
format.applyPattern("#"); //如果想要两位小数写成 "#.##"
}
cellStr =format.format(temp);
}
break;
default :
cellStr =null;
}
return cellStr;
}