poi解析Excel,格式化日期类型

来源:互联网 发布:重庆猪八戒网络 编辑:程序博客网 时间:2024/05/17 13:39
/** * 解析excel *  * @param fileName */public void parseExcelFile(String fileName) {// String fileName = System.getProperty("user.dir") +// "\\resources\\excelParse.xlsx";InputStream in = null;try {in = new FileInputStream(fileName);XSSFWorkbook workBook = new XSSFWorkbook(in);int sheetNum = workBook.getNumberOfSheets();XSSFSheet sheet = workBook.getSheetAt(sheetNum);sheetNum--;int rowNum = sheet.getLastRowNum();if (rowNum > 0) {for (int i = 0; i < rowNum; i++) {XSSFRow row = sheet.getRow(rowNum);if (row != null) {int cellNum = row.getLastCellNum();for (int j = 0; j < cellNum; j++) {XSSFCell cell = row.getCell(cellNum);String cellValue = getCellValue(cell);}}}}} catch (Exception e) {e.printStackTrace();} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}/** * 获取单元格的值 *  * @param hcell * @return */private String getCellValue(XSSFCell hcell) {String value = null;if (null != hcell) {switch (hcell.getCellType()) {// 单元格是函数计算出来的数据case HSSFCell.CELL_TYPE_FORMULA:try {value = String.valueOf(hcell.getNumericCellValue());} catch (Exception e) {value = String.valueOf(hcell.getRichStringCellValue());}break;// 单元格是数字类型的case HSSFCell.CELL_TYPE_NUMERIC:// 获取单元格的样式值,即获取单元格格式对应的数值int style = hcell.getCellStyle().getDataFormat();// 判断是否是日期格式if (HSSFDateUtil.isCellDateFormatted(hcell)) {Date date = hcell.getDateCellValue();// 对不同格式的日期类型做不同的输出,与单元格格式保持一致switch (style) {case 178:value = new SimpleDateFormat("yyyy'年'M'月'd'日'").format(date);break;case 14:value = new SimpleDateFormat("yyyy/MM/dd").format(date);break;case 179:value = new SimpleDateFormat("yyyy/MM/dd HH:mm").format(date);break;case 181:value = new SimpleDateFormat("yyyy/MM/dd HH:mm a ").format(date);break;case 22:value = new SimpleDateFormat(" yyyy/MM/dd HH:mm:ss ").format(date);break;default:break;}} else {switch (style) {// 单元格格式为百分比,不格式化会直接以小数输出case 9:value = new DecimalFormat("0.00%").format(hcell.getNumericCellValue());break;// DateUtil判断其不是日期格式,在这里也可以设置其输出类型case 57:value = new SimpleDateFormat(" yyyy'年'MM'月' ").format(hcell.getDateCellValue());break;default:value = String.valueOf(hcell.getNumericCellValue());break;}}break;// 单元格是字符串类型的case HSSFCell.CELL_TYPE_STRING:value = String.valueOf(hcell.getRichStringCellValue());break;}}return value;}

1、这个解析的是07版的excel,03版的类似,只不过对象不一样,03版的是HSSF*。

2、这里只对单元格是否是函数、数字、字符串类型做了判断,还有boolean等类型。单元格的每一个格式都有一个样式值与其对应,这样就可以使输出的格式与单元格的格式一致啦。

3、对日期做格式化的时候,要写对标记,我之前写的月份是mm,连26月都出来了,换成MM就可以啦。
4、excel中还有一种日期格式是“二〇〇一年三月十四日”,还没弄出来怎么格式化出来。
原创粉丝点击