Skip to content

FastExcel替换EasyExcel解析表格报错 #154

@yangweibing

Description

@yangweibing

问题一:
解析的表格带有批注:
image
原来用esayExcel是可以解析出标头中的批注,代码如下:

    public static void readExcelFirstRow() {
        List<String> resultList = new LinkedList<>();
        Map<String, String> commentMap = new HashMap<>();
        List<List<String>> cacheList = new LinkedList<>();
        try {
            File file = new File("C:\\Users\\ywb\\Downloads\\test.xlsx");
            InputStream inp = new FileInputStream(file);
            ExcelReaderBuilder registerReadListener = EasyExcel.read(inp)
                    .extraRead(CellExtraTypeEnum.COMMENT) // 开启读取批注
                    .head(cacheList).headRowNumber(0)
                    .registerReadListener(new PageReadListener<Map<Integer, String>>(dataList -> {
                        // 默认只读1页
                        int row = 0;
                        for (Map<Integer, String> data : dataList) {
                            if (resultList.isEmpty()) {
                                for (Map.Entry<Integer, String> entry : data.entrySet()) {
                                    int column = entry.getKey();
                                    String value = entry.getValue();
                                    String comment = commentMap.get(row + "#" + column);
                                    if (comment != null) {
                                        resultList.add(value + "#" + comment);
                                    }
                                    else {
                                        resultList.add(value);
                                    }
                                }
                            }
                            else {
                                // 读取一行后抛异常停止读取
                                throw new ExcelAnalysisStopException();
                            }
                            row++;
                        }
                    },100) {
                        @Override
                        public void extra(CellExtra extra, AnalysisContext context) {
                            // EasyExcel先读取表格的额外内容再读取正文,因此需要先暂存额外内容
                            if (extra.getType() == CellExtraTypeEnum.COMMENT) {
                                commentMap.put(extra.getRowIndex() + "#" + extra.getColumnIndex(), extra.getText());
                            }
                        }
                    });
            registerReadListener.sheet().doRead();
        } catch (Exception e) {
           System.out.println(e.getMessage());
        }
    }

把上面的代码中的EasyExcel换成fastExcel就不行了,对应的所有引用也都替换了。以下是错误输出:

	java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.atDebug()Lorg/apache/logging/log4j/LogBuilder;

maven引入如下:

	<dependency>
			<groupId>cn.idev.excel</groupId>
			<artifactId>fastexcel</artifactId>
			<version>1.0.0</version> <!-- 请确保使用最新版本 -->
		</dependency>

问题二:esayExcel的registerReadListener目前只支持数据数量小于100条的表格解析,大于100条,就不走extra方法,无法读取批注,请问fastExcel有什么好的解决办法?目前只能用的Workbook来实现。

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is needed

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions