Java如何处理EXCEL的读取

时间:2014-11-04 17:37:06   收藏:0   阅读:4540

需要包:poi-3.5.jar、poi-ooxml-3.5.jar

 

实例:

[java] view plaincopy
  1. public class ProcessExcel {  
  2.   
  3.     private Workbook wb = null;  
  4.     private Sheet s = null;  
  5.     private Row row = null;  
  6.   
  7.     public ProcessExcel(String filePath) {  
  8.         try {  
  9.             System.out.println(filePath);  
  10.             if (filePath.endsWith("xls")) {  
  11.                 wb =  new HSSFWorkbook(new FileInputStream(new File(filePath)));  
  12.             } else {  
  13.                 wb = new XSSFWorkbook(filePath);  
  14.             }  
  15.             System.out.println(wb);  
  16.         } catch (IOException e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20.   
  21.     /** 
  22.      * 表格表2-27-1 院(系)教学效果——本科生学科竞赛获奖情况 (TBL_DEPART_SUBJECT_HONOR)  
  23.      * 
  24.      * @param isInsert 
  25.      */  
  26.     public ExcelModel importExcel3281() {  
  27.         ExcelModel em = new ExcelModel();  
  28.         List<TblDepartSubjectHonor> list = new ArrayList<TblDepartSubjectHonor>();  
  29.         TblDepartSubjectHonor eb = null;  
  30.         s = wb.getSheetAt(0);  
  31.         for (int i = 2; i < s.getPhysicalNumberOfRows(); i++) {  
  32.             for (int j = 0; j < 7; j++) {  
  33.                 if (s.getRow(i).getCell(j) == null) {  
  34.                     em.setState("第" + (i + 1) + "行第" + (j + 1)  
  35.                             + "列为空值,请检查好再导入.");  
  36.                     return em;  
  37.                 }  
  38.             }  
  39.         }  
  40.   
  41.         for (int i = 2; i < s.getPhysicalNumberOfRows(); i++) {  
  42.             eb = new TblDepartSubjectHonor();  
  43.             row = s.getRow(i);  
  44.             eb.setHjxm(row.getCell(0).toString());// 获取项目  
  45.             eb.setJlmc(StringUtils.trim(row.getCell(1).toString()));  
  46.             String JB = StringUtils.trim(row.getCell(2).toString());  
  47.             if (JB.equals("国家级")) {  
  48.                 eb.setJb("01");  
  49.             } else if (JB.equals("省级")) {  
  50.                 eb.setJb("02");  
  51.             } else if (JB.equals("市级")) {  
  52.                 eb.setJb("03");  
  53.             } else {  
  54.                 eb.setJb("04");  
  55.             }  
  56.             eb.setDj(StringUtils.trim(row.getCell(3).toString()));  
  57.             eb.setSydw(StringUtils.trim(row.getCell(4).toString()));  
  58.             eb.setHjzxm(StringUtils.trim(row.getCell(5).toString()));  
  59.             eb.setZdls(StringUtils.trim(row.getCell(6).toString()));  
  60.             String HDNF = StringUtils.trim(row.getCell(7).toString());  
  61.             // 数字处理问题!  
  62.             int l = HDNF.indexOf(".");  
  63.             if (l == -1) {  
  64.                 l = HDNF.length();  
  65.             }  
  66.             eb.setHdnf(HDNF.substring(0, l));  
  67.             list.add(eb);  
  68.         }  
  69.         em.setDatas(list);  
  70.         return em;  
  71.     }  
  72. }  

构造函数是静态初始化块,读取  文件路径+文件名  根据后缀的不同创建不同的对象。

ProcessExcel的处理过程就是读取Excel的特定行,特定列,然后把数据转化为实体类对象,再将这个对象赋给List,然后 在DAO层采用批处理将数据插入到数据库中。

ExcelModel  类的结构如下:

[java] view plaincopy
  1. import java.util.List;  
  2.   
  3. public class ExcelModel {  
  4.     public List datas;  
  5.     public String state;  
  6.     public List getDatas() {  
  7.         return datas;  
  8.     }  
  9.     public void setDatas(List datas) {  
  10.         this.datas = datas;  
  11.     }  
  12.     public String getState() {  
  13.         return state;  
  14.     }  
  15.     public void setState(String state) {  
  16.         this.state = state;  
  17.     }  
  18. }  


 

为什么还要重新定义一个类来做为返回的参数,而不直接使用List对象接受返回对象列表呢?

这相当于ADTs(抽象对象模型),把与处理Excel的相关信息封装起来,比如说这个对象不仅有数据对象列表,还有状态信息,如果读取Excel时,Excel数据填入向不合法呢,这个状态信息就可以向用户 ,当然不只限制与这两个数据成员,当我们还需要其他处理Excel的相关信息的时候都可以向这个Excel里面添加数据成员来进行扩展.

 

[html] view plaincopy
  1. 1.public String getCellStringValue(HSSFCell cell) {   
  2.   2.String cellValue = "";   
  3.   3.switch (cell.getCellType()) {   
  4.   4.case HSSFCell.CELL_TYPE_STRING://字符串类型   
  5.   5.cellValue      = cell.getStringCellValue();   
  6.   6.if(cellValue.trim().equals("")||cellValue.trim().length()<=0)        
  7.   7.cellValue=" ";   
  8.   8.break;   
  9.   9.case HSSFCell.CELL_TYPE_NUMERIC: //数值类型   
  10.   10.cellValue      = String.valueOf(cell.getNumericCellValue());   
  11.   11.break;   
  12.   12.case HSSFCell.CELL_TYPE_FORMULA: //公式   
  13.   13.cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);        
  14.   14.cellValue      = String.valueOf(cell.getNumericCellValue());   
  15.   15.break;   
  16.   16.case HSSFCell.CELL_TYPE_BLANK:   
  17.   17.cellValue=" ";   
  18.   18.break;   
  19.   19.case HSSFCell.CELL_TYPE_BOOLEAN:   
  20.   20.break;   
  21.   21.case HSSFCell.CELL_TYPE_ERROR:   
  22.   22.break;   
  23.   23.default:   
  24.   24.break;   
  25.   25.}        
  26.   26.return cellValue;   
  27.   27.}        


 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!