From 1cf8f4164472166dd7d782b8ff6a671fed0d58e9 Mon Sep 17 00:00:00 2001 From: Oliver Wong Date: Tue, 10 Mar 2026 17:59:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=AA=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E4=B8=AA=E8=A1=A8byte=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ExcelTool/ExcelHelper.cs | 2 +- ExcelTool/Parser/GenModels.cs | 111 +++++++++++++++------- ExcelTool/Parser/TableExcelExportBytes.cs | 21 +++- 3 files changed, 95 insertions(+), 39 deletions(-) diff --git a/ExcelTool/ExcelHelper.cs b/ExcelTool/ExcelHelper.cs index 2495e13..c459fbf 100644 --- a/ExcelTool/ExcelHelper.cs +++ b/ExcelTool/ExcelHelper.cs @@ -67,7 +67,7 @@ namespace ExcelTool { try { - var excelHeader = ExcelHeaders(fileName, out sheetName, out sheetCount); + var excelHeader = ExcelHeaders(fileName, out sheetName, out sheetCount, sheetNum); var tableRows = new List(); using FileStream fs = File.OpenRead(fileName); diff --git a/ExcelTool/Parser/GenModels.cs b/ExcelTool/Parser/GenModels.cs index d591001..ee320e0 100644 --- a/ExcelTool/Parser/GenModels.cs +++ b/ExcelTool/Parser/GenModels.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Text; @@ -22,6 +23,14 @@ namespace ExcelTool.Parser } try { + // 枚举类型映射 + Dictionary enumMap = new() + { + { "killmode", "KillMode" }, + { "mixingtype", "MixingType" }, + { "containertype", "ContainerType" }, + { "blendcrossfadetype", "BlendCrossFadeType" } + }; FileInfo fileInfo = new(fileName); if (string.IsNullOrEmpty(outputDir)) { @@ -58,49 +67,66 @@ namespace ExcelTool.Parser } sb.Append($"\t/// \n"); var type = headers[i].FieldType.ToLower(); - if (type.Equals("vector")) + var origType = headers[i].FieldType; + var fieldName = headers[i].FieldName; + if (enumMap.ContainsKey(type)) + { + sb.Append($"\tpublic {enumMap[type]} {fieldName} {{ get; set; }}\n\n"); + } + else if (type.Equals("vector")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("vectorlist")) { sb.Append(string.Format("\tpublic List> {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("intlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("boollist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("floatlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("stringlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("longlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("uintlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("ushortlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("sbytelist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Equals("bytelist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (type.Contains("list<")) { @@ -109,22 +135,27 @@ namespace ExcelTool.Parser if (newType.Equals("int")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (newType.Equals("bool")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (newType.Equals("float")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (newType.Equals("long")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else if (newType.Equals("string")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } else { @@ -134,8 +165,8 @@ namespace ExcelTool.Parser else { sb.Append(string.Format("\tpublic {0} {1}", headers[i].FieldType.ToLower(), headers[i].FieldName)); + sb.Append(" { get; set; }\n\n"); } - sb.Append(" { get; set; }\n\n"); } sb.Append("\n\tpublic void DeSerialize(BinaryReader reader)\n"); sb.Append("\t{\n"); @@ -143,7 +174,11 @@ namespace ExcelTool.Parser { var type = header.FieldType.ToLower(); var name = header.FieldName; - if (type.Equals("int")) + if (enumMap.ContainsKey(type)) + { + sb.Append($"\t\t{name} = ({enumMap[type]})reader.ReadByte();\n"); + } + else if (type.Equals("int")) { sb.Append($"\t\t{name} = reader.ReadInt32();\n"); } @@ -181,11 +216,11 @@ namespace ExcelTool.Parser } else if (type.Equals("vector")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); sb.Append("\t\t\t}\n"); @@ -197,11 +232,11 @@ namespace ExcelTool.Parser } else if (type.Equals("vectorlist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List>();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\tvar tempList = new List();\n"); sb.Append($"\t\t\t\tvar tempListCount = reader.ReadInt32();\n"); @@ -219,11 +254,11 @@ namespace ExcelTool.Parser } else if (type.Equals("intlist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt32());\n"); sb.Append("\t\t\t}\n"); @@ -234,11 +269,11 @@ namespace ExcelTool.Parser sb.Append("\t\t}\n"); }else if (type.Equals("uintlist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadUInt32());\n"); sb.Append("\t\t\t}\n"); @@ -250,11 +285,11 @@ namespace ExcelTool.Parser } else if (type.Equals("boollist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadBoolean());\n"); sb.Append("\t\t\t}\n"); @@ -266,11 +301,11 @@ namespace ExcelTool.Parser } else if (type.Equals("floatlist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); sb.Append("\t\t\t}\n"); @@ -282,11 +317,11 @@ namespace ExcelTool.Parser } else if (type.Equals("stringlist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadString());\n"); sb.Append("\t\t\t}\n"); @@ -298,11 +333,11 @@ namespace ExcelTool.Parser } else if (type.Equals("longlist")) { - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt64());\n"); sb.Append("\t\t\t}\n"); @@ -316,47 +351,47 @@ namespace ExcelTool.Parser { var tempS = type.Substring(5); var listTType = tempS.Substring(0, tempS.Length - 1); - sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); - sb.Append($"\t\tif ({name}Count > 0)\n"); + sb.Append($"\t\tvar {name.ToCamelCase()}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name.ToCamelCase()}Count > 0)\n"); sb.Append("\t\t{\n"); if (listTType.Equals("int")) { sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt32());\n"); } else if (listTType.Equals("bool")) { sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadBoolean());\n"); } else if (listTType.Equals("float")) { sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); } else if (listTType.Equals("long")) { sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt64());\n"); } else if (listTType.Equals("string")) { sb.Append($"\t\t\t{name} = new List();\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}Count; i++)\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name.ToCamelCase()}Count; i++)\n"); sb.Append("\t\t\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadString());\n"); } else { - ConsoleHelper.WriteErrorLine("数组泛型T不是指定类型"); + "数组泛型T不是指定类型".WriteErrorLine(); } sb.Append("\t\t\t}\n"); sb.Append("\t\t}\n"); @@ -378,7 +413,11 @@ namespace ExcelTool.Parser { var type = header.FieldType.ToLower(); var name = header.FieldName; - if (type.Equals("int") || + if (enumMap.ContainsKey(type)) + { + sb.Append($"\t\twriter.Write((byte){name});\n"); + } + else if (type.Equals("int") || type.Equals("bool") || type.Equals("float") || type.Equals("string") || diff --git a/ExcelTool/Parser/TableExcelExportBytes.cs b/ExcelTool/Parser/TableExcelExportBytes.cs index 797e67d..5289fa1 100644 --- a/ExcelTool/Parser/TableExcelExportBytes.cs +++ b/ExcelTool/Parser/TableExcelExportBytes.cs @@ -10,6 +10,13 @@ namespace ExcelTool.Parser { try { + Dictionary enumMap = new() + { + { "killmode", "byte" }, + { "mixingtype", "byte" }, + { "containertype", "byte" }, + { "blendcrossfadetype", "byte" } + }; FileInfo fileInfo = new(fileName); if (string.IsNullOrEmpty(outputDir)) { @@ -19,10 +26,14 @@ namespace ExcelTool.Parser for (int sheetNum = 0; ; sheetNum++) { var tableData = ExcelHelper.ExcelDatas(fileName, out string sheetName, out int sheetCount, sheetNum); - if (tableData == null || sheetName.StartsWith($"#") || sheetNum > sheetCount) + if (tableData == null || sheetNum >= sheetCount) break; - List> datas = new(); + // # 开头的 sheet 只跳过 + if (sheetName.StartsWith("#")) + continue; + + List> datas = []; //先写入行数,然后每一行的数据一次写入 小写类型、字符串 Tuple rowCount = new("int", tableData.RowCounts.ToString()); datas.Add(rowCount); @@ -32,6 +43,12 @@ namespace ExcelTool.Parser { 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)); } }