原来写EXCEL导出用的是POI,如果遇到复杂些的EXCEL导出,各路合并计算单元格超级累无比啊!!万一数学幼儿园毕业的,经常数错!年前给组内同学推荐了阿里的EasyExcel,在CSDN上看到的推荐贴,据小组内同学反馈相当轻便好用。
所以这次项目里我也来小尝试一下。。。。。
先去github上下了源代码及demo,地址为:https://github.com/alibaba/easyexcel
https://www.yuque.com/easyexcel/doc/write#cac25459
看了一遍后,确实轻巧噢
其中表头是动态生成的,灵活可变,官网中给出的例子head可以是List list,也可以是一个class,研究了一会,打算自己先搞个demo试试看,以下直接上代码了
先上一下我这边几个小时的成果,最近脑袋不太灵光,学东西越来越慢~~
网上好多例子用的是 1.1.2-beta5版本的,官网给出的最新版本是2.2.0注意使用上有些类已过期。
com.alibaba
easyexcel
2.2.0-beta1
@Test
public void dynamicHeadWrite() {
String fileName = TestFileUtil.getPath() + "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx";
EasyExcel.write(fileName)
// 这里放入动态头
.head(head()).sheet("模板")
// 当然这里数据也可以用 List> 去传入
.doWrite(data());
}
private List> head() {
List> list = new ArrayList>();
List head0 = new ArrayList();
head0.add("字符串" + System.currentTimeMillis());
List head1 = new ArrayList();
head1.add("数字" + System.currentTimeMillis());
List head2 = new ArrayList();
head2.add("日期" + System.currentTimeMillis());
list.add(head0);
list.add(head1);
list.add(head2);
return list;
}
private List data() {
List list = new ArrayList();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
return list;
}
@Data
public class DemoData {
@ExcelProperty("字符串标题")
private String string;
@ExcelProperty("日期标题")
private Date date;
@ExcelProperty("数字标题")
private Double doubleData;
/**
* 忽略这个字段
*/
@ExcelIgnore
private String ignore;
}
执行了下,好使~~~就不上图了,github上下了源码后,直接在test包下找WriteTest 找到需要的相应方法即可,不废话了,自己动手改一个吧
package com.zhanglu.test;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class EasyExcelWiter {
public static void main(String args[]) {
// 文件输出位置
String fileName = "D:\\easyExcel\\test.xlsx";
ExcelWriterBuilder builder = EasyExcel.write(fileName);
List
注:需要的data也是一个List