替换word的几种方法(查看我的上传会有jar包资源)
1,poi HWPFDocument 类解析.doc XWPFDocument解析.docx 楼主只用过HWPFDocument,以后问题只针对解析.doc文件。遇到过问题1.替换书签时,页眉页脚的书签,表格中的书签和主内容的文本书签不能同时存在(这句有误,页眉页脚 替换参考https://bbs.csdn.net/topics/380228730),2.获取所有书签的方法可以获取到隐藏书签,遍历时书签集合会动态丢失,报数组下标越界异常,需要遍历时将书签集合size需要实时获取。3替换书签后文档目录无法正常显示,4附带visio图的文档替换书签后有时图会丢失 5,替换复杂文档可能存在其它情况
其它参考文献:https://elim.iteye.com/blog/2031335
资源地址:https://download.csdn.net/download/qq_19865223/10916200
2,jacob 解析.doc 只能在window下使用如果服务器时其它系统,不支持
资源地址:https://download.csdn.net/download/qq_19865223/10916236
3,docx4j 解析.docx 目前使用,不存在丢失目录和visio图的情况,docx4j 依赖很多jar包
资源地址:https://download.csdn.net/download/qq_19865223/10916213
贴上代码:poi操作.doc
/**
* poi操作文档(97-2003)
* @throws Exception
*/
public static String poiOPWord(){
InputStream is =null;
FileOutputStream out = null;
try {
is = new FileInputStream("C:\\Users\\cgh\\Desktop\\book.doc");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//获取域替换书签
HWPFDocument doc;
try {
doc = new HWPFDocument(is);
//Range range = doc.getRange();//获取域
Bookmarks bookmarks=doc.getBookmarks();//书签集合
int count=bookmarks.getBookmarksCount();
for(int i=0;i<count;i++){
Bookmark book=bookmarks.getBookmark(i);
String bookName=book.getName();
Range ran = new Range(book.getStart(), book.getEnd(), doc);
if (ran.text().length() > 0){
if(bookName.equals("name")){
ran.replaceText("圣诞节的撒娇的数据库是的奇偶第三季度撒看见的数据库", true);//如果有值替换
}else if(bookName.equals("daihao")){
ran.replaceText("ssssdq111", false);//如果有值替换
}
}else{
if(bookName.equals("name")){
ran.insertBefore("设计数据上课时间附加费将发放解放军解放"); //没值就插入
}else if(bookName.equals("daihao")){
ran.insertBefore("daihao1110"); //没值就插入
}
}
//获取变化后的长度
int changecount = bookmarks.getBookmarksCount();
if(changecount!=count){
i--;
count=changecount;
}
}
//把当前HWPFDocument写到输出流中
out=new FileOutputStream("D:\\wordBook\\PoiBooks.doc");
doc.write(out);
} catch (IOException e) {
e.printStackTrace();
}
closeStream(is);
closeOutStream(out);
return "SUCCESS";
}
2.jacob操作.doc
/**
* jacob操作Word(97-2003)
*/
public static void jacobOPWord(){
//启动word,生成一个ActivexComponent对象
ActiveXComponent app = new ActiveXComponent("Word.Application");
//要转换的word文件C:\Users\cgh\Desktop
String inFile = "C:\\Users\\cgh\\Desktop\\book2.doc";
//要保存的目标文件
String tpFile ="D:\\wordBook\\JacobBooks.doc";
boolean flag = true;
boolean visible=false;
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{inFile, new Variant(false)}, new int[1]).toDispatch(); //打开word文件 , false可写!! 注意 Variant的值
Dispatch activeDocument=app.getProperty("ActiveDocument").toDispatch();
Dispatch bookMarks = app.call(doc, "Bookmarks").toDispatch();
int bCount = Dispatch.get(bookMarks, "Count&#