声明:本文是基于其他博主的文章,自己再稍微改了一点【公共类+业务类】,感谢那个博主
参考地址:https://blog.csdn.net/wzy18210825916/article/details/98482473
控制层:
/**
* 导出数据到Excel
* @param response 响应体
* */
@RequestMapping("/out")
@RequiresPermissions("user:list")
@ResponseBody
public String outExcelDemo(HttpServletResponse response) throws IOException, IllegalAccessException {
//文件名
String fileName = "用户";
//sheet名
String sheetName = "用户";
//表头集合,作为表头参数
List<String> titleList = new ArrayList<>();
titleList.add("用户ID");
titleList.add("用户名");
titleList.add("密码");
titleList.add("姓名");
titleList.add("角色ID");
titleList.add("最近登录时间");
titleList.add("IP");
titleList.add("状态");
titleList.add("备注");
titleList.add("皮肤");
titleList.add("邮箱");
titleList.add("编码");
titleList.add("电话");
titleList.add("副职角色ID组");
//数据对象,从数据库中得到
List<SysUserVo> list = sysUserService.getExcelList2();
//调取封装的方法,传入相应的参数
ExcelUtil.createExcel(sheetName,titleList, list,response,fileName);
return null;
}
公共类:
package com.xxx.pms.util;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.List;
/**
* 数据导出excel,工具类
* @author big bug bean
* @date 2019年10月11日15:55:07
* */
public class ExcelUtil {
/**
* 生成Excel表格
* @param sheetName sheet名称
* @param titleList 表头列表
* @param dataList 数据列表
* @return HSSFWorkbook对象
* */
public static HSSFWorkbook createExcel(String sheetName,
List<String> titleList, List dataList, HttpServletResponse response,String fileName) throws IOException, IllegalAccessException {
//创建HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook();
//创建sheet对象
HSSFSheet sheet=wb.createSheet(sheetName);
//在sheet里创建第一行,这里即是表头
HSSFRow rowTitle=sheet.createRow(0);
//写入表头的每一个列
for (int i = 0; i < titleList.size(); i++) {
//创建单元格
rowTitle.createCell(i).setCellValue(titleList.get(i));
}
//写入每一行的记录
for (int i = 0; i < dataList.size(); i++) {
//创建新的一行,递增
HSSFRow rowData = sheet.createRow(i+1);
//通过反射,获取POJO对象
Class cl = dataList.get(i).getClass();
//获取类的所有字段
Field[] fields = cl.getDeclaredFields();
for (int j = 0; j < fields.length; j++) {
//设置字段可见,否则会报错,禁止访问
fields[j].setAccessible(true);
//创建单元格
rowData.createCell(j).setCellValue((String) fields[j].get(dataList.get(i)));
}
}
//输出Excel文件
OutputStream output=response.getOutputStream();
response.reset();
//中文名称要进行编码处理
response
.setHeader("Content-disposition", "attachment; filename="+new String(fileName.getBytes("GB2312"),"ISO8859-1")+".xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
return wb;
}
}
PS:改方法是基于POI框架,请加入依赖包
MAVEN 直接复制下面
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>