代码拉取完成,页面将自动刷新
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;
}
}
调用第一个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))...
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论