eec
eec copied to clipboard
导入行数据乱序
读取的row对象中,列数据的顺序和excel实际的顺序不一致。
没有敏感数据的话可以将文件发我,点击我头像查看邮箱地址
Message ID: @.***>
邮件已发,请查收。
已收
你发的文件是改动过后的吧,我没有看到乱序。乱序大部分情况是出现了未知的标签导致的兼容性错误,用office打开后再保存Office会删除或修正这部分信息所以再次读就不会有问题,如果要解决问题我需要原件分析是那些标签并做兼容处理
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();
}
升级到0.5.x解决此问题