diff --git a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java
index 955cc989..0fc7d2f1 100644
--- a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java
+++ b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java
@@ -45,7 +45,9 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -174,7 +176,10 @@ public class ImportFailureExcelUtil {
}
/**
- * 以「原始单元格文本」方式重读导入文件,得到的行用于构造读取阶段的失败明细。
+ * 以「原始单元格文本」方式重读导入文件,得到的行用于构造失败明细。
+ *
+ * 优先使用 Excel 文件真实表头(含动态费用列等模型类未声明的列),保证失败明细
+ * 与原导入模板列一致,用户修正后可直接用该文件重新导入。
*
* 用途:当 {@code ExcelUtil.read(file, XxxExcel.class)} 因单元格无法转换而失败时,
* 已解析的实体列表是不完整的(异常中断了整批读取)。此时用本方法重读一次:
@@ -182,18 +187,36 @@ public class ImportFailureExcelUtil {
* 供导出「原表全量 + 仅出错行带原因」的失败明细。
*
* @param file 上传的 Excel 文件
- * @param excelClass 导入模型类(按列序号反查表头名,用于把列序号映射成列名)
+ * @param excelClass 导入模型类(表头缺失时按列序号反查表头名)
* @return 按行组织的明细数据:每行是「表头名 → 单元格文本」的有序 Map;
* 读不出内容时返回空列表(调用方按空明细处理)
*/
public static List