Map<String, List<PortReportResultVo>> relayLinkAndPortMap = devPortReportByEs.getRelayLinkAndPortMap(); 遍历这个map,key为表头,value为数据,在一个sheet页中用easyExcel实现
时间: 2024-02-01 16:13:36 浏览: 60
好的,可以按照以下步骤实现:
1. 首先,我们需要定义一个Excel实体类,用于存储每行数据。假设我们的数据是PortReportResultVo类型,那么可以定义如下:
```
public class PortReportExcelVo {
private String relayLinkName; // 表头
private String portName; // 数据
// 构造函数、getter和setter方法省略
}
```
2. 接下来,我们可以定义一个ExcelWriter,在其中创建一个sheet,并将数据写入到该sheet中。代码如下:
```
// 创建ExcelWriter
ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
// 创建一个sheet,并指定sheet名称
Sheet sheet = new Sheet(1, 0, PortReportExcelVo.class, "Sheet1");
// 获取map中所有的key与value,并将其转换为Excel实体类
List<PortReportExcelVo> dataList = new ArrayList<>();
for (Map.Entry<String, List<PortReportResultVo>> entry : relayLinkAndPortMap.entrySet()) {
String key = entry.getKey();
List<PortReportResultVo> value = entry.getValue();
for (PortReportResultVo portReportResultVo : value) {
PortReportExcelVo excelVo = new PortReportExcelVo();
excelVo.setRelayLinkName(key);
excelVo.setPortName(portReportResultVo.getPortName());
dataList.add(excelVo);
}
}
// 将数据写入到sheet中
excelWriter.write(dataList, sheet);
// 关闭ExcelWriter
excelWriter.finish();
```
3. 最后,我们需要将生成的Excel文件输出到客户端。可以使用ServletOutputStream将Excel文件写入到HttpServletResponse中,然后通过response返回给前端。代码如下:
```
// 设置HttpServletResponse的contentType为Excel文件类型
response.setContentType("application/vnd.ms-excel");
// 设置Excel文件名
String fileName = "port_report.xlsx";
String encodedFileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName);
// 将Excel文件写入到HttpServletResponse中
ServletOutputStream outputStream = response.getOutputStream();
excelWriter.write(dataList, sheet);
outputStream.flush();
outputStream.close();
```
以上就是使用EasyExcel遍历Map并在一个sheet页中写入数据的完整代码。
阅读全文