在平时做系统项目时,经常会需要做导出功能,不论是导出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文件的简单方法全部内容了,希望大家多多支持服务器之家~