网上有各种的版本,但是还是自己来总结一下
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(Spring、Struts2、Hibernate)框架下整合实现Web应用导出Excel文件的功能。SSH是一个广泛使用的Java Web开发框架,它提供了强大的数据持久层、MVC架构以及依赖注入等功能。在这个...
Struts2 框架与 Apache 的 JXL 库整合,可以方便地实现在 Java Web 应用中导入和导出 Excel 表格的功能。Apache JXL 是一个强大的 Java 库,专门用于读写 Microsoft Excel 文件,使得开发者无需依赖 Office API 就能...
标题 "SSH+JXL 下载 Excel 文档" 涉及到的是在Java开发中,使用Spring、Struts2框架以及JXL库来实现Excel文件的下载功能。SSH(Spring、Struts2、Hibernate)是Java领域常见的MVC架构,而JXL是一个流行的Java库,...
4. **处理公式和图表**:库还支持读取和写入Excel中的公式,以及处理简单的图表数据。 5. **处理多线程**:由于JXL不直接与文件系统交互,而是通过内存中工作表模型进行操作,因此在多线程环境中也能有效工作,提高...
在这个案例中,我们将探讨如何在SSH框架下实现从网页导出Excel文件的功能,而无需依赖第三方库如Apache POI或jxl。 1. **SSH框架简介** - **Spring**:一个全面的轻量级容器,提供依赖注入(DI)和面向切面编程...
【标题】"jxl报表 代码应用"涉及的是在Java编程环境中使用jxl库来创建和处理Excel报表的实践案例,特别关注的是如何在SSH(Struts、Hibernate、Spring)框架下集成jxl进行数据展示。 【描述】"jxl实现的SSH架构的...
在SSH项目中,如果需要读写Excel数据,例如报表导出,那么POI是不可或缺的。 8. **spring-orm-3.2.4.RELEASE-javadoc.jar**:Spring ORM模块提供了对流行持久化框架的支持,包括Hibernate。虽然这里提供的是Javadoc...
在实际应用中,JXL常用于数据导入导出或报告生成。 最后,LOG4J是Apache的一个开源项目,它是Java世界中广泛使用的日志记录框架。"log4简单使用"意味着你需要学习如何配置LOG4J的日志级别(DEBUG、INFO、WARN、...
在SSH项目中,如果你需要从Excel导入数据或者生成Excel报告,这个库是必不可少的。 7. **freemarker.jar**:FreeMarker是一个模板引擎,用于生成文本输出,如HTML页面。在Struts中,FreeMarker通常作为视图层的技术...
在SSH2中,它们可以帮助开发者读写Excel数据,进行数据导入导出,或者生成报表。 3. **jfreechart-1.0.12.jar**: JFreeChart是一个Java图形库,可以创建各种统计图表,如折线图、柱状图、饼图等。在SSH2框架中,它...
在SSH项目中,如果需要处理Excel数据导入导出,这个库将非常有用。 `jxl.jar`是另一个处理Excel的库,它提供了读写Excel文件的功能。与POI相比,jxl可能更简单易用,但在功能和性能上可能稍逊一筹。 `jboss-jmx....
在SSH项目中,可以用来生成报表或者导入导出数据,比如统计分析或用户数据导出。 7. freemarker-2.3.15.jar:FreeMarker是一个模板引擎,用于生成动态HTML或其他格式的文本。在Struts2中,可以配置FreeMarker作为...
另外,jxl库是Java处理Excel文件的工具,可能在这个进销存系统中用于数据导入导出功能。例如,管理员可能需要批量导入供应商信息或者导出销售报告,这时候jxl可以帮助程序读写Excel文件,实现数据的快速交换。 总的...
标题中的"ssh+dwr坚决不冲突的jar"指的是在Java Web开发中,使用Spring(SSH)框架和Direct Web Remoting (DWR) 框架时,可能存在的一些库依赖冲突问题,而这个压缩包文件提供了可以避免这些冲突的特定版本的JAR文件...
在jboa系统中,它被用于导出报销单数据到Excel文件,这为用户提供了一种方便的数据导出格式,方便进一步的数据分析或共享。 GUI(图形用户界面)部分,虽然在描述中没有具体提及使用哪种技术,但通常在Java中,...
虽然POI提供了更全面的Excel处理功能,但在早期的Java应用中,JXL因为其轻量级和简单易用而被广泛使用。 4. **struts.jar**:这是Apache Struts 1.x的核心库,一个基于MVC设计模式的Web应用程序框架。它帮助开发者...
【标题】"人力资源管理(基于ssh的j2ee项目)附带lib包2"所涉及的知识点主要集中在Java企业级开发领域,特别是Spring、Struts和Hibernate(SSH)框架的集成应用,以及与之相关的技术和工具。这个项目是用于实现全面...
`jxl.jar`是Java Excel API,允许程序读写Excel文件,如果项目中有导出数据至Excel的需求,这个库会非常有用。 `dwr.jar`是Direct Web Remoting的实现,它允许在JavaScript和服务器端之间进行方法调用,实现富...
- `jxl.jar`:JExcelAPI库,用于读写Excel文件,方便数据导入导出。 这些组件组合在一起,能够帮助开发者快速构建一个具备持久层(Hibernate)、业务逻辑层(Spring)和视图层(Struts2)的完整Java Web应用。通过...
两个pss0328的zip文件可能包含了一些项目的源码或者更新,而jxl.zip可能是JExcelApi的压缩包,这是一个用来读写Excel文件的Java库,可能在项目中用于数据导入导出。 最后,jquery-validation可能是jQuery的一个验证...