经常遇到要解析Excel文件,自己整理了一下,写了一个03、07格式都通用的方法,使用了poi开源包,不多说了,上代码,就一个方法,很简单。
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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;
import org.apache.poi.ss.util.WorkbookUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 解析导入的Excel文件
* @param file:上传的excel文件,如果是网页上传的是一个.tmp文件,当然也可以自己指定路径excel文件
* @param columnSize:指定列数,就是只提取指定列数目,比如说colunmnSize = 5,则表示只提取5列数据
*/
public List<Map<String,String>> analysisExcel(File file,int columnSize)
throws Exception{
List<Map<String,String>> listData = new ArrayList<Map<String,String>>();
try{
//创建输入流
InputStream stream = new BufferedInputStream(new FileInputStream(file));
//这一句个人觉得很关键,直接创建Workbook对象,后面在判断具体是03还是07格式,当然如果知道是什么格式的,可以直接创建对应格式的(07)XSSFWorkbook //对象或(03)HSSFWorkbook对象
Workbook wb = WorkbookFactory.create(file);
//07格式
if(wb.getClass().equals(XSSFWorkbook.class)){
//这里默认解析第一个表
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rows = sheet.iterator();
while(rows.hasNext()){
Map<String,String> cellMap = new HashMap<String,String>();
//依次提取获取各行数据
Row row = rows.next();
for(int i = 0;i<columnSize;i++){
String cellValue = "";
if(row.getCell(i) != null && row.getCell(i).getStringCellValue() != null)
cellValue=row.getCell(i).getStringCellValue();
cellMap.put(String.valueOf(i), cellValue);//如果单元格内容为空,则赋值为"";
}
listData.add(cellMap);
}
if(stream != null){
stream.close();
}
}else if(wb.getClass().equals(HSSFWorkbook.class)){//03格式
//这里默认解析第一个表
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rows = sheet.iterator();
while(rows.hasNext()){
Map<String,String> cellMap = new HashMap<String,String>();
//依次提取获取各行数据
Row row = rows.next();
for(int i = 0;i<columnSize;i++){
String cellValue = "";
if(row.getCell(i) != null && row.getCell(i).getStringCellValue() != null)
cellValue=row.getCell(i).getStringCellValue();
cellMap.put(String.valueOf(i), cellValue);
}
listData.add(cellMap);
}
if(stream != null){
stream.close();
}
}
}catch(Exception e){
throw e;
}
return listData;
}