导出Excel的两种方法:

一,POI

导入poi包

poi-3.11-beta3-20141111.jar

 /**
*
*/
package com.car.ots.mpckp.utils; import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; /**
* @author cora.guo
*
*/
public class ExportUtils { public static void createExcel(HttpServletRequest req,
HttpServletResponse resp, List<Object> datas, String sheetName,
List<String> headers, List<String> colunmValueNames)
throws Exception {
OutputStream out = null;
try {
// 第一步,创建一个webbook,对应一个Excel文件
resp.setContentType("application/vnd.ms-excel");
resp.setCharacterEncoding("UTF-8");
if (req.getHeader("User-Agent").toLowerCase().indexOf("msie") != -) {
resp.setHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(sheetName, "utf-8") + ".xls");
} else {
resp.setHeader("Content-Disposition", "attachment;filename="
+ new String(sheetName.getBytes("utf-8"), "ISO-8859-1")
+ ".xls");
}
resp.setHeader("Cache-Control", "max-age=0");
HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow();
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
// 创建居中样式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFCell cell = null;
if (headers != null && headers.size() > ) {
for (int i = ; i < headers.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(headers.get(i));
cell.setCellStyle(style);
}
}
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
if (datas != null && datas.size() != ) {
for (int r = ; r < datas.size(); r++) {
Object obj = datas.get(r);
row = sheet.createRow(r+);
if (colunmValueNames != null
&& colunmValueNames.size() != ) {
for (int j = ; j < colunmValueNames.size(); j++) {
String name = colunmValueNames.get(j);
String value = BeanUtils.getProperty(obj, name);
// 创建单元格,设置值
cell = row.createCell(j);
cell.setCellStyle(style);
cell.setCellValue(value);
}
}
}
}
out = resp.getOutputStream();
wb.write(out);
} catch (Exception e) {
// TODO Auto-generated catch block
throw new Exception(e);
} finally {
out.close();
}
}
}

二,JXl

导入包

 package com.car.ots.uis.utils;

 import java.net.URLEncoder;
import java.util.List; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook; import org.apache.commons.beanutils.BeanUtils; public class ExportUtil {
public static void export(HttpServletRequest req, HttpServletResponse resp, List<Object> datas,
String sheetName, List<String> headers, List<String> colunmValueNames) throws Exception {
// 写入excel
WritableWorkbook wb = null;
WritableSheet ws = null;
Label label = null; try {
resp.setContentType("application/vnd.ms-excel");
resp.setCharacterEncoding("UTF-8");
if (req.getHeader("User-Agent").toLowerCase().indexOf("msie") != -) {
resp.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(sheetName, "utf-8") + ".xls");
} else {
resp.setHeader("Content-Disposition",
"attachment;filename=" + new String(sheetName.getBytes("utf-8"), "ISO-8859-1") + ".xls");
}
resp.setHeader("Cache-Control", "max-age=0");
wb = Workbook.createWorkbook(resp.getOutputStream()); ws = wb.createSheet(sheetName, ); WritableFont bold_font = new WritableFont(WritableFont.ARIAL, , WritableFont.BOLD);
WritableCellFormat f = new WritableCellFormat(bold_font);
f.setVerticalAlignment(VerticalAlignment.CENTRE);
f.setAlignment(Alignment.CENTRE);
if(headers!=null&headers.size()!=){
for (int i = ; i < headers.size(); i++) {
ws.setColumnView(i, );
label = new Label(i, , headers.get(i), f);
ws.addCell(label);
}
} WritableFont nobold_font = new WritableFont(WritableFont.ARIAL, , WritableFont.NO_BOLD);
f = new WritableCellFormat(nobold_font);
f.setVerticalAlignment(VerticalAlignment.CENTRE);
f.setAlignment(Alignment.CENTRE);
if(datas!=null&&datas.size()!=){
for (int r = ; r < datas.size(); r++) {
Object obj = datas.get(r);
if (colunmValueNames!=null&&colunmValueNames.size()!=) {
for (int j = ; j < colunmValueNames.size(); j++) {
String name = colunmValueNames.get(j);
String value = BeanUtils.getProperty(obj, name);
label = new Label(j, r + , value, f);
ws.addCell(label);
}
}
}
}
wb.write();
} catch (Exception e) {
throw new Exception(e);
} finally {
wb.write();
wb.close(); }
} }

两者区别:

POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API
JavaExcel俗称jxl是一开放源码项目,通过它开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

JVM虚拟机内存消耗的情况:

数据量3000条数据,每条60列.JVM虚拟机内存大小64M.
使用POI:运行到2800条左右就报内存溢出.
使用JXL:3000条全部出来,并且内存还有21M的空间.
可想而知,在对内存的消耗方面差距还是挺大的.
也许是由于JXL在对资源回收利用方面做的不错.

效率方面:

也是基于大数据量而言的,数据量小的话基本上差别不大,也不难被发觉.但是大的数据量,POI消耗的JVM内存远比JXL消耗的多.但相比提供的功能的话,JXL又相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL

导出Excel通用工具类的更多相关文章

  1. 在java poi导入Excel通用工具类示例详解

    转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36   作者:daochuwenziyao   我要评论   这篇文章主要给大家介绍了关于在j ...

  2. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  3. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

  4. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  5. 导出Excel帮助类

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  6. javaEE开发之导出excel工具类

    web开发中,一个系统的普通需求也包含导出excel,一般採用POI做统计报表导出excel. 导出excel工具类: import java.io.FileOutputStream; import ...

  7. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  8. NPOI MVC 模型导出Excel通用类

    通用类: public enum DataTypeEnum { Int = , Float = , Double = , String = , DateTime = , Date = } public ...

  9. NPOI导出Excel帮助类

    工具类 using System; using System.Collections.Generic; using System.Data; using System.IO; using System ...

随机推荐

  1. CentOS 7.0系统安装配置步骤详解

    CentOS 7.0系统是一个很新的版本哦,很多朋友都不知道CentOS 7.0系统是怎么去安装配置的哦,因为centos7.0与以前版本是有很大的改进哦. 说明: 截止目前CentOS 7.x最新版 ...

  2. [开源].NET高性能框架Chloe.ORM-完美支持SQLite

    扯淡 这是一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询. ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. Javascript的this用法及jQuery中$this和$(this)的区别

    this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this.x = 1; } 1.this就是全 ...

  5. 【WPF】GridLengthAnimation

    参考 : http://zhidao.baidu.com public class GridLengthAnimation : AnimationTimeline { public static re ...

  6. list,tuple,dict,set常用方法

    Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...

  7. mysql判断一个字符串是否包含某子串

    使用locate(substr,str)函数,如果包含,返回>0的数,否则返回0 例子:判断site表中的url是否包含'http://'子串,如果不包含则拼接在url字符串开头 update ...

  8. MySQL种种

    mysql中You can't specify target table for update in FROM clause错误--http://blog.csdn.net/priestmoon/ar ...

  9. Linux创建WiFi热点

    手机流量用完,需要开WiFi,由于是LinuxMint,感觉配置还算容易,找到一个不错的教程,收藏一下,以备后用.除了修改配置文件那步在我的电脑不需要外其他基本正确,而且Mint本来就衍生自Ubunt ...

  10. Linux--Tail命令

    inux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案 ...