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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POI不同版本替换Word模板时的问题

發布時間:2025/3/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POI不同版本替换Word模板时的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題描述

  通過POI,把Word中的占位符替換為實際的值,以生成復雜結構的業務報告。

  在POI 3.9上,功能正常。由于某些原因升級到POI 3.10.1后,項目組反饋說Word模板出錯,無法生成Word文件,總是報解析錯誤。

?

二、問題分析

  Word模板功能相關的代碼應該說是比較穩定了,相關代碼很久沒有變動過,而且已經有投產項目在正式使用。現在出了問題,應該是升級POI版本導致的。

  Word模板內容示例:

  本期產品為向${ds:ds001,col:INVESTER_TYPE_NAME}發行的混合類理財產品,本期產品投資期限為${ds:ds001,col:TERM}天,收益率為${ds:ds001,col:YTM_100}%/年,為${ds:ds001,col:INCOME_TYPE_NAME}類產品,到期還本付息。是一款具有投資安全性高、回報率高重點的理財產品。

  分析、調試代碼。發現兩個版本的POI在處理Paragraph.getRuns()有區別:

  3.9版本:一個段落就是一個XWPFRun;

  3.10.1版本:一個段落不知道根據什么規則,胡亂分成了List<XWPFRun>。如上述示例模板,會被切換為長度為14的List;

  這樣就導致獲取、替換段落文本時出錯。

?

三、問題解決

  問題被定位后,就嘗試解決。主要的思路,就是強制把List中的內容合并成一個字符串,替換內容后,把段落中的XWPFRun全部remove掉,然后新建一個含有替換后內容的XPWFRun,并賦給當前段落。

  解決問題的過程中,“對于removeRun方法無法達到本應達成的預期效果的問題”,耗費了不少時間。總結來說:不能從0到size()移除Run,這樣的話Run不會被移除;而應該從size()到0進行移除。

  需要繼續關注表格替換時是否會有問題。

  解決這類第三方軟件引起的問題,幾乎沒有道理可言,如果不想被埋在相關源代碼中,只能靠經驗+運氣。

?

四、附代碼

在3.10.1下有問題的代碼示意:

while (itPara.hasNext()) {

??? XWPFParagraph paragraph = (XWPFParagraph) itPara.next();

?  int length = paragraph.getRuns().size();

  if (length > 0) {

??????? String text = paragraph.getText();

??????? if (text.indexOf(tag) < 0) {

    ? continue;

??????? }

??????? while (length-- > 0) {

    ? paragraph.removeRun(0);

??????? }

??????? XWPFRun newrun = paragraph.insertNewRun(0);

??????? newrun.setText(text.replace(tag, val));

??? }

}

?

修改后的代碼示意:

while (itPara.hasNext()) {

?? ? XWPFParagraph paragraph = (XWPFParagraph) itPara.next();

?? ? int length = paragraph.getRuns().size();

??? if (length > 0) {

??????? String text = StringUtils.join(paragraph.getRuns().toArray());

?? ? ? ? if (text.indexOf(tag) < 0) {

    continue;

??????? }

??????? for (int i = (length - 1); i >= 0; i--) {

    paragraph.removeRun(i);

??????? }

??????? XWPFRun newRun = paragraph.insertNewRun(0);

??????? text = text.replaceAll(tag, val);

??????? newRun.setText(text, 0);

??? }

}

?

轉載于:https://www.cnblogs.com/yujj-cn/p/4915431.html

總結

以上是生活随笔為你收集整理的POI不同版本替换Word模板时的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 熟妇高潮精品一区二区三区 | 无码乱人伦一区二区亚洲 | 国产av成人一区二区三区 | 欧美一区二区三区爽爽爽 | 蜜桃精品久久久久久久免费影院 | 成人一级黄色片 | 亚洲天堂国产精品 | 久久久免费看 | 亚洲va国产va天堂va久久 | 亚洲超碰在线观看 | 久草综合在线观看 | 精品一区二区三区四 | 亚洲在线a| 午夜精品国产精品大乳美女 | 国产国语亲子伦亲子 | 97超碰中文字幕 | av片免费看 | 夜夜操天天爽 | 精品国内自产拍在线观看视频 | 国产精品无遮挡 | 在线综合av | 凹凸精品熟女在线观看 | 色图插插插 | 久久午夜福利电影 | 请用你的手指扰乱我吧 | 黄色日b片 | 一二三区免费 | 九一精品国产 | 午夜精品久久久久久久第一页按摩 | 国产精品不卡一区二区三区 | av在线官网| 有码一区二区 | 性做久久久久久久免费看 | 福利免费视频 | 麻豆影音先锋 | 亚洲精品一二三 | 欧美人妻一区二区三区 | 蜜桃精品在线观看 | 亚洲制服一区 | 日本一级理论片在线大全 | 精品视频中文字幕 | 久久一区二区三区视频 | 一个色在线 | 天堂最新| 国产精品888| 亚洲性综合网 | h片在线观看视频 | 国产精品一区麻豆 | 精品九九| 天堂在线观看中文字幕 | 国产成人高清 | 91精品免费视频 | 国产在线黄色 | 精品国产精品三级精品av网址 | 国产精品视频区 | 国产又粗又猛又黄视频 | 成全影视在线观看第8季 | 久久伊人精品 | 色国产在线 | 久久久久久久久久久97 | 黄色成人在线播放 | 国内av片| 亚洲香蕉久久 | 久久久久久久久久久久久久久久久久 | 一区二区有码 | jizz国产 | 狠狠干天天色 | 一区小视频 | 在线观看网址你懂的 | 国产乱子伦农村叉叉叉 | 中文字幕一区二区三区在线观看 | 国产三级在线免费 | 亚洲a人 | 国产精品久久久国产盗摄 | 日本视频一区二区三区 | 成人区人妻精品一区 | 亚洲xx站| 国产午夜视频在线观看 | 人妻互换一区二区三区四区五区 | 久久精品一区二区免费播放 | 久久成年人视频 | 亚洲高清在线一区 | 黄色三级图片 | 美攻壮受大胸奶汁(高h) | 国产精品午夜未成人免费观看 | 红色假期黑色婚礼2 | 成人在线观看黄色 | 国产在线伊人 | 精品热久久 | 欧美群交射精内射颜射潮喷 | 看一级黄色大片 | 国产福利一区二区 | 免费在线观看污 | 久草免费在线视频观看 | 男女黄色网 | 伊人国产精品 | 丰满白嫩尤物一区二区 | 免费日韩视频 | 亚洲激情在线观看视频 |