diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java index 53fcbbb..86df17b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java @@ -1055,6 +1055,22 @@ public class TencentDocController extends BaseController { log.info("已截断结束行以符合 API 限制: endRow={}, 行数={}", endRow, READ_ROWS_WHEN_USE_ROW_TOTAL); } + // 若之前未取到 rowTotal 或来自 fallback,再次尝试并用 sheet 最大行硬性限制,避免读到 348 超出 324 行 + if (rowTotal <= 0) { + rowTotal = tencentDocService.getSheetRowTotal(accessToken, fileId, sheetId); + } + if (rowTotal > 0) { + if (startRow > rowTotal) { + startRow = Math.max(MIN_START_ROW_WHEN_USE_ROW_TOTAL, + Math.max(effectiveStartRow, rowTotal - READ_ROWS_WHEN_USE_ROW_TOTAL)); + endRow = Math.min(rowTotal, startRow + READ_ROWS_WHEN_USE_ROW_TOTAL - 1); + log.info("按 rowTotal={} 修正范围,避免超出表尾: 第 {} ~ {} 行", rowTotal, startRow, endRow); + } else if (endRow > rowTotal) { + endRow = rowTotal; + log.info("按 rowTotal={} 截断结束行: endRow={}", rowTotal, endRow); + } + } + log.info("开始填充物流链接 - 文件ID: {}, 工作表ID: {}, 起始行: {}, 结束行: {}, rowTotal: {}", fileId, sheetId, startRow, endRow, rowTotal > 0 ? rowTotal : "未获取"); diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/TencentDocServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/TencentDocServiceImpl.java index 37de8c7..c82850c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/TencentDocServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/TencentDocServiceImpl.java @@ -598,9 +598,16 @@ public class TencentDocServiceImpl implements ITencentDocService { continue; } String sid = props.getString("sheetId"); - if (sheetId.equals(sid) && props.containsKey("rowTotal")) { + if (!sheetId.equals(sid)) { + continue; + } + // rowTotal 可能为 rowTotal 或 row_total + if (props.containsKey("rowTotal")) { return Math.max(0, props.getIntValue("rowTotal")); } + if (props.containsKey("row_total")) { + return Math.max(0, props.getIntValue("row_total")); + } } return 0; } catch (Exception e) {