Преглед изворни кода

fix(doc): 解决Word文档表格渲染和字段更新问题

- 修复了赛程安排表格渲染逻辑,改用列表方式构建表格数据
- 修复了分组详情表格渲染逻辑,统一使用列表构建方式
- 修复了运动员名单表格渲染逻辑,简化表格创建过程
- 添加了Word文档字段强制更新功能,确保目录等自动内容正确显示
- 升级poi-tl依赖版本从1.9.0到1.10.5以支持更好的文档处理功能
zhou пре 3 дана
родитељ
комит
266c2e9a8a

+ 1 - 1
ruoyi-modules/ruoyi-game-event/pom.xml

@@ -119,7 +119,7 @@
         <dependency>
             <groupId>com.deepoove</groupId>
             <artifactId>poi-tl</artifactId>
-            <version>1.9.0</version>
+            <version>1.10.5</version>
         </dependency>
         <dependency>
             <groupId>org.dromara</groupId>

+ 12 - 11
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/service/impl/AppEventMdServiceImpl.java

@@ -307,14 +307,15 @@ public class AppEventMdServiceImpl implements IAppEventMdService {
             scheduleProjects.sort(Comparator.comparing(GameEventProjectVo::getStartTime));
 
             RowRenderData scheduleHeader = Rows.of("日期", "时间", "项目名称", "项目类型", "比赛场地", "分组数", "每组人数").create();
-            TableRenderData scheduleTable = Tables.create(scheduleHeader);
+            List<RowRenderData> scheduleRows = new ArrayList<>();
+            scheduleRows.add(scheduleHeader);
             for (GameEventProjectVo p : scheduleProjects) {
                 String date = p.getStartTime() != null ? DateUtil.format(p.getStartTime(), "yyyy-MM-dd") : "";
                 String time = p.getStartTime() != null ? DateUtil.format(p.getStartTime(), "HH:mm") : "";
                 if (p.getEndTime() != null) {
                     time += "-" + DateUtil.format(p.getEndTime(), "HH:mm");
                 }
-                scheduleTable.addRow(Rows.of(
+                scheduleRows.add(Rows.of(
                         date,
                         time,
                         p.getProjectName() != null ? p.getProjectName() : "",
@@ -324,7 +325,7 @@ public class AppEventMdServiceImpl implements IAppEventMdService {
                         String.valueOf(p.getGroupNum() != null ? p.getGroupNum() : 0),
                         String.valueOf(p.getParticipateNum() != null ? p.getParticipateNum() : 0)).create());
             }
-            data.put("scheduleTable", scheduleTable);
+            data.put("scheduleTable", Tables.of(scheduleRows.toArray(new RowRenderData[0])).create());
 
             // 3. 各项目分组详情
             Map<String, List<GameEventProjectVo>> projectsByType = allProjects.stream()
@@ -405,7 +406,8 @@ public class AppEventMdServiceImpl implements IAppEventMdService {
                             trackHeaders.add("第" + t + "道");
                         }
                         RowRenderData gHeader = Rows.of(trackHeaders.toArray(new String[0])).create();
-                        TableRenderData gTable = Tables.create(gHeader);
+                        List<RowRenderData> gRows = new ArrayList<>();
+                        gRows.add(gHeader);
 
                         for (int g = 1; g <= includeGroupNumVal; g++) {
                             List<String> rowData = new ArrayList<>();
@@ -422,9 +424,9 @@ public class AppEventMdServiceImpl implements IAppEventMdService {
                                     rowData.add("");
                                 }
                             }
-                            gTable.addRow(Rows.of(rowData.toArray(new String[0])).create());
+                            gRows.add(Rows.of(rowData.toArray(new String[0])).create());
                         }
-                        groupMap.put("groupDetailTable", gTable);
+                        groupMap.put("groupDetailTable", Tables.of(gRows.toArray(new RowRenderData[0])).create());
                         groupList.add(groupMap);
                         groupIndex++;
                     }
@@ -481,11 +483,7 @@ public class AppEventMdServiceImpl implements IAppEventMdService {
                         rowsList.add(Rows.of("", "", "", "", "", "", "", "").create());
                     }
 
-                    TableRenderData ntTable = Tables.create(rowsList.get(0));
-                    for (int i = 1; i < rowsList.size(); i++) {
-                        ntTable.addRow(rowsList.get(i));
-                    }
-                    ntMap.put("athleteTable", ntTable);
+                    ntMap.put("athleteTable", Tables.of(rowsList.toArray(new RowRenderData[0])).create());
                     numberTableRenderList.add(ntMap);
                     index++;
                 }
@@ -526,6 +524,9 @@ public class AppEventMdServiceImpl implements IAppEventMdService {
                 }
             }
 
+            // 强制在打开Word文档时更新域(包括自动更新目录)
+            document.enforceUpdateFields();
+
             response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
             response.setCharacterEncoding("utf-8");
             String fileName = URLEncoder.encode(eventVo.getEventName() + "-秩序册", "UTF-8").replaceAll("\\+", "%20");

BIN
ruoyi-modules/ruoyi-game-event/src/main/resources/template/event_template.docx