Skip to content
This repository was archived by the owner on Sep 4, 2025. It is now read-only.
This repository was archived by the owner on Sep 4, 2025. It is now read-only.

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

@HongliangChen-963

Description

@HongliangChen-963

快速开始常见问题

背景:

我希望能够对某一列加下拉框,这个列的下标是不固定的,如列名为: '是否是问题' 就添加'是问题'、'非问题'的下拉框
当前的做法是在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 里面设置下拉框,但是此时无法获取第一行的内容,是手动指定下标来设置的。我希望能够根据表头内容,来设置对应的下拉框

Metadata

Metadata

Assignees

No one assigned

    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