Jexcel
基于JAVA的依赖于POI的EXCEL读写包装
项目地址: https://github.com/lychie/jexcel
项目地址: https://github.com/lychie/jexcel
示例工程结构
![](https://i-blog.csdnimg.cn/blog_migrate/ae7daa69f0980dd94b057ddbde75d7fe.png)
pom.xml
<
repositories
>
< repository >
< id >lychie-maven-repo </ id >
< url >https://raw.github.com/lychie/maven-repo/master/releases </ url >
</ repository >
</ repositories >
< dependencies >
< dependency >
< groupId >org.lychie </ groupId >
< artifactId >jexcel </ artifactId >
< version >1.0.1 </ version >
</ dependency >
</ dependencies >
< repository >
< id >lychie-maven-repo </ id >
< url >https://raw.github.com/lychie/maven-repo/master/releases </ url >
</ repository >
</ repositories >
< dependencies >
< dependency >
< groupId >org.lychie </ groupId >
< artifactId >jexcel </ artifactId >
< version >1.0.1 </ version >
</ dependency >
</ dependencies >
写出EXCEL
package org.lychie.jexcel.demo;
import java.io.File;
import java.util.List;
import java.util.ArrayList;
import org.lychie.jexcel.WritableExcel;
import org.lychie.jexcel.demo.model.Employee;
/**
* 写出对象到EXCEL文档
*
* @date 2015-01-21
* @author Lychie Fan
*/
public class WriteExcel {
public static void main(String[] args) {
// 创建一个可写的EXCEL对象
WritableExcel excel = new WritableExcel(getData());
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("name", "姓名");
excel.setMapper("hiredate", "入职日期");
excel.setMapper("salary", "薪资");
// 将对象内容写出到EXCEL文档
excel.write( new File("src/main/resources/employee.xlsx"));
}
private static List<Employee> getData() {
List<Employee> list = new ArrayList<Employee>();
list.add( new Employee("杨忠杰"));
list.add( new Employee("叶水燕"));
list.add( new Employee("杨晓婷"));
list.add( new Employee("叶国珠"));
list.add( new Employee("何国群"));
return list;
}
}
import java.io.File;
import java.util.List;
import java.util.ArrayList;
import org.lychie.jexcel.WritableExcel;
import org.lychie.jexcel.demo.model.Employee;
/**
* 写出对象到EXCEL文档
*
* @date 2015-01-21
* @author Lychie Fan
*/
public class WriteExcel {
public static void main(String[] args) {
// 创建一个可写的EXCEL对象
WritableExcel excel = new WritableExcel(getData());
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("name", "姓名");
excel.setMapper("hiredate", "入职日期");
excel.setMapper("salary", "薪资");
// 将对象内容写出到EXCEL文档
excel.write( new File("src/main/resources/employee.xlsx"));
}
private static List<Employee> getData() {
List<Employee> list = new ArrayList<Employee>();
list.add( new Employee("杨忠杰"));
list.add( new Employee("叶水燕"));
list.add( new Employee("杨晓婷"));
list.add( new Employee("叶国珠"));
list.add( new Employee("何国群"));
return list;
}
}
结果图
![](https://i-blog.csdnimg.cn/blog_migrate/e2e0f04277ccaba117c7be5151229e71.png)
设置写出的EXCEL样式
public
class WriteExcel {
public static void main(String[] args) {
// 创建一个可写的EXCEL对象
WritableExcel excel = new WritableExcel(getData());
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("name", "姓名");
excel.setMapper("hiredate", "入职日期");
excel.setMapper("salary", "薪资");
// 单元格值格式对象
ValueFormat format = excel.getValueFormat();
// 设置薪资显示格式为货币格式
format.set("salary", ValueFormat.CURRENCY_FORMAT);
// 主体对象
Body body = excel.getBody();
// 设置单元格内容水平方向居中
body.setHorizontalAlignment(Body.HORIZONTAL_CENTER);
// 将对象内容写出到EXCEL文档
excel.write( new File("src/main/resources/employee.xlsx"));
}
}
public static void main(String[] args) {
// 创建一个可写的EXCEL对象
WritableExcel excel = new WritableExcel(getData());
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("name", "姓名");
excel.setMapper("hiredate", "入职日期");
excel.setMapper("salary", "薪资");
// 单元格值格式对象
ValueFormat format = excel.getValueFormat();
// 设置薪资显示格式为货币格式
format.set("salary", ValueFormat.CURRENCY_FORMAT);
// 主体对象
Body body = excel.getBody();
// 设置单元格内容水平方向居中
body.setHorizontalAlignment(Body.HORIZONTAL_CENTER);
// 将对象内容写出到EXCEL文档
excel.write( new File("src/main/resources/employee.xlsx"));
}
}
结果图
![](https://i-blog.csdnimg.cn/blog_migrate/d44935956ff25341d980ac6eda2c0e35.png)
读取EXCEL文档
package org.lychie.jexcel.demo;
import java.util.List;
import org.lychie.jutil.IOUtil;
import org.lychie.jutil.Printer;
import org.lychie.jexcel.ReadableExcel;
import org.lychie.jexcel.demo.model.Person;
/**
* 读取EXCEL文档
*
* @date 2015-01-21
* @author Lychie Fan
*/
public class ReadExcel {
public static void main(String[] args) {
// 创建一个可读的EXCEL对象
ReadableExcel excel = new ReadableExcel(Person. class);
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("age", "年龄");
excel.setMapper("sex", "性别");
excel.setMapper("name", "姓名");
excel.setMapper("date", "生日");
// 载入EXCEL文档
excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
// 解析EXCEL文档成集合
List<Person> list = excel.toList();
// 打印输出集合的内容
Printer.print(list);
}
}
import java.util.List;
import org.lychie.jutil.IOUtil;
import org.lychie.jutil.Printer;
import org.lychie.jexcel.ReadableExcel;
import org.lychie.jexcel.demo.model.Person;
/**
* 读取EXCEL文档
*
* @date 2015-01-21
* @author Lychie Fan
*/
public class ReadExcel {
public static void main(String[] args) {
// 创建一个可读的EXCEL对象
ReadableExcel excel = new ReadableExcel(Person. class);
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("age", "年龄");
excel.setMapper("sex", "性别");
excel.setMapper("name", "姓名");
excel.setMapper("date", "生日");
// 载入EXCEL文档
excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
// 解析EXCEL文档成集合
List<Person> list = excel.toList();
// 打印输出集合的内容
Printer.print(list);
}
}
persons.xlsx
![](https://i-blog.csdnimg.cn/blog_migrate/88ef2566b6a9b61b8d2148f40533e003.png)
输出结果
![](https://i-blog.csdnimg.cn/blog_migrate/5e6e918f1c1760ce368108e2c777c057.png)
读取EXCEL文档,校验文档内容合法性
public
class ReadExcel {
public static void main(String[] args) {
// 创建一个可读的EXCEL对象
ReadableExcel excel = new ReadableExcel(Person. class);
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("age", "年龄");
excel.setMapper("sex", "性别");
excel.setMapper("name", "姓名");
excel.setMapper("date", "生日");
// 载入EXCEL文档
excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
try {
// 校验EXCEL文档内容的合法性
excel.validate( new BasicValidation());
} catch (ValidationCastException e) {
e.printStackTrace();
return ;
}
// 解析EXCEL文档成集合
List<Person> list = excel.toList();
// 打印输出集合的内容
Printer.print(list);
}
}
public static void main(String[] args) {
// 创建一个可读的EXCEL对象
ReadableExcel excel = new ReadableExcel(Person. class);
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("age", "年龄");
excel.setMapper("sex", "性别");
excel.setMapper("name", "姓名");
excel.setMapper("date", "生日");
// 载入EXCEL文档
excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
try {
// 校验EXCEL文档内容的合法性
excel.validate( new BasicValidation());
} catch (ValidationCastException e) {
e.printStackTrace();
return ;
}
// 解析EXCEL文档成集合
List<Person> list = excel.toList();
// 打印输出集合的内容
Printer.print(list);
}
}
persons.xlsx
![](https://i-blog.csdnimg.cn/blog_migrate/3f9c65cc6d9c262a334e553fd98edf7f.png)
输出结果
![](https://i-blog.csdnimg.cn/blog_migrate/740e1297376845dd80fe82c58965ee3b.png)
读取EXCEL文档,自定义校验规则
public
class ReadExcel {
public static void main(String[] args) {
// 创建一个可读的EXCEL对象
ReadableExcel excel = new ReadableExcel(Person. class);
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("age", "年龄");
excel.setMapper("sex", "性别");
excel.setMapper("name", "姓名");
excel.setMapper("date", "生日");
// 载入EXCEL文档
excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
try {
// 校验EXCEL文档内容的合法性
excel.validate( new MyValidation());
} catch (ValidationCastException e) {
e.printStackTrace();
return ;
}
// 解析EXCEL文档成集合
List<Person> list = excel.toList();
// 打印输出集合的内容
Printer.print(list);
}
private static class MyValidation extends BasicValidation {
@Override
public boolean validate(Class<?> type, String name, String value) {
// 自定义校验规则, 在 super.validate 之前校验, 以达到短路父校验规则的目的
if (name.equals("age")) {
Integer age = Integer.valueOf(value);
if (age >= 18 && age < 55) {
return true;
} else {
setCause("年龄不在 [18, 55) 区间");
return false;
}
}
// 最后调父类校验方法
return super.validate(type, name, value);
}
}
}
public static void main(String[] args) {
// 创建一个可读的EXCEL对象
ReadableExcel excel = new ReadableExcel(Person. class);
// 设置POJO属性与EXCEL单元格的映射关系
excel.setMapper("id", "编号");
excel.setMapper("age", "年龄");
excel.setMapper("sex", "性别");
excel.setMapper("name", "姓名");
excel.setMapper("date", "生日");
// 载入EXCEL文档
excel.load(IOUtil.getResourceAsStream("persons.xlsx"));
try {
// 校验EXCEL文档内容的合法性
excel.validate( new MyValidation());
} catch (ValidationCastException e) {
e.printStackTrace();
return ;
}
// 解析EXCEL文档成集合
List<Person> list = excel.toList();
// 打印输出集合的内容
Printer.print(list);
}
private static class MyValidation extends BasicValidation {
@Override
public boolean validate(Class<?> type, String name, String value) {
// 自定义校验规则, 在 super.validate 之前校验, 以达到短路父校验规则的目的
if (name.equals("age")) {
Integer age = Integer.valueOf(value);
if (age >= 18 && age < 55) {
return true;
} else {
setCause("年龄不在 [18, 55) 区间");
return false;
}
}
// 最后调父类校验方法
return super.validate(type, name, value);
}
}
}
persons.xlsx
![](https://i-blog.csdnimg.cn/blog_migrate/bc9e363e209f436f733eef5f321111c7.png)
输出结果
![](https://i-blog.csdnimg.cn/blog_migrate/d4942c7742218da9704fd5e6c7059d1a.png)
资源
示例工程源码下载:
jexcel-demo.zip(提取码:6398)
[ 随笔均原创,转载请注明出处:http://www.blogjava.net/fancydeepin ]