依赖资源:
<!--引入easyexcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.4</version>
</dependency>
注意:目前版本与JDK8较为契合,高版本的JDK可能会出现兼容性问题;
POI使用参考:Java利用POI实现导入导出Excel表格demo_poi demo_胡萝卜★的博客-CSDN博客
实体类:
/**
* @author by itheima
* @Date 2022/2/28
* @Description 股票涨幅信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class StockUpdownDomain {
/**
* 股票编码
*/
@ExcelProperty(value = {"股票涨幅信息统计表","股票编码"},index = 0)
private String code;
/**
* 股票名称
*/
@ExcelProperty(value = {"股票涨幅信息统计表","股票名称"},index = 1)
private String name;
/**
* 前收盘价
*/
@ExcelProperty(value = {"股票涨幅信息统计表","前收盘价格"},index = 2)
private BigDecimal preClosePrice;
/**
* 当前交易价格
*/
@ExcelProperty(value = {"股票涨幅信息统计表","当前价格"},index= 3)
private BigDecimal tradePrice;
/**
* 涨跌值
*/
@ExcelProperty(value = {"股票涨幅信息统计表","涨跌"},index= 4)
private BigDecimal increase;
/**
* 涨幅
*/
@ExcelProperty(value = {"股票涨幅信息统计表","涨幅"},index= 5)
private BigDecimal upDown;
/**
* 振幅
*/
@ExcelProperty(value = {"股票涨幅信息统计表","振幅"},index= 6)
private BigDecimal amplitude;
/**
* 交易量
*/
@ExcelProperty(value = {"股票涨幅信息统计表","交易总量"},index = 7)
private Long tradeAmt;
/**
* 交易金额
*/
@ExcelProperty(value = {"股票涨幅信息统计表","交易总金额"},index = 8)
private BigDecimal tradeVol;
/**
* 日期
*/
@ExcelProperty(value = {"股票涨幅信息统计表","日期"},index = 9)
@DateTimeFormat("yyy-MM-dd HH:mm")//easyExcel的注解-》excel
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")//springmvc支持的注解-》json格式数据
private Date curDate;
}
定义web访问方法
/**
* 将指定页的股票数据导出到excel表下
* @param response
* @param page 当前页
* @param pageSize 每页大小
*/
@GetMapping("/stock/export")
public void stockExport(HttpServletResponse response,Integer page,Integer pageSize){
stockService.stockExport(response,page,pageSize);
}
接口定义:
/**
* 将指定页的股票数据导出到excel表下
* @param response
* @param page 当前页
* @param pageSize 每页大小
*/
void stockExport(HttpServletResponse response, Integer page, Integer pageSize);
接口实现:
/**
* 将指定页的股票数据导出到excel表下
* @param response
* @param page 当前页
* @param pageSize 每页大小
*/
@Override
public void stockExport(HttpServletResponse response, Integer page, Integer pageSize) {
try {
//1.获取最近最新的一次股票有效交易时间点(精确分钟)
Date curDate = DateTimeUtil.getLastDate4Stock(DateTime.now()).toDate();
//因为对于当前来说,我们没有实现股票信息实时采集的功能,所以最新时间点下的数据
//在数据库中是没有的,所以,先临时指定一个假数据,后续注释掉该代码即可
curDate=DateTime.parse("2022-01-05 09:47:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();
//2.设置分页参数 底层会拦截mybatis发送的sql,并动态追加limit语句实现分页
PageHelper.startPage(page,pageSize);
//3.查询
List<StockUpdownDomain> infos=stockRtInfoMapper.getAllStockUpDownByTime(curDate);
//如果集合为空,响应错误提示信息
if (CollectionUtils.isEmpty(infos)) {
//响应提示信息
RequestInfoUtil.setUtf8(response);
R<Object> r = R.error(ResponseCode.NO_RESPONSE_DATA);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().write(new ObjectMapper().writeValueAsString(r));
return;
}
//设置响应excel文件格式类型
response.setContentType("application/vnd.ms-excel");
//2.设置响应数据的编码格式
response.setCharacterEncoding("utf-8");
//3.设置默认的文件名称
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("stockRt", "UTF-8");
//设置默认文件名称:兼容一些特殊浏览器
response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
//4.响应excel流
EasyExcel
.write(response.getOutputStream(),StockUpdownDomain.class)
.sheet("股票信息")
.doWrite(infos);
} catch (IOException e) {
e.printStackTrace();
log.info("当前导出数据异常,当前页:{},每页大小:{},异常信息:{}",page,pageSize,e.getMessage());
}
}
最终效果: