解决Excel文件流读取数字为时间乱码问题

在将Excel文件流转换为Java中的List时,如果遇到文本被错误地识别为日期格式的问题,这通常是由于Apache POI库在处理单元格数据时默认的行为所导致的。Apache POI会尝试根据单元格的内容自动确定其类型,包括字符串、数字(可能解释为日期)、布尔值等。

为了解决这个问题,你可以在读取单元格数据时更明确地指定如何处理数字类型的单元格,特别是当你知道某些单元格应该被当作纯文本处理时。

使用DataFormatter:

DataFormatter类是一个有用的工具,它可以根据Excel中的格式设置将单元格内容转换为字符串。这可以帮助你避免类型识别的问题,因为DataFormatter会尽量保留单元格在Excel中的显示格式。

java 复制代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.DataFormatter;

List<List<String>> olist2 = new ArrayList<>();
Workbook workbook = new XSSFWorkbook(file.getInputStream());
DataFormatter dataFormatter = new DataFormatter();
for (Row row : workbook.getSheetAt(0)) {
    if(row.getRowNum() == 0){
        continue;
    }
    List<String> data = new ArrayList<>();
    for (Cell cell : row) {
        String cellData = dataFormatter.formatCellValue(cell);
        data.add(cellData);
    }
    olist2.add(data);
}
相关推荐
众乐乐_20083 分钟前
Maven中的(五种常用依赖范围)
java·maven
橘猫云计算机设计5 分钟前
springboot-基于Web企业短信息发送系统(源码+lw+部署文档+讲解),源码可白嫖!
java·前端·数据库·spring boot·后端·小程序·毕业设计
程序猿chen16 分钟前
JVM考古现场(二十五):逆熵者·时间晶体的永恒之战(进阶篇)
java·jvm·git·后端·程序人生·java-ee·改行学it
CopyLower23 分钟前
Spring Boot的优点:赋能现代Java开发的利器
java·linux·spring boot
细心的莽夫26 分钟前
Elasticsearch复习笔记
java·大数据·spring boot·笔记·后端·elasticsearch·docker
程序员阿鹏36 分钟前
实现SpringBoot底层机制【Tomcat启动分析+Spring容器初始化+Tomcat 如何关联 Spring容器】
java·spring boot·后端·spring·docker·tomcat·intellij-idea
大叔比较胖1 小时前
VSCode 用于JAVA开发的环境配置,JDK为1.8版本时的配置
java·ide·vscode·jdk·1.8
种时光的人2 小时前
多线程出bug不知道如何调试?java线程几种常见状态
java·python·bug
小尹哥-程序员2 小时前
springboot2.X创建maven多模块工程
java·maven
web安全工具库2 小时前
Python内存管理之隔代回收机制详解
java·jvm·算法