eec icon indicating copy to clipboard operation
eec copied to clipboard

导入行数据乱序

Open strive10 opened this issue 1 year ago • 5 comments

读取的row对象中,列数据的顺序和excel实际的顺序不一致。

strive10 avatar Apr 01 '24 09:04 strive10

没有敏感数据的话可以将文件发我,点击我头像查看邮箱地址

Message ID: @.***>

wangguanquan avatar Apr 01 '24 10:04 wangguanquan

邮件已发,请查收。

strive10 avatar Apr 22 '24 02:04 strive10

已收

wangguanquan avatar Apr 22 '24 03:04 wangguanquan

你发的文件是改动过后的吧,我没有看到乱序。乱序大部分情况是出现了未知的标签导致的兼容性错误,用office打开后再保存Office会删除或修正这部分信息所以再次读就不会有问题,如果要解决问题我需要原件分析是那些标签并做兼容处理

wangguanquan avatar Apr 22 '24 05:04 wangguanquan

EEC不支持多线程读写,它是线程不安全的,内部很多设计都是内存共享的,如果数据量较大需要异步操作可以先将行数据转为对象或者Map后再异步处理逻辑,或者直接使用流式处理参考WIKI

try (ExcelReader reader = ExcelReader.read(Paths.get("./goods.xlsx"))) {
    List<Goods> batch = new ArrayList<>(100);
    for (Iterator<Row> ite = reader.sheet(0).dataIterator(); ite.hasNext(); ) {
        // 行数据转对象
        batch.add(ite.next().to(Goods.class)); // 使用 to 方法将共享的row转为独立的对象,这样就不会互相影响了
        // 满100条批量上架
        if (batch.size() >= 100) {
            goodsService.batchPublish(batch);
            batch.clear();
        }
    }
    // 上架剩余商品
    if (!batch.isEmpty()) {
        goodsService.batchPublish(batch);
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

wangguanquan avatar Apr 23 '24 06:04 wangguanquan

升级到0.5.x解决此问题

wangguanquan avatar Jun 25 '24 01:06 wangguanquan