Java使用poi对Execl简单_读_操作

 1 public class ReadExecl {
 2     
 3 //    private final String XLSX = ".xlsx"; // 2007以上版本
 4 //    private final String XLS = ".xls"; // 2003版本
 5     
 6     @Test
 7     public void readExeclTest() throws Exception{
 8         File file = new File("F:/execl/readTest2.xlsx"); 
 9         InputStream is = new FileInputStream(file); // 读取Execl
10         
11 //        String suffix = file.toString().substring(file.toString().lastIndexOf("."),file.toString().length()); // 截取文件的后缀
12 //        Workbook wb = null; // 创建一个工作簿
13 //        if(XLSX.equals(suffix)) // 判断下 Execl 的后缀是那个版本
14 //             wb = new XSSFWorkbook(is);
15 //        else if(XLS.equals(suffix))
16 //             wb = new HSSFWorkbook(is);
17 //        else
18 //            throw new RuntimeException("貌似这不是Execl的后缀,请重新检查喔^_^");  // 如果不是Execl就上抛异常
19         
20         Workbook wb = WorkbookFactory.create(is); // 万能处理版本问题,如果不用 上面注释的准确度创建,就可以考虑这种方式(其实底层也是那样判定的)
21         
22         Sheet sheet = wb.getSheetAt(0); // 获取一个Execl里面的sheet默认从0开始,也可以通过name来获取wb.getSheet(String name);
23         FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); // 创建公式计算器(用来判断获取Execl中的数据是什么类型)
24         
25         int firstRow = sheet.getFirstRowNum(); // 获取第一行
26         int lastRow = sheet.getLastRowNum(); // 获取最后一行
27         
28         for (int i = firstRow; i <= lastRow; i++) {
29             Row row = sheet.getRow(i); // 获取当前行
30             int firstCell = row.getFirstCellNum(); // 获取第一个单元格
31             int lastCell = row.getLastCellNum(); // 获取最后一个单元格
32             for(int j = firstCell; j <= lastCell; j++){
33                 Cell cell = row.getCell(j); // 获取单元格
34                 CellValue cellValue = evaluator.evaluate(cell); // 计算当前的单元格是什么数据类型
35                 if(cellValue == null) // 如果execl的单元格是空则继续下次循环
36                     continue;
37                 switch (cellValue.getCellType()) {
38                 case Cell.CELL_TYPE_NUMERIC:
39                     if (DateUtil.isCellDateFormatted(cell)) {  // 这里的日期类型会被转换为数字类型,需要判别后区分处理
40                         try {
41                             new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK).parse(cell.getDateCellValue().toString()));
42                             System.out.println("numeric转日期...");
43                         } catch (ParseException e) {
44                             e.printStackTrace();
45                         }
46                     } else {
47                         System.out.println("numeric类型...");
48                     }
49                     break;
50                 case Cell.CELL_TYPE_BOOLEAN:
51                     System.out.println("boolean类型...");
52                     break;
53                 case Cell.CELL_TYPE_STRING:
54                     System.out.println("string类型...");
55                     break;
56                 case Cell.CELL_TYPE_FORMULA:
57                     System.out.println("formula类型...");
58                     break;
59                 case Cell.CELL_TYPE_BLANK:
60                     System.out.println("blank类型...");
61                     break;
62                 case Cell.CELL_TYPE_ERROR:
63                     System.out.println("error类型...");
64                     break;
65                 default:
66                     break;
67                 }
68             }
69         }
70         
71         is.close(); // 记得关闭流,释放资源
72     }
73 }

 

posted @ 2015-08-31 22:03  冯孟活  阅读(830)  评论(0编辑  收藏  举报