pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
代码示例:
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.enums.WriteDirectionEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.File;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@Slf4j
@RunWith(SpringRunner.class)
public class DemoTest {
@Test
public void test() {
// 注意:模板需要存在
String tempFileName = "D:\\excel\\模板.xlsx";
// 目标文件
String fileName = "D:\\excel\\" + "测试-01" + ".xlsx";
File directory = new File("D:\\excel\\");
// 如果存放目标文件路径不存在,则创建文件夹
if (!directory.exists()) {
directory.mkdirs();
}
// 根据模板写入数据,如果目标文件不存在,则自动创建文件
ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(tempFileName).build();
// 在名为“练习”的工作簿中写入数据,如果模板中不存在练习工作簿,则会在目标文件中自动创建
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
// 垂直写入数据,如果要水平写入,将VERTICAL替换为HORIZONTAL
FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
// 需要写入的Map数据,注意,如果有多个list,模板中必须有前缀,比如这里的data1与data2
Map<String, List<Stu>> stuMap = new HashMap<>();
// data1()与data2()为写入的数据list
// 注意:写入的数据一定不要超过文件留有的位置,否则会发生覆盖的错误结果。
// 比如,模板里面我给data1只留了一行,那么垂直写入时,data1的数据不能超过一行。
stuMap.put("data1", data1(1));
stuMap.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet));
Map<String, List<App>> appMap = new HashMap<>();
appMap.put("data2", data2(4));
appMap.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet));
// 结束写入
excelWriter.finish();
}
@Data
@Builder
public static class Stu {
private String name;
private Double age;
private String sex;
}
private List<Stu> data1(int i) {
List<Stu> stus = new LinkedList<>();
for (int k = 0; k < i; k++) {
Stu stu = Stu.builder()
.name("lucy")
.age(k + 23.5)
.sex("男")
.build();
stus.add(stu);
}
return stus;
}
private List<App> data2(int i) {
List<App> apps = new LinkedList<>();
for (int k = 0; k < i; k++) {
App app = App.builder()
.name("lu")
.age(k + 23)
.address("地址")
.build();
apps.add(app);
}
return apps;
}
@Data
@Builder
public static class App {
private String name;
private Integer age;
private String address;
}
}
模板:模板.xlsx