在java web开发中,很多情况下都会用到导出excel数据的功能,下面我对我做的一个例子做下简单的介绍,希望对大家有所帮助。
java导出excel的方式有很多种,如利用poi导出,如利用jxl导出,现在我要说的就是利用jxl方式导出
首先,需要添加jar包:jxl.jar,其他java需要的包自行添加;
然后,请看下面代码:
/** * excel 文件下载操作 * @param result List数组,需要导出的对象列表 * @param response * @throws RowsExceededException * @throws WriteException * @throws IOException */ public static void downloadFile(List result, HttpServletResponse response) throws RowsExceededException, WriteException, IOException{ String xlsFileName = "subapplyinfo.xls"; WritableWorkbook book= Workbook.createWorkbook(new File(xlsFileName)); //生成名为"第一页"的工作表,参数0表示这是第一页 WritableSheet sheet=book.createSheet("第一页",0); //设置字体为宋体,11号字,加粗,颜色为黑色 WritableFont font1=new WritableFont(WritableFont.createFont("宋体"),11,WritableFont.BOLD); font1.setColour(Colour.BLACK); WritableCellFormat format1=new WritableCellFormat(font1); format1.setAlignment(jxl.format.Alignment.CENTRE); format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); Label labelA = new Label(0,0,"申请类型",format1); Label labelB = new Label(1,0,"活动名称",format1); Label labelC = new Label(2,0,"姓名",format1); Label labelD = new Label(3,0,"性别",format1); Label labelE = new Label(4,0,"联系电话",format1); Label labelF = new Label(5,0,"意向车型",format1); Label labelG = new Label(6,0,"预约时间",format1); Label labelH = new Label(7,0,"邮箱地址",format1); Label labelI = new Label(8,0,"所在城市",format1); Label labelJ = new Label(9,0,"提交时间",format1); Label labelK = new Label(10,0,"备注",format1); //将定义好的单元格添加到工作表中 sheet.addCell(labelA); sheet.addCell(labelB); sheet.addCell(labelC); sheet.addCell(labelD); sheet.addCell(labelE); sheet.addCell(labelF); sheet.addCell(labelG); sheet.addCell(labelH); sheet.addCell(labelI); sheet.addCell(labelJ); sheet.addCell(labelK); for (int ii = 0; ii < result.size(); ii++) { SubApplyInfos vo = (SubApplyInfos)result.get(ii); Label labelA1 = new Label(0,ii+1,vo.getApplyType()); Label labelB1 = new Label(1,ii+1,vo.getApplyTitle()); Label labelC1 = new Label(2,ii+1,vo.getApplyName()); Label labelD1 = new Label(3,ii+1,vo.getApplySex()); Label labelE1 = new Label(4,ii+1,vo.getApplyTel()); Label labelF1 = new Label(5,ii+1,vo.getApplyCar()); Label labelG1 = new Label(6,ii+1,vo.getApplyTime()); Label labelH1 = new Label(7,ii+1,vo.getApplyEmail()); Label labelI1 = new Label(8,ii+1,vo.getApplyCity()); SimpleDateFormat f1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Label labelJ1 = null; if(vo.getCreateTime() != null && !"".equals(vo.getCreateTime())){ labelJ1 = new Label(9,ii+1,f1.format(vo.getCreateTime())); }else{ labelJ1 = new Label(9,ii+1,""); } Label labelK1 = new Label(10,ii+1,vo.getApplyRemark()); sheet.addCell(labelA1); sheet.addCell(labelB1); sheet.addCell(labelC1); sheet.addCell(labelD1); sheet.addCell(labelE1); sheet.addCell(labelF1); sheet.addCell(labelG1); sheet.addCell(labelH1); sheet.addCell(labelI1); sheet.addCell(labelJ1); sheet.addCell(labelK1); } //写入数据并关闭文件 book.write(); book.close(); System.out.println("创建文件成功!"); OutputStream outputS = response.getOutputStream(); response.reset(); // response.setContentType("application/octet-stream; charset=GB2312"); response.setContentType("application/vnd.ms-excel; charset=GB2312"); response.setHeader("Content-Disposition", "attachment;filename=\"" + xlsFileName.substring(xlsFileName.lastIndexOf("/") + 1) + "\""); InputStream in = new FileInputStream(new File(xlsFileName)); if (in != null) { byte[] b = new byte[2048]; int len = 0; while ((len = in.read(b)) > 0) { outputS.write(b, 0, len); // outputS.flush(); } outputS.close(); in.close(); } }
代码中便是导出excel数据的具体操作方法,其原理便是:先将数据存储到临时excel文件中,然后再将该excel文件以文件下载的方式下载到客户端,从而实现了导出excel数据的功能。
注意,这段代码并不是通用,如果有需要实现该功能的朋友,请复制后自行修改,当然,有心的朋友可以将它修改成通用方法,相信也不是件困难的事情。
******************************************************************************************************************************************************************************************************************************************
上面的那种方式,需要先把数据放到一个excel文件中,然后再利用下载的方式将excel文件下载下来,下面是一种更直接的方式,可以将数据直接通过io流输出到excel文件中
public ActionForward exportExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ try { // 取得输出流 OutputStream os = response.getOutputStream(); // 清空输出流 response.reset(); //设定输出文件头 response.setHeader("Content-disposition", "attachment; filename=" + path); // 定义输出类型 response.setContentType("application/msexcel"); if (result.size() > 0) { // 调用生成excel文件 writeExcel2(os , result); } os.close(); } catch (Exception e) { log.error(e.getMessage(), e); } }
下面的代码,跟一开始的代码基本相同,没有多大差别
public void writeExcel2(InputStream os , List result){ WritableWorkbook book= Workbook.createWorkbook(os); //生成名为"第一页"的工作表,参数0表示这是第一页 WritableSheet sheet=book.createSheet("第一页",0); //设置字体为宋体,11号字,加粗,颜色为黑色 WritableFont font1=new WritableFont(WritableFont.createFont("宋体"),11,WritableFont.BOLD); font1.setColour(Colour.BLACK); WritableCellFormat format1=new WritableCellFormat(font1); format1.setAlignment(jxl.format.Alignment.CENTRE); format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); Label labelA = new Label(0,0,"申请类型",format1); Label labelB = new Label(1,0,"活动名称",format1); Label labelC = new Label(2,0,"姓名",format1); Label labelD = new Label(3,0,"性别",format1); Label labelE = new Label(4,0,"联系电话",format1); Label labelF = new Label(5,0,"意向车型",format1); Label labelG = new Label(6,0,"预约时间",format1); Label labelH = new Label(7,0,"邮箱地址",format1); Label labelI = new Label(8,0,"所在城市",format1); Label labelJ = new Label(9,0,"提交时间",format1); Label labelK = new Label(10,0,"备注",format1); //将定义好的单元格添加到工作表中 sheet.addCell(labelA); sheet.addCell(labelB); sheet.addCell(labelC); sheet.addCell(labelD); sheet.addCell(labelE); sheet.addCell(labelF); sheet.addCell(labelG); sheet.addCell(labelH); sheet.addCell(labelI); sheet.addCell(labelJ); sheet.addCell(labelK); for (int ii = 0; ii < result.size(); ii++) { SubApplyInfos vo = (SubApplyInfos)result.get(ii); Label labelA1 = new Label(0,ii+1,vo.getApplyType()); Label labelB1 = new Label(1,ii+1,vo.getApplyTitle()); Label labelC1 = new Label(2,ii+1,vo.getApplyName()); Label labelD1 = new Label(3,ii+1,vo.getApplySex()); Label labelE1 = new Label(4,ii+1,vo.getApplyTel()); Label labelF1 = new Label(5,ii+1,vo.getApplyCar()); Label labelG1 = new Label(6,ii+1,vo.getApplyTime()); Label labelH1 = new Label(7,ii+1,vo.getApplyEmail()); Label labelI1 = new Label(8,ii+1,vo.getApplyCity()); SimpleDateFormat f1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Label labelJ1 = null; if(vo.getCreateTime() != null && !"".equals(vo.getCreateTime())){ labelJ1 = new Label(9,ii+1,f1.format(vo.getCreateTime())); }else{ labelJ1 = new Label(9,ii+1,""); } Label labelK1 = new Label(10,ii+1,vo.getApplyRemark()); sheet.addCell(labelA1); sheet.addCell(labelB1); sheet.addCell(labelC1); sheet.addCell(labelD1); sheet.addCell(labelE1); sheet.addCell(labelF1); sheet.addCell(labelG1); sheet.addCell(labelH1); sheet.addCell(labelI1); sheet.addCell(labelJ1); sheet.addCell(labelK1); } //写入数据并关闭文件 book.write(); book.close(); System.out.println("创建文件成功!"); os.close(); }
相关推荐
java导出复杂Excel内容数据动态循环
总结起来,Java中处理和导出Excel数据涉及使用像Apache POI这样的库,创建工作簿,添加工作表,填充和格式化数据,然后将所有内容写入文件。了解并熟练掌握这些步骤是Java开发人员处理Excel数据的基础。在实际应用中...
java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错
java导出Excel 时候 相同行合并(可合并多列); 已测试通过;
该工具类实现java导出树形结构的方法,并未采用excel分组功能实现,而是根据树节点显示层级设置excel样式。针对easyUi,treeGrid开发的导出excel功能。方法简便实用、性强、通俗易懂。项目中亲测,no problem。
资源描述:一个使用java做的导出数据,并且可以在excel表生成折线图的工具类,使用简单操作方便。
总结来说,Java导出数据到Excel文件支持多级表头的过程涉及以下步骤: 1. 引入Apache POI库。 2. 创建`SXSSFWorkbook`和`SXSSFSheet`对象。 3. 设计和创建多级表头,一级表头在前,二级表头在其下。 4. 从数据库查询...
Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...
在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...
Java导出Excel是Java开发中常见的需求,尤其在数据分析、报表生成或数据交换场景中。本示例资源提供了一个RAR压缩包,包含了实现这一功能的源代码,主要讲解了两个核心部分:一是如何将数据写入Excel文件并保存在...
本资源提供的"java导出excel复合表头简单实例"是针对Java开发者的一个实用教程,特别是对于那些刚开始接触Java Excel导出功能的新手。这个实例将帮助你理解如何在Excel中创建并设置复杂的表头结构,使得数据的呈现...
本示例涉及的主题是“java导出excel复杂表头”,这意味着我们要处理的不是简单的单级表头,而是包含多级或者多层次结构的表头。在描述中提到这是一个可以直接运行的Java工程,但需要进一步改造为Web下载服务。 首先...
在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。Apache POI是一个流行的库,它允许开发者使用Java处理Microsoft Office格式的文档,包括Excel(.xlsx和.xls)。在这个场景...
在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...
在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...
Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...
总的来说,Java中导出复杂模板Excel的过程涉及模板设计、API使用、数据填充、格式调整等多个环节。熟练掌握Apache POI或其他相关库的用法,结合业务需求,能有效提高工作效率并提供高质量的Excel导出功能。在实际...
* 导出excel(利用反射机制) * String[] title = {"订单号","商品名称","商品价格","创建时间"}; * String[] field = {"orderNum","productName","productPrice","createTime"}; * ExportTools.export("sellJoin...
Java操作数据库并导出Excel是一项常见的任务,尤其在数据分析、报表生成或数据迁移等领域。这里主要涉及两个核心技术:Java数据库连接(JDBC)用于与数据库交互,以及Apache POI库用于处理Excel文件。 首先,Java...
除了平时简单的数据导出需求外,我们也经常会遇到一些有固定格式或者模板要求的数据导出,这个时候poi导出方式变得复杂且冗长,因此采用EasyExcel的方式进行导出,可以大大提高我们的开发效率和简洁我们的代码。...