`
maria3905
  • 浏览: 22773 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

jxl在ssh中导出excel

 
阅读更多

网上有各种的版本,但是还是自己来总结一下

1.首先是引入jxl的jar包jxl-2.6.10.jar

2.在jsp页面先,这个是跟查询一起的,也就是能够按照搜索条件的不同导出的数据也不同

 

<input type="button" id="searchBut" class="g_btn" value="导出" onclick="$('#export').val('1');validate();"/>
<input type="button" id="searchBut" class="g_btn" value="查询" onclick="$('#export').val('');validate();"/>
<input type="hidden" name="export" id="export" value=""/>也就是export的值为1

 

根据struts2的上传下载操作,需要在struts.xml中配置

 

<result name="excel" type="stream">
	            <param name="contentType">application/vnd.ms-excel</param>
	            <param name="inputName">excelStream</param>
	            <param name="contentDisposition">attachment;filename=${filename}</param>
	            <param name="bufferSize">1024</param>
            </result>

 Action中的处理

private String export;
private InputStream excelStream;
private String filename;
//get set
	public String getExport() {
		return export;
	}
	public void setExport(String export) {
		this.export = export;
	}
	public InputStream getExcelStream() {
		 //将OutputStream转化为InputStream   
        ByteArrayOutputStream out = new ByteArrayOutputStream();   
        export(out);   
        return new ByteArrayInputStream(out.toByteArray()); 
		
	}
	
	public void setExcelStream(InputStream excelStream) {
		this.excelStream = excelStream;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
public String queryCharge() {
		if("1".equals(export)){
			excelStream=getExcelStream();
	        return "excel";
		}else{
                 return xxx;
}
/**
	 * 导出excel文件
	 * @throws Exception
	 */
	public void export(OutputStream out){ 

        try {
        	//创建工作薄
            WritableWorkbook wwb = Workbook.createWorkbook(out);  
            //创建sheet
            WritableSheet ws = wwb.createSheet("45充值记录", 0);  
            WritableSheet ws2 = wwb.createSheet("60充值记录", 1);  
            WritableSheet ws3 = wwb.createSheet("108充值记录", 2);
            WritableSheet ws4 = wwb.createSheet("其他充值记录", 3);
            //给sheet电子版中所有的列设置默认的列的宽度;  
            ws.getSettings().setDefaultColumnWidth(20); 
            ws2.getSettings().setDefaultColumnWidth(20);  
            ws3.getSettings().setDefaultColumnWidth(20);  
            ws4.getSettings().setDefaultColumnWidth(20);  
           //45的
            String [] str = {"编号","充值类型","充值日期","45充值笔数","任意金额充值总笔数","45充值占当日总充值数百分比"};//标题内容
            ws.addCell(new jxl.write.Label(0,0, "45充值记录表"));
           //60de
            String [] str2 = {"编号","充值类型","充值日期","60充值笔数","任意金额充值总笔数","60充值占当日总充值数百分比"};//标题内容
            ws2.addCell(new jxl.write.Label(0,0,"60充值记录表"));
            //108de
            String [] str3 = {"编号","充值类型","充值日期","108充值笔数","任意金额充值总笔数","108充值占当日总充值数百分比"};//标题内容
            ws3.addCell(new jxl.write.Label(0,0, "108充值记录表"));
           //其他的
            String [] str4 = {"编号","充值类型","充值日期","其他充值笔数","任意金额充值总笔数","其他充值占当日总充值数百分比"};//标题内容
            ws4.addCell(new jxl.write.Label(0,0, "其他充值记录表"));
            List<Map<String, String>> chargeExcelList = manageFundService.queryChargeExcel(reqPara);
            LinkedList<Map<String, String>> list45=new LinkedList<Map<String, String>>();
            LinkedList<Map<String, String>> list60=new LinkedList<Map<String, String>>();
            LinkedList<Map<String, String>> list108=new LinkedList<Map<String, String>>();
            LinkedList<Map<String, String>> listOther=new LinkedList<Map<String, String>>();
            for (Map<String, String> map : chargeExcelList) {
            	if("45".equals(map.get("kind"))){
            		list45.add(map);
            	}else if("60".equals(map.get("kind"))){
            		list60.add(map);
            	}else if("108".equals(map.get("kind"))){
            		list108.add(map);
            	}else if("其他".equals(map.get("kind"))){
            		listOther.add(map);
            	}
			}
            addCellList(list45,ws,str);
            addCellList(list60,ws2,str2);
            addCellList(list108,ws3,str3);
            addCellList(listOther,ws4,str4);
            filename=new String("充值记录.xls".getBytes(),"ISO8859-1");
            wwb.write();  
            wwb.close();
            out.flush();
            out.close();
            
        } catch (Exception e) {  
            System.out.println("Error!");  
            e.printStackTrace();  
        }
	  }  
	 
	/**
	 * 循环添加sheet中的行列
	 * @param list
	 * @param ws
	 */
	public void addCellList(List<Map<String, String>> list, WritableSheet ws,String[] title){
        //添加标题
		try {
			for (int m = 0; m < title.length; m++) {
	            /**
	             * Label(i,j,String);lable是标题,cell是单元格
	             * i:列
	             * j:行
	             * String:表示内容
	             */
	           
				ws.addCell(new Label(m, 1, title[m]));
	        }
			int i=1;
			for (int j = 0; j < list.size(); j++) {  
	        	Map<String, String> map= list.get(j);
	        	if(map!=null && map.size()>0){
	        		// 这里设置是自增的序号而不是ID号.也可以改成ID号ws.addCell(new jxl.write.Label(1, i + 1, ""+  map.get("id"))); 
	    				ws.addCell(new jxl.write.Number(0, i + 1, i));  
	    				ws.addCell(new Label(1, i + 1,map.get("kind")));  
	    				ws.addCell(new Label(2, i + 1,map.get("chargeDay")));  
	    				ws.addCell(new Label(3, i + 1,map.get("thiscnt")));  
	    				ws.addCell(new Label(4, i + 1,map.get("totalCnt")));  
	    				ws.addCell(new Label(5, i + 1,map.get("percentage"))); 
	    				i++;
	        	}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 dao中主要处理的是数据处理的数据,主要是使用native sql写的联合查询,主要查出不同的充值数据

public List<Map<String, String>> queryChargeExcel(FundModel reqPara) {
		List<Map<String, String>> data = new ArrayList<Map<String, String>>();
		Session session = null;

		try {

			session = sessionFactory.openSession();

			StringBuilder sb = new StringBuilder();
			sb.append("SELECT temp.* FROM(");
			sb.append("SELECT 45 AS kind,a.cnt thiscnt,b.cnt totalCnt, ROUND(a.cnt/b.cnt*100,2) AS percentage,a.chargeDay  FROM( ");
			sb.append("(SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay ");
			sb.append("FROM t_user_charge ");
			sb.append("WHERE pay_status=1 AND money = 45 ");
			sb.append("GROUP BY chargeDay ");
			sb.append(") a,");
			sb.append("(SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay ");
			sb.append("FROM t_user_charge ");
			sb.append("WHERE pay_status=1 ");
			sb.append("GROUP BY chargeDay ");
			sb.append(") b");
			sb.append(")");
			sb.append("WHERE a.chargeDay = b.chargeDay ");
			sb.append("UNION ALL ");
			sb.append("SELECT 60,a.cnt thiscnt,b.cnt totalCnt,ROUND(a.cnt/b.cnt*100,2) AS percentage,a.chargeDay FROM( ");
			sb.append("(SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay ");
			sb.append("FROM t_user_charge  ");
			sb.append("WHERE pay_status=1 AND money = 60  ");
			sb.append("GROUP BY chargeDay ");
			sb.append(") a,");
			sb.append("(SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay ");
			sb.append("FROM t_user_charge ");
			sb.append("WHERE pay_status=1  ");
			sb.append("GROUP BY chargeDay ");
			sb.append(") b");
			sb.append(")");
			sb.append("WHERE a.chargeDay = b.chargeDay ");
			sb.append("UNION ALL ");
			sb.append("SELECT 108,a.cnt thiscnt,b.cnt totalCnt, ROUND(a.cnt/b.cnt*100,2) AS percentage,a.chargeDay FROM( ");
			sb.append("(SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay ");
			sb.append("FROM t_user_charge ");
			sb.append("WHERE pay_status=1 AND money = 108  ");
			sb.append("GROUP BY chargeDay ");
			sb.append(") a,");
			sb.append("(SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay ");
			sb.append("FROM t_user_charge ");
			sb.append("WHERE pay_status=1 ");
			sb.append("GROUP BY chargeDay ");
			sb.append(") b");
			sb.append(")");
			sb.append("WHERE a.chargeDay = b.chargeDay ");
			sb.append(" UNION ALL");
			sb.append(" SELECT '其他',a.cnt thiscnt,b.cnt totalCnt, ROUND(a.cnt/b.cnt*100,2) AS percentage,a.chargeDay FROM(");
			sb.append(" (SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay");
			sb.append(" FROM t_user_charge");
			sb.append(" WHERE pay_status=1 AND money NOT IN(45,60,108)");
			sb.append(" GROUP BY chargeDay");
			sb.append(" ) a,");
			sb.append(" (SELECT COUNT(1) cnt, DATE_FORMAT(charge_time, '%Y-%m-%d') chargeDay");
			sb.append(" FROM t_user_charge");
			sb.append(" WHERE pay_status=1");
			sb.append(" GROUP BY chargeDay");
			sb.append(" ) b");
			sb.append(" )");
			sb.append(" WHERE a.chargeDay = b.chargeDay");
			sb.append(" ) AS temp");
			sb.append(" WHERE 1=1");
			if (StringUtil.isNotEmpty(reqPara.getBeginTime())) {
				sb.append(" and chargeDay>=:beginTime");
			}
			if (StringUtil.isNotEmpty(reqPara.getEndTime())) {
				sb.append(" and chargeDay<:endTime");
			}
			Query query = session.createSQLQuery(sb.toString());
			if (StringUtil.isNotEmpty(reqPara.getBeginTime())) {
				query.setString("beginTime", reqPara.getBeginTime());
			}
			if (StringUtil.isNotEmpty(reqPara.getEndTime())) {
				query.setString("endTime", TimeUtil.getNextNDaysStr(
						reqPara.getEndTime(), "yyyy-MM-dd", 1));
			}
			List<Object[]> charges = query.list();

			for (Object[] charge : charges) {

				Map<String, String> m = new HashMap<String, String>();

				m.put("kind", charge[0].toString());
				m.put("thiscnt", charge[1].toString());
				m.put("totalCnt", charge[2].toString());
				m.put("percentage", charge[3].toString());
				m.put("chargeDay", charge[4].toString());

				//m.put("generTime", TimeUtil.formatDate((Date) charge[8]));

				data.add(m);
			}

			logger.info("chargesmore:" + data);

		} catch (Exception e) {
			logger.error("querying chargesmore failed", e);
			e.printStackTrace();
		} finally {

			if (session != null && session.isOpen()) {
				session.close();
			}

		}

		return data;
	}

 若是需要加上百分比的话则是

CONCAT(ROUND(a.cnt/b.cnt*100,2),'%')显示的就是50%,嘿嘿

 

这算是一个完整的了,特此记录一下

分享到:
评论

相关推荐

    ssh整合web导出excel案例

    在本文中,我们将探讨如何在SSH(Spring、Struts2、Hibernate)框架下整合实现Web应用导出Excel文件的功能。SSH是一个广泛使用的Java Web开发框架,它提供了强大的数据持久层、MVC架构以及依赖注入等功能。在这个...

    struts2整合apache的jxl导入导出excel表格

    Struts2 框架与 Apache 的 JXL 库整合,可以方便地实现在 Java Web 应用中导入和导出 Excel 表格的功能。Apache JXL 是一个强大的 Java 库,专门用于读写 Microsoft Excel 文件,使得开发者无需依赖 Office API 就能...

    SSH+JXL 下载 Excel 文档

    标题 "SSH+JXL 下载 Excel 文档" 涉及到的是在Java开发中,使用Spring、Struts2框架以及JXL库来实现Excel文件的下载功能。SSH(Spring、Struts2、Hibernate)是Java领域常见的MVC架构,而JXL是一个流行的Java库,...

    jxl集合包 不是SSH框架下的

    4. **处理公式和图表**:库还支持读取和写入Excel中的公式,以及处理简单的图表数据。 5. **处理多线程**:由于JXL不直接与文件系统交互,而是通过内存中工作表模型进行操作,因此在多线程环境中也能有效工作,提高...

    ssh整合web导出excel案例.docx

    在这个案例中,我们将探讨如何在SSH框架下实现从网页导出Excel文件的功能,而无需依赖第三方库如Apache POI或jxl。 1. **SSH框架简介** - **Spring**:一个全面的轻量级容器,提供依赖注入(DI)和面向切面编程...

    jxl报表 代码应用

    【标题】"jxl报表 代码应用"涉及的是在Java编程环境中使用jxl库来创建和处理Excel报表的实践案例,特别关注的是如何在SSH(Struts、Hibernate、Spring)框架下集成jxl进行数据展示。 【描述】"jxl实现的SSH架构的...

    ssh项目依赖jar包合集

    在SSH项目中,如果需要读写Excel数据,例如报表导出,那么POI是不可或缺的。 8. **spring-orm-3.2.4.RELEASE-javadoc.jar**:Spring ORM模块提供了对流行持久化框架的支持,包括Hibernate。虽然这里提供的是Javadoc...

    利用JSCH实现文件传输,JXL生成表格,log4简单使用

    在实际应用中,JXL常用于数据导入导出或报告生成。 最后,LOG4J是Apache的一个开源项目,它是Java世界中广泛使用的日志记录框架。"log4简单使用"意味着你需要学习如何配置LOG4J的日志级别(DEBUG、INFO、WARN、...

    SSH整合需要的所有JAR包(1部分).

    在SSH项目中,如果你需要从Excel导入数据或者生成Excel报告,这个库是必不可少的。 7. **freemarker.jar**:FreeMarker是一个模板引擎,用于生成文本输出,如HTML页面。在Struts中,FreeMarker通常作为视图层的技术...

    SSH2框架所用到的jar包4

    在SSH2中,它们可以帮助开发者读写Excel数据,进行数据导入导出,或者生成报表。 3. **jfreechart-1.0.12.jar**: JFreeChart是一个Java图形库,可以创建各种统计图表,如折线图、柱状图、饼图等。在SSH2框架中,它...

    SSH整合所需的JAR包-2

    在SSH项目中,如果需要处理Excel数据导入导出,这个库将非常有用。 `jxl.jar`是另一个处理Excel的库,它提供了读写Excel文件的功能。与POI相比,jxl可能更简单易用,但在功能和性能上可能稍逊一筹。 `jboss-jmx....

    SSH开发使用的各种包

    在SSH项目中,可以用来生成报表或者导入导出数据,比如统计分析或用户数据导出。 7. freemarker-2.3.15.jar:FreeMarker是一个模板引擎,用于生成动态HTML或其他格式的文本。在Struts2中,可以配置FreeMarker作为...

    进销存系统

    另外,jxl库是Java处理Excel文件的工具,可能在这个进销存系统中用于数据导入导出功能。例如,管理员可能需要批量导入供应商信息或者导出销售报告,这时候jxl可以帮助程序读写Excel文件,实现数据的快速交换。 总的...

    ssh+dwr坚决不冲突的jar

    标题中的"ssh+dwr坚决不冲突的jar"指的是在Java Web开发中,使用Spring(SSH)框架和Direct Web Remoting (DWR) 框架时,可能存在的一些库依赖冲突问题,而这个压缩包文件提供了可以避免这些冲突的特定版本的JAR文件...

    jspjboa系统

    在jboa系统中,它被用于导出报销单数据到Excel文件,这为用户提供了一种方便的数据导出格式,方便进一步的数据分析或共享。 GUI(图形用户界面)部分,虽然在描述中没有具体提及使用哪种技术,但通常在Java中,...

    SSHJAR包part02

    虽然POI提供了更全面的Excel处理功能,但在早期的Java应用中,JXL因为其轻量级和简单易用而被广泛使用。 4. **struts.jar**:这是Apache Struts 1.x的核心库,一个基于MVC设计模式的Web应用程序框架。它帮助开发者...

    人力资源管理(基于ssh的j2ee项目)附带lib包2

    【标题】"人力资源管理(基于ssh的j2ee项目)附带lib包2"所涉及的知识点主要集中在Java企业级开发领域,特别是Spring、Struts和Hibernate(SSH)框架的集成应用,以及与之相关的技术和工具。这个项目是用于实现全面...

    Struts2.1.8,Spring2.5,Hibernate3所需Jar包 S2SH SSH

    `jxl.jar`是Java Excel API,允许程序读写Excel文件,如果项目中有导出数据至Excel的需求,这个库会非常有用。 `dwr.jar`是Direct Web Remoting的实现,它允许在JavaScript和服务器端之间进行方法调用,实现富...

    SSH框架整合架包

    - `jxl.jar`:JExcelAPI库,用于读写Excel文件,方便数据导入导出。 这些组件组合在一起,能够帮助开发者快速构建一个具备持久层(Hibernate)、业务逻辑层(Spring)和视图层(Struts2)的完整Java Web应用。通过...

    小项目第五部分

    两个pss0328的zip文件可能包含了一些项目的源码或者更新,而jxl.zip可能是JExcelApi的压缩包,这是一个用来读写Excel文件的Java库,可能在项目中用于数据导入导出。 最后,jquery-validation可能是jQuery的一个验证...

Global site tag (gtag.js) - Google Analytics