读取excel的两种方式

来源:互联网 发布:青岛seo外包服务 编辑:程序博客网 时间:2024/05/29 05:56

一、jxl(excel2003)需要jxl包

兼容性较差,代码如下:

private List<Type> readExcel(File file) throws Exception {
new ResultObject(true);
List<Type> typelist = new ArrayList<Contract>();
Workbook rwb = null;
String cellStr = null;
Type type= null;
// 创建输入流
// 获取Excel文件对象
if (file == null || !file.exists()) {
System.out.println(file.getName() + "不存在!");
}
InputStream stream = new FileInputStream(file);
rwb = Workbook.getWorkbook(stream);
// 获取文件的指定工作表 默认的第一个
Sheet sheet = rwb.getSheet(0);
// 行数(表头的目录不需要,从1开始)
for (int i = 1; i < sheet.getRows(); i++) {
// 创建一个对象对应一行, 用来存储每一列的值
type=new Type();
// 列数
contract.setRowNum("" + (i + 1));
cellStr = sheet.getCell(0, i).getContents().trim();//第一列数据

type.setContent(cellStr );
typelist .add(type);
}
stream.close();
rwb.close();
return typelist ;
}

将type换成自己的实体类即可获得对象。


二、poi方式(兼容2003与2007)需要poi包

代码是以前保存的别人代码,很实用,拿来用一下。

public List<String[]> getAllData(int sheetIndex){

    int columnNum = 0;
    Sheet sheet = wb.getSheetAt(sheetIndex);
    if(sheet.getRow(0)!=null){
        columnNum = sheet.getRow(0).getLastCellNum()-sheet.getRow(0).getFirstCellNum();
    }
    if(columnNum>0){
      for(Row row:sheet){ 
          String[] singleRow = new String[columnNum];
          int n = 0;
          for(int i=0;i<columnNum;i++){
             Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
             switch(cell.getCellType()){
               case Cell.CELL_TYPE_BLANK:
                 singleRow[n] = "";
                 break;
               case Cell.CELL_TYPE_BOOLEAN:
                 singleRow[n] = Boolean.toString(cell.getBooleanCellValue());
                 break;
                //数值
               case Cell.CELL_TYPE_NUMERIC:               
                 if(DateUtil.isCellDateFormatted(cell)){
                   singleRow[n] = String.valueOf(cell.getDateCellValue());
                 }else{ 
                   cell.setCellType(Cell.CELL_TYPE_STRING);
                   String temp = cell.getStringCellValue();
                   //判断是否包含小数点,如果不含小数点,则以字符串读取,如果含小数点,则转换为Double类型的字符串
                   if(temp.indexOf(".")>-1){
                     singleRow[n] = String.valueOf(new Double(temp)).trim();
                   }else{
                     singleRow[n] = temp.trim();
                   }
                 }
                 break;
               case Cell.CELL_TYPE_STRING:
                 singleRow[n] = cell.getStringCellValue().trim();
                 break;
               case Cell.CELL_TYPE_ERROR:
                 singleRow[n] = "";
                 break;  
               case Cell.CELL_TYPE_FORMULA:
                 cell.setCellType(Cell.CELL_TYPE_STRING);
                 singleRow[n] = cell.getStringCellValue();
                 if(singleRow[n]!=null){
                   singleRow[n] = singleRow[n].replaceAll("#N/A","").trim();
                 }
                 break;  
               default:
                 singleRow[n] = "";
                 break;
             }
             n++;
          } 
          if("".equals(singleRow[0])){continue;}//如果第一行为空,跳过
          dataList.add(singleRow);
      }
    }
    return dataList;
  }  

0 0
原创粉丝点击