发布网友 发布时间:2022-04-20 10:02
共4个回答
热心网友 时间:2023-08-04 04:24
这有两个方法,一个是POI,一个是JXL,通过楼上几位大侠的答案,我想你也了解了。在这就不说这一块了。我想给你说说这两者的比较和应用领域,楼主根据自己的需求确定使用某种技术。当数据量较大时(超过1万行),无论是时间消耗还是内存消耗,JXL均优于POI。
根据最终的测试结果,估计得出来不同的结论可能是采用的版本不同所致(还没研究JXL及POI的源码)。
具体情况请参见此文及相关下方我测试的Java源码及测试数据:
http://blog.csdn.net/haotangyu/archive/2009/12/03/4931670.aspx
我的测试环境:
jxl-2.4.2.jar
poi-3.1.jar
MyEclipse8.0 Run JVM设置:-Xms256m -Xmx512m
机器:4G、P7
分别准备了1千、1万、5万行的Excel,各为58列。(此测试代码稍加整理即可做为Excel导入工具类)
加载时间(ms)
总耗时(ms)
总消耗内存量(M)
1千条:746K
POI
572
609
8
JXL
296
422
12
JXL-Close
172
329
-2
1万条:12.8M
POI
4847
5066
91
JXL
634
2236
135
1万条:7.3M
POI
1266
2019
73
JXL
488
1159
70
JXL-Close
343
1107
2
5万条:36.8M
POI
7556
8633
208
JXL
2319
5581
96
JXL-Close
2543
6210
-201
可以看出
1.加载速度及总耗时,POI3.2始终劣于JXL2.4
2.后续解析速度上(没列,是总耗时减去加载时间),POI3.2总体上优于JXL2.4
3.1万条数据以上时,消耗内存量方面,POI3.2劣于JXL2.4
两点说明:
1.这里面有个有趣的细节:那个1万条12.8M的文件是我根据那个5万条的Excel选中后4万行按Del生成的,后来发现那4万行并没有真正删除,还有,是空行而已。后选中后右键删除(试了几次后才成功),总算真正清除了,体积也缩小了很多,从实验看来,空白格不但对Excel体积有影响,对程序读取影响也很大。程序中POI方式读取中设计了对空白行的判断,但加载还是多花了时间;
2.标识为JXL的数据,为代码中未加入WorkBook.close()方法时试验(注意代码中注释掉的wb.close()一行);而JXL-Close则添加了close方法调用,可以看出时间消耗未明显增加,但内存消耗却大大降低(负的)。刚看了反编代码,果然,close方法中调用了System.gc()。
根据 haotangyu的代码进行的测试结果,还是上面那些文件,同样可以得出以上第1、2条结论:
加载时间(ms)
总耗时(ms)
1千条:746K
POI
499
515
JXL
203
359
1万条:7.3M
POI
1716
1731
JXL
390
1108
5万条:36.8M
POI
7878
7925
JXL
2309
5711
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/amosryan/archive/2010/03/24/5412340.aspx
热心网友 时间:2023-08-04 04:25
你可以用jxl包,结合JTable来实现对excel的增删改操作,然而对于含有图形、图像的excel这样是不行的。
JTable:
-----------------
-----------------
-----------------
更新 增加一行 删除该行
热心网友 时间:2023-08-04 04:25
上百度搜索 POI
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
可以上 Apache 官网下这个jar包,
热心网友 时间:2023-08-04 04:26
POI
poi.apache.org/
1.POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:\test.xls"));
2.HSSFWorkbook wb = new HSSFWorkbook(fs);
3. } catch (IOException e) {
4. e.printStackTrace();
5. }
6. HSSFSheet sheet = wb.getSheetAt(0);
7. HSSFRow row = sheet.getRow(0);
8. HSSFCell cell = row.getCell((short) 0);
9. String msg = cell.getStringCellValue();