springmvc导出excel终极方案
1. 准备工作
1.1 maven依赖
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
1.2 spring版本>=4.2
2. 具体代码
2.1继承spring提供的类
public class ExcelView extends AbstractXlsxStreamingView {
@Override
protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
// 从model取出要调用的方法
val method =(int) model.get("method");
var name = model.get("name");
if (name == null) {
name = "excel";
}
// 1.设置下载文件的文件名
response.setHeader("Content-Disposition", name + "xlsx");
// 2. 向workbook中填充数据
if (method == 1) {
import1(model, workbook, request, response);
} else if (method == 2) {
import2(model, workbook, request, response);
}
// 调用其他方法
}
@SuppressWarnings("unchecked")
private void import1(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) {
val data = (List<Integer>) model.get("data");
val sheet1 = workbook.createSheet("sheet1");
val row = sheet1.createRow(0);
val cell0 = row.createCell(0);
cell0.setCellValue(data.get(0));
}
private void import2(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) {
}
}
2.2 controller层
@GetMapping("/excel1")
public View excel1(Model model) {
model.addAttribute("method", 1);
model.addAttribute("name", "excel1");
val integers = new ArrayList<Integer>(0);
integers.add(1);
integers.add(2);
model.addAttribute("data",integers);
return new ExcelView();
}