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

java导出excel格式数据

    博客分类:
  • java
阅读更多

 在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内容数据动态循环

    java Excel导出 Excel数据处理

    总结起来,Java中处理和导出Excel数据涉及使用像Apache POI这样的库,创建工作簿,添加工作表,填充和格式化数据,然后将所有内容写入文件。了解并熟练掌握这些步骤是Java开发人员处理Excel数据的基础。在实际应用中...

    java导出excel超过65536条记录出错

    java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错

    java导出Excel 时候 相同行合并

    java导出Excel 时候 相同行合并(可合并多列); 已测试通过;

    java导出excel树结构工具类

    该工具类实现java导出树形结构的方法,并未采用excel分组功能实现,而是根据树节点显示层级设置excel样式。针对easyUi,treeGrid开发的导出excel功能。方法简便实用、性强、通俗易懂。项目中亲测,no problem。

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    java导出excel并生成折线图.java

    资源描述:一个使用java做的导出数据,并且可以在excel表生成折线图的工具类,使用简单操作方便。

    Java导出数据到Excel文件中(支持多表头)

    总结来说,Java导出数据到Excel文件支持多级表头的过程涉及以下步骤: 1. 引入Apache POI库。 2. 创建`SXSSFWorkbook`和`SXSSFSheet`对象。 3. 设计和创建多级表头,一级表头在前,二级表头在其下。 4. 从数据库查询...

    java导出excel POI jar包

    Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...

    java导出excel复杂表头

    本示例涉及的主题是“java导出excel复杂表头”,这意味着我们要处理的不是简单的单级表头,而是包含多级或者多层次结构的表头。在描述中提到这是一个可以直接运行的Java工程,但需要进一步改造为Web下载服务。 首先...

    java导出到excel的工具类

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...

    java导出excel(写入到excel后再下载)示例

    Java导出Excel是Java开发中常见的需求,尤其在数据分析、报表生成或数据交换场景中。本示例资源提供了一个RAR压缩包,包含了实现这一功能的源代码,主要讲解了两个核心部分:一是如何将数据写入Excel文件并保存在...

    java导出excel复合表头简单实例

    本资源提供的"java导出excel复合表头简单实例"是针对Java开发者的一个实用教程,特别是对于那些刚开始接触Java Excel导出功能的新手。这个实例将帮助你理解如何在Excel中创建并设置复杂的表头结构,使得数据的呈现...

    java 导出Excel poi读写数据

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。Apache POI是一个流行的库,它允许开发者使用Java处理Microsoft Office格式的文档,包括Excel(.xlsx和.xls)。在这个场景...

    java解决大批量数据导出Excel产生内存溢出的方案

    在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...

    java poi导出图片到excel示例代码

    Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...

    java复杂模板excel导出例子

    总的来说,Java中导出复杂模板Excel的过程涉及模板设计、API使用、数据填充、格式调整等多个环节。熟练掌握Apache POI或其他相关库的用法,结合业务需求,能有效提高工作效率并提供高质量的Excel导出功能。在实际...

    Java 导出excel工具类(封装,带导出格式和类型转换)

    * 导出excel(利用反射机制) * String[] title = {"订单号","商品名称","商品价格","创建时间"}; * String[] field = {"orderNum","productName","productPrice","createTime"}; * ExportTools.export("sellJoin...

    java操作数据库 导出excel

    Java操作数据库并导出Excel是一项常见的任务,尤其在数据分析、报表生成或数据迁移等领域。这里主要涉及两个核心技术:Java数据库连接(JDBC)用于与数据库交互,以及Apache POI库用于处理Excel文件。 首先,Java...

    java基于模板导出Excel表格

    除了平时简单的数据导出需求外,我们也经常会遇到一些有固定格式或者模板要求的数据导出,这个时候poi导出方式变得复杂且冗长,因此采用EasyExcel的方式进行导出,可以大大提高我们的开发效率和简洁我们的代码。...

Global site tag (gtag.js) - Google Analytics