日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java实现将多个word文档合并

發布時間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现将多个word文档合并 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大概流程是:

1、使用OPCPackage將每一個文檔打開并且存儲起來

2、將其轉成字符串合并

3、再將字符串轉換成對應得XWPFDocument 對象寫出即可

代碼如下:

/*** 合并docx文件** @param srcDocxs 需要合并的目標docx文件* @param destDocx 合并后的docx輸出文件*/public static void mergeDoc(List<String> srcDocxs, String destDocx) {OutputStream dest = null;List<OPCPackage> opcpList = new ArrayList<OPCPackage>();int length = null == srcDocxs ? 0 : srcDocxs.size();/*** 循環獲取每個docx文件的OPCPackage對象*/for (int i = 0; i < length; i++) {String doc = srcDocxs.get(i);OPCPackage srcPackage = null;try {srcPackage = OPCPackage.open(doc);} catch (Exception e) {e.printStackTrace();}if (null != srcPackage) {opcpList.add(srcPackage);}}int opcpSize = opcpList.size();//獲取的OPCPackage對象大于0時,執行合并操作if (opcpSize > 0) {try {dest = new FileOutputStream(destDocx);XWPFDocument src1Document = new XWPFDocument(opcpList.get(0));CTBody src1Body = src1Document.getDocument().getBody();//OPCPackage大于1的部分執行合并操作if (opcpSize > 1) {for (int i = 1; i < opcpSize; i++) {OPCPackage src2Package = opcpList.get(i);XWPFDocument src2Document = new XWPFDocument(src2Package);CTBody src2Body = src2Document.getDocument().getBody();appendBody(src1Body, src2Body);}}//將合并的文檔寫入目標文件中src1Document.write(dest);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {//關閉流IOUtils.closeQuietly(dest);}}}/*** 合并文檔內容** @param src 目標文檔* @param append 要合并的文檔* @throws Exception*/private static void appendBody(CTBody src, CTBody append) throws Exception {XmlOptions optionsOuter = new XmlOptions();optionsOuter.setSaveOuter();String appendString = append.xmlText(optionsOuter);//替換word中得空行、根據自己需求來選擇需不需要//word文檔其實是由xml文件合成得,一下替換得是作者對應得xml文件中得空行標簽appendString = appendString.replaceAll("<w:p><w:pPr><w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"仿宋\\\" w:eastAsia=\\\"仿宋\\\" w:hAnsi=\\\"仿宋\\\"/><w:sz w:val=\\\"24\\\"/></w:rPr></w:pPr></w:p>","");appendString = appendString.replaceAll("<w:p><w:pPr xsi:nil=\\\"true\\\" xmlns:xsi=\\\"xsi\\\"/></w:p>","");appendString = appendString.replaceAll("<w:p><w:pPr><w:ind w:firstLineChars=\\\"200\\\" w:firstLine=\\\"600\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"仿宋\\\" w:eastAsia=\\\"仿宋\\\" w:hAnsi=\\\"仿宋\\\"/><w:sz w:val=\\\"30\\\"/><w:szCs w:val=\\\"30\\\"/></w:rPr></w:pPr></w:p>","");appendString = appendString.replaceAll("<w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/>","");;String srcString = src.xmlText();srcString = srcString.replaceAll("<w:p><w:pPr><w:ind w:firstLineChars=\\\"200\\\" w:firstLine=\\\"600\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"仿宋\\\" w:eastAsia=\\\"仿宋\\\" w:hAnsi=\\\"仿宋\\\"/><w:sz w:val=\\\"30\\\"/><w:szCs w:val=\\\"30\\\"/></w:rPr></w:pPr></w:p>","");srcString = srcString.replaceAll("<w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/>","");srcString = srcString.replaceAll("<w:p><w:pPr><w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"仿宋\\\" w:eastAsia=\\\"仿宋\\\" w:hAnsi=\\\"仿宋\\\"/><w:sz w:val=\\\"24\\\"/></w:rPr></w:pPr></w:p>","");srcString = srcString.replaceAll("<w:p><w:pPr xsi:nil=\\\"true\\\" xmlns:xsi=\\\"xsi\\\"/></w:p>","");String prefix = srcString.substring(0, srcString.indexOf(">") + 1);String mainPart = srcString.substring(srcString.indexOf(">") + 1,srcString.lastIndexOf("<"));String sufix = srcString.substring(srcString.lastIndexOf("<"));String addPart = appendString.substring(appendString.indexOf(">") + 1,appendString.lastIndexOf("<"));CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart+ sufix);src.set(makeBody);}//測試代碼如下:public static void main(String[] args){List<String> srcs = new ArrayList<>();for(int i = 0 ; i <= 23 ; i++){if(i != 1) {srcs.add("E:\\workIreport\\" + i + ".doc");}}mergeDoc(srcs, "E:\\workIreport\\test.doc");}

總結

以上是生活随笔為你收集整理的java实现将多个word文档合并的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。