功能说明:对数据库查询的数据进行导出,生成对应的execl文件
涉及技术(easy-execl)alibaba开源组件,与poi相比占用内存更小,性能更好
1:引入easyexcel依赖(直接引用即可)
## 2:引入easyexcel工具库(直接引用即可)
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class ExcelExportUtil {
/**
* 导出execl
* @param dataList 模型数据集合
* @param fileName 文件名称
* @param sheetName sheet名称
* @param object 模型对象
* @param response 响应参数
* @param request 请求参数
* @throws IOException
*/
public static void export(List<? extends BaseRowModel> dataList, String fileName, String sheetName,
BaseRowModel object, HttpServletResponse response, HttpServletRequest request) throws IOException {
//设置响应参数返回输出对象
ServletOutputStream out =getOut(fileName,response,request);
//使用easy-excel
ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX,true);
//创建Sheet
Sheet sheet = new Sheet(1,0, object.getClass());
//sheet命名
sheet.setSheetName(sheetName);
writer.write(dataList,sheet);
writer.finish();
out.close();
}
/**
* 设置响应参数返回输出对象
* @param fileName 文件名称
* @param response 响应对象
* @param request 请求对象
* @return
*/
private static ServletOutputStream getOut(String fileName, HttpServletResponse response, HttpServletRequest request) throws IOException {
String agent = request.getHeader("USER-AGENT").toLowerCase();
response.setContentType("application/vnd.ms-excel");
String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
if (agent.contains("firefox")) {
response.setCharacterEncoding("utf-8");
response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xlsx" );
} else {
response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xlsx");
}
return response.getOutputStream();
}
}
## 3导出模型类的生成(根据自己需要进行修改)
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.Data;
/**
* <p>Description: 实体类 </p>
* <p>Company: http://www.bjpowernode.com
*/
@Data
public class StudentModel extends BaseRowModel {
//value 生成对应的第一行表头名,index为列的下标
@ExcelProperty(value = "序号",index = 0)
private Integer id;
@ExcelProperty(value = "姓名",index = 1)
private String name;
@ExcelProperty(value = "年龄",index = 2)
private Integer age;
}
## 4controller对工具类的调用
@GetMapping("/execl/export")
public void getExport(HttpServletResponse response, HttpServletRequest request) throws IOException {
List<Student> students = studentService.allList();
List<StudentModel> data=new ArrayList<>();
//转化为模型数据集合
List<StudentModel> studentModels = JSONObject.parseArray(JSON.toJSONString(students), StudentModel.class);
StudentModel studentModel = new StudentModel();
ExcelExportUtil.export(studentModels,"学生表","student",studentModel,response,request);
}
## 5通过浏览器正常访问即可