1.首先要创建一个OutputStream流,保证能够读到文件,
OutputStream out = new FileOutputStream(" filepath");
2.创建写excel表格的类对象
//第三个参数,表示是不是需要表头,如果是false就不会显示,即使在注解里用了@ExcelProperty中的value
//true或者省略表示可以添加进去表头
//使用xlsx比较好,用的时候使用xls有点问题
ExcelWriter writer = new ExcelWriter( out , ExcelTypeEnum.XLSX , false );
3.创建一个表格Sheet
Sheet sheet = new Sheet(1,0, Admin.class , null );
四个参数,第一个表示这个是excel文档里面的第几个子表,第二个参数还不了解,第三个参数可不写,表示如果有实体类对应的时候应该是哪个类。第四个表示输入表头,可以不写。只是用前面的两个参数就行
如果有多个sheet就创建多个就行,
4.如果一个sheet有多个表格的话就使用Table
Table table = new Table(1);
参数表示这是第几个表格
如果表格的参数不是List<String> 那么就要设置 Clazz
table.setClazz(Admin.class);
5.输入到excel文档里面
如果有多个table
如果有实体类的情况
writer.write( list , sheet , table );
第一个参数要求是list<E>,
如果是List<\ String> ,,list的格式就是 List<List<String>> 外面的list表示行,里面的表示列
writer.write0( list , sheet , table );
如果没有table ,就把第三个参数省掉
多个sheet就写多个write方法,注意书写的顺序很重要
6.最后关闭writer和out
writer.finish()
out.close()
//以上代码会用到try catch
7.实体类
需要继承BaseRowModel, value表示的是表头,前面说的如果是true就能输入
index表示是第几列。从0开始
public class ExcelPropertyIndexModel extends BaseRowModel {
@ExcelProperty(value = "姓名" ,index = 0)
private String name;
@ExcelProperty(value = "年龄",index = 1)
private String age;
@ExcelProperty(value = "邮箱",index = 2)
private String email;
@ExcelProperty(value = "地址",index = 3)
private String address;
@ExcelProperty(value = "性别",index = 4)
private String sax;
@ExcelProperty(value = "高度",index = 5)
private String heigh;
@ExcelProperty(value = "备注",index = 6)
private String last;
}
每行数据是一个java模型有表头----表头层级为多层级
public class MultiLineHeadExcelModel extends BaseRowModel {
@ExcelProperty(value = {"表头1","表头1","表头31"},index = 0)
private String p1;
@ExcelProperty(value = {"表头1","表头1","表头32"},index = 1)
private String p2;
@ExcelProperty(value = {"表头3","表头3","表头3"},index = 2)
private int p3;
@ExcelProperty(value = {"表头4","表头4","表头4"},index = 3)
private long p4;
@ExcelProperty(value = {"表头5","表头51","表头52"},index = 4)
private String p5;
@ExcelProperty(value = {"表头6","表头61","表头611"},index = 5)
private String p6;
@ExcelProperty(value = {"表头6","表头61","表头612"},index = 6)
private String p7;
@ExcelProperty(value = {"表头6","表头62","表头621"},index = 7)
private String p8;
@ExcelProperty(value = {"表头6","表头62","表头622"},index = 8)
private String p9;
}
效果如下,大括号里面的每一个都占一行,如果重复,这个表头占两行,如果类似于p1 ,p2那种 表头31 和 表头32 各占一列,表头1 占2列