|
|
@@ -510,15 +510,21 @@ public class AiCleanService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 主表块内有合并区、或表头上方存在标题/说明行时认为需要结构归一。
|
|
|
+ * 主表块内有合并区时才认为需要结构归一。
|
|
|
*
|
|
|
* <p>合并区只看<b>主块自己的</b>({@link SheetEvidence#primaryMergeCount()}):
|
|
|
* 旧实现用整个 sheet 的合并区数一票否决,远处一个无关合并格就能把整张表打入人工
|
|
|
* (评审 P2-7);而 Fesod 读数只会被本块范围内的合并区弄脏,块外的不影响主块。
|
|
|
* STRUCTURING 状态留给 P1 的结构归一出口(A2/A3),本版本仍不执行。
|
|
|
+ *
|
|
|
+ * <p><b>2026-10-13 放宽</b>:不再把 {@code headerRow > 1}(表头前有标题/说明行)当硬失败 ——
|
|
|
+ * {@link com.zsjz.ai.module.aiclean.probe.BlockDetector} 取第一个密集行作表头,
|
|
|
+ * 「机动车信息」这种单标题行 + 表头行的常见文件已被正确定位,数据读取一律按探测行号切,
|
|
|
+ * 完全可以清洗;旧条件拦下的恰恰都是这类可清洗文件(用户实测:智能清洗"成功"但数据没进表)。
|
|
|
+ * 真正会读错位的是合并单元格,仍由此条件拦住。
|
|
|
*/
|
|
|
private boolean needsStructure(SheetEvidence ev) {
|
|
|
- return ev.primaryMergeCount() > 0 || ev.primaryBlock().headerRow() > 1;
|
|
|
+ return ev.primaryMergeCount() > 0;
|
|
|
}
|
|
|
|
|
|
/**
|