java poi cell.getCellTypeEnum() 日期处理的问题

一般情况我们在获取单元格值的时候  会通过 cell.getCellTypeEnum()  提前判定一下单元格的类型 ,从而决定应该如何取值。

但当把单元格类型自定义的时候,出现了日期解析不出来的问题。

如出生日期这一列,我自定义格式为 yyyy-mm-dd。  但解析出来是double类型,取值为数字。

那么当程序校验日期的时候 就出现错误。 

因此不得不得再次处理一次

cell.getCellStyle().getDataFormatString()来判断,这个方法会返回格式字符串,通过这个字符串去匹配,再处理。

poi获取这种自定义日期格式的时候 返回的字符串为 yyyy\-mm\-dd (注意:有反斜杠),那么程序中在判断的时候要反义一下 用双斜杠。 这样的话就能正确获取日期值了

    /**
     * 功能描述: 获取单元格值
     *
     * @param cell 单元格
     * @return String
     */
    public String getCellValue(Cell cell) {
        String value = "";
        if (cell != null){
            switch (cell.getCellTypeEnum()) {
                case STRING:
                    value = cell.getRichStringCellValue().getString();
                    break;
                case NUMERIC:
                    String debug_str = cell.getCellStyle().getDataFormatString();

                    if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString()) || "yyyy\\-mm\\-dd".equals(cell.getCellStyle().getDataFormatString())) {
                        value = DateUtil.dateToStringByFormat(DateUtil.FORMATTER_DATE, cell.getDateCellValue());
                    } else {
                        DecimalFormat df = new DecimalFormat("#");
                        value = df.format(cell.getNumericCellValue());
//                    value = String.valueOf(cell.getNumericCellValue());
                    }
                    break;
                case BOOLEAN:
                    value = String.valueOf(cell.getBooleanCellValue());
                    break;
                default:
                    break;
            }
        }
        return RegexUtils.trimSpaceTag(value);
    }

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是Java利用POI读取Excel时检查Excel格式的方法: ``` public static boolean checkExcelFormat(File file) throws IOException { FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis); // 使用XSSFWorkbook来读取xlsx格式的Excel文件 Sheet sheet = workbook.getSheet("synonyms"); // 获取名为"synonyms"的工作表 if(sheet == null) { // 工作表不存在,则返回false return false; } Row row = sheet.getRow(0); // 获取第一行 if(row == null) { // 第一行为空,则返回false return false; } int numCells = row.getPhysicalNumberOfCells(); // 获取第一行的单元格数 if(numCells != 2) { // 如果单元格数不是2,则返回false return false; } Cell cell1 = row.getCell(0); // 获取第一列的单元格 Cell cell2 = row.getCell(1); // 获取第二列的单元格 String value1 = getCellValue(cell1); // 获取第一列的值 String value2 = getCellValue(cell2); // 获取第二列的值 if(!"词目".equals(value1) || !"同义词".equals(value2)) { // 如果第一列不是"词目",或者第二列不是"同义词",则返回false return false; } return true; } private static String getCellValue(Cell cell) { if(cell == null) { return ""; } if(cell.getCellTypeEnum() == CellType.STRING) { // 如果单元格是字符串类型,则直接返回字符串值 return cell.getStringCellValue().trim(); } else if(cell.getCellTypeEnum() == CellType.NUMERIC) { // 如果单元格是数字类型,则转换为字符串返回 return String.valueOf((int)cell.getNumericCellValue()); } else { // 其他类型的单元格返回空字符串 return ""; } } ``` 调用该方法传入Excel文件,即可判断该Excel文件是否符合要求。如果返回false,则说明Excel格式不正确,否则说明格式正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值