- 浏览: 349176 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
贝塔ZQ:
java实现操作word的读取和修改操作,用插件实现的话,可以 ...
java用poi实现对word读取和修改操作 -
yh412:
[flash=200,200][url][img]引用[/im ...
java用poi实现对word读取和修改操作 -
2047699523:
最代码 http://www.zuidaima.com 提供 ...
Java经典代码 -
漫成咖啡:
如何制作卡片型单据 -
geekant:
import com.swing.lx.table 这个包是你 ...
JTable的表头合并
java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob、poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便。它是Apache组织的一个项目,早在2001年就已经发布了第 一个版本,可以说是apache组织的一个老牌项目,到现在已经走过了10年光辉历程,目前最新版本是3.8的beta版本。下面就以该版本来演示如何实 现对word进行读取和改写值操作。 本文的所有源代码可以通过下载poi实现对word读写操作实例源码 (3)获得。 1.下载 下载3.8beta4版本,请记得一定要下载该版本,其他版本读取word模板并改写内容生成新的文件后,打开新文件时会提示“word无法读取文档,文档可能损坏。”,见下图 低版本poi生成word文档打开时的错误 2.集成到项目 这一步很简单,只要把下载后解压得到的poi-3.8-beta4-20110826.jar和poi-scratchpad-3.8-beta4-20110826.jar两个文件复制到java web项目的lib目录下就行了 3.制作word模板 把需要变动的值全部用代码来代替,例如你需要改变名称的值,则可以在模板中用name来表示。详细见附件中的doc文件。 4.调用接口方法实现对word的读写操作 整个过程就是先读取模板,然后修改内容,再重新生成新的文档保存到本地或者输出文件流提供下载,下面分别是生成新文档和输出文件流两种方式的代码片断,详细的代码请见下列代码中的readwriteWord()两个重载方法。 ========================================================================== //======================生成新文档的方式::========================== package work.tool; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.model.FieldsDocumentPart; import org.apache.poi.hwpf.usermodel.Field; import org.apache.poi.hwpf.usermodel.Fields; import org.apache.poi.hwpf.usermodel.Range; /** * 实现java用poi实现对word读取和修改操作 * @author fengcl * */ public class ReadAndWriteDoc { /** * 实现对word读取和修改操作 * @param filePath word模板路径和名称 * @param map 待填充的数据,从数据库读取 */ public static void readwriteWord(String filePath, Map<String,String> map){ //读取word模板 // String fileDir = new File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath(); FileInputStream in = null; try { in = new FileInputStream(new File(filePath)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } HWPFDocument hdt = null; try { hdt = new HWPFDocument(in); } catch (IOException e1) { e1.printStackTrace(); } Fields fields = hdt.getFields(); Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN).iterator(); while(it.hasNext()){ System.out.println(it.next().getType()); } //读取word文本内容 Range range = hdt.getRange(); System.out.println(range.text()); //替换文本内容 for (Map.Entry<String,String> entry: map.entrySet()) { range.replaceText("$" + entry.getKey() + "$",entry.getValue()); } ByteArrayOutputStream ostream = new ByteArrayOutputStream(); String fileName = ""+System.currentTimeMillis(); fileName += ".doc"; FileOutputStream out = null; try { out = new FileOutputStream("E:\\test\\"+fileName,true); } catch (FileNotFoundException e) { e.printStackTrace(); } try { hdt.write(ostream); } catch (IOException e) { e.printStackTrace(); } //输出字节流 try { out.write(ostream.toByteArray()); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } try { ostream.close(); } catch (IOException e) { e.printStackTrace(); } } //======================输出文件流下载方式:========================== /** * 实现对word读取和修改操作 * @param response 响应,设置生成的文件类型,文件头编码方式和文件名,以及输出 * @param filePath word模板路径和名称 * @param map 待填充的数据,从数据库读取 */ public static void readwriteWord(HttpServletResponse response, String filePath, Map<String, String> map){ //读取word模板文件 // String fileDir = new File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath(); // FileInputStream in = new FileInputStream(new File(fileDir+"/laokboke.doc")); FileInputStream in; HWPFDocument hdt = null; try { in = new FileInputStream(new File(filePath)); hdt = new HWPFDocument(in); } catch (Exception e1) { e1.printStackTrace(); } Fields fields = hdt.getFields(); Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN).iterator(); while(it.hasNext()){ System.out.println(it.next().getType()); } //替换读取到的word模板内容的指定字段 Range range = hdt.getRange(); for (Map.Entry<String,String> entry:map.entrySet()) { range.replaceText("$" + entry.getKey() + "$",entry.getValue()); } //输出word内容文件流,提供下载 response.reset(); response.setContentType("application/x-msdownload"); String fileName = ""+System.currentTimeMillis()+".doc"; response.addHeader("Content-Disposition", "attachment; filename="+fileName); ByteArrayOutputStream ostream = new ByteArrayOutputStream(); OutputStream servletOS = null; try { servletOS = response.getOutputStream(); hdt.write(ostream); servletOS.write(ostream.toByteArray()); servletOS.flush(); servletOS.close(); } catch (Exception e) { e.printStackTrace(); } } }
评论
3 楼
贝塔ZQ
2016-09-19
java实现操作word的读取和修改操作,用插件实现的话,可以试试PageOffice插件,专门操作office文件的
2 楼
yh412
2015-10-19
[flash=200,200][url][img]
[/img][/url][/flash]引用
1 楼
夜爽星
2013-07-16
最后下载下来的 word 文档我怎么 打不开啊?
发表评论
-
Java中压缩与解压--中文文件名乱码解决办法
2012-11-17 14:14 1022java对於文字的编码是以 unicode为基础,因此, ... -
三种JDBC批量插入编程方法的比较
2012-09-24 20:28 992JDBC批量插入主要用于数据导入和日志记录因为日志一般都 ... -
JXL方式读取Excel
2012-09-04 22:23 3543/* * Classname: * ... -
根据身份证号生成出生日期
2012-09-04 09:28 1191/** * @创建时间:2007-5-10 下午04 ... -
JDBC读取数据库图片
2012-08-31 11:48 2029/** * 更新BLOB字段 * ... -
Java经典代码
2012-08-31 11:16 7816package com.common.file; ... -
JAVA换行符
2012-07-20 17:03 1243回车用:String.valueOf((char) 0x0D) ... -
Java读取超大文本文件
2012-07-17 16:51 994File file = new File(filepat ... -
JAVA打开Excel文件
2012-07-16 11:41 1429import java.io.IOException; ... -
JSplitPane详解
2012-07-06 10:43 1290java.lang.Object --java ... -
Java中JTable的用法
2012-06-12 09:54 1929import java.awt.Dimension; ... -
JTable的表头合并
2012-06-11 17:48 3379JTableHeader的单个表头最复杂的操作也就是Rende ... -
NC参照表接口类
2011-09-05 15:23 1949package nc.ui.bd.ref; /** ... -
深入Java核心 Java内存分配原理精讲
2011-06-25 15:46 967String 常量池问题的几个例子 下面是几个常见例子 ... -
集合遍历的学习
2011-06-08 09:55 843import java.util.ArrayList; ... -
JAVA异常 EXCEPTION_ACCESS_VIOLATION (0xc0000005)
2011-05-15 18:44 4171## An unexpected error has b ... -
递归实现
2011-05-15 14:27 1023递归的思想:方法自己调用自己(A方法自己调用A方法),但是必须 ... -
Java获取当前日期的前一个月,前一天时间
2011-05-11 17:03 2922//Java获取当前日期的前一个月,前一天时间 Cal ... -
Swing 部分监听事件
2011-04-07 22:30 860http://www.java2s.com/CN/Tutori ... -
重要的方法
2011-03-27 21:33 954public static void main(Str ...
相关推荐
java用poi实现对word读取和修改操作.pdf
使用POI读写Word doc文件 Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。在hwpf里面我们使用HWPFDocument来表示一个word doc文档
java 利用POI读取Word文件中的内容 java 利用POI读取Word文件中的内容
java读写Excel,POI.JAR,Word内容读取
我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档如果有很多首段空白行的话,不要浪费C...
poi实现对word读写操作实例源码Java源码
这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...
Java通过POI读取Excel遍历数据,根本word模板批量生成word文档,demo可运行,可根据需求修改
java使用poi技术解析word文档,简易分析,希望对大家有帮助!
使用poi将word读取后替换指定内容后再次生成新word,本人经过测试,拿来即用!
POI读取word文档的文字内容和图片内容
利用POI读取excel写入到word 利用POI读取excel写入到word 利用POI读取excel写入到word,压缩包里包含了jar包
java利用poi读取word文档内容所依赖的jar包。poi可以读取doc、docx格式文档。
1、本案例采用apache开源的poi3.16,读取word文档中文本 ...3、poidemo是一个web工程,运行后,点击首页中的下载按钮,跳转到ReadWriteAndDownloadDocServlet,实现对word中文本内容的替换,并 提供下载功能
java poi读取word文档,并获取里面的章节数、页码数和批注内容。源码带注释。
JAVA读取WORD_EXCEL_POWERPOINT_PDF文件的方法(poi)
java-poi读.doc和.docx和TXT文件,写.doc和TXT文件。java-poi完美读写word(doc/docx)和TXT。附jar包
使用java poi模板生成word文件,方便数据的展示。规范数据在word的排版。
NULL 博文链接:https://53873039oycg.iteye.com/blog/2187388
poi读取word代码,可以通过此代码实现对word中的文本、图片、表格的读取。