POI.docx

上传人:b****1 文档编号:2441142 上传时间:2022-10-29 格式:DOCX 页数:20 大小:103.23KB
下载 相关 举报
POI.docx_第1页
第1页 / 共20页
POI.docx_第2页
第2页 / 共20页
POI.docx_第3页
第3页 / 共20页
POI.docx_第4页
第4页 / 共20页
POI.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

POI.docx

《POI.docx》由会员分享,可在线阅读,更多相关《POI.docx(20页珍藏版)》请在冰豆网上搜索。

POI.docx

POI

7.3 使用POI来处理Excel和Word文件格式

Microsoft的Office系列产品拥有大量的用户,Word、Excel也成为办公文件的首选。

在Java中,已经有很多对于Word、Excel的开源的解决方案,其中比较出色的是Apache的Jakata项目的POI子项目。

该项目的官方网站是http:

//jakarta.apache.org/poi/。

POI包括一系列的API,它们可以操作基于MicroSoftOLE2CompoundDocumentFormat的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。

POI是完全的JavaExcel和JavaWord解决方案。

POI子项目包括:

POIFS、HSSF、HDF、HPSF。

表7-2对它们进行了简要介绍。

表7-2 POI子项目介绍

子项目名

说明

POIFS(POIFileSystem)

POIFS是POI项目中最早的最基础的一个模块,是Java到OLE2CompoundDocumentFormat的接口,支持读写功能,所有的其他项目都依赖与该项目。

HSSF(HorribleSpreadsheetFormat)

HSSF是Java到MicrosoftExcel97(-2002)文件的接口,支持读写功能

HWPF(HorribleWordProcessingFormat)

HWPF是Java到MicrosoftWord97文件的接口,支持读写功能,但目前该模块还处于刚开始开发阶段,只能实现一些简单文件的操作,在后续版本中,会提供更强大的支持

HPSF(HorriblePropertySetFormat)

HPSF是Java到OLE2CompoundDocumentFormat文件的属性设置的接口,属性设置通常用来设置文档的属性(标题,作者,最后修改日期等),还可以设置用户定义的属性。

HPSF支持读写功能,当前发布版本中直支持读功能。

7.3.1 对Excel的处理类

下面通过HSSF提供的接口对Excel文件经行处理。

首先需要下载POI的包,可以到apache的官方网站下载,地址为:

http:

//apache.justdn.org/jakarta/poi/,本书采用的是poi-2.5.1-final-20040804.jar,读者可以下载当前的稳定版本。

把下载的包按照前面介绍的方式加入BuildPath,然后新建一个ch7.poi包,并创建一个ExcelReader类。

ExcelReader类可以读取一个XLS文件,然后将其内容逐行提取出来,写入文本文件。

其代码如下。

代码7.6

publicclassExcelReader{

  //创建文件输入流

  privateBufferedReaderreader=null;

  //文件类型

  privateStringfiletype;

  //文件二进制输入流

  privateInputStreamis=null;

  //当前的Sheet

  privateintcurrSheet;

  //当前位置

  privateintcurrPosition;

  //Sheet数量

  privateintnumOfSheets;

  //HSSFWorkbook

  HSSFWorkbookworkbook=null;

  //设置Cell之间以空格分割

  privatestaticStringEXCEL_LINE_DELIMITER="";

  //设置最大列数

  privatestaticintMAX_EXCEL_COLUMNS=64;

  //构造函数创建一个ExcelReader

  publicExcelReader(Stringinputfile)throwsIOException,Exception{

     //判断参数是否为空或没有意义

     if(inputfile==null||inputfile.trim().equals("")){

        thrownewIOException("noinputfilespecified");

     }

     //取得文件名的后缀名赋值给filetype

     this.filetype=inputfile.substring(inputfile.lastIndexOf(".")+1);

     //设置开始行为0

     currPosition=0;

     //设置当前位置为0

     currSheet=0;

     //创建文件输入流

     is=newFileInputStream(inputfile);

     //判断文件格式

     if(filetype.equalsIgnoreCase("txt")){

        //如果是txt则直接创建BufferedReader读取

        reader=newBufferedReader(newInputStreamReader(is));

     }

elseif(filetype.equalsIgnoreCase("xls")){

        //如果是Excel文件则创建HSSFWorkbook读取

        workbook=newHSSFWorkbook(is);

        //设置Sheet数

        numOfSheets=workbook.getNumberOfSheets();

     }

else{

        thrownewException("FileTypeNotSupported");

     }

  }

  //函数readLine读取文件的一行

  publicStringreadLine()throwsIOException{

     //如果是txt文件则通过reader读取

     if(filetype.equalsIgnoreCase("txt")){

        Stringstr=reader.readLine();

        //空行则略去,直接读取下一行

        while(str.trim().equals("")){

           str=reader.readLine();

        }

        returnstr;

     }

     //如果是XLS文件则通过POI提供的API读取文件

     elseif(filetype.equalsIgnoreCase("xls")){

        //根据currSheet值获得当前的sheet

        HSSFSheetsheet=workbook.getSheetAt(currSheet);

        //判断当前行是否到但前Sheet的结尾

        if(currPosition>sheet.getLastRowNum()){

           //当前行位置清零

           currPosition=0;

           //判断是否还有Sheet

           while(currSheet!

=numOfSheets-1){

              //得到下一张Sheet

              sheet=workbook.getSheetAt(currSheet+1);

              //当前行数是否已经到达文件末尾

              if(currPosition==sheet.getLastRowNum()){

                 //当前Sheet指向下一张Sheet

                 currSheet++;

                 continue;

              }else{

                 //获取当前行数

                 introw=currPosition;

                 currPosition++;

                 //读取当前行数据

                 returngetLine(sheet,row);

              }

           }

           returnnull;

        }

        //获取当前行数

        introw=currPosition;

        currPosition++;

        //读取当前行数据

        returngetLine(sheet,row);

     }

     returnnull;

  }

  //函数getLine返回Sheet的一行数据

  privateStringgetLine(HSSFSheetsheet,introw){

     //根据行数取得Sheet的一行

     HSSFRowrowline=sheet.getRow(row);

     //创建字符创缓冲区

     StringBufferbuffer=newStringBuffer();

     //获取当前行的列数

     intfilledColumns=rowline.getLastCellNum();

     HSSFCellcell=null;

     //循环遍历所有列

     for(inti=0;i

        //取得当前Cell

        cell=rowline.getCell((short)i);

        Stringcellvalue=null;

        if(cell!

=null){

           //判断当前Cell的Type

           switch(cell.getCellType()){

           //如果当前Cell的Type为NUMERIC

           caseHSSFCell.CELL_TYPE_NUMERIC:

{

              //判断当前的cell是否为Date

              if(HSSFDateUtil.isCellDateFormatted(cell)){

                 //如果是Date类型则,取得该Cell的Date值

                 Datedate=cell.getD

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1