-----核心代码-----前端传递需要导出的字段值,后端根据前端的传值导出对应的字段的值到Excel
所需依赖:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
com.alibaba
druid-spring-boot-starter
1.2.6
com.baomidou
mybatis-plus-boot-starter
3.4.3
com.baomidou
mybatis-plus
3.3.0
com.alibaba
easyexcel
2.1.6
org.projectlombok
lombok
com.alibaba
fastjson
2.0.6
controller:
@GetMapping("/exportExcel")
public void exportExcel(Demo demo) {
try {
demoService.exportExcel(demo);
} catch (Exception e) {
e.printStackTrace();
}
}
domain
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Demo {
@ExcelIgnore
private int id;
@ExcelProperty("字段0")
private String o;
@ExcelProperty("字段1")
private String yi;
@ExcelProperty("字段2")
private String er;
}
service:
void exportExcel(Demo demo) throws JsonProcessingException;
impl:
public void exportExcel(Demo demo) throws JsonProcessingException {
List demos = demoMapper.demoList();
ObjectMapper mapper = new ObjectMapper();
//JAVA类转化为String类型键值对
String json = mapper.writeValueAsString(demo);
//String转化为json
JSONObject jsonObject= JSONObject.parseObject(json);
//获得json所有键
Set keys = jsonObject.keySet();
//遍历获取所有值(用户传入的字段),并存入集合
Set column = new HashSet();
for (String key : keys) {
if (jsonObject.get(key) != null){
column.add(jsonObject.get(key).toString());
}
}
//这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write("D:\excel"+System.currentTimeMillis()+".xlsx", Demo.class)
.includeColumnFiledNames(column).sheet("模板")
.doWrite(demos);
}
mapper:
ListdemoList();
mapper.xml:
-----测试-----select * from sys_demo
此时传入的值中,yi,er的值为对应的字段名
点击导出,导出成功
去导出的路径查看文件
打开即可看到,是我们想要的样子



