项目中用到了导出数据到excel的功能,特此记录一下
Pom
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
Controller层
@RequestMapping(value = "/Export", method = RequestMethod.GET)
public void Export(QueryCondition queryCondition, HttpServletResponse response) throws IOException {
String fileName = "my.xls";
response.setHeader("content-type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
HSSFWorkbook workbook = myService.export(queryCondition);
workbook.write(response.getOutputStream());
}
Service层
/**
* 导出数据
*
* @param queryCondition 查询条件
* @return HSSFWorkbook工作表
*/
HSSFWorkbook export(QueryCondition queryCondition);
ServiceImpl层
@Override
public HSSFWorkbook export(QueryCondition queryCondition) {
List<MyValue> myValues = this.queryMyValue(queryCondition);
//创建一个excel
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet
//新建一个sheet页
HSSFSheet sheet = workbook.createSheet("sheet1");
//合并第一行的十个单元格
CellRangeAddress cra1 = new CellRangeAddress(0, 0, 0, 10);
sheet.addMergedRegion(cra1);
HSSFCell titleCell = sheet.createRow(0).createCell(0);
String title = "占了第一行十个单元格的值";
titleCell.setCellValue(title);
/**列表数据的标头*/
HSSFRow titleRow = sheet.createRow(1);
titleRow.createCell(0).setCellValue("序号");
titleRow.createCell(1).setCellValue("角色");
titleRow.createCell(2).setCellValue("姓名");
titleRow.createCell(3).setCellValue("时间");
titleRow.createCell(4).setCellValue("平均值");
int i = 2;
for (MyValue item : myValues) {
HSSFRow row = sheet.createRow(i);
row.createCell(0).setCellValue(item.getID());
row.createCell(1).setCellValue(item.getUserType());
row.createCell(2).setCellValue(item.getName());
row.createCell(3).setCellValue(DateUtils.toString(item.getCreateTime()));
row.createCell(4).setCellValue(DoubleUtils.toString(item.getAvgValue()));
i++;
}
return workbook;
}