JavaWeb中导出excel文件
2016-06-01 09:34
381 查看
在平时做系统项目时,经常会需要做导出功能,不论是导出excel,还是导出cvs文件。我下面的demo是在springmvc的框架下实现的。
1.JS中只需要用GET模式请求导出就可以了:
2.在controller中要做的是将文件以数据流格式输出:
@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中需要将数据写入到格式文件中:
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;
}
这样之后就可以直接点击导出就有效果了。
1.JS中只需要用GET模式请求导出就可以了:
$('#word-export-btn').parent().on('click',function(){ var promotionWord = JSON.stringify($('#mainForm').serializeObject()); location.href="${ctx}/promotionWord/export?promotionWord="+promotionWord; });
2.在controller中要做的是将文件以数据流格式输出:
@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中需要将数据写入到格式文件中:
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;
}
这样之后就可以直接点击导出就有效果了。
相关文章推荐
- 使用Python生成Excel格式的图片
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- SQL 导入导出Excel数据的语句
- 文本、Excel、Access数据导入SQL Server2000的方法
- C#实现Excel动态生成PivotTable
- C#导出数据到Excel文件的方法
- Vbscript生成Excel报表的常用操作总结
- ruby 小脚本搞定CVS服务器更换后checkout下来的工程迁移
- C#实现导入CSV文件到Excel工作簿的方法
- C#基于NPOI生成具有精确列宽行高的Excel文件的方法
- 总提示[Microsoft][ODBC Excel Driver] 数值字段溢出官方解决方法
- C#将Sql数据保存到Excel文件中的方法
- VC6.0实现读取Excel数据的方法
- C#定制Excel界面并实现与数据库交互的方法
- 把excel表格里的数据导入sql数据库的两种方法
- access dbase excel foxpro 数据库浏览器V3.1版 下载
- C#实现把txt文本数据快速读取到excel中