2009年9月19日星期六

打开一个Workbook

这次我们用POI打开一个已经存在的Workbook。因为没有现成的方法,所以只能再次利用HSSFWorkbook构造方法
HSSFWorkbook
public HSSFWorkbook(POIFSFileSystem fs) throws java.io.IOException
--
这个构建器虽然没什么说明,但可以看出它的参数是一个「POIFSFileSystem」这样的一个类对象。那我们再来看看「POIFSFileSystem」类定义。

POIFSFileSystem类定义

「POIFSFileSystem」类对象可以把Excel文件作为数据流来进行传入传出。
  • java.lang.Object
  • org.apache.poi.poifs.filesystem.POIFSFileSystem
  • public class POIFSFileSystem extends java.lang.Object implements POIFSViewable
「POIFSFileSystem」类有两个构建器
构建器
POIFSFileSystem()
Constructor, intended for writing
POIFSFileSystem(java.io.InputStream stream)
Create a POIFSFileSystem from an InputStream
读取文件时使用第二个构建器。
POIFSFileSystem
public POIFSFileSystem(java.io.InputStream stream) throws java.io.IOException
Create a POIFSFileSystem from an InputStream 
 
Parameters:
  stream - the InputStream from which to read the data 
Throws: 
  java.io.IOException - on errors reading, or on invalid data
参数设定为读入Excel文件的流对象「InputStream」。使用方法如下。
FileInputStream in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);

通过POIFSFileSystem读取Excel文件

下面就实际做一下如何读取Excel文件。
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 
public class POISample{
  public static void main(String[] args){
    FileInputStream in = null;
    HSSFWorkbook workbook = null;
 
    try{
      in = new FileInputStream("sample1.xls");
      POIFSFileSystem fs = new POIFSFileSystem(in);
      workbook = new HSSFWorkbook(fs);
    }catch(IOException e){
      System.out.println(e.toString());
    }finally{
      try{
        in.close();
      }catch (IOException e){
        System.out.println(e.toString());
      }
    }
 
    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample2.xls");
      workbook.write(out);
    }catch(IOException e){
      System.out.println(e.toString());
    }finally{
      try {
        out.close();
      }catch(IOException e){
        System.out.println(e.toString());
      }
    }
  }
}
这个示例程序的作用是读取「sample1.xls」文件后再把它作为「sample2.xls」保存。
「sample1.xls」文件如下。






















实行之后,会生成一模一样的文件「sample2.xls」。
打开如下。


没有评论:

发表评论