在进行 类转换时候,系统默认注册了一些转换器,当然你也可以自定局部或者全局的转换器。下面进行具体使用说明 

  1. java类说明 对应的java实体类,其属性必须要有__@CellConfig__注解,此注解必须的值为index属性,起始值是0;如果你要限定实体类的某一个属性必须有值的话,可以这样定义:

@CellConfig(index = 0,readRequired=true)
private String a;

一旦你加上了 readRequired 这个属性,当你的excel对应属性不存在时候,就会抛出异常illegalValueException ;如果你想在属性不存在时候做一些其他业务逻辑,那你不应该加上 readRequired 这个属性,而是自己去定义一个这个属性的转换器(在后面会讲到转化器的定义)。
当然你也会有需求,比如我确实需要定义一个属性,他在excel中确实不存在。那么你可以把这个属性定义为transient 的:

//与excel不对应的属性。
private transient String test;

另外关键的操作类是 BingExcel ,这个类必须由 BingExcelBuilder 来构建(补充一点:因为不可能在转换中将一个百万级的数据直接转换到内存中list对象,这里也提供了 BingExcelEvent 来进行大数据的读取)

2. 自定义转化器

属性的转换是靠默认的转化器( FieldValueConverter )来进行的,默认的转换器包括数组,列表(List),枚举等。如下面例子: 

员工表-salary.xlsx(可以从 这里下载),里面有个字段-部门,在java中是个枚举对象;另外里面还有一些日期字段(入职时间等),但是是用字符串形式存储的日期,这样自定义的转换器就不能去处理了。

public class Salary {

        @CellConfig(index = 1)
private String employNum; @CellConfig(index = 0)
private String id; //默认的boolean类型只支持"TRUE", "FALSE"字符的转换,但是它自带了传参数的构造方法,具体可以参考源码,
@CellConfig(index = 8)
@BingConvertor(value = BooleanFieldConverter.class, strings = { "1","0" }, booleans = { false })
private boolean allDay; @CellConfig(index=7)
private Department department;//枚举类型 @CellConfig(index = 13)
@BingConvertor(DateTestConverter.class)
// 自定义转换器
private Date atypiaDate; @CellConfig(index = 14)
private Date entryTime;//用默认的转换器 // 与excel无对应关系的属性定义
private transient String test; public String toString() {
return MoreObjects.toStringHelper(this.getClass()).omitNullValues()
.add("id", id).add("employNum", employNum)
.add("allDay", allDay)
.add("atypiaDate", atypiaDate)
.add("department", department)
.add("entryTime", entryTime).toString();
}
//省略了 getter与setter方法。
}

部门枚举的定义:当然你可以把他定义到 Salary 中,作为一个内部类

enum Department {
develop, personnel, product;
}

定义自己的日期转换器,可以通过实现 FieldValueConverter 或者继承 AbstractFieldConvertor

public class DateTestConverter extends AbstractFieldConvertor {

        @Override
public boolean canConvert(Class<?> clz) {
return clz.equals(Date.class);
}
@Override
public Object fromString(String cell, ConverterHandler converterHandler,Type type) { if (StringUtils.isBlank(cell)) {
return null;
}
try { SimpleDateFormat format=new SimpleDateFormat("yyyy.MM.dd");
Date date = format.parse(cell);
return date;
} catch (ParseException e) {
throw new RuntimeException(e);
}
} }

然后,你就可以进行读入了:

 URL url = Salary.class.getResource("/salary.xlsx");
File f = new File(url.toURI()); BingExcel bing = BingExcelBuilder.toBuilder().builder();
try {
SheetVo<Salary> vo = bing.readFile(f, Salary.class, 1);
System.out.println(vo.getSheetIndex());
System.out.println(vo.getSheetName());
List<Salary> objectList = vo.getObjectList();
for (Salary salary : objectList) {
System.out.println(salary);
}
} catch (Exception e) {
e.printStackTrace();
}

对于 BingExcel 类,它有多个方法:具体可以查相关api或者代码。

 /**
* 读取所condition 对应 sheet表格,到SheetVo */ <T> SheetVo<T> readFile(File file, ReaderCondition<T> condition) throws Exception ;
/**
* 读取所condition 对应 sheet表格,到list
* @param file
* @param conditions 每个表格对应的condition,注:对于返回的条数,取conditions中 endNum的最小值
* @return sheetVo的list对象,如果没有符合conditions的结果,返回empetyList对象
* @throws Exception
*/
List<SheetVo> readFileToList(File file,ReaderCondition[] conditions) throws Exception ;

其中 ReaderCondition 提供了更为精细的读取控制。

更多内容可以关注:项目地址https://git.oschina.net/bingyulei007/bingExcel,也可以去项目页留言。提出宝贵的改进意见

轻松完成excel读写操作- 基于POI的框架BingExcel的使用(2)的更多相关文章

  1. 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(1)

    Bingexcel User Guide 使用maven进行项目开发目前项目的maven仓库是在github上,浏览地址为 https://github.com/bingyulei007/mvn-re ...

  2. Java学习---Excel读写操作

    1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...

  3. NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

    NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...

  4. NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))

    在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article ...

  5. JXL.jar简单封装Excel读写操作

    1.分析 一个excel文件能够有多页,每页excel中能够有多行,每行中能够有多列.用面向对象的思想能够把一行中的某列看作是一个String对象,一行看作是一个包括多个列的对象.一页是包括多行的对面 ...

  6. java实现Excel定制导出(基于POI的工具类)

    我的需求: 项目中有一些工程表格需要导出,设计到行列合并,定制样式,原有工具类冗余,内聚性强.所以想写一个可以随意定制excel的工具类,工具类满足需求: 对于常用的工程表格有模板格式,可以任意插拔. ...

  7. 【Python】excel读写操作 xlrd & xlwt

    xlrd ■ xlrd xlrd模块用于读取excel文件内容 基本用法: workbook = xlrd.open_workbook('文件路径') workbook.sheet_names() # ...

  8. Excel 读写操作

    读 import xlrd from xlrd.book import Book from xlrd.sheet import Sheet from xlrd.sheet import Cell wo ...

  9. 78、excel的读写操作

    本篇主要是用python来自动生成excel数据文件也就是简单的excel读写操作.python读写excel文件主要是第三方模块库xlrd.xlwt. 本篇导航: 写excel 读excel 一.写 ...

随机推荐

  1. 拓扑排序/DP【洛谷P2883】 [USACO07MAR]牛交通Cow Traffic

    P2883 [USACO07MAR]牛交通Cow Traffic 随着牛的数量增加,农场的道路的拥挤现象十分严重,特别是在每天晚上的挤奶时间.为了解决这个问题,FJ决定研究这个问题,以能找到导致拥堵现 ...

  2. git 创建、切换和提交新分支

    查看本地分支 git branch 创建新的分支 git branch <newBranch> 切换分支 git checkout <branchName> 创建并切换分支 g ...

  3. [WebShow系列] 需求及环境的确定

    需求及环境确定: 主题标语 选手人数 评委人数 打分方式 合计算法 名次算法 大屏数量 大屏分辨率 电脑配置 切换设备 评委人员配备 技术人员配备 现场网速情况 评委移动端配备 场次数量 场次时间 选 ...

  4. firefox浏览本地网站慢的问题

    用火狐调试本地站点网站,总感觉有点迟钝 经查,原来是火狐会检测网站来源,具体工作原理不详 解决办法 依次打开:C:\Windows\System32\drivers\etc 用记事本或editplus ...

  5. Kibana6.x.x——启动后的一些警告信息记录以及解决方法

    1.发现的第一个警告信息 server log [06:55:25.594] [warning][reporting] Generating a random key for xpack.report ...

  6. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_发布者策略控制

    在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用 ...

  7. 【CodeForces - 1034B】Little C Loves 3 II

    @中文题意@ n*m的矩阵,当两个点(x1, y1)与(x2, y2)曼哈顿距离为3时可以将两个点匹配.每个点只能够与一个点匹配.求最多能可以匹配多少个点.n,m <= 10^9 (xi,yi) ...

  8. css雪碧图制作

    使用css背景合并工具cssSprite 工具下载链接: http://download.csdn.net/download/wx247919365/8741243 1.选择文件 2.生成雪碧图 3. ...

  9. Lvs Tun隧道模式配置

    ######## TUN是IP Tunneling ,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户. 工作原理: 用 ...

  10. 通过JS,按照原比例控制图片尺寸

    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...