1.需求:將此頁面的幾個表格導出
其中表頭中的倉庫 集散地是是動態生成的。
首先製作Excel模板:
代碼:
@Resource
private RedisService redisService;
@Override
public void assignModel(EventInfo info, HttpServletResponse response) {
AssginModelRes res=new AssginModelRes();
Object obj = redisService.getObj("modelExport-"+info.getId());
if (null == obj) {
throw new CustomException("找不到指定的事件!");
}
res = (AssginModelRes) obj;
try {
// 獲取workbook對象
// 單sheet或多sheet 只需要更改此處即可
Workbook workbook = exportAssignModelByTemplate(res) ;
// 設置excel的文件名稱
String excelName = "資源分配模型" ;
// 重置響應對象
response.reset();
// 當前日期,用於導出文件名稱
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateStr = "["+excelName+"-"+sdf.format(new Date())+"]";
// 指定下載的文件名--設置響應頭
response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xls");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 寫出數據輸出流到頁面
OutputStream output = response.getOutputStream();
BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
workbook.write(bufferedOutPut);
bufferedOutPut.flush();
bufferedOutPut.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private Workbook exportAssignModelByTemplate(AssginModelRes res) throws IOException {
// 手動創建導出數據,需根據具體業務進行查詢
// sheet1內容
Map<String,Object> map = new HashMap<String, Object>() ;
map.put("w1", res.getT1().getT1header().get(0));
map.put("w2", res.getT1().getT1header().get(1));
map.put("w3", res.getT1().getT1header().get(2));
map.put("resultList1",res.getT1().getData());
for(int i=0;i<res.getT2().getT2header().size();i++) {
map.put("p"+(i+1), res.getT2().getT2header().get(i));
}
map.put("resultList2",res.getT2().getData());
map.put("resultList3",res.getT3().getData());
map.put("resultList4_1",res.getT4().get(0).getData());
map.put("resultList4_2",res.getT4().get(1).getData());
map.put("resultList4_3",res.getT4().get(2).getData());
// 設置導出配置
// 獲取導出excel指定模版
TemplateExportParams template = new TemplateExportParams("templates/model.xls", true);
// 導出excel
return ExcelExportUtil.exportExcel(template , map);
}
主要是在exportAssignModelByTemplate方法內創建map將數據動態地塞進模板裏,數據實體類AssginModelRes 爲
package cn.com.reformer.model.comandestimate.assignmodel;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@Data
public class AssginModelRes implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 表格1
*/
private Table1 t1;
/**
* 表格2
*/
private Table2 t2;
/**
* 表格3
*/
private Table3 t3;
/**
* 表格4
*/
private List<Table4> t4;
}
@Data
public class Table1 implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/*
* 表頭 最近的三個倉庫
*/
private List<String> t1header;
/**
* 表格數據
*/
private List<Table1Data> data;
}
@Data
public class Table2 implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 表頭:事件和次生事件的地點.
*
*
*/
private List<String> t2header;
private List<Map<String, Object>> data;
}
@Data
public class Table3 implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/*
* 表頭
*/
private List<String> t3header;
private List<Map<String, Object>> data;
}
/*
* 表4:分配結果
*/
@Data
public class Table4 implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/*
* 表頭:倉庫名、集散地
*/
private Table4Header header;
private List<Map<String, Object>> data;
}
數據格式示例:
{
"msg": "操作成功",
"code": 200,
"data": {
"t1": {
"t1header": [
"1209測試倉庫",
"研判測試倉庫",
"測試倉庫"
],
"data": [
{
"time": "2020-09-03 19:27:17",
"w1": 20,
"w2": 14,
"w3": 29,
"sum": 63
},
{
"time": "2020-09-03 20:27:17",
"w1": 15,
"w2": 11,
"w3": 20,
"sum": 46
},
{
"time": "2020-09-03 21:27:17",
"w1": 27,
"w2": 21,
"w3": 43,
"sum": 91
}
]
},
"t2": {
"t2header": [
"湖北省武漢市洪山區東湖風景區街道花城大道",
"湖北省武漢市洪山區和平街道悠貝·菁華幼兒園花樣年·花郡東區",
"湖北省武漢市武昌區徐家棚街街道油料所社區",
"湖北省武漢市武昌區水果湖街街道萬達御湖世家",
"湖北省武漢市武昌區水果湖街街道觀星傳媒萬達尊"
],
"data": [
{
"time": "2020-09-03 19:27:17",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28,
"sum": 93
},
{
"time": "2020-09-03 20:27:17",
"p1": 16,
"p2": 28,
"p3": 9,
"p4": 17,
"p5": 23,
"sum": 93
},
{
"time": "2020-09-03 21:27:17",
"p1": 28,
"p2": 30,
"p3": 17,
"p4": 29,
"p5": 21,
"sum": 125
}
]
},
"t3": {
"t3header": [
"湖北省武漢市洪山區東湖風景區街道花城大道",
"湖北省武漢市洪山區和平街道悠貝·菁華幼兒園花樣年·花郡東區",
"湖北省武漢市武昌區徐家棚街街道油料所社區",
"湖北省武漢市武昌區水果湖街街道萬達御湖世家",
"湖北省武漢市武昌區水果湖街街道觀星傳媒萬達尊"
],
"data": [
{
"warename": "1209測試倉庫",
"p1": 1.26,
"p2": 1.05,
"p3": 1.37,
"p4": 1.5,
"p5": 1.31
},
{
"warename": "研判測試倉庫",
"p1": 1.16,
"p2": 1.25,
"p3": 1.02,
"p4": 1.7,
"p5": 1.57
},
{
"warename": "測試倉庫",
"p1": 1.53,
"p2": 1.29,
"p3": 1.07,
"p4": 1.15,
"p5": 1.08
}
]
},
"t4": [
{
"header": {
"ware1": "1209測試倉庫",
"places": [
"湖北省武漢市洪山區東湖風景區街道花城大道",
"湖北省武漢市洪山區和平街道悠貝·菁華幼兒園花樣年·花郡東區",
"湖北省武漢市武昌區徐家棚街街道油料所社區",
"湖北省武漢市武昌區水果湖街街道萬達御湖世家",
"湖北省武漢市武昌區水果湖街街道觀星傳媒萬達尊"
]
},
"data": [
{
"p0": "實際需求dj(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "實際需求zj(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "分配量∑χφ(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "滿意度Rj(t)",
"p1": 0.62,
"p2": 0.59,
"p3": 0.68,
"p4": 0.6,
"p5": 0.61
}
]
},
{
"header": {
"ware1": "研判測試倉庫",
"places": [
"湖北省武漢市洪山區東湖風景區街道花城大道",
"湖北省武漢市洪山區和平街道悠貝·菁華幼兒園花樣年·花郡東區",
"湖北省武漢市武昌區徐家棚街街道油料所社區",
"湖北省武漢市武昌區水果湖街街道萬達御湖世家",
"湖北省武漢市武昌區水果湖街街道觀星傳媒萬達尊"
]
},
"data": [
{
"p0": "實際需求dj(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "實際需求zj(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "分配量∑χφ(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "滿意度Rj(t)",
"p1": 0.62,
"p2": 0.59,
"p3": 0.68,
"p4": 0.6,
"p5": 0.61
}
]
},
{
"header": {
"ware1": "測試倉庫",
"places": [
"湖北省武漢市洪山區東湖風景區街道花城大道",
"湖北省武漢市洪山區和平街道悠貝·菁華幼兒園花樣年·花郡東區",
"湖北省武漢市武昌區徐家棚街街道油料所社區",
"湖北省武漢市武昌區水果湖街街道萬達御湖世家",
"湖北省武漢市武昌區水果湖街街道觀星傳媒萬達尊"
]
},
"data": [
{
"p0": "實際需求dj(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "實際需求zj(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "分配量∑χφ(t)",
"p1": 21,
"p2": 17,
"p3": 12,
"p4": 15,
"p5": 28
},
{
"p0": "滿意度Rj(t)",
"p1": 0.62,
"p2": 0.59,
"p3": 0.68,
"p4": 0.6,
"p5": 0.61
}
]
}
]
}
}
最終導出的Excel 爲: