%8b$M
zt_)4%I*$ZyXj&H`K&8Z_vYLmPe4u>vOxe-wnb(aDzJnqob-wR#_+f=2l`}{W`XF2?
zigdJ+3gT*YGD)LtMXR(}E8krxbCc!xI;MzxYE!(WjKIBXQAxzBJ}w*;c@P5o@HHi2
z0=rtb+nryTE4%Gqs8ha0sckJBXNl$g9I;TCEI>)e9&f`858oh@B3Q9AByK>c#aOE%
zW4=NT<%fj|$!8iFvopZx$IpKzTu|E-Ct9%mHgtAk5vKxze!hO#}!$
z(<5X3itW-aWnRd^Eid=c!e(Tl^8ko}dG%*EhbmwrVqHS*mbPGSTN+X^MA{O9IPj?g
z0C=W(Siq%-Hq_3>c0K2dC6&5e)`S%bT&Q^!{!&XxH_Ci{s?2poPFhjG4M21AZX#kE
zl7qhw&&|!yE*)Xey2KqByZ(J{F{)Qs3*Pf}wY)GZiBJe;7G_kf2Iu@EQ_>wD`ICS*
zuFsx`WQGH9vJ}NVM4+3y`yP79Z%Mx+o^m2G?R|D8q)jzbM3_6@Be{5HaAP`=cX#*50%_yCOW!X&HdI8<-QV|9pds#CRkc
z@qA^b?{WR$3b!jno)UUAxY;`93LUa92WrC97X3V3#>c}}P`QvyjMF>cC$4`7C`6$#
zjXU4h3eP>;TpUTOu-J9{)b>UNwznuDa{P31K&{X_P
z#ki|FQv^J~`f=1Z^M)T-bDpPtEP`e$P)No7rSCO+)AnLIQm
zVQni1wr(ygxYyWcS1sn>DO%;F97_5A$Pdb3@N%g1p&n<*X+!M5EhtKwq!0&vQcU4}
z1HZ;6dKX8QHR6nVl);oFGVSn*LAuGU&XOH0fyfmrq}!((d8<(aIRlwg2D0=r`KncP
z$Y3wLWAe4|33r}p(t@{l;Kbl}`uaVLLd*;*&bmsh4b~U0@qLldFU}NQ7I{21$=uhg
z?9cGOFs)Ihti5^AS%Rf}W94a39H*$5){{eCP%L54>7Sc;m{zqmlh1hl-nIWA`Qdj+
z!~AKi9JqB1P@<3P*5SHG9DxH3_8m69f#EayY*xNB!FcsRP;lN0Z==&D4j*7S*Bam~
zq%DYkOj*_5gtA?aIIK}~bi?WtUPbjd)wObsQOAz
zcf=OlIjEI|Qy+6SC$l0VtHzB;%t&N+%y;Mg>PJW4m5{UEJ$3bBQlotS+;6)5RJdK=
z!Z`@J06-XY6eY&i55J;P6a&!bG`Mnd*-CRS_;?UNy>ibMM`ouk5+Rid4E0@^xn~{sOa^i=_
zynVY7iBCGevM>mY?kF=`}jL+dH`*cZeG=Y?N!N-A25OYGAB#bGcvg$T978wPhf$
zswQ^7yQ(Ls81>E5(m_H}A%1P>4(mOlP-bP~(Teo>2G(1t9e9!3lHm6Hh?LAfIj&yD
znclIq|FD{ssuz#Xt~Uu*#PME~b{}PT!aVY>=`NmjppfB$?(nd2657KJAQoG~_0gc^O{Zt#hT@8!oLC{p@_c+UZ}OjR3{LC4RtMQ?2-?D(MZ;v#efr2rEAwt@fRnSGP5MrYW%oUl
ziW~rm0tvF%Nt)mQma3GZ8Wr!WEC#S>oxWjyu(dC!NElrTOGM}(tqAV-j
zA9)RDpM8@ZXqinQmH8<%Z~67GfM0iV*hIW|l?Zi}7)m{$knjUJ%ASE@LeA3F=`NKkNyC
zzMG_29tPtrd<0!G0@Nl-0x2zgP9@*{C8ZJjMbx+rsyOs%bn}|YxGQ{3cX5kW3~)zj
zpMXu`xtlRZnFq(}=T>u7P;3vSz+Rk|{0h7`<03hVP*Ns|-gPjAM(b)0$l{Jxj>IT8
zqJO#}YQ!{7DroPazNBOVvd~q3p=pP0Xf|6fhmCA<+#$3j#P4ZaOwkj>X0W9Uzt3wi
z|9)5mGmTGBplc+NS1E-WR}rOc+uMZ;VJy&R5fSE8x_Zr&G-{qa_JpS8NmZJ{p#5mO
z%!#cc4vvQ6*gxUmyyWPA!sH7qCBr~|_O(x(vBmVT0-sFw?(9XMkG
zvU_M2(U&;8tf6Vhh}!$AFEIZ*)eFvN?BNqlJB&*&AW!^z3
zjcSX&r$Hw7T>7(9KgL7wp$W+4(_#ORY&_e#D^Pb?!fqDm)-f#?;#RvU9KAT0&e@
zLS#wQ^TPRJXc}=|1$%XUW%|ddz-fk&pT}-V$(Gx<1NqaXg;{I~@$QRfKq{%BN!}kc
z`AZFa+9SK$Mi$@OYVHbZ&qZkNiOg)YaL<2k+Y_OC7Th!RhHE0&6bL?uL_6C{jYkxR
zg)A=Y=PkBsD3uQEtRQ8$G;qEs@yQBY*Do2f_qcfBSNQ>YN4XK-ZOr=B^Ed03eGRjH
zV5T+imQTIQ&)dTu1Q(F3r1Veq?lA3&IuoXK?__^*@X14*G^~EXRnPYU?10~X2(E}p
z@X3~a#G8vBQ0Qg(jR*~I>Y2P~tH}e(fCs=iqaUOokiU2ShfG@!d^HG=W#@RYY$#sL
zzb@iEY1vHg@`a1bxkt$@GRXT{FBs2QPENMtaBW}VoUzRl4~J&nK3!9w8gG-Xfe^g8
z(=mNRnHQuy*B!;XYJF?wekH}xpyLCdF;Ab+<>}N7qN*>OmO;Xmg^QBQ?+das##m4Q
zU@_qYDUtmPq|1}J|6YA^`CrSQd~*6whikFo>`-^oK8;Ox*y^0T;$tJ1DN1g7FrC$Lb
z`#t*_L==(vx!KuYzS>?q+N5Y2+-D=2$5r=TVxx|N)W5EWRPJCV{!T`$`G
zpCg7OXxN8bQtn~=z;~JFm)jh-V27!$Z%&y#r!kogRP5=Q;XazbB}nS#*PP|kG%wsZ
zV?04%hsz<`EJVe0Z~VDK>hx
zKen`W`l+Jx+9x;K;+>+7*O3N!kLaV8nP{!4o`0M`I-FTMK0)*GVS8_PK!2f`28l|0
zCwFgN%T}qy{Ts62xdgSl?0K!8-+|8=?w_Vv6~85FjDmzDgNuX&K$zyQ+Q)}(+U6Dx
zKUpHTb=4flxQN^7_9)8d8mDZVttOhwI8bQ{Da<12T(lZrL@xKM>YX4HVBlfWI4=hG
zWOS0KgxslD*)rVS;ybHnEJ|(2b{c2(^75|@IB%Wz@xgfRr7c{n$xSH8-V#@d6({`;
z;@oa7E`inHTam8`@KB_;n5lWKZGiFPcxOBAvp8W%`Hcfhoi+1rP@%16Ba{S>naR$O
zo-h1~IE}F4qQ((ab)~|*jszvdU%<9(2n
z3}FTGeQio8Ocj=t_(3K*krmBnRRfqn1XSxb^I#!(kVmZabrd=kn_bmEnP(;)Z>SBn$I5#t9*-l#A@3HC@{!&_!s`B6TAb5&UacopAKwVz0WpdUr6L
zl*!m}9B>YzS>
zLDCHA1~QURJ66!HM|2={x3<+08hJBJK3t<2C&Yj~S3IP1?@ZG0i5U|5^U%&PMNeK*
z6C?_EQ29N2J8Ng`fG`E>wbzO1+dk*i^?q+LlPt9qBE3LWYLSe)e5^8^QXC5*_5c~C
zD6KToCQLMb3nj>%NxB~Czz(nUJu)6NGnHPAq~-piyE9S;A~@fG`}rK<$r@!0^`S(R>)qAnA;9|{bgEA8
zig?;?YBs%mIOMVnRM>ME63rJ9wo_;0LJCa6=y6(r4<5O<+7TI0ZZGr+?Ij
z;+nagJ5&A1@LBYL2p~pqtAhtG``P)qTJC7WLjFP
zGsJI;2RBIj1XGLLE6K+&rJCoL;NL(tJ-=vFJpgpG{v%QN^5sc%KY3+V@c;|_d
zd@MR*Yb^@Motg!hP2LhzH}_(H``wru113gg<9n(t=4Q1YJ|qTsEhO)D_)O*`QMkz~
z2Y>ihGP&Q->QA@!?_uz=r28to{hLkQB!s;$gCR2_K2ZKk>wiMxPcw(T?To&`jf1}M
zYC$w*F8hrqLDGh&0k9>iY2k$%4{xunRwnbw5m1edeT)0%_w&LJ5?z&F(x$TgEcro9JX^0m<%=&m6tVBE5LM*M2yjIeW>0Q0;-s-Dkq%nr
zl2@kiB#0PzyrBE+ZtUoG4wXDMFPCZ
z{$BO-YZX3LyG$E;cS8Iy3VtjV&JK{ed$WX@$fLjVj^B^yeN;1E>-!@kwwNPjD>-Hn
z{;icNxn=r%O4ZjgcTyD1AURm_f$wxPxYMULz!O=j(zr}?N4+x;b@uf9;X!!z>bJ9nYQP^3bX|Y5VQaehE-MMKV-}BMG2X>QIaYZ|o
zqhNT|CMT_MQK&rTQLJYC8hiJ0GEVAo?BZO!g!t2TFwe6@VNS8^o2scVxvgSocSm}k
z^FvYNPKfV3_cuKMY3wWh>?ok{U60EI1aW6yW?Y8Sjt|`s5q@7{gMTeh*uLSLTg!SYcn}R
z4RTDkF*Ssr);kMW+|=K|f;NV4W{+Zapn=sV)>Fs`JT);@0gB>t)4YfiHl#Vh
zcvD~$M9A$*$zGMhNgDJOls1R`oguBmQNBQwGh4PM-QrVc@na_DUa;kUOVL{&Kyp3e
zY_=&$D(_;et|oQRzFlhL=Ns!&G;>o+p`7B0kiyF0Wu@<)t_q$7cEPOF88Ly+y9h9z
zY(~EEB^@RS&cIk(7TR2eM!7@E=!sRUadndTi&LpkwMXER%_8YqY$5e|<*k9Vhi7#~
z*dr3BQyxWMvi0@mCF);nVRyG1Gkfxu@%gEN1?ftk8DeTo^WZ9?9H?~hEL{g!S)wL1W5yzRkq(iek;L)UMl
zc26zopYI%Q;H%$9zCn!izh??DSxCr8)QGwf(b^Q+V9e=tAqum9@omkO8A%g%;1es_HTg}ZG1>$?0juKzpkZ-4Nojjp@QOY|>w
zZy5Z4^q&s&`p~aGi(JV%{9^?FNVzWHdVYT;U`g|LWiAC=W&8hSkV_u?U)SHJ`HdC-
zPfJ|q#lM98vIG<2(?77kSn{u{ex0QK3O$AJ75||Brfk0szs@6m1$RTZ>MQs^tm6MQ
z=t~OgU)SZJMG#+q`uYEYTt~+k0O`AUzVanuw(xQMCkobCFyT#
z{^}0BUVnNeiI?#&Nx#duuE_O=o-6p7)?aXIgmeDq5$HPpI$_Ke9vQ*q@N*!)(Z^gz
zUneQNLJuO0_!Ip*W#M)Bbw=?kxbfdJcEvCL3;ge%>Cd@Sqx!4wzo{zzT;y-?WgktA_0-~5USxDUxNM*c0P@!
literal 0
HcmV?d00001
diff --git a/src/test/java/com/test/wordOutput.java b/src/test/java/com/test/wordOutput.java
index a05d6d7..8dbd8e2 100644
--- a/src/test/java/com/test/wordOutput.java
+++ b/src/test/java/com/test/wordOutput.java
@@ -126,4 +126,27 @@ public class wordOutput {
//进行输出
wordTemplateUtils.write(fileOutputStream);
}
+
+ @Test
+ void testTable() throws Exception {
+ WordInfo wordInfo = new WordInfo();
+ Text text = wordInfo.getText();
+ text.putValue("school", "重庆二外");
+
+ TableBeans tableBean = wordInfo.createTableBean();
+ tableBean.CreateOneTable("table_1", TableType.No_todo, false);
+ tableBean.CreateOneTable("table_2", TableType.No_todo, false);
+ tableBean.CreateOneTable("table_3", TableType.No_todo, false);
+ tableBean.CreateOneTable("table_4", TableType.No_todo, false);
+
+
+ WordTemplateUtils wordTemplateUtils = new WordTemplateUtils(
+ this.getClass().getResourceAsStream("/wordOutput/记录表-流动监考员、网络监考员记录表.docx"));
+ // 变量替换
+ wordTemplateUtils.replaceDocument(wordInfo);
+
+ FileOutputStream fileOutputStream = new FileOutputStream(System.getProperty("user.dir") + "\\321.docx");
+ //进行输出
+ wordTemplateUtils.write(fileOutputStream);
+ }
}
--
Gitee
From 3d7558906b7d54b799aabc82942a36cb381e13b5 Mon Sep 17 00:00:00 2001
From: huangwenhao <1092798160@qq.com>
Date: Thu, 10 Apr 2025 11:47:32 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20[2025-04-10]=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=20word=20=E5=AF=BC=E5=87=BA=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 注释掉 ExcelToHTMLTest 中的测试代码
- 修改 RunReplaceUtils 中的异常处理逻辑,改为记录错误日志
- 在 wordOutput测试类中添加 import 语句
- 优化 WordTemplateUtils 中的循环逻辑,增加错误日志记录
---
.../wordOut/utils/WordTemplateUtils.java | 30 +++++++++++++++----
.../utils/operationUtils/RunReplaceUtils.java | 7 +++--
src/test/java/com/test/ExcelToHTMLTest.java | 13 ++++----
src/test/java/com/test/wordOutput.java | 1 +
4 files changed, 34 insertions(+), 17 deletions(-)
diff --git a/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java b/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java
index d0325a7..6d71840 100644
--- a/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java
+++ b/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java
@@ -3,7 +3,9 @@ package com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.utils;
import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.WordInfo;
import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.tableBean.OneTable;
import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.tableBean.TableBeans;
+import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.textBean.OneFor;
import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.textBean.Text;
+import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.textBean.TextFroReaders;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.*;
@@ -241,12 +243,28 @@ public class WordTemplateUtils {
String forEachKey = valuetemp.substring(valuetemp.indexOf(WordTemplateKeyEnum.textForKeyPrefixValue.getKeyCode()),
valuetemp.indexOf(WordTemplateKeyEnum.keyEnd.getKeyCode())).replace(WordTemplateKeyEnum.textForKeyPrefixValue.getKeyCode(), "");
- oneForTextList = wordInfo.getTextFroReaders().getOneForTextList(forEachKey).getOneForTextList();
-
- if (oneForTextList == null) {
- throw new RuntimeException("缺少元数据" + valuetemp);
- }
- } else {//都不是就是渲染的数据
+ // oneForTextList = wordInfo.getTextFroReaders().getOneForTextList(forEachKey).getOneForTextList();
+ //
+ // if (oneForTextList == null) {
+ // throw new RuntimeException("缺少元数据" + valuetemp);
+ // }
+
+ TextFroReaders textFroReaders = wordInfo.getTextFroReaders();
+ if (textFroReaders == null) {
+ log.error("未创建" + WordTemplateKeyEnum.textForStart.getKeyCode());
+ oneForTextList = new ArrayList<>();
+ continue;
+ }
+ OneFor oneFor = textFroReaders.getOneForTextList(forEachKey);
+ if (oneFor == null) {
+ log.error("未设置" + WordTemplateKeyEnum.textForStart.getKeyCode());
+ oneForTextList = new ArrayList<>();
+ continue;
+ }
+ oneForTextList = oneFor.getOneForTextList();
+
+
+ } else {//都不是就是渲染的数据
addList.add(phtemp);
}
} else {
diff --git a/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/operationUtils/RunReplaceUtils.java b/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/operationUtils/RunReplaceUtils.java
index d7230f0..bf9aa1a 100644
--- a/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/operationUtils/RunReplaceUtils.java
+++ b/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/operationUtils/RunReplaceUtils.java
@@ -383,11 +383,12 @@ public class RunReplaceUtils {
} else {
// todo 根据自己项目自己定义 如果模版里面设置了变了 导出的数据中没有 可以抛出异常 也可以默认替换为空格
if (!key.startsWith(WordTemplateKeyEnum.imageKeyPerfix.getKeyCode())) {
- throw new RuntimeException("数据源中没有发现key=[" + key + "],的数据"); //抛出异常
+ // throw new RuntimeException("数据源中没有发现key=[" + key + "],的数据"); //抛出异常
}
- // returnValue = "";
-// return new ParameterBean(key, ""); //默认替换为空格
+ log.error("数据源中没有发现key=[" + key + "],的数据");
+
+ return new ParameterBean(key, ""); //默认替换为空格
}
}
diff --git a/src/test/java/com/test/ExcelToHTMLTest.java b/src/test/java/com/test/ExcelToHTMLTest.java
index 473b39c..d8450e5 100644
--- a/src/test/java/com/test/ExcelToHTMLTest.java
+++ b/src/test/java/com/test/ExcelToHTMLTest.java
@@ -1,20 +1,17 @@
package com.test;
-import com.xiaominge.utils.excleUtils.ExcelToHtml.ExcelToHtmlUtil;
import org.junit.jupiter.api.Test;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelToHTMLTest {
@Test
public void run() throws IOException {
- FileInputStream fileInputStream = new FileInputStream("D:\\桌面\\test1.xlsx");
- FileOutputStream fileOutputStream = new FileOutputStream("D:\\桌面\\test1.html");
-
- boolean isWithStyle = true;
- ExcelToHtmlUtil.excelToHtml(fileInputStream, isWithStyle, fileOutputStream);
+ // FileInputStream fileInputStream = new FileInputStream("D:\\桌面\\test1.xlsx");
+ // FileOutputStream fileOutputStream = new FileOutputStream("D:\\桌面\\test1.html");
+ //
+ // boolean isWithStyle = true;
+ // ExcelToHtmlUtil.excelToHtml(fileInputStream, isWithStyle, fileOutputStream);
}
}
diff --git a/src/test/java/com/test/wordOutput.java b/src/test/java/com/test/wordOutput.java
index 8dbd8e2..54df01f 100644
--- a/src/test/java/com/test/wordOutput.java
+++ b/src/test/java/com/test/wordOutput.java
@@ -11,6 +11,7 @@ import com.xiaominge.utils.wordUtils.wordOutputUtils.wordOut.wordBean.textBean.T
import org.junit.jupiter.api.Test;
import java.io.FileOutputStream;
+import java.io.IOException;
/**
* @program: poi-utils
--
Gitee
From e68a432c7f34d22d53753ee4db8eaa9baf0741d8 Mon Sep 17 00:00:00 2001
From: huangwenhao <1092798160@qq.com>
Date: Fri, 18 Apr 2025 15:07:22 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20[2025-04-18]=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=20WordTemplateUtils=20=E7=B1=BB=E4=B8=AD?=
=?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 优化了段落处理逻辑,提高了代码的可读性和维护性
- 在处理文本循环时增加了索引递增,修复了潜在的无限循环问题
---
.../wordOutputUtils/wordOut/utils/WordTemplateUtils.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java b/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java
index 6d71840..c6bd61f 100644
--- a/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java
+++ b/src/main/java/com/xiaominge/utils/wordUtils/wordOutputUtils/wordOut/utils/WordTemplateUtils.java
@@ -186,7 +186,8 @@ public class WordTemplateUtils {
} else if (BodyElementType.PARAGRAPH.equals(body.getElementType())) { // 处理段落
//log.info("获取到段落");
//获取处理的段落信息
- XWPFParagraph ph = body.getBody().getParagraphArray(curP);
+ IBody body1 = body.getBody();
+ XWPFParagraph ph = body1.getParagraphArray(curP);
if (ph != null) {
//自己封装 段落循环
@@ -253,12 +254,14 @@ public class WordTemplateUtils {
if (textFroReaders == null) {
log.error("未创建" + WordTemplateKeyEnum.textForStart.getKeyCode());
oneForTextList = new ArrayList<>();
+ i++;
continue;
}
OneFor oneFor = textFroReaders.getOneForTextList(forEachKey);
if (oneFor == null) {
log.error("未设置" + WordTemplateKeyEnum.textForStart.getKeyCode());
oneForTextList = new ArrayList<>();
+ i++;
continue;
}
oneForTextList = oneFor.getOneForTextList();
--
Gitee