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

/**
	 * 解析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中还有一种日期格式是“二〇〇一年三月十四日”,还没弄出来怎么格式化出来。

你可能感兴趣的:(java)