在Java中操作Excel之读文件
从Excel文件读取数据表 Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据 表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:
import java.io.*;
import jxl.*;
class ReadExcel{
public void readExcel(String sourcefile){
try{
//构建Workbook对象, 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建
Workbook InputStream is = new FileInputStream(sourcefile);
Workbook rwb = Workbook.getWorkbook(is);
}catch (Exception e){
e.printStackTrace();
}
//获取第一张Sheet表
Sheet rs = rwb.getSheet(0);
//一旦得到了Sheet,就可以访问Excel Cell(术语:单元格)
//获取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//获取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
//获取第二行,第二列的值
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
//操作完成时,关闭对象,释放占用的内存空间
rwb.close();
}
}
如果仅仅是取得Cell的值,可以通过getContents()方法,它将任何类型的Cell值都作为一个字符串返回。如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。代码片段如下:
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
if (c00.getType() == CellType.LABEL) {
LabelCell labelc00 = (LabelCell) c00;
strc00 = labelc00.getString();
}
if (c10.getType() == CellType.NUMBER) {
NmberCell numc10 = (NumberCell) c10;
strc10 = numc10.getValue();
}
if (c11.getType() == CellType.DATE) {
DateCell datec11 = (DateCell) c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : "
+ c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : "
+ c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : "
+ c11.getType());
评论
否则还是用csv格式好一点。
写CSV格式,其实就是写普通文本,只是以“,”分隔,数据量再大,都不是问题
逗号分割的啊,可以用文本编辑器打开,比如ue。导入到数据库也比较方便。
我现在做法是超过10000条记录就干脆写csv文件了。。。。
10000 poi就处理不来了?什么问题? 是初始化HSSFWorkbook加载JVM内存溢出么? 我把启动参数内存设大一点60000行的数据都没有问题 瞬间搞定
是不是读入了以后还要做什么复杂的处理?
是内存溢出,具体到多少溢出没试过,遇到过的是3W多条溢出了。修改启动参数是可以处理更多。
不过考虑到那么多数据导成excel没什么意义,用excle打开都是问题,更不要说阅读了。。
所以干脆超过1w就导成csv了。
我现在做法是超过10000条记录就干脆写csv文件了。。。。
10000 poi就处理不来了?什么问题? 是初始化HSSFWorkbook加载JVM内存溢出么? 我把启动参数内存设大一点60000行的数据都没有问题 瞬间搞定
是不是读入了以后还要做什么复杂的处理?
我现在做法是超过10000条记录就干脆写csv文件了。。。。
我也这么做,超过千条就写CSV了~
我现在做法是超过10000条记录就干脆写csv文件了。。。。
是jxl来着
http://www.javaeye.com/topic/63001
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 3977 次
- 性别:


- 详细资料
搜索本博客
最新评论
-
请教如何在freemarker中写 ...
推荐去问答频道提问
-- by JavaEye管理员 -
如何不用struts2的ajax框 ...
已经解决了,方法如下: function sendURL(userAccount ...
-- by kevin_gzhz -
请教Ruby中构造函数的问题
ruby不支持方法重载,因为ruby是动态类型语言,所以方法重载可以通过缺省参数 ...
-- by ye_jian_hui -
请教Ruby中构造函数的问题
还请@simohayha说明一下我上面那种写法失败的原因,还有代码instanc ...
-- by kevin_gzhz -
请教Ruby中构造函数的问题
你可以这样来写: class Abc attr_accessor :na ...
-- by simohayha






评论排行榜