alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32.09k stars 7.5k forks source link

如何读取使用制表符和空格分割的CSV文件? #3868

Closed RuthlessJie closed 2 months ago

RuthlessJie commented 3 months ago

问题描述

客户提供的csv文件是用TAB制表符分割的,读取出来就都是空,我把制表符替换成逗号就可以正常使用了。 我怎么能设置读取csv文件的时候分隔符是什么?

RuthlessJie commented 3 months ago

代码: is = file.getInputStream(); EasyExcel.read(is, Rqjtmhat.class, new ReadListener() {

            @Override
            public void invoke(Rqjtmhat r, AnalysisContext context) {
                //把解析到的每一行数据都存入list中
                userVOS.add(r);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {

            }
        }).charset(StandardCharsets.UTF_8).excelType(ExcelTypeEnum.CSV).sheet().doRead();
psxjoy commented 2 months ago
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.csv";
// 一个文件一个reader
try (ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build()) {
    ReadWorkbookHolder readWorkbookHolder = excelReader.analysisContext().readWorkbookHolder();
    // 判断只有csv 才需要修改配置信息
    if (readWorkbookHolder instanceof CsvReadWorkbookHolder) {
        CsvReadWorkbookHolder csvReadWorkbookHolder = (CsvReadWorkbookHolder)readWorkbookHolder;
        // 底层读取csv 用的是apache的common-csv 所以设置 CsvFormat即可
        ucsvReadWorkbookHolder.setCsvFormat(csvReadWorkbookHolder.getCsvFormat().withDelimiter(';'));
    }
    ReadSheet readSheet = EasyExcel.readSheet(0).build();
    excelReader.read(readSheet);
}
psxjoy commented 2 months ago

不知道您是否已经解决该问题?我们先暂时关闭这个问题,如果还存在问题请重新Reopen这个issue。