论坛首页 Java企业应用论坛

在Java中操作Excel之读文件

浏览 7483 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-11  
OO

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

 

   发表时间:2008-06-04  
用的什么API 貌似不是POI
0 请登录后投票
   发表时间:2008-06-06  
跟POI差不多!
0 请登录后投票
   发表时间:2008-06-06  
POI现在提供更底层一级的api 尤其在读文件的时候相当迅猛
0 请登录后投票
   发表时间:2008-06-06  
更喜欢poi,不过数据量大了就不大好搞了。

我现在做法是超过10000条记录就干脆写csv文件了。。。。
0 请登录后投票
   发表时间:2008-06-06  
hallywang 写道
更喜欢poi,不过数据量大了就不大好搞了。

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

我也这么做,超过千条就写CSV了~
0 请登录后投票
   发表时间:2008-06-07  
hallywang 写道
更喜欢poi,不过数据量大了就不大好搞了。

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


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

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


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



是内存溢出,具体到多少溢出没试过,遇到过的是3W多条溢出了。修改启动参数是可以处理更多。
不过考虑到那么多数据导成excel没什么意义,用excle打开都是问题,更不要说阅读了。。
所以干脆超过1w就导成csv了。
0 请登录后投票
   发表时间:2008-06-11  
CSV有什么好处?
0 请登录后投票
   发表时间:2008-06-11  
Joo 写道
CSV有什么好处?


逗号分割的啊,可以用文本编辑器打开,比如ue。导入到数据库也比较方便。



0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics