POI中文帮助文档.doc

上传人:数据九部 文档编号:10300222 上传时间:2021-05-06 格式:DOC 页数:20 大小:234KB
返回 下载 相关 举报
POI中文帮助文档.doc_第1页
第1页 / 共20页
POI中文帮助文档.doc_第2页
第2页 / 共20页
POI中文帮助文档.doc_第3页
第3页 / 共20页
POI中文帮助文档.doc_第4页
第4页 / 共20页
POI中文帮助文档.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《POI中文帮助文档.doc》由会员分享,可在线阅读,更多相关《POI中文帮助文档.doc(20页珍藏版)》请在三一文库上搜索。

1、7.3 使用POI来处理Excel和Word文件格式Microsoft的Office系列产品拥有大量的用户,Word、Excel也成为办公文件的首选。在Java中,已经有很多对于Word、Excel的开源的解决方案,其中比较出色的是Apache的Jakata项目的POI子项目。该项目的官方网站是http:/jakarta.apache.org/poi/。POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。POI是完全的Java Excel和Java

2、 Word解决方案。POI子项目包括:POIFS、HSSF、HDF、HPSF。表7-2对它们进行了简要介绍。表7-2 POI子项目介绍子项目名说明POIFS(POI File System)POIFS是POI项目中最早的最基础的一个模块,是Java到OLE 2 Compound Document Format的接口,支持读写功能,所有的其他项目都依赖与该项目。HSSF(Horrible Spreadsheet Format)HSSF是Java到Microsoft Excel 97(-2002)文件的接口,支持读写功能HWPF(Horrible Word Processing Format)HW

3、PF是Java到Microsoft Word 97文件的接口,支持读写功能,但目前该模块还处于刚开始开发阶段,只能实现一些简单文件的操作,在后续版本中,会提供更强大的支持HPSF(Horrible Property Set Format)HPSF 是Java到OLE 2 Compound Document Format文件的属性设置的接口,属性设置通常用来设置文档的属性(标题,作者,最后修改日期等),还可以设置用户定义的属性。HPSF支持读写功能,当前发布版本中直支持读功能。7.3.1 对Excel的处理类下面通过HSSF提供的接口对Excel文件经行处理。首先需要下载POI的包,可以到apa

4、che的官方网站下载,地址为:http:/apache.justdn.org/jakarta/poi/,本书采用的是poi-2.5.1-final-20040804.jar,读者可以下载当前的稳定版本。把下载的包按照前面介绍的方式加入Build Path,然后新建一个ch7.poi包,并创建一个ExcelReader类。ExcelReader类可以读取一个XLS文件,然后将其内容逐行提取出来,写入文本文件。其代码如下。代码7.6public class ExcelReader / 创建文件输入流 private BufferedReader reader = null; / 文件类型 priv

5、ate String filetype; / 文件二进制输入流 private InputStream is = null; / 当前的Sheet private int currSheet; / 当前位置 private int currPosition; / Sheet数量 private int numOfSheets; / HSSFWorkbook HSSFWorkbook workbook = null; / 设置Cell之间以空格分割 private static String EXCEL_LINE_DELIMITER = ; / 设置最大列数 private static int

6、 MAX_EXCEL_COLUMNS = 64; / 构造函数创建一个ExcelReader public ExcelReader(String inputfile) throws IOException, Exception / 判断参数是否为空或没有意义 if (inputfile = null | inputfile.trim().equals() throw new IOException(no input file specified); / 取得文件名的后缀名赋值给filetype this.filetype = inputfile.substring(inputfile.last

7、IndexOf(.) + 1); / 设置开始行为0 currPosition = 0; / 设置当前位置为0 currSheet = 0; / 创建文件输入流 is = new FileInputStream(inputfile); / 判断文件格式 if (filetype.equalsIgnoreCase(txt) / 如果是txt则直接创建BufferedReader读取 reader = new BufferedReader(new InputStreamReader(is); else if (filetype.equalsIgnoreCase(xls) / 如果是Excel文件则

8、创建HSSFWorkbook读取 workbook = new HSSFWorkbook(is); / 设置Sheet数 numOfSheets = workbook.getNumberOfSheets(); else throw new Exception(File Type Not Supported); / 函数readLine读取文件的一行 public String readLine() throws IOException / 如果是txt文件则通过reader读取 if (filetype.equalsIgnoreCase(txt) String str = reader.rea

9、dLine(); / 空行则略去,直接读取下一行 while (str.trim().equals() str = reader.readLine(); return str; / 如果是XLS文件则通过POI提供的API读取文件 else if (filetype.equalsIgnoreCase(xls) / 根据currSheet值获得当前的sheet HSSFSheet sheet = workbook.getSheetAt(currSheet); / 判断当前行是否到但前Sheet的结尾 if (currPosition sheet.getLastRowNum() / 当前行位置清零

10、 currPosition = 0; / 判断是否还有Sheet while (currSheet != numOfSheets - 1) / 得到下一张Sheet sheet = workbook.getSheetAt(currSheet + 1); / 当前行数是否已经到达文件末尾 if (currPosition = sheet.getLastRowNum() / 当前Sheet指向下一张Sheet currSheet+; continue; else / 获取当前行数 int row = currPosition; currPosition+; / 读取当前行数据 return get

11、Line(sheet, row); return null; / 获取当前行数 int row = currPosition; currPosition+; / 读取当前行数据 return getLine(sheet, row); return null; / 函数getLine返回Sheet的一行数据 private String getLine(HSSFSheet sheet, int row) / 根据行数取得Sheet的一行 HSSFRow rowline = sheet.getRow(row); / 创建字符创缓冲区 StringBuffer buffer = new String

12、Buffer(); / 获取当前行的列数 int filledColumns = rowline.getLastCellNum(); HSSFCell cell = null; / 循环遍历所有列 for (int i = 0; i Preferences”菜单,在弹出的对话框中选择“Java-Installed JREs”项,如图7-18所示。图7-18 Eclipse中JRE设置的对话框(3)当前选择的JRE是“C:Program FilesJavajdk1.5.0_07jre”目录下的,所以需要把jacob.dll复制到“C:Program FilesJavajdk1.5.0_07jre

13、bin”目录下面。(4)在工程中新建一个ch7.jacob包,并在包中创建WordReader类。该类将提供一个静态的extractDoc()方法。它接收两个参数,一个是要处理的DOC文件名,另一个则是输出的文件名,然后通过JNI调用Word的API转换内容,该函数的代码如下。代码7.10public static void extractDoc(String inputFIle, String outputFile) boolean flag = false; / 打开Word应用程序 ActiveXComponent app = new ActiveXComponent(Word.Appl

14、ication); try / 设置word不可见 app.setProperty(Visible, new Variant(false); / 打开word文件 Dispatch doc1 = app.getProperty(Documents).toDispatch(); Dispatch doc2 = Dispatch.invoke( doc1, Open, Dispatch.Method, new Object inputFIle, new Variant(false), new Variant(true) , new int1).toDispatch(); / 作为txt格式保存到临

15、时文件 Dispatch.invoke(doc2, SaveAs, Dispatch.Method, new Object outputFile, new Variant(7) , new int1); / 关闭word Variant f = new Variant(false); Dispatch.call(doc2, Close, f); flag = true; catch (Exception e) e.printStackTrace(); finally app.invoke(Quit, new Variant ); if (flag = true) System.out.prin

16、tln(Transformed Successfully); else System.out.println(Transform Failed); (5)创建一个main函数来测试WordReader类,该main函数代码如下。public static void main(String args) WordReader.extractDoc(c:/test.doc,c:/jacob.txt);(6)新生成的txt文件被保存到c:jacob.txt下,如图7-19所示。图7-19 使用Jacob处理的效果在使用Jacob时,很重要的一点是,用户本地系统中必须安装有Word的应用程序。否则也就无

17、法建立Java-COM桥,进而无法解析了。7.5 小结本章向读者详细介绍了Word、Excel和PDF文件的文本提取工具。有关这些文本提取工具的使用问题是任何一个Lucene论坛上都会被提出的问题。不过,一直没有任何一篇资料把这些工具集合在一起进行详细的讲解。希望本篇的内容能够对读者有所帮助,以解决大家在遇到这些格式的文件时,能提取出想要的文本。POI使用初步 POI提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excel对象、样式和格式,还有辅助操作等。最主要的几个对象如表3.1所示:表3.1 POI主要对象POI对象名称所对应的Excel

18、对象HSSFWorkbook工作簿HSSFSheet工作表HSSFRow行HSSFCell单元格下面我们来看如下的例子,使用表3.1中的对象在程序的当前目录下创建一个Excel文件test.xls,在第一个单元格中写入内容,然后读出第一个单元格的内容。完整的程序如下:import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hs

19、sf.usermodel.HSSFCell;import java.io.FileOutputStream;import java.io.FileInputStream;public class CreateXL public static String xlsFile=test.xls; /产生的Excel文件的名称public static void main(String args)tryHSSFWorkbook workbook = new HSSFWorkbook(); /产生工作簿对象HSSFSheet sheet = workbook.createSheet(); /产生工作表对

20、象/设置第一个工作表的名称为firstSheet/为了工作表能支持中文,设置字符编码为UTF_16workbook.setSheetName(0,firstSheet,HSSFWorkbook.ENCODING_UTF_16);/产生一行HSSFRow row = sheet.createRow(short)0);/产生第一个单元格HSSFCell cell = row.createCell(short) 0);/设置单元格内容为字符串型cell.setCellType(HSSFCell.CELL_TYPE_STRING);/为了能在单元格中写入中文,设置字符编码为UTF_16。cell.se

21、tEncoding(HSSFCell.ENCODING_UTF_16);/往第一个单元格中写入信息cell.setCellValue(测试成功);FileOutputStream fOut = new FileOutputStream(xlsFile);workbook.write(fOut);fOut.flush();fOut.close();System.out.println(文件生成.);/以下语句读取生成的Excel文件内容FileInputStream fIn=new FileInputStream(xlsFile);HSSFWorkbook readWorkBook= new H

22、SSFWorkbook(fIn);HSSFSheet readSheet= readWorkBook.getSheet(firstSheet);HSSFRow readRow =readSheet.getRow(0);HSSFCell readCell = readRow.getCell(short)0);System.out.println(第一个单元是: + readCell.getStringCellValue(); catch(Exception e) System.out.println(e);与数据库结合使用 使用POI,结合JDBC编程技术,我们就可以方便地将数据库中的数据导出生成Excel报表。其关键代码如下:/*把数据集rs中的数据导出至E

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1