




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Apache POI -Word部分最近在研究Apache POI,不过只研究了如何做word的部分。网上对于Excel等的介绍也很多例子也很多,但是对于word缺少的可怜,导致我学的也很费劲,只能算是会了皮毛。但是整理了下例子,也方便以后大家看。最好能有高手把这个word部分的知识和例子多传到网上给大家分享。Apache POI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的版本有很多改进,加入了对采用OOXML格式的 Office 2007支持,如xlsx、docx、pptx文档。以下是POI的几个重要组成部分,以及各组件的功能概述。POIFS是该项目的最古老,最稳定的一部分。.这是格式化OLE 2复合文档为纯Java的接口。 它同时支持读写功能。所有的组件,最终都依赖于它的定义HSSF: MSExcel 97-2003(.xls),基于BIFF8格式的JAVA接口。XSSF:MSExcel 2007+(.xlsx),基于OOXML格式的JAVA接口。HWPF: MSWord 97-2003(.doc),基于BIFF8格式的JAVA接口。只支持.doc文件简单的操作,读写能力有限。本API为POI项目早期开发,很不幸的 是主要负责HWPF模块开发的工程师-Ryan Ackley已经离开Apache组织,现在该模块没有人维护、更新、完善。XWPF:MSWord 2007+(.docx),基于OOXML格式的JAVA接口。较HWPF功能完善。Word例子:1读取一个word里的内容,只能读取纯文字,word里不能有图片表格等,否则图片和表格就会成为乱码。输出结果在后台显示import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import org.apache.poi.hwpf.extractor.WordExtractor;/输出文字public class world public static void main(String args)FileInputStream file;try file = new FileInputStream(d:a.doc);WordExtractor extractor; try extractor = new WordExtractor(file);String st=extractor.getText();System.out.println(st); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (FileNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace(); 用另一种方式也可以输出文字public class world2 public static void main(String args) throws ExceptionFileInputStream file;try file=new FileInputStream(d:a.doc);HWPFDocument hDocument= new HWPFDocument(file); Range rang= hDocument.getRange(); String string=rang.text(); System.out.println(string); catch (FileNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();2,把从一个word里读出来的内容写到另一个里,虽然可以写进去,但是只能把文字、数字、字母等写进去,图片和表格依旧不可以。而且写进去的文字只能是字符形式写进去,这样在打开word文档时就会有个转换器的问题。但是可以写进去,不知道怎么解决。import java.io.*;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.model.io.HWPFOutputStream;import org.apache.poi.hwpf.usermodel.Range;public class wordWrite public static void main(String args) try /用了HWPFDocument API对于他的解释是:作为一个存储桶,我们把所有的word数据抛出到其中 我的理解就是把输入流读取的word数据都放到他这里了 以便调用方法使用 HWPFDocument hDocument= new HWPFDocument(new FileInputStream(d:a.doc); Range range= hDocument.getRange(); String st=range.text();/获得了word里的内容 writeDoc(d:a.doc,st);/调用写入的方法 System.out.println(st); catch (Exception e) e.printStackTrace(); public static boolean writeDoc(String path, String string) boolean w = false;try byte b = string.getBytes(utf-8);ByteArrayInputStream bais = new ByteArrayInputStream(b);POIFSFileSystem fs = new POIFSFileSystem();DirectoryEntry directory = fs.getRoot();DocumentEntry de = directory.createDocument(WordDocument, bais);FileOutputStream ostream = new FileOutputStream(path);fs.writeFilesystem(ostream);bais.close();ostream.close(); catch (IOException e) e.printStackTrace();return w;3、把word文档里的某个内容替换成所需要的别的内容。也可以说是修改成自己想要的内容。但是还是仅限于修改文字。public class word public static void main(String args) try HWPFDocument hDocument= new HWPFDocument(new FileInputStream(d:a.doc); Range range= hDocument.getRange(); /在这里把word里的name替换成组织 当然word里要已经有了name这个单词其实这个时候replaceText()方法并没有真正的替换了你原有word里的内容 你打开文档里面依旧显示name 但是你看后台输出的内容是已经修改了的 这就又需要把修改的内容写进word range.replaceText(name,组织1); String st=range.text(); writeDoc(d:a.doc,st); System.out.println(st); catch (Exception e) e.printStackTrace(); public static boolean writeDoc(String path, String string) /这里的写入我换了个方式 不过类似 依旧是以字节的形式写入 还是会有什么转换器的错误 我研究好久没解决这个问题boolean w = false; try byte b = string.getBytes(); FileOutputStream fs = new FileOutputStream(“d:/b.doc”); HWPFOutputStream hos = new HWPFOutputStream(); hos.write(b, 0, b.length); hos.writeTo(fs); hos.close(); w=true; catch (Exception e) e.printStackTrace(); return w;4,把整个word里的内容读出来 写入另一个里 这次无论是图片还是文字或者表格都可以写入,而且没有那个转换器的错误了。但是其实就相当于复制了一个word到另一个word里。却无法实现修改内容在写入啊 或者别的。public class word2 public static void main(String args) try POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(d:bb.doc); HWPFDocument hDocument = new HWPFDocument(fs);Range range = hDocument.getRange(); String st = range.text();FileOutputStream out = new FileOutputStream(d:cc.doc); fs.writeFilesystem(out);out.flush();out.close();System.out.println(st); catch (Exception e) e.printStackTrace();5、这个是把图片从word里读出来 生成一张图片 也就是个.jpg的图片。但是我读出来却无法把它写进word里,也就是无法插入。我没研究出来。import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.List;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.usermodel.Picture;/输出图片public class Picture1 public static void main(Stringargs) throws FileNotFoundException, IOExceptionString savePath= d:; String docFile= savePath+ a.doc; String imgFile= savePath+ img.jpg; FileInputStream file=new FileInputStream(docFile);HWPFDocument poiDoc = new HWPFDocument(file);List picList = poiDoc.getPicturesTable().getAllPictures();Picture picture = (Picture) picList.get(0);try picture.writeImageContent(new FileOutputStream(imgFile); catch (FileNotFoundException e) e.printStackTrace();6,这个例子不太好。就是把表格遍历出来。但是还是无法写进word,你也无法在后台看到表格,只能在后台看到表格里的数据。这个例子的作用不大。public class table1 public static void main(String args) try FileInputStream in = new FileInputStream(D:c.doc); POIFSFileSystem pfs = new POIFSFileSystem(in); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange();/得到文档的读取范围 TableIterator it = new TableIterator(range); /迭代文档中的表格 while (it.hasNext() Table tb = (Table) it.next(); /迭代行,默认从0开始 for (int i = 0; i tb.numRows(); i+) TableRow tr = tb.getRow(i); /迭代列,默认从0开始 for (int j = 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《航空电气设备维修》试卷3及答案
- 初级厨师考试题库及答案
- 宝典驾校考试题库及答案
- 企业发展新质生产力的策略
- 新质生产力农村创未来
- 民众与医护的信任纽带
- 情人节促销创意活动方案
- 安全包保责任制讲解
- 2025年麻醉科药物应用与副作用考试答案及解析
- 新质生产力与体育保健与康复
- 2025年下半年安徽省港航集团有限公司所属企业社会公开招聘22名考试参考试题及答案解析
- 人教PEP版六年级英语上册全册教案
- 3D打印技术在制造业2025年发展趋势及市场前景可行性分析报告
- 综合楼玻璃安装合同协议书范本模板6篇
- 2025年度集中供暖项目暖气设施安装及售后服务合同
- 护士医护人员职业安全防护培训
- 固废回收协议书范本
- 全文《中国式现代化》PPT
- 园林绿化景观施工组织设计概述
- 10kV高压开关柜验收规范标准详
- 英才学院《机械工程测试技术》课件07振动的测试
评论
0/150
提交评论