poi解析Excel0307格式通用 struts2

经常遇到要解析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;
}

你可能感兴趣的:(poi解析Excel0307格式通用 struts2)