alibaba/easyexcel

afterWorkbookDispose该方法中无法获取到sheet中的第一行数据

Open

#4130 opened on Aug 7, 2025

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (33,728 stars) (7,599 forks)batch import
help wanted

Description

快速开始常见问题

背景:

我希望能够对某一列加下拉框,这个列的下标是不固定的,如列名为: '是否是问题' 就添加'是问题'、'非问题'的下拉框 当前的做法是在writeHandler 的 afterWorkbookDispose方法中,获取每个sheet的第一个Row的值,然后进行匹配,但是当excel行数过多时,这个sheet.getRow(0)就会返回null,无法获取到第一行的值。

异常代码

            public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) {
                Workbook workbook = writeWorkbookHolder.getWorkbook();
                Iterator<Sheet> sheetIterator = workbook.sheetIterator();
                sheetIterator.forEachRemaining(sheet -> {
                    setConstraintSheet(sheet.getRow(0), dropDownList, size, sheet);
                    for (int index : hideIndex) {
                        sheet.setColumnHidden(index, true);
                    }
                });
            }

异常提示

看起来像是调用afterWorkbookDispose时,已经把部分内容刷新到excel里面了,sheet的lastFlushedRowNumeber已经有值,导致无法获取到第一行的内容。

问题描述

afterWorkbookDispose该方法中无法获取到sheet中的第一行数据,有什么方法可以获取到吗,或者我的需求可以用其他方法实现?

示例文档中是在拦截器的afterSheetCreate 里面设置下拉框,但是此时无法获取第一行的内容,是手动指定下标来设置的。我希望能够根据表头内容,来设置对应的下拉框

Contributor guide