diff --git a/ExcelTool/Parser/GenModels.cs b/ExcelTool/Parser/GenModels.cs index c4677e1..d46d17e 100644 --- a/ExcelTool/Parser/GenModels.cs +++ b/ExcelTool/Parser/GenModels.cs @@ -7,16 +7,6 @@ namespace ExcelTool.Parser { public static class GenModels { - // ── 枚举类型映射(key: 小写类型名,value: C# 枚举类型名)────────────── - // 新增枚举类型只改这里 - private static readonly Dictionary EnumMap = new() - { - { "killmode", "KillMode" }, - { "mixingtype", "MixingType" }, - { "containertype", "ContainerType" }, - { "blendcrossfadetype","BlendCrossFadeType" }, - }; - /// /// 生成对应的 C# Model 类 /// @@ -37,7 +27,7 @@ namespace ExcelTool.Parser for (int sheetNum = 0; ; sheetNum++) { var headers = ExcelHelper.ExcelHeaders(fileName, out string sheetName, out int sheetCount, sheetNum); - if (headers == null || headers.Count == 0 || sheetName.StartsWith('#') || sheetNum > sheetCount) + if (headers == null || headers.Count == 0 || sheetName.StartsWith("#") || sheetNum > sheetCount) break; var sb = new StringBuilder(); @@ -109,13 +99,6 @@ namespace ExcelTool.Parser var type = header.FieldType.ToLower(); var name = header.FieldName; - // 枚举 - if (EnumMap.TryGetValue(type, out var enumCsType)) - { - sb.Append($"\t\t{name} = ({enumCsType})reader.ReadByte();\n"); - continue; - } - // 注册表中的具名类型 var desc = TypeRegistry.Get(type); if (desc != null) @@ -133,13 +116,12 @@ namespace ExcelTool.Parser $"list 的元素类型 \"{elemType}\" 未注册 ({sheetName})".WriteErrorLine(); continue; } - // 读取表达式复用注册表中的 GenDeserialize 只取 ReadXxx() 部分比较麻烦, - // 这里直接用公共辅助方法生成片段 sb.Append(TypeRegistry.GenListDeserialize(name, elemDesc.CSharpType, GetReadExpr(elemDesc))); continue; } - $"类型 \"{type}\" 未注册,{sheetName} 处理异常".WriteErrorLine(); + // 兜底:当枚举处理,类型名直接用 FieldType 原值(保留大小写) + sb.Append($"\t\t{name} = ({header.FieldType})reader.ReadByte();\n"); } sb.Append("\t}\n"); @@ -158,13 +140,6 @@ namespace ExcelTool.Parser var type = header.FieldType.ToLower(); var name = header.FieldName; - // 枚举 - if (EnumMap.ContainsKey(type)) - { - sb.Append($"\t\twriter.Write((byte){name});\n"); - continue; - } - // 注册表 var desc = TypeRegistry.Get(type); if (desc != null) @@ -180,7 +155,8 @@ namespace ExcelTool.Parser continue; } - $"类型 \"{type}\" 未注册,{sheetName} 处理异常".WriteErrorLine(); + // 兜底:当枚举处理 + sb.Append($"\t\twriter.Write((byte){name});\n"); } sb.Append("\t}\n"); @@ -230,9 +206,6 @@ namespace ExcelTool.Parser { var lower = fieldType.ToLower(); - if (EnumMap.TryGetValue(lower, out var enumType)) - return enumType; - var desc = TypeRegistry.Get(lower); if (desc != null) return desc.CSharpType; @@ -244,8 +217,8 @@ namespace ExcelTool.Parser return elemDesc != null ? $"List<{elemDesc.CSharpType}>" : $"List<{elemType}>"; } - // 兜底:直接用原始类型名(可能是用户自定义类型) - return fieldType.ToLower(); + // 兜底:当枚举处理,保留原始类型名大小写 + return fieldType; } /// 尝试解析 list<T> 语法,成功返回元素类型名 diff --git a/ExcelTool/Parser/TableExcelExportBytes.cs b/ExcelTool/Parser/TableExcelExportBytes.cs index 3756c8d..2f1d247 100644 --- a/ExcelTool/Parser/TableExcelExportBytes.cs +++ b/ExcelTool/Parser/TableExcelExportBytes.cs @@ -1,67 +1,64 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace ExcelTool.Parser -{ - public static class TableExcelExportBytes - { - public static bool ExportToFile(string fileName, string outputDir = null) - { - try - { - Dictionary enumMap = new() - { - { "killmode", "byte" }, - { "mixingtype", "byte" }, - { "containertype", "byte" }, - { "blendcrossfadetype", "byte" } - }; - FileInfo fileInfo = new(fileName); - if (string.IsNullOrEmpty(outputDir)) - { - outputDir = fileInfo.DirectoryName; - } - - for (int sheetNum = 0; ; sheetNum++) - { - var tableData = ExcelHelper.ExcelData(fileName, out string sheetName, out int sheetCount, sheetNum); - if (tableData == null || sheetNum >= sheetCount) - break; - - // # 开头的 sheet 只跳过 - if (sheetName.StartsWith("#")) - continue; - - List> datas = []; - //先写入行数,然后每一行的数据一次写入 小写类型、字符串 - Tuple rowCount = new("int", tableData.RowCounts.ToString()); - datas.Add(rowCount); - foreach (var row in tableData.Rows) - { - for (int i = 0; i < tableData.CollonCount; i++) - { - var type = tableData.Headers[i].FieldType.ToLower(); - var data = row.StrList[i]; - - if (enumMap.ContainsKey(type)) - { - type = enumMap[type]; - } - - datas.Add(new Tuple(type, data)); - } - } - var binaryFilePath = Path.Combine(outputDir, $"{sheetName}.bytes"); - FileManager.WriteBinaryDatasToFile(binaryFilePath, datas); - } - return true; - } - catch (Exception ex) - { - ConsoleHelper.WriteErrorLine(ex.ToString()); - return false; - } - } - } -} +using System; +using System.Collections.Generic; +using System.IO; + +namespace ExcelTool.Parser +{ + public static class TableExcelExportBytes + { + public static bool ExportToFile(string fileName, string outputDir = null) + { + try + { + FileInfo fileInfo = new(fileName); + if (string.IsNullOrEmpty(outputDir)) + { + outputDir = fileInfo.DirectoryName; + } + + for (int sheetNum = 0; ; sheetNum++) + { + var tableData = ExcelHelper.ExcelData(fileName, out string sheetName, out int sheetCount, sheetNum); + if (tableData == null || sheetNum >= sheetCount) + break; + + // # 开头的 sheet 只跳过 + if (sheetName.StartsWith("#")) + continue; + + List> datas = []; + //先写入行数,然后每一行的数据一次写入 小写类型、字符串 + Tuple rowCount = new("int", tableData.RowCounts.ToString()); + datas.Add(rowCount); + foreach (var row in tableData.Rows) + { + for (int i = 0; i < tableData.CollonCount; i++) + { + var type = tableData.Headers[i].FieldType.ToLower(); + var data = row.StrList[i]; + + // 未在 TypeRegistry 注册的类型(且不是 list)当枚举处理,写入 byte + if (!TypeRegistry.Contains(type) && !IsGenericList(type)) + { + type = "byte"; + } + + datas.Add(new Tuple(type, data)); + } + } + var binaryFilePath = Path.Combine(outputDir, $"{sheetName}.bytes"); + FileManager.WriteBinaryDatasToFile(binaryFilePath, datas); + } + return true; + } + catch (Exception ex) + { + ConsoleHelper.WriteErrorLine(ex.ToString()); + return false; + } + } + + private static bool IsGenericList(string type) => + type.StartsWith("list<") && type.EndsWith(">"); + } +}