VueWebCoreApi/Tools/ImportExcel.cs
@@ -1148,7 +1148,7 @@
                {
                    mes.code = "300";
                    mes.Message = "文件数据不能为空!";
                    mes.message = "文件数据不能为空!";
                }
            }
@@ -1211,7 +1211,7 @@
                    if (table.Rows.Count <= 0)
                    {
                        mes.code = "300";
                        mes.Message = "主子表文件中数据不能为空!";
                        mes.message = "主子表文件中数据不能为空!";
                    }
                }
            }
@@ -1273,5 +1273,81 @@
            return table.Rows.Count;
        }
        #endregion
        #region
        public static List<ExcelErro> InportExcelToTableListErro(List<DataTable> excelTable)
        {
            List<ExcelErro> list = new List<ExcelErro>();
            for (int i = 0; i < excelTable.Count; i++)
            {
                var emptyColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault(
                    column => column.ColumnName.Contains("*") && excelTable[i].AsEnumerable().Any(row => row.IsNull(column))
                    );
                if (emptyColumn != null)
                {
                    int columnIndex = excelTable[i].Columns.IndexOf(emptyColumn);
                    int rowIndex = excelTable[i].AsEnumerable().ToList().FindIndex(row => row.IsNull(emptyColumn));
                    ExcelErro erro = new ExcelErro();
                    erro.RoeNumber = (rowIndex + 1).ToString();
                    erro.ErrorField = emptyColumn.ColumnName;
                    erro.ErrorCont = "模板表头带*的列中存在空值,第" + (rowIndex + 1).ToString() + "行,必填字段:" + emptyColumn.ColumnName + "为空";
                    list.Add(erro);
                }
                if (excelTable[i].Columns.Cast<DataColumn>().Any(column => column.ColumnName.Contains("M")))
                {
                    var duplicateColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault(
                        column => column.ColumnName.Contains("M") && excelTable[i].AsEnumerable().GroupBy(row => new { Field1 = row[column], Field2 = column.ColumnName.Contains("唯一") }).Any(group => group.Count() > 1));
                    if (duplicateColumn != null)
                    {
                        int columnIndex = excelTable[i].Columns.IndexOf(duplicateColumn);
                        var duplicateRows = excelTable[i].AsEnumerable()
                            .Where(row => row[duplicateColumn] != DBNull.Value)
                            .GroupBy(row => row[duplicateColumn])
                            .Where(group => group.Count() > 1)
                            .SelectMany(group => group.ToList())
                            .ToList();
                        foreach (var row in duplicateRows)
                        {
                            ExcelErro erro = new ExcelErro();
                            erro.RoeNumber = excelTable[i].Rows.IndexOf(row).ToString();
                            erro.ErrorField = duplicateColumn.ColumnName;
                            erro.ErrorCont = "模板表头字段:" + duplicateColumn.ColumnName + "下同一值,对应带(唯一)的列中存在重复值";
                            list.Add(erro);
                        }
                    }
                }
                else
                {
                    var duplicateColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault(
                        column => column.ColumnName.Contains("唯一") && excelTable[i].AsEnumerable().GroupBy(row => row[column]).Any(group => group.Count() > 1));
                    if (duplicateColumn != null)
                    {
                        int columnIndex = excelTable[i].Columns.IndexOf(duplicateColumn);
                        var duplicateRows = excelTable[i].AsEnumerable()
                            .Where(row => row[duplicateColumn] != DBNull.Value)
                            .GroupBy(row => row[duplicateColumn])
                            .Where(group => group.Count() > 1)
                            .SelectMany(group => group.ToList())
                            .ToList();
                        foreach (var row in duplicateRows)
                        {
                            ExcelErro erro = new ExcelErro();
                            erro.RoeNumber = excelTable[i].Rows.IndexOf(row).ToString();
                            erro.ErrorField = duplicateColumn.ColumnName;
                            erro.ErrorCont = "模板表头带(唯一)的列中存在重复值,第" + excelTable[i].Rows.IndexOf(row).ToString() + "行,必填字段:" + duplicateColumn.ColumnName + "重复";
                            list.Add(erro);
                        }
                    }
                }
            }
            return list;
        }
        #endregion
    }
}