16 Star 250 Fork 54

wangguanquan / eec

 / 详情

先读取表头再读数据出现异常

待办的
创建于  
2024-02-21 15:46
package bug;

import org.ttzero.excel.annotation.ExcelColumn;
import org.ttzero.excel.reader.ExcelReader;
import org.ttzero.excel.reader.ExcelReaderTest;
import org.ttzero.excel.reader.Row;
import org.ttzero.excel.reader.Sheet;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Test {

    public static void main(String[] args) {
        Path path = ExcelReaderTest.testResourceRoot().resolve("#81.xlsx");
        try (ExcelReader reader = ExcelReader.read(path)) {
            reader.sheets().filter(Sheet::isShow).forEach(s -> {
                Row header = s.getHeader();
                s.bind(Bean.class, 1).dataRows().forEach(row -> {
                    System.out.println(row.getRowNum());
                    Bean bean = row.get();
                    System.out.println(bean);
                });
            });
        } catch (IOException ignored) {
        }
    }

    public static final class Bean {
        @ExcelColumn("客户编码")
        private String code;
        @ExcelColumn("人员工号")
        private Integer number;
    }

}

重复读取表头

输入图片说明

注释后正常读取数据

输入图片说明

评论 (3)

javanasoda 创建了任务

调用第一个getHeader()会默认将第1个非空行做为表头行,表头行是全局保存的。第二次调用bind时因为已有header所以并不会重新跳到表头行上去,此时只需要在getHeader之前设置表头即可。

Row header = s.header(1).getHeader(); // <- 使用header(1)方法指写表头行并跳到该行
s.bind(Bean.class).dataRows().forEach(row -> ...)

不能往前跳只能往后跳?

是的,ExcelReader内部使用的是普通的InputStream它只能向前。
对于数据量少的文件可以将所有数据收集到内存,数据量大可以重复读取。

// 1. 收集
List<Bean> list = reader.sheet(0).dataRows().map(row -> row.to(Bean.class)).collect(Collectors.toList());

// 2. 使用reset重置
Sheet sheet0 = reader.sheet(0);
sheet0.dataRows().filter(...) // <- 数据检查

sheet0.reset(); // <- 重置游标
sheet0.dataRows().map(row -> row.to(Bean.class))...

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1796832 javanasoda 1578960005
Java
1
https://gitee.com/wangguanquan/eec.git
git@gitee.com:wangguanquan/eec.git
wangguanquan
eec
eec

搜索帮助