当前位置: 首页 > 知识库问答 >
问题:

XLSX自定义日期格式读取为字符串

卫飞鹏
2023-03-14
while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                cell.setCellType(Cell.CELL_TYPE_STRING);
                System.out.print(cell.getStringCellValue() + ";");
            }

共有1个答案

欧阳英彦
2023-03-14

为什么?为什么,为什么,为什么,为什么你要写代码开始呢?这在很多层面上都是错误的,Apache POI关于Stackoverflow的问题大概有三分之一涉及到了这一点:(哦,在JavaDocs中明确建议不要这样做....

你有两种选择。如果您希望完全控制读取值,那么按照Apache POI文档中关于读取单元格值的说明编写代码,如下所示:

for (Row row : sheet1) {
    for (Cell cell : row) {
        CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
        System.out.print(cellRef.formatAsString());
        System.out.print(" - ");

        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                System.out.println(cell.getRichStringCellValue().getString());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    System.out.println(cell.getDateCellValue());
                } else {
                    System.out.println(cell.getNumericCellValue());
                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                System.out.println(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA:
                System.out.println(cell.getCellFormula());
                break;
            default:
                System.out.println();
        }
    }
}

或者,如果您只是想“给我尽可能接近Excel中单元格的字符串”,那么您需要使用DataFormatter类,它提供了读取应用于单元格的Excel格式规则的方法,然后在Java中重新创建(尽可能好的)这些规则

您的代码应该是:

DataFormatter fmt = new DataFormatter();

String valueAsInExcel = fmt.formatCellValue(cell);

这将根据Excel中应用的格式设置规则设置数字的格式,因此应按您所期望的方式返回数字

最后,excel中的日期存储为1900年或1904年以来的浮点数,这就是为什么您在日期单元格中看到的数字。

 类似资料:
  • 问题内容: 我要特别问的是,是否有人知道默认转换格式在哪里指定,是由JDBC规范在某处定义的,还是由单独的JDBC驱动程序决定的。如果是后者,那么另一个问题是Oracle 10g JDBC如何做到这一点? **添加了1月15日: 抱歉,我认为问题已经很清楚了,但显然不是。我不是想从数据库中检索日期值,也不需要关于执行该操作的方法的建议。 我不认为这是所引用问题的重复,这就是为什么我在这里提出一个单

  • 问题内容: 我正在使用Apache POI库读取Excel文件。我在读取密码单元时被卡住了。如果用户在密码单元格中输入日期作为密码,即16/05/2012。我正在将此值读取为“ 41045”,而该值应为“ 16/05/2012”。这是我的代码: 有人可以帮忙吗? 谢谢。 问题答案: 您在POI中寻找的类是DataFormatter 当Excel写入文件时,某些单元格将存储为文字字符串,而另一些单元

  • ObjectMapper不会将对象格式化为自定义对象。 波乔不在我的控制之下,所以我不能改变它。我需要序列化WS的POJO对象。POJO有(我不知道为什么,因为它的日期来自数据库)。 我使用的是Spring boot 2.1.8。释放,所以。。。我将其放入我的依赖项中: 我还在应用程序中添加了这个。特性: 在配置文件中,我在配置文件中添加了这个bean,因为尽快配置ObjectMapper以接受更

  • 在SQL Server中,我有一个日期字符串,看起来像09 / 08 / 2021。表示日/月/年。因此,在这种情况下,它是2021年8月9日。我尝试将其显式转换为日期格式的每个方法都会自动将其转换为2021-09-08。因此,SQL 错误地转换为 2021 年 9 月 8 日。 两者都错误地给出了: 期望的结果是: 我已经尝试了上面的各种不同版本,但总是得到不正确的转换。我也不想改变源数据。 我

  • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

  • 我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?