在平时做系统项目时,经常会需要做导出功能,不论是导出excel,还是导出cvs文件。我下面的demo是在springmvc的框架下实现的。
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; } |
这样之后就可以直接点击导出就有效果了。
以上就是小编为大家带来的JavaWeb中导出excel文件的简单方法全部内容了,希望大家多多支持服务器之家~