前言
最近项目有一个动态生成Excel的需求,要求标题也是动态的。想到easyExcel比较好用就查了下相关资料,结果显而易见,确实好用!话不多说直接对象代码
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.4</version>
样例代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import java.util.ArrayList;
import java.util.List;
/**
*
* 动态生成表格标题、数据
*/
public class EasyExcelTest {
public static void main(String args[]) {
// 文件输出位置
String fileName = "/Users/gaoxueyong/Desktop/test.xlsx";
ExcelWriterBuilder builder = EasyExcel.write(fileName);
List<Object> data = new ArrayList<>();
List<List<Object>> list = new ArrayList<>();
list.add(data);
builder.head(getHeader()).sheet("模板").doWrite(getData());
}
/**
* 返回表头
*
* 外层List代表行内层 List代表列 相同的列数据会被主动合并
* 构造双列表头
* 合并列1 合并列2
* 机构名称 合11 合12 合13 合21 合22 合23 合24 合计
*
* @return List<List<String>>
*/
private static List<List<String>> getHeader(){
List<List<String>> line = new ArrayList<>();
List<String> column = new ArrayList<>();
// 构造第列
column.add("机构名称");
line.add(column);
// 开始构造合并列1
column = new ArrayList<>();
column.add("合并列1");
column.add("合11");
line.add(column);
column = new ArrayList<>();
column.add("合并列1");
column.add("合12");
line.add(column);
column = new ArrayList<>();
column.add("合并列1");
column.add("合13");
line.add(column);
// 开始构造合并列2
column = new ArrayList<>();
column.add("合并列2");
column.add("合21");
line.add(column);
column = new ArrayList<>();
column.add("合并列2");
column.add("合22");
line.add(column);
column = new ArrayList<>();
column.add("合并列2");
column.add("合23");
line.add(column);
column = new ArrayList<>();
column.add("合并列2");
column.add("合24");
line.add(column);
column = new ArrayList<>();
column.add("合计");
line.add(column);
// 构造双层标题完成返回
return line;
}
/**
* 构造数据
* @return
*/
private static List<List<String>> getData(){
List<List<String>> data = new ArrayList<>();
List<String> list = new ArrayList<>();
for(int index = 0;index<9;index++){
list.add("str"+index);
}
data.add(list);
data.add(list);
return data;
}
}