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 }
没有最好,也没有最坏,一切习惯就好~_^!
JAVA交流群^_^:487566461
Activiti5交流群~_^:470165731
JBPM6交流群^_^:470118196
你的加入是我的荣耀,来吧,朋友:让我们一起交流和探讨!