解决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);
}
相关推荐
Flynn Liang11 小时前
RAG 评估体系:黄金集、检索指标与 LLM-as-Judge 落地
java·langchain·rag·评估·langchain4j·检索指标
SimonKing12 小时前
Workbuddy太占C盘空间了,写个迁移工具迁走10G的数据
java·后端·程序员
Hvitur12 小时前
Java - Lambda
java·开发语言·python
apcipot_rain17 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵1 天前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj5201 天前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设1 天前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪1 天前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设1 天前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff1 天前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码