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