eec icon indicating copy to clipboard operation
eec copied to clipboard

【求助】是否支持复杂合并的单元格多列值读取?

Open xiaoxpai opened this issue 11 months ago • 10 comments

遇到的项目场景:如图

Image

为什么单头命名为规格项1,规格项2....因为这些是动态的值。

现有的读取只能读取一行或一列值

Image

示例代码

 List<AdoDTO> dataList = reader.sheets()
                    .flatMap(Sheet::rows)
                    .map(row -> row.to(AdoDTO.class))
                    .collect(Collectors.toList());

xiaoxpai avatar Mar 11 '25 07:03 xiaoxpai

多表头你可以通过header来指定表头,指定表头后就会按 "规格项1:材质","规格项1:铝合金" 这种格式做为表头

reader.sheets()
    .peek(sheet -> sheet.header(1, 2)) // <- 指定第1,2行为表头,这里的是行号从1开始(打开excel时看到的行号)
    .flatMap(Sheet::rows)
    .map(Row::toMap)  // <- 转为Map,如果表头是动态的话这里使用Map比较合适
    .collect(Collectors.toList());

wangguanquan avatar Mar 11 '25 07:03 wangguanquan

感谢回复这么及时,但是我尝试过你提供的方法,没有你预期的这种效果

如图

Image

这样的,框架可以实现吗?

Image

xiaoxpai avatar Mar 11 '25 07:03 xiaoxpai

我可能理解错了,表头只有一个是吧,灰色行为表头,如果只有一列则表示那一列的值,如果有两列则第一列为Key,第二列为Value ,key 库存单位 value 个,key 规格项1:材质:value 铝合金,需要像下面这样的效果是吗

wangguanquan avatar Mar 11 '25 08:03 wangguanquan

我代码调试了一下,规格项1这样的表头格式是合并单元格。读取的时候是这样的格式 規格项1 | null | 規格项2 | null | 規格项3 | null | 規格项4 | null | 規格项5 | null 将另一个表头置为 null 了。

xiaoxpai avatar Mar 11 '25 08:03 xiaoxpai

合并单元格可以使用copyOnMerged来复制值

List<Map<String, Object>> list = reader.sheets()
    .map(sheet -> sheet.asFullSheet().copyOnMerged()). // <- 使用copyOnMerged来复制值,也可以使用 sheet.asMergeSheet转为MergeSheet
    .flatMap(Sheet::rows)
    .map(Row::toMap)
    .collect(Collectors.toList());

wangguanquan avatar Mar 11 '25 08:03 wangguanquan

这个方法貌似您已经把他注释掉了,我看源码是这样的,版本号是 0.5.9

    @Override
    public XMLMergeSheet asMergeSheet() {
        return !(this instanceof XMLMergeSheet) ? new XMLMergeSheet(this) : (XMLMergeSheet) this;
    }

//    public FullSheet asFullSheet() {
//        throw new IllegalArgumentException();
//    }

但是尝试使用另一个方法 sheet.asMergeSheet ,好像报异常信息了,

Image

xiaoxpai avatar Mar 11 '25 08:03 xiaoxpai

升版吧,当前最新版为0.5.22,担心兼容问题可以升到0.5.11

wangguanquan avatar Mar 11 '25 08:03 wangguanquan

以下几个版本都增加了新特性或提升了性能,可以尝试一下

0.5.11 优化ExcelReader性能 0.5.13 增加FullSheet读取更多属性 0.5.14 增加TemplateSheet模板导出工作表 0.5.22 Workbook增加WbestSpeed方法打开性能模式提升导出速度

wangguanquan avatar Mar 11 '25 09:03 wangguanquan

好的,我再找时间,更新新版本,针对这些新特性写一些demo 👍

xiaoxpai avatar Mar 17 '25 02:03 xiaoxpai

升版吧,当前最新版为0.5.22,担心兼容问题可以升到0.5.11

再次感谢提供指导和帮助 🤝🤝🤝

xiaoxpai avatar Mar 17 '25 02:03 xiaoxpai