java jxl poi_java操作excel——jxl和poi比较
最近需要需要项目开发需要从excel导入数据到数据库,于是就开始找开源的java操作excel的框架。貌似比较流行的有jxl和poi两个框架。网上有些对这两个框架比较的文章,但都不是最近的。根据项目需要,下面对jxl和poi读写excel的性能做个比较。
jxl:jxl-2.6.12.jar
poi:poi-3.8.jar
JXLTestMain.java
package com.nexusy.excel.jxl;
import java.io.File;
import java.io.IOException;
import java.util.List;
import jxl.Cell;
import jxl.CellType;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import com.nexusy.excel.Record;
import com.nexusy.excel.TestUtil;
public class JXLTestMain {
private final static String filename = "jxltest.xls";
private final static String[] headers = {"ID", "标题", "价格", "数量", "描述"};
private final static int rows = 65535;
public static void main(String[] args) {
writeExcel();
readExcel();
}
public static void writeExcel() {
try {
Thread.sleep(1000*20);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
WritableWorkbook workbook = Workbook.createWorkbook(new File(filename));
WritableSheet sheet = workbook.createSheet("jxl测试", 0);
for (int i = 0; i < headers.length; i++) {
Label label = new Label(i, 0 , headers[i]);
sheet.addCell(label);
}
List records = TestUtil.getRecords(rows);
long s1 = System.nanoTime();
int c = 1;
for (Record record : records) {
sheet.addCell(new Number(0, c, record.getId()));
sheet.addCell(new Label(1, c, record.getTitle()));
sheet.addCell(new Number(2, c, record.getPrice()));
sheet.addCell(new Number(3, c, record.getQuantity()));
sheet.addCell(new Label(4, c, record.getDesc()));
c++;
}
workbook.write();
workbook.close();
long s2 = System.nanoTime();
System.out.println("jxl write " + rows + " rows to excel:" + (s2-s1));
} catch (IOException e) {
e.printStackTrace();
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
public static void readExcel() {
try {
Thread.sleep(1000*20);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
long s1 = System.nanoTime();
Workbook workbook = Workbook.getWorkbook(new File(filename));
Sheet sheet = workbook.getSheet(0);
System.out.println(sheet.getName());
for(int i = 0; i < sheet.getRows(); i++){
Cell[] cells = sheet.getRow(i);
for (Cell cell : cells) {
if(cell.getType() == CellType.NUMBER){
System.out.print(((NumberCell)cell).getValue()+" ");
} else if(cell.getType() == CellType.LABEL){
System.out.print(cell.getContents()+" ");
}
}
System.out.println();
}
workbook.close();
long s2 = System.nanoTime();
System.out.println("jxl read " + rows + " rows from excel:" + (s2-s1));
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
POITestMain.java
package com.nexusy.excel.poi;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import com.nexusy.excel.Record;
import com.nexusy.excel.TestUtil;
public class POITestMain {
private final static String filename = "poitest.xls";
private final static String[] headers = {"ID", "标题", "价格", "数量", "描述"};
private final static int rows = 65535;
public static void main(String[] args) {
writeExcel();
readExcel();
}
public static void writeExcel() {
try {
Thread.sleep(1000*20);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
Workbook wb = new HSSFWorkbook();
try {
FileOutputStream fileOut = new FileOutputStream(filename);
Sheet sheet = wb.createSheet("poi测试");
Row row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
row.createCell(i).setCellValue(headers[i]);
}
List records = TestUtil.getRecords(rows);
long s1 = System.nanoTime();
int r = 1;
for (Record record : records) {
row = sheet.createRow(r);
row.createCell(0).setCellValue(record.getId());
row.createCell(1).setCellValue(record.getTitle());
row.createCell(2).setCellValue(record.getPrice());
row.createCell(3).setCellValue(record.getQuantity());
row.createCell(4).setCellValue(record.getDesc());
r++;
}
wb.write(fileOut);
fileOut.close();
long s2 = System.nanoTime();
System.out.println("poi write " + rows + " rows to excel:" + (s2-s1));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void readExcel() {
try {
Thread.sleep(1000*20);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
long s1 = System.nanoTime();
InputStream inp = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(inp);
Sheet sheet = wb.getSheetAt(0);
System.out.println(sheet.getSheetName());
for(Row row : sheet){
for(Cell cell : row){
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + " ");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + " ");
break;
default:
break;
}
}
System.out.println();
}
inp.close();
long s2 = System.nanoTime();
System.out.println("poi read " + rows + " rows from excel:" + (s2-s1));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试结果如下:
jxl写入65535行数据
jxl读取65535行数据:
poi写入65535行数据:
poi读取65535行数据:
大小: 41.4 KB
大小: 38.6 KB
大小: 40.1 KB
大小: 40.2 KB
描述: 项目代码
下载次数: 469
分享到:
2012-06-06 20:48
浏览 19914
评论
11 楼
zi_wu_xian
2016-09-02
不管用POI还是JXL都是第三的操作excel的组件,都有破坏excel文件格式的可能,还是用PageOffice动态生成excel文件,操作excel文件中的数据比较好,因为是调用的Office自己的VBA接口,所以不会有格式问题。
10 楼
lanhuidong
2014-03-29
weimeili8211 写道
我用poi,jxl都 会内存溢出
9 楼
weimeili8211
2014-03-28
我用poi,jxl都 会内存溢出
8 楼
tony_jingzhou
2013-10-16
tangzililiang 写道
这样比较太片面了哦,如果尝试用POI的事件驱动模式读取我相信内存占用会大大降低,JXL将文件一次性加载到内存,读取大文件是短板(原理可参照xml文件读取方式dom和sax的区别)
采用事件模型,poi读取10M以上的Excel 还是会内存溢出?
7 楼
tangzililiang
2013-07-01
这样比较太片面了哦,如果尝试用POI的事件驱动模式读取我相信内存占用会大大降低,JXL将文件一次性加载到内存,读取大文件是短板(原理可参照xml文件读取方式dom和sax的区别)
6 楼
lanhuidong
2013-05-09
bamboo_prince 写道
好像效率差不多嘛,你推荐用哪种啊?
我自己选择了poi
5 楼
bamboo_prince
2013-05-08
好像效率差不多嘛,你推荐用哪种啊?
4 楼
lanhuidong
2013-05-02
winerlinwen1 写道
我怎么读到2760行就爆了!我用poi操作的!
什么爆了?
3 楼
winerlinwen1
2013-04-28
我怎么读到2760行就爆了!我用poi操作的!
2 楼
lanhuidong
2012-09-10
zhangjian420 写道
这个是什么工具监视的!
jvisualvm,jdk自带的工具,在bin目录中。兄弟可有更好的监视工具推荐?
1 楼
zhangjian420
2012-07-24
这个是什么工具监视的!
java jxl poi_java操作excel——jxl和poi比较相关推荐
- 使用JXL组件操作Excel和导出文件
使用JXL组件操作Excel和导出文件 原文链接:http://tianweili.github.io/blog/2015/01/29/use-jxl-produce-excel/ 前言:这段时间参与 ...
- java excel row遍历空_用Java巧妙的解析Excel中的POI
原标题:用Java巧妙的解析Excel中的POI 相信各位小伙伴们,在做Java开发的时候,有时候会需要你用Java语言去解析Excel中的POI,这个时候肯定很多小伙伴们会懵逼,那么究竟是怎么实现的 ...
- java操作Excel有两种方式 方式1:jxl操作Excel jxl的API
java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...
- Java利用jxl.jar操作Excel文件的方法——把两列相同的数据扫描输出到新的Excel文件中...
为什么80%的码农都做不了架构师?>>> 最近公司在做数据库方面的改造,其中有两个核心库,可以把它们分别命名成A侧库和B侧库,改造的目的是把AB的库整合成一个库,其中表名相同的 ...
- java jxl包_java利用JXL包操作Excel表
源码 package test; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; im ...
- Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- Java使用easyExcel操作Excel就是这么简单!
文章目录 前言 第一步:导入依赖 第二步:创建一个EasyExcelReadListener类,继承easyExcel中的AnalysisEventListener类,实现里面的invoke()和do ...
- java mergecells_java怎么操作excel合并单元格
展开全部 利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下载. ...
- java聚合excel_java操作excel
1.工具准备 (1)下载poi.jar (2)eclipse 2.Excel准备 3.代码示例 import java.io.FileInputStream; import java.io.FileN ...
最新文章
- 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法
- [Javascipt] Immediately-Invoker 2
- JUC系列(五)| Synchonized关键字进一步理解
- 把Liststring集合,编程string,并以“,”号分割
- 常用工具说明--mongodb、mysql解压版、IDEA配置maven
- linux-facl权限控制-移除-复制
- Servlet梳理一
- python selenium模拟键盘_Python+Selenium自动化篇-7-模拟键盘操作
- MVC HtmlHelper扩展——实现分页功能
- Matlab曲线标记间距自定义
- 重装XP后无法启动LINUX的解决方案
- android游戏菜鸟教程,菜鸟教程app
- unity安装后 启动失败_Unity3D插件安装常见问题说明
- Halcon教程十二:回形针识别进阶
- 国产版谷歌地球到底有多牛?看入行20年“老人”怎么回答
- Unity机器学习3 ML-Agents模仿学习(Imitation Learning)
- WePhone手机软件已下架 疑因资金问题导致无法使用
- DataFrame上下或左右合并 pd.concat
- 少儿编程是选择线上与线下?
- php实现维吉尼亚算法,python实现维吉尼亚算法
热门文章
- 笔记本风扇噪音大的处理办法
- FZU 1851 组合数
- 如何彻底关闭win10实时防护以及解决无法找到gpedit.msc的问题
- 软件测试工程师一天的工作内容是什么呢?(含一天的详细步骤)
- jsp和MySQL实现会员卡功能_健身房会员卡管理系统的设计与实现(JSP,MySQL)(含录像)...
- Java | interface 和 implements 关键字【接口,看这篇就够了】
- python+moviepy音视频处理(三):视频特效方法-vfx模块
- Java Poi 读取 Excel2007 自定义属性
- 【ExcelPlanet】电商母婴用品购买情况分析
- 【EasyMouse】把你的安卓手机变成无线鼠标