diff --git a/Assets/ExcelResolver/Excel/hero.xlsx b/Assets/ExcelResolver/Excel/hero.xlsx index 3e6d1a6..4175e88 100644 Binary files a/Assets/ExcelResolver/Excel/hero.xlsx and b/Assets/ExcelResolver/Excel/hero.xlsx differ diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs index e1dc586..fe5296c 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs @@ -4,19 +4,16 @@ namespace Tools.ExcelResolver.Editor { internal class ClassCodeData { - public readonly TableType tableType; - public readonly string className; - public readonly Dictionary fields = new(); - // public readonly FieldData[] fields; - public readonly int[] keyIndex; - // public readonly FieldData[] keyField; + public TableType tableType; + public string className; + public Dictionary fields = new(); + // public FieldData[] fields; + public int[] keyIndex; + // public FieldData[] keyField; - public ClassCodeData(TableType tableType, string className, Dictionary fields, int[] keyIndex) + public ClassCodeData(string className) { - this.tableType = tableType; this.className = $"{char.ToUpper(className[0])}{className.Substring(1)}"; - this.fields = fields; - this.keyIndex = keyIndex; // keyField = new FieldData[keyIndex.Length]; // for (int i = 0; i < keyIndex.Length; i++) diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index e822688..48dbd69 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -29,11 +29,15 @@ namespace Tools.ExcelResolver.Editor Debug.LogError($"Excel:{excelFile.Name} don't have Sheet1 !!"); continue; } - + + var classCodeData = new ClassCodeData(excelFile.Name[..^5]); + var fieldDatas = GetFieldData(worksheet); - var tableType = CheckTableType(worksheet, out var keyIndex); + classCodeData.fields = fieldDatas; + var tableType = CheckTableType(worksheet, classCodeData.className, out var keyIndex); + classCodeData.tableType = tableType; + classCodeData.keyIndex = keyIndex; - var classCodeData = new ClassCodeData(tableType, excelFile.Name[..^5], fieldDatas, keyIndex); WriteDataCode(classCodeData); WriteSOCode(classCodeData); @@ -43,7 +47,7 @@ namespace Tools.ExcelResolver.Editor AssetDatabase.Refresh(); } - private TableType CheckTableType(ExcelWorksheet worksheet, out int[] keyIndex) + private TableType CheckTableType(ExcelWorksheet worksheet, string className, out int[] keyIndex) { var startColumn = worksheet.Dimension.Start.Column; // 起始列 var endColumn = worksheet.Dimension.End.Column; // 结束列 @@ -57,52 +61,52 @@ namespace Tools.ExcelResolver.Editor { type = TableType.SingleKeyTable; var configs = config.Split("|"); - Assert.IsTrue(configs.Length >= 2, "SingleKeyTable配置错误"); + Assert.IsTrue(configs.Length >= 2, $"'{className}'配置错误"); var key = configs[1]; var index = getKeyIndex(key); - Assert.IsTrue(index != -1, "SingleKeyTable配置错误"); + Assert.IsTrue(index != -1, $"'{className}'配置错误"); keyIndex = new[] { index }; } - else if (config.Contains("UnionMultiKeyTable")) - { - type = TableType.UnionMultiKeyTable; - var configs = config.Split("|"); - Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); - var keys = configs[1].Split(","); - keyIndex = new int[keys.Length]; - for (int i = 0; i < keys.Length; i++) - { - var index = getKeyIndex(keys[i]); - Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); - keyIndex[i] = index; - } - } - else if (config.Contains("MultiKeyTable")) - { - type = TableType.MultiKeyTable; - var configs = config.Split("|"); - Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); - var keys = configs[1].Split(","); - keyIndex = new int[keys.Length]; - for (int i = 0; i < keys.Length; i++) - { - var index = getKeyIndex(keys[i]); - Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); - keyIndex[i] = index; - } - } - else if (config.Contains("NotKetTable")) - { - type = TableType.NotKetTable; - } - else if (config.Contains("ColumnTable")) - { - type = TableType.ColumnTable; - } - else - { - Debug.LogError("配置错误"); - } + // else if (config.Contains("UnionMultiKeyTable")) + // { + // type = TableType.UnionMultiKeyTable; + // var configs = config.Split("|"); + // Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); + // var keys = configs[1].Split(","); + // keyIndex = new int[keys.Length]; + // for (int i = 0; i < keys.Length; i++) + // { + // var index = getKeyIndex(keys[i]); + // Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); + // keyIndex[i] = index; + // } + // } + // else if (config.Contains("MultiKeyTable")) + // { + // type = TableType.MultiKeyTable; + // var configs = config.Split("|"); + // Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); + // var keys = configs[1].Split(","); + // keyIndex = new int[keys.Length]; + // for (int i = 0; i < keys.Length; i++) + // { + // var index = getKeyIndex(keys[i]); + // Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); + // keyIndex[i] = index; + // } + // } + // else if (config.Contains("NotKetTable")) + // { + // type = TableType.NotKetTable; + // } + // else if (config.Contains("ColumnTable")) + // { + // type = TableType.ColumnTable; + // } + // else + // { + // Debug.LogError("配置错误"); + // } return type; @@ -126,16 +130,16 @@ namespace Tools.ExcelResolver.Editor private Dictionary GetFieldData(ExcelWorksheet worksheet) { var fieldDatas = new Dictionary(); - var endColumn = worksheet.Dimension.End.Column; - for (int col = 2; col <= endColumn; col++) + for (int col = 2; col <= worksheet.Dimension.End.Column; col++) { - if (string.IsNullOrEmpty(worksheet.Cells[2, col].Text)) continue; + var cellText = worksheet.Cells[2, col].Text; + if (string.IsNullOrEmpty(cellText) || cellText == "##") continue; FieldData fieldData = new FieldData { colIndex = col, - varName = worksheet.Cells[2, col].Text, + varName = cellText, typeString = worksheet.Cells[3, col].Text, type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text), info = worksheet.Cells[4, col].Text, diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs index 80d44fe..bf52485 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs @@ -19,10 +19,10 @@ namespace Tools.ExcelResolver.Editor ReadExcel(); } - foreach (var pair in classCodeDataDict) + foreach (var classCodeDataDictPair in classCodeDataDict) { - var worksheet = pair.Key; - var classCodeData = pair.Value; + var worksheet = classCodeDataDictPair.Key; + var classCodeData = classCodeDataDictPair.Value; Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className); @@ -52,15 +52,18 @@ namespace Tools.ExcelResolver.Editor if (worksheet.Cells[row, 1].Text == "##") continue; ScriptableObject instance = ScriptableObject.CreateInstance(soType); - - for (int col = 2; col <= classCodeData.fields.Keys.Max(); col++) + + foreach (var pair in classCodeData.fields) { + var col = pair.Key; + var fieldData = pair.Value; + var cell = worksheet.Cells[row, col]; if (string.IsNullOrEmpty(cell.Text)) continue; - - object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, classCodeData.fields[col].type, classCodeData.className); - FieldInfo fieldInfo = soType.GetField(classCodeData.fields[col].varName); - if (fieldInfo == null) throw new Exception($"目标类中不存在字段:{classCodeData.fields[col].varName}"); + + object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, fieldData.type, classCodeData.className); + FieldInfo fieldInfo = soType.GetField(fieldData.varName); + if (fieldInfo == null) throw new Exception($"目标类中不存在字段:{fieldData.varName}"); fieldInfo.SetValue(instance, convertedValue); } AssetDatabase.CreateAsset(instance, $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}_{row - 6}.asset");