JavaWeb中导出excel文件

原创 2016年06月01日 09:34:41

在平时做系统项目时,经常会需要做导出功能,不论是导出excel,还是导出cvs文件。我下面的demo是在springmvc的框架下实现的。


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;
	}

这样之后就可以直接点击导出就有效果了。

版权声明:本文为博主原创文章,若有需要直接搬走。

相关文章推荐

干细胞治疗帕金森 保护残余肾功能的几方面

保护残余肾功能的几方面什么是尿毒症?尿毒症症状、尿毒症早期症状是什么?尿毒症的原因是什么?肾炎,尿毒症能活多久?尿毒症能治好吗?尿毒症饮食注意什么?尿毒症治疗方法有哪些?这些都是患者际家属亲人最关心的...

Java开发中的23种设计模式详解

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模...

oracle分页查询

oracle分页查询。 查询第6条到第10条数据:rownum相当于系统给分配的一列。 图中第二种方式效率更高一些。

Spring中bean实例化的三种方式

之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例)。那么今天我想来说说如何通过xml配置来实例...

Redis 和Memcache的区别

现在新浪微博大规模的都是基于redis来架构的。 redis和memecache的不同在于: 1、存储方式: memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小 r...
  • s1070
  • s1070
  • 2016-04-26 22:42
  • 439

springboot(十五)打war包部署到Tomcat下

springboot打war包

【开源】SKY收支管理系统Ver1.0正式版 发布

初学PHP,用一个半星期的时间写了这个东西,界面和功能还不是很完善,希望大家多多提意见。在界面这一方面我会多下功夫的 = =当然代码也很重要……演示:http://junorz.co.cc/forst...

PropertiesHelper.java

import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.String...

springboot 定制个性 banner

使用spring boot 开发时,当程序启动的时候控制台会输出由字符组成的Spring符号。这个是SpringBoot为自己设计的Banner: . ____ _ ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)