[alibaba/easyexcel]通过流读取csv文件失败

2024-05-10 827 views
0

异常代码 版本3.1.0

//  File excleFile = new File("d:/dl/test.csv");
        InputStream inputStream = new FileInputStream("d:/dl/test.csv");
        EasyExcel.read(inputStream, new ReadListener() {
            @Override
            public void invoke(Object data, AnalysisContext context) {
                log.info(JSON.toJSONString(data));
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {

            }
        }).sheet().doRead();

异常提示 com.alibaba.excel.exception.ExcelCommonException: Convert excel format exception.You can try specifying the 'excelType' yourself 建议描述

回答

6

sheet()前加excelType就可以指定了

6

sheet()前加excelType就可以指定了

加上excelType确实是可以。我看了源码,流那里有判断是CSV类型的,在ExcelTypeEnum.java中,是不是那个判断有问题?

 private static ExcelTypeEnum recognitionExcelType(InputStream inputStream) throws Exception {
        // Grab the first bytes of this stream
        byte[] data = IOUtils.peekFirstNBytes(inputStream, MAX_PATTERN_LENGTH);
        if (findMagic(XLSX.magic, data)) {
            return XLSX;
        } else if (findMagic(CSV.magic, data)) {
            return CSV;
        } else if (findMagic(XLS.magic, data)) {
            return XLS;
        }
        throw new ExcelCommonException(
            "Convert excel format exception.You can try specifying the 'excelType' yourself");
    }
3

我也复现了这个问题, 就是 ExcelTypeEnum 里面文件前面的编码有问题对不上 image

4

而且如果是从 xlsx / xls 重命名过来的 csv 不会有问题,直接写内容的 csv 就会出现此问题

2

新版本应该已经解决这个问题了

9

感谢回复