从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());

 

评论
laodizhuq 2008-06-12
POI导出Excel数据量稍微大一点就容易OOM的,你把虚拟内存调大,用处不是很大的,能够控制在1000条以内,而且表格需要特殊的格式的,可以考虑用EXCEL。
否则还是用csv格式好一点。
写CSV格式,其实就是写普通文本,只是以“,”分隔,数据量再大,都不是问题
laiseeme 2008-06-11
有时间我也得研究研究了 最近要开始接触cs的项目了
hallywang 2008-06-11
Joo 写道
CSV有什么好处?


逗号分割的啊,可以用文本编辑器打开,比如ue。导入到数据库也比较方便。
Joo 2008-06-11
CSV有什么好处?
hallywang 2008-06-11
Joo 写道
hallywang 写道
更喜欢poi,不过数据量大了就不大好搞了。

我现在做法是超过10000条记录就干脆写csv文件了。。。。


10000 poi就处理不来了?什么问题? 是初始化HSSFWorkbook加载JVM内存溢出么? 我把启动参数内存设大一点60000行的数据都没有问题 瞬间搞定
是不是读入了以后还要做什么复杂的处理?



是内存溢出,具体到多少溢出没试过,遇到过的是3W多条溢出了。修改启动参数是可以处理更多。
不过考虑到那么多数据导成excel没什么意义,用excle打开都是问题,更不要说阅读了。。
所以干脆超过1w就导成csv了。
Joo 2008-06-07
hallywang 写道
更喜欢poi,不过数据量大了就不大好搞了。

我现在做法是超过10000条记录就干脆写csv文件了。。。。


10000 poi就处理不来了?什么问题? 是初始化HSSFWorkbook加载JVM内存溢出么? 我把启动参数内存设大一点60000行的数据都没有问题 瞬间搞定
是不是读入了以后还要做什么复杂的处理?
gnomewarlock 2008-06-06
hallywang 写道
更喜欢poi,不过数据量大了就不大好搞了。

我现在做法是超过10000条记录就干脆写csv文件了。。。。

我也这么做,超过千条就写CSV了~
hallywang 2008-06-06
更喜欢poi,不过数据量大了就不大好搞了。

我现在做法是超过10000条记录就干脆写csv文件了。。。。
Joo 2008-06-06
POI现在提供更底层一级的api 尤其在读文件的时候相当迅猛
luckaway 2008-06-06
跟POI差不多!
spyker 2008-06-05
import jxl.
是jxl来着
http://www.javaeye.com/topic/63001
Joo 2008-06-04
用的什么API 貌似不是POI
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

kevin_gzhz
搜索本博客
最近加入圈子
存档
最新评论