1.JS中只需要用GET模式請求導出就可以了:
1
2
3
4
|
$( '#word-export-btn' ).parent().on( 'click' ,function(){ var promotionWord = JSON.stringify($( '#mainForm' ).serializeObject()); location.href= "${ctx}/promotionWord/export?promotionWord=" +promotionWord;
}); |
2.在controller中要做的是將文件以數據流格式輸出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@RequestMapping ( "/export" ) public
void export(HttpSession session, String promotionWord, HttpServletRequest request, HttpServletResponse response)
throws IOException { User sessionUser = (User) session.getAttribute( "user" ); JSONObject jsonObj = JSONObject.parseObject(promotionWord); HSSFWorkbook wb = promotionWordService.export(sessionUser.getId(), jsonObj); response.setContentType( "application/vnd.ms-excel" ); Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf =
new SimpleDateFormat( "yyyy-MM-dd" ); String fileName =
"word-" + sdf.format(cal.getTime()) +
".xls" ; response.setHeader( "Content-disposition" ,
"attachment;filename="
+ fileName); OutputStream ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); } |
3.在service中需要將數據寫入到格式文件中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
public
HSSFWorkbook export(String userId, JSONObject jsonObj) { HSSFWorkbook wb =
new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet( "word" );
HSSFRow row = sheet.createRow( 0 ); HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
List<PromotionWord> pWordList; Map<String, Object> map =
new HashMap<>(); map.put( "userId" , userId); map.put( "checkExistRule" , jsonObj.getString( "checkExistRule" )); map.put( "status" , jsonObj.getString( "status" )); map.put( "qsStar" , jsonObj.getString( "qsStar" )); map.put( "impressionCount" , jsonObj.getString( "impressionCount" )); map.put( "selectGroupId" , jsonObj.getString( "selectGroupId" )); map.put( "isCheck" , jsonObj.getString( "isCheck" )); map.put( "word" , jsonObj.getString( "word" )); Long impression = jsonObj.getLong( "impressionCount" ); Long click = jsonObj.getLong( "clickCount" ); if (impression !=
null ){ PromotionWord word =
new PromotionWord(); word.setCreatedBy(userId); word.setImpressionCount7(impression); pWordList = getTwentyPercentlists(word); if (pWordList !=
null && pWordList.size() >
0 ){ map.put( "impressionCount" , pWordList.get(pWordList.size()- 1 ).getImpressionCount()); } else { map.put( "impressionCount" ,
1 ); } } else
if (click != null ){ PromotionWord word =
new PromotionWord(); word.setCreatedBy(userId); word.setClickCount7(click); pWordList = getTwentyPercentlists(word); if (pWordList !=
null && pWordList.size() >
0 ){ map.put( "clickCount" , pWordList.get(pWordList.size()- 1 ).getClickCount()); } else { map.put( "clickCount" ,
1 ); } } List<PromotionWord> list = commonDao.queryList(PROMOTION_WORD_DAO +
".queryExportDataByUser" , map); String[] excelHeader = { "關鍵詞" ,
"價格" , "搜索熱度" , "推廣評分" , "購買熱度" , "曝光量" , "點擊量" , "點擊率" , "推廣時長" , "花費" , "平均點擊花費" , "匹配產品數" , "預估排名" , "狀態" }; for
( int i =
0 ; i < excelHeader.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(style);
if (i ==
0 ){ sheet.setColumnWidth( 0 ,
30 * 256 ); } else {
sheet.setColumnWidth(i,
10 * 256 ); } }
if (list !=
null && list.size() >
0 ) for
( int i =
0 ; i < list.size(); i++) {
row = sheet.createRow(i +
1 ); PromotionWord word = list.get(i);
row.createCell( 0 ).setCellValue(word.getWord());
row.createCell( 1 ).setCellValue(word.getPrice()+ "" );
row.createCell( 2 ).setCellValue(word.getSearchCount()); row.createCell( 3 ).setCellValue(word.getQsStar()); row.createCell( 4 ).setCellValue(word.getBuyCount()); row.createCell( 5 ).setCellValue(word.getImpressionCount7()); row.createCell( 6 ).setCellValue(word.getClickCount7()); if (word.getClickCount7() == 0L){ row.createCell( 7 ).setCellValue( "0.00%" ); } else { DecimalFormat df =
new DecimalFormat( "0.00%" ); row.createCell( 7 ).setCellValue(df.format((Double.valueOf(word.getClickCount7())/Double.valueOf(word.getImpressionCount7())))); } row.createCell( 8 ).setCellValue(word.getOnlineTime7()); row.createCell( 9 ).setCellValue(word.getCost7()+ "" ); row.createCell( 10 ).setCellValue(word.getAvgCost7()+ "" ); row.createCell( 11 ).setCellValue(word.getMatchCount()); String rank =
"" ; if (word.getMatchCount() !=
null && word.getMatchCount() !=
0 ){ if (word.getProspectRank() ==
null || word.getProspectRank() == 0L){
rank =
"其他位置" ; } else { rank =
"第" +word.getProspectRank()+ "位" ; } } else { rank =
"---" ; } row.createCell( 12 ).setCellValue(rank); row.createCell( 13 ).setCellValue(word.getStatus() ==
1 ? "暫停" : "啓動" ); }
return
wb; } |