1.要做这个动态的东西首先要一个基础组整出来,然后对应着它把数据进行循环
/** * 导出日统计数据 * @return */ public String exportForDataDay(){ try { getRequest().setCharacterEncoding("utf-8"); getResponse().setCharacterEncoding("utf-8"); getResponse().setContentType("application/x-download;charset=utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String fname = Utils.getBytes(getRequest().getParameter("exportOss_date")); String filename = fname+"DataDay.xls"; String filePath = getRequest().getRealPath("")+"/"+filename; String sessionKey = getRequest().getParameter("key"); String title= getRequest().getParameter("title"); sessionKey =Utils.getBytes(sessionKey); title = Utils.getBytes(title); try { if(filePath == null || filePath.trim().length() < 1 || sessionKey == null || sessionKey.length() < 1){ return LIST_ACTION; } String[][] data = (String[][])getRequest().getSession().getAttribute(sessionKey); if(exportFormatDD(filePath,title,data)){ getResponse().setHeader("Content-Disposition", "attachment;filename=" +filename); OutputStream out = getResponse().getOutputStream(); try { BufferedInputStream br = new BufferedInputStream(new FileInputStream(filePath)); byte[] buf = new byte[1024]; int len = 0; while((len = br.read(buf)) >0) out.write(buf,0,len); } catch (IOException e) { e.printStackTrace(); }finally{ if( out != null){ out.flush(); out.close(); } } deleteFile(filePath);// 清楚缓存文件 }else{ return LIST_ACTION; } } catch (IOException e) { e.printStackTrace(); } return null; } /** * 对日统计数据进行格式化输出到excel * @param filePath 路径 * @param title sheet名称 * @param data excel内容 * @return 是否生成 */ public boolean exportFormatDD(String filePath, String title, String[][] data) { try { if (data == null) { return false; } WritableWorkbook wbook = Workbook.createWorkbook(new File(filePath)); // 建立excel文件 String tmptitle = title; // 标题 if (tmptitle == null || tmptitle.trim().length() < 1) tmptitle = "OSS统计报表"; WritableSheet wsheet = wbook.createSheet(tmptitle, 0); // sheet名称 // 设置excel标题 WritableFont wfont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); WritableCellFormat wcfFC = new WritableCellFormat(wfont); wcfFC.setAlignment(jxl.format.Alignment.CENTRE); wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); wcfFC.setBackground(Colour.ORANGE); wsheet.addCell(new Label(0, 0, tmptitle, wcfFC)); wsheet.mergeCells(0, 0, 6, 0); //设置首行 wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); wcfFC = new WritableCellFormat(wfont); wcfFC.setAlignment(jxl.format.Alignment.CENTRE); wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); wsheet.addCell(new Label(0, 1, data[0][0], wcfFC));//推广渠道 wsheet.setColumnView(0,20); wsheet.mergeCells(0, 1, 0, 2); wsheet.addCell(new Label(1, 1, data[0][1], wcfFC));//推广子渠道 wsheet.setColumnView(1,20); wsheet.mergeCells(1, 1, 0, 2); wsheet.addCell(new Label(2, 1, data[0][2], wcfFC));//业务类型 wsheet.setColumnView(2,10); wsheet.mergeCells(2, 1, 0, 2); wsheet.addCell(new Label(3, 1, "", wcfFC));//空白行 wsheet.mergeCells(3, 1, 6, 1); wsheet.addCell(new Label(3, 2, data[0][3], wcfFC));//当日开通 wsheet.setColumnView(3,10); wsheet.addCell(new Label(4, 2, data[0][4], wcfFC));//当日展示 wsheet.setColumnView(4,10); wsheet.addCell(new Label(5, 2, data[0][5], wcfFC));//72H活跃用户量 wsheet.setColumnView(5,15); wsheet.addCell(new Label(6, 2, data[0][6], wcfFC));//72H独立展示用户量 wsheet.setColumnView(6,18); Map<String, List<String[]>> detail = proceData(data); detail.remove("子渠道名"); Set<String> mySetD = new HashSet<String>();//存放最后合计用的D列单元格坐标 int row = 3; WritableFont contentFont = new jxl.write.WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); WritableCellFormat contentCF = new WritableCellFormat(contentFont); contentCF.setAlignment(jxl.format.Alignment.RIGHT); contentCF.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); for (String strings : detail.keySet()) { List<String[]> list = detail.get(strings); wsheet.addCell(new Label(0, row, ((String[])list.get(0))[0], wcfFC));//推广渠道 : 企业名片(百阅) wsheet.mergeCells(0, row, 0, row+list.size()); for (String[] dataStrs : list) { int col = 0; for (int i=1;i<dataStrs.length;i++) { // 行数据 if (col <= 1) { if (col==1) {//区分来显或者来显+点 String last = dataStrs[1].substring(dataStrs[1].length()-1, dataStrs[1].length()); if (last.equals("1")) { wsheet.addCell(new Label(col + 1, row, "来显", wcfFC)); }else { wsheet.addCell(new Label(col + 1, row, "来显+点", wcfFC)); } }else { wsheet.addCell(new Label(col + 1, row, dataStrs[i], wcfFC)); } } else { wsheet.addCell(new jxl.write.Number(col + 1, row, Integer.valueOf(dataStrs[i].trim()), contentCF)); } col++; } row++; } //小计行 // wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); // wcfFC = new WritableCellFormat(wfont); // wcfFC.setAlignment(jxl.format.Alignment.CENTRE); // wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); // wcfFC.setBackground(Colour.YELLOW); wsheet.addCell(new Label(1, row , "小计" )); wsheet.mergeCells(1, row , 2, row ); if (list.size()>1) {//应需求要求修改成特殊的小计 wsheet.addCell(new Formula(3, row, "SUM(D"+(row-(list.size()-1))+":D"+(row-(list.size()-1))+")", contentCF )); wsheet.addCell(new Formula(4, row, "SUM(E"+(row-(list.size()-1))+":E"+(row-(list.size()-1))+")", contentCF )); wsheet.addCell(new Formula(5, row, "SUM(F"+(row-(list.size()-1))+":F"+(row-(list.size()-1))+")", contentCF )); wsheet.addCell(new Formula(6, row, "SUM(G"+(row-(list.size()-1))+":G"+(row-(list.size()-1))+")", contentCF )); }else {//正确的小计 wsheet.addCell(new Formula(3, row, "SUM(D"+(row-(list.size()-1))+":D"+(row)+")", contentCF )); wsheet.addCell(new Formula(4, row, "SUM(E"+(row-(list.size()-1))+":E"+(row)+")", contentCF )); wsheet.addCell(new Formula(5, row, "SUM(F"+(row-(list.size()-1))+":F"+(row)+")", contentCF )); wsheet.addCell(new Formula(6, row, "SUM(G"+(row-(list.size()-1))+":G"+(row)+")", contentCF )); } //添加需要合计的单元格 if (0==(row-(row-(list.size()-1)))) { mySetD.add(""+row); }else { mySetD.add(""+row); mySetD.add(""+(row-(list.size()-1))); } row++; } wsheet.addCell(new Label(0, row, "来显合计", wcfFC));//来显合计 wsheet.mergeCells(0, row, 2, 1); wsheet.addCell(new Formula(3, row, "SUM("+makeXY("D",mySetD)+")", wcfFC)); wsheet.addCell(new Formula(4, row, "SUM("+makeXY("E",mySetD)+")", wcfFC)); wsheet.addCell(new Formula(5, row, "SUM("+makeXY("F",mySetD)+")", wcfFC)); wsheet.addCell(new Formula(6, row, "SUM("+makeXY("G",mySetD)+")", wcfFC)); //wsheet.addCell(new Label(0, data.length+3, "来显+点合计", wcfFC));//来显+点合计 //wsheet.setColumnView(2,10); //wsheet.mergeCells(0, data.length+3, 2, 1); // 主体内容生成结束 wbook.write(); // 写入文件 wbook.close(); } catch (Exception ex) { ex.printStackTrace(); return false; } return true; } /** * 拼接合计的单元格坐标 * @param string * @param mySetD * @return */ private String makeXY(String string, Set<String> mySetD) { StringBuilder xy = new StringBuilder(""); for (String str : mySetD) { xy.append(","+string+str); } return xy.toString().substring(1); } /** * 处理数据格式 * @param data[企业名片(百阅A1), 100151, 来显/点, 15878, 81034, 1353028 , 123607 ] ;串1 * [企业名片(百阅S2), 100154, 来显/点, 0, 0, 0 , 0 ];串2 * @return Map<10015, List[串1,串2]> */ @SuppressWarnings({ "rawtypes", "unchecked" }) public Map<String, List<String[]>> proceData(String data[][]){ Map<String, List<String[]>> detail = new LinkedHashMap<String, List<String[]>>(); for (String[] strings : data) { String key = strings[1].substring(0, strings[1].length()-1); if (detail.get(key)!=null) { List list = (List)detail.get(key); list.add(strings); }else { List<String[]> list = new ArrayList<String[]>(); list.add(strings); detail.put(key, list); } } return detail; }
相关推荐
jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程
本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `jxl`库提供了一套完整的API来操作Excel文件,包括创建新的工作簿、添加...
总结起来,`jxl导出excel工具类`是一个强大的工具,它能够帮助开发者快速实现数据到Excel的导出功能,减少重复代码,提高开发效率。通过合理的封装和设计,可以使得这类工具类在不同的项目中重用,降低维护成本。...
在Java编程环境中,导出数据到Excel表格是一个常见的需求,特别是在数据分析、报表生成或数据交换时。`jxl`库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Microsoft Excel文件。本篇文章将深入探讨如何...
《jxl导出Excel的深度解析与应用》 在信息化高度发展的今天,Excel作为数据处理和分析的重要工具,被广泛应用于各个领域。Java作为一种强大的编程语言,如何与Excel进行交互,成为了许多开发者关注的焦点。jxl库...
Java使用JXL库生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或导出时。JXL是一个开源的Java库,允许我们读取、写入和修改Excel文件。以下将详细讲解如何使用JXL库来生成Excel文件。 首先,我们需要在...
在Java编程环境中,JXL库是一个非常流行...总之,使用JXL库在Java中导出Excel文件是一项常见的任务,尤其在数据分析和报表生成场景下。通过熟悉JXL的API,你可以轻松地定制化Excel文件的格式和内容,满足各种业务需求。
通过这个库,我们可以方便地在程序中动态生成Excel工作表,包括设置单元格格式、添加公式以及处理图像等复杂操作。在描述中提到的"封装了一个简单易用、通用、动态的方法",指的是开发者可以通过自定义方法,根据...
jxl导出Excel基础,非常有用的一个东西,漫漫看
在本示例中,我们将探讨如何使用JXL导出Excel以及JXL的API文档。 1. **JXL的基本用法** - **创建工作簿(Workbook)**: 使用`Workbook.createWorkbook()`方法创建一个新的Excel工作簿对象。 - **创建工作表...
标题中的“jxl导出excel文件简单示例”是指使用jxl库来创建和导出Excel文件的一个基本操作。jxl是一个Java库,它允许开发者读取、写入和修改Excel文件,尤其在处理批量数据时非常方便。在这个示例中,我们将探讨如何...
使用jxl生成excel的通用方法,参数List<?>数据,LinkedHashMap,String>实体类属性名和中文列名的键值对
"jxl导出excel.zip"是一个包含工具类的压缩包,用于帮助开发者便捷地将数据导出为Excel格式,主要利用了JXL库。JXL是Java Excel API的一个简称,它是一个开源的Java库,支持读取、写入以及修改Microsoft Excel文件。...
在Java编程环境中,处理Excel文件是一项常见的任务,特别是在数据导入导出、报表生成等领域。`jxl`库是一个广泛使用的开源库,它允许开发者用Java读取、写入和修改Excel文件。在这个特定的场景中,我们将探讨如何...
在"struts2+jxl导出excel"的场景中,我们将讨论如何利用Struts2框架与JXL库配合,实现从web应用中导出数据到Excel的工作。 首先,我们需要理解Struts2的动作(Action)和结果(Result)。动作是处理用户请求的核心...
以下是一个基本的代码示例,展示了如何利用JXL导出Excel的步骤: 1. 创建工作簿对象: ```java WorkbookSettings ws = new WorkbookSettings(); // 如果需要设置编码(例如中文字符),可以这样: ws.set...
自己封装的方法,调用 XlHelper.getXl(List<?> voList , Object head , OutputStream ops)方法,直接返回需要的excel,而不需要再去写jxl的方法。第一个参数voList 是excel里的内容,第二个参数head是excel表头。第...
本文将深入探讨如何使用JXL进行Excel的导入与导出。 一、JXL库介绍 JXL是一个开源的Java库,它支持读取和写入多种Excel文件格式,包括老版本的.BIFF8格式和较新的.XLSX格式。这个库不仅提供了对单元格、工作表和...