将数据库数据导出到Excel
添加依赖
<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>
工具类
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.lang.reflect.Field;
import java.util.List;
/**
* 数据导出excel,工具类
* */
public class ExcelUtils {
/**
* 生成Excel表格
* @param sheetName sheet名称
* @param titleList 表头列表
* @param dataList 数据列表
* @return HSSFWorkbook对象
* */
public static HSSFWorkbook createExcel(String sheetName,
List<String> titleList,List dataList) throws 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)));
}
}
return wb;
}
}
实现数据Excel导出
/**
* 信息Excel导出
* time是根据时间查询数据源的参数
* @param
* @return
*/
@GetMapping("getOrderByTime")
public Result getOrderByTime(HttpServletResponse response, @RequestParam(value = "time") String stoptime) {
try {
String fileName = "订单数据导出";
// sheet名
String sheetName = "sheet";
//表头集合,作为表头参数
List<String> titleList = new ArrayList<>();
titleList.add("日期");
titleList.add("订单数量(单)");
titleList.add("营业额(元)");
titleList.add("营业利润(元)");
// resultList是根据参数time从数据库查出来的数据源(暂时用一个空集合代替)
List<Result> resultList = new ArrayList<>();
//TODO
//调取封装的方法,传入相应的参数
HSSFWorkbook workbook = ExcelUtils.createExcel(sheetName, titleList, resultList );
//输出Excel文件
OutputStream output = response.getOutputStream();
response.reset();
//中文名称要进行编码处理
response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1") + ".xls");
response.setContentType("application/x-xls");
workbook.write(output);
output.close();
return ResultUtil.success();
} catch (Exception e) {
e.printStackTrace();
return ResultUtil.setERROR();
}
}
调用
http://172.16.17.235:9010/ahc/getOrderByTime?time=2021-01-20 13:22:17
浏览器上访问地址后会自动下载一个Excel文件
到这里Excel导出就完成了。