From a7ef00f627f02d3a5a7f02f2f143d5f70281540b Mon Sep 17 00:00:00 2001 From: Oliver Wong Date: Tue, 10 Mar 2026 15:40:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=90=8C=E4=B8=80=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E7=B0=BF=E5=86=85=E5=A4=9A=E4=B8=AAsheet=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E8=B7=B3=E8=BF=87#=E5=BC=80=E5=A4=B4?= =?UTF-8?q?=E7=9A=84sheet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ExcelTool/ExcelHelper.cs | 34 +- ExcelTool/FileManager.cs | 2 +- ExcelTool/Parser/GenModels.cs | 1076 +++++++++++---------- ExcelTool/Parser/TableExcelExportBytes.cs | 36 +- ExcelTool/Program.cs | 50 +- 5 files changed, 668 insertions(+), 530 deletions(-) diff --git a/ExcelTool/ExcelHelper.cs b/ExcelTool/ExcelHelper.cs index 77baa82..2495e13 100644 --- a/ExcelTool/ExcelHelper.cs +++ b/ExcelTool/ExcelHelper.cs @@ -7,9 +7,9 @@ using ExcelTool.Parser; namespace ExcelTool { - public class ExcelHelper + public static class ExcelHelper { - public static List ExcelHeaders(string fileName) + public static List ExcelHeaders(string fileName, out string sheetName, out int sheetCount, int sheetNum = 0) { try { @@ -17,8 +17,17 @@ namespace ExcelTool using FileStream fs = File.OpenRead(fileName); IWorkbook wk = new XSSFWorkbook(fs); - ISheet sheet = wk.GetSheetAt(0); - + + sheetCount = wk.NumberOfSheets; + if (sheetNum >= sheetCount) + { + sheetName = ""; + return null; + } + + ISheet sheet = wk.GetSheetAt(sheetNum); + sheetName = sheet.SheetName; + IRow nameRow = sheet.GetRow(0); // 字段名 IRow typeRow = sheet.GetRow(1); // 类型 IRow descRow = sheet.GetRow(2); // 注释 @@ -39,7 +48,7 @@ namespace ExcelTool { FieldName = fieldName, FieldType = fieldType, - FieldDesc = fieldDesc + FieldDesc = fieldDesc, }); } @@ -48,20 +57,27 @@ namespace ExcelTool catch (Exception ex) { ex.ToString().WriteErrorLine(); + sheetName = null; + sheetCount = 0; return null; } } - public static TableExcelData ExcelDatas(string fileName) + public static TableExcelData ExcelDatas(string fileName, out string sheetName, out int sheetCount, int sheetNum = 0) { try { - var excelHeader = ExcelHeaders(fileName); + var excelHeader = ExcelHeaders(fileName, out sheetName, out sheetCount); var tableRows = new List(); using FileStream fs = File.OpenRead(fileName); IWorkbook wk = new XSSFWorkbook(fs); - ISheet sheet = wk.GetSheetAt(0); + + if (sheetNum >= sheetCount) + { + return null; + } + ISheet sheet = wk.GetSheetAt(sheetNum); for (int i = 6; i <= sheet.LastRowNum; i++) { @@ -84,6 +100,8 @@ namespace ExcelTool catch (Exception ex) { ex.ToString().WriteErrorLine(); + sheetName = null; + sheetCount = 0; return null; } } diff --git a/ExcelTool/FileManager.cs b/ExcelTool/FileManager.cs index f04de91..0f2aa8f 100644 --- a/ExcelTool/FileManager.cs +++ b/ExcelTool/FileManager.cs @@ -8,7 +8,7 @@ namespace ExcelTool /// /// 文件操作类 /// - public class FileManager + public static class FileManager { public static bool CreateDir(string dirPath) { diff --git a/ExcelTool/Parser/GenModels.cs b/ExcelTool/Parser/GenModels.cs index 54dad05..14adefa 100644 --- a/ExcelTool/Parser/GenModels.cs +++ b/ExcelTool/Parser/GenModels.cs @@ -1,575 +1,665 @@ -using System; +using System; using System.IO; using System.Text; namespace ExcelTool.Parser { - public class GenModels + public static class GenModels { /// /// 生成对应的C#Model类 /// - /// + /// 传入的文件名 + /// 输出cs文件的路径 + /// cs文件要使用的命名空间 /// - public static bool GenCSharpModel(string fileName, string outputDir) + public static bool GenCSharpModel(string fileName, string outputDir, string nameSpace = "") { if (string.IsNullOrEmpty(fileName)) { - ConsoleHelper.WriteErrorLine("GenCSharpModel 参数传递有误"); + "GenCSharpModel 参数传递有误".WriteErrorLine(); return false; } try { - FileInfo fileInfo = new FileInfo(fileName); + FileInfo fileInfo = new(fileName); if (string.IsNullOrEmpty(outputDir)) { outputDir = fileInfo.DirectoryName; } - var headers = ExcelHelper.ExcelHeaders(fileName); - var excelName = fileInfo.Name.Remove(fileInfo.Name.IndexOf(".xlsx")); - StringBuilder sb = new StringBuilder(); - sb.Append($"/*\n * auto generated by tools(注意:千万不要手动修改本文件)\n * {excelName}\n */\n"); - sb.Append("using System;\nusing System.IO;\nusing System.Collections.Generic;\nusing System.Text;\n\n"); - sb.Append("[Serializable]\n"); - sb.Append($"public partial class {excelName} : IBinarySerializable\n"); - sb.Append("{\n"); - for (int i = 0; i < headers.Count; i++) + for (int sheetNum = 0; ; sheetNum++) { - sb.Append($"\t/// \n"); - var descLines = headers[i].FieldDesc?.Replace("\r", "").Split('\n'); - if (descLines != null) + var headers = ExcelHelper.ExcelHeaders(fileName, out string sheetName, out int sheetCount, sheetNum); + if (headers == null || headers.Count == 0 || sheetName.StartsWith("#") || sheetNum > sheetCount) + break; + StringBuilder sb = new(); + sb.Append($"/*\n * auto generated by tools(注意:千万不要手动修改本文件)\n * {sheetName}\n */\n"); + sb.Append("using System;\nusing System.IO;\nusing System.Collections.Generic;\nusing System.Text;\nusing WKMobile.Generated;\n\n"); + + + if (!string.IsNullOrEmpty(nameSpace)) { - foreach (var line in descLines) + sb.Append($"namespace {nameSpace}\n{{\n"); + } + + sb.Append("[Serializable]\n"); + sb.Append($"public partial class {sheetName} : IBinarySerializable\n"); + sb.Append("{\n"); + for (int i = 0; i < headers.Count; i++) + { + sb.Append($"\t/// \n"); + var descLines = headers[i].FieldDesc?.Replace("\r", "").Split('\n'); + if (descLines != null) { - sb.Append($"\t/// {line}\n"); + foreach (var line in descLines) + { + sb.Append($"\t/// {line}\n"); + } } - } - sb.Append($"\t/// \n"); - var type = headers[i].FieldType.ToLower(); - if (type.Equals("vector")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("vectorlist")) - { - sb.Append(string.Format("\tpublic List> {0}", headers[i].FieldName)); - } - else if (type.Equals("intlist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("boollist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("floatlist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("stringlist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("longlist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("uintlist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("ushortlist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("sbytelist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Equals("bytelist")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (type.Contains("list<")) - { - var tempS = type.Substring(5); - var newType = tempS.Substring(0, tempS.Length - 1); - if (newType.Equals("int")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (newType.Equals("bool")) - { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); - } - else if (newType.Equals("float")) + sb.Append($"\t/// \n"); + var type = headers[i].FieldType.ToLower(); + if (type.Equals("vector")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); } - else if (newType.Equals("long")) + else if (type.Equals("vectorlist")) { - sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + sb.Append(string.Format("\tpublic List> {0}", headers[i].FieldName)); } - else if (newType.Equals("string")) + else if (type.Equals("intlist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("boollist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("floatlist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("stringlist")) { sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); } + else if (type.Equals("longlist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("uintlist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("ushortlist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("sbytelist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Equals("bytelist")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (type.Contains("list<")) + { + var tempS = type.Substring(5); + var newType = tempS.Substring(0, tempS.Length - 1); + if (newType.Equals("int")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (newType.Equals("bool")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (newType.Equals("float")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (newType.Equals("long")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else if (newType.Equals("string")) + { + sb.Append(string.Format("\tpublic List {0}", headers[i].FieldName)); + } + else + { + ConsoleHelper.WriteErrorLine("数组类型List,T类型不支持"); + } + } else { - ConsoleHelper.WriteErrorLine("数组类型List,T类型不支持"); + sb.Append(string.Format("\tpublic {0} {1}", headers[i].FieldType.ToLower(), headers[i].FieldName)); } + sb.Append(" { get; set; }\n\n"); } - else + sb.Append("\n\tpublic void DeSerialize(BinaryReader reader)\n"); + sb.Append("\t{\n"); + foreach (var header in headers) { - sb.Append(string.Format("\tpublic {0} {1}", headers[i].FieldType.ToLower(), headers[i].FieldName)); - } - sb.Append(" { get; set; }\n\n"); - - } - sb.Append("\n\tpublic void DeSerialize(BinaryReader reader)\n"); - sb.Append("\t{\n"); - foreach (var header in headers) - { - var type = header.FieldType.ToLower(); - var name = header.FieldName; - if (type.Equals("int")) - { - sb.Append($"\t\t{name} = reader.ReadInt32();\n"); - } - else if (type.Equals("uint")) - { - sb.Append($"\t\t{name} = reader.ReadUInt32();\n"); - }else if (type.Equals("short")) - { - sb.Append($"\t\t{name} = reader.ReadInt16();\n"); - } - else if (type.Equals("ushort")) - { - sb.Append($"\t\t{name} = reader.ReadUInt16();\n"); - } - else if (type.Equals("sbyte")) - { - sb.Append($"\t\t{name} = reader.ReadSByte();\n"); - } - else if (type.Equals("byte")) - { - sb.Append($"\t\t{name} = reader.ReadByte();\n"); - } - else if (type.Equals("bool")) - { - sb.Append($"\t\t{name} = reader.ReadBoolean();\n"); - } - else if (type.Equals("float")) - { - sb.Append($"\t\t{name} = reader.ReadSingle();\n"); - } - else if (type.Equals("string")) - { - sb.Append($"\t\t{name} = reader.ReadString();\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\tvar tempList = new List();\n"); - sb.Append($"\t\t\t\tvar tempListCount = reader.ReadInt32();\n"); - sb.Append($"\t\t\t\tfor (int j = 0; j < tempListCount; j++)\n"); - sb.Append("\t\t\t\t{\n"); - sb.Append($"\t\t\t\t\ttempList.Add(reader.ReadSingle());\n"); - sb.Append("\t\t\t\t}\n"); - sb.Append($"\t\t\t\t{name}.Add(tempList);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt32());\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadBoolean());\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadString());\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - 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\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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt64());\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); - } - else if (type.Contains("list<")) - { - 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\t{\n"); - if (listTType.Equals("int")) + var type = header.FieldType.ToLower(); + var name = header.FieldName; + if (type.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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt32());\n"); + sb.Append($"\t\t{name} = reader.ReadInt32();\n"); } - else if (listTType.Equals("bool")) + else if (type.Equals("uint")) { - 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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadBoolean());\n"); + sb.Append($"\t\t{name} = reader.ReadUInt32();\n"); } - else if (listTType.Equals("float")) + else if (type.Equals("short")) { + sb.Append($"\t\t{name} = reader.ReadInt16();\n"); + } + else if (type.Equals("ushort")) + { + sb.Append($"\t\t{name} = reader.ReadUInt16();\n"); + } + else if (type.Equals("sbyte")) + { + sb.Append($"\t\t{name} = reader.ReadSByte();\n"); + } + else if (type.Equals("byte")) + { + sb.Append($"\t\t{name} = reader.ReadByte();\n"); + } + else if (type.Equals("bool")) + { + sb.Append($"\t\t{name} = reader.ReadBoolean();\n"); + } + else if (type.Equals("float")) + { + sb.Append($"\t\t{name} = reader.ReadSingle();\n"); + } + else if (type.Equals("string")) + { + sb.Append($"\t\t{name} = reader.ReadString();\n"); + } + 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\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\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); } - else if (listTType.Equals("long")) + else if (type.Equals("vectorlist")) { - sb.Append($"\t\t\t{name} = new List();\n"); + sb.Append($"\t\tvar {name}Count = reader.ReadInt32();\n"); + sb.Append($"\t\tif ({name}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\t{\n"); - sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt64());\n"); + sb.Append($"\t\t\t\tvar tempList = new List();\n"); + sb.Append($"\t\t\t\tvar tempListCount = reader.ReadInt32();\n"); + sb.Append($"\t\t\t\tfor (int j = 0; j < tempListCount; j++)\n"); + sb.Append("\t\t\t\t{\n"); + sb.Append($"\t\t\t\t\ttempList.Add(reader.ReadSingle());\n"); + sb.Append("\t\t\t\t}\n"); + sb.Append($"\t\t\t\t{name}.Add(tempList);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); } - else if (listTType.Equals("string")) + 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\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\t{\n"); + sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt32());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + 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\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\t{\n"); + sb.Append($"\t\t\t\t{name}.Add(reader.ReadUInt32());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); + } + 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\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\t{\n"); + sb.Append($"\t\t\t\t{name}.Add(reader.ReadBoolean());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); + } + 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\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\t{\n"); + sb.Append($"\t\t\t\t{name}.Add(reader.ReadSingle());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); + } + 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\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\t{\n"); sb.Append($"\t\t\t\t{name}.Add(reader.ReadString());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); + } + 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\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\t{\n"); + sb.Append($"\t\t\t\t{name}.Add(reader.ReadInt64());\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); + } + else if (type.Contains("list<")) + { + 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\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\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\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\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\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\t{\n"); + sb.Append($"\t\t\t\t{name}.Add(reader.ReadString());\n"); + } + else + { + ConsoleHelper.WriteErrorLine("数组泛型T不是指定类型"); + } + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{name} = null;\n"); + sb.Append("\t\t}\n"); } else { - ConsoleHelper.WriteErrorLine("数组泛型T不是指定类型"); + $"类型:{type}没有解析 {fileName}处理异常".WriteErrorLine(); + return false; } - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{name} = null;\n"); - sb.Append("\t\t}\n"); } - else + sb.Append("\t}\n\n"); + sb.Append("\tpublic void Serialize(BinaryWriter writer)\n"); + sb.Append("\t{\n"); + foreach (var header in headers) { - $"类型:{type}没有解析 {fileName}处理异常".WriteErrorLine(); - return false; - } - } - sb.Append("\t}\n\n"); - sb.Append("\tpublic void Serialize(BinaryWriter writer)\n"); - sb.Append("\t{\n"); - foreach (var header in headers) - { - var type = header.FieldType.ToLower(); - var name = header.FieldName; - if (type.Equals("int") || - type.Equals("bool") || - type.Equals("float") || - type.Equals("string") || - type.Equals("uint") || - type.Equals("ushort") || - type.Equals("short") || - type.Equals("sbyte") || - type.Equals("byte")) - { - sb.Append($"\t\twriter.Write({name});\n"); - } - else if (type.Equals("vector")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Equals("vectorlist")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i].Count);\n"); - sb.Append($"\t\t\t\tfor (int j = 0; j < {name}[i].Count; j++)\n"); - sb.Append("\t\t\t\t{\n"); - sb.Append($"\t\t\t\t\twriter.Write({name}[i][j]);\n"); - sb.Append("\t\t\t\t}\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Equals("intlist")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Equals("boollist")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Equals("floatlist")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Equals("longlist")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Equals("stringlist")) - { - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - } - else if (type.Contains("list<")) - { - var tempS = type.Substring(5); - var listTType = tempS.Substring(0, tempS.Length - 1); - sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); - sb.Append("\t\t{\n"); - sb.Append("\t\t\twriter.Write(0);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t\telse\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\twriter.Write({name}.Count);\n"); - sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); - sb.Append("\t\t\t{\n"); - sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); - sb.Append("\t\t\t}\n"); - sb.Append("\t\t}\n"); - if (listTType.Equals("int")) + var type = header.FieldType.ToLower(); + var name = header.FieldName; + if (type.Equals("int") || + type.Equals("bool") || + type.Equals("float") || + type.Equals("string") || + type.Equals("uint") || + type.Equals("ushort") || + type.Equals("short") || + type.Equals("sbyte") || + type.Equals("byte")) { - + sb.Append($"\t\twriter.Write({name});\n"); } - else if (listTType.Equals("bool")) + else if (type.Equals("vector")) { - + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); } - else if (listTType.Equals("float")) + else if (type.Equals("vectorlist")) { - + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i].Count);\n"); + sb.Append($"\t\t\t\tfor (int j = 0; j < {name}[i].Count; j++)\n"); + sb.Append("\t\t\t\t{\n"); + sb.Append($"\t\t\t\t\twriter.Write({name}[i][j]);\n"); + sb.Append("\t\t\t\t}\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); } - else if (listTType.Equals("long")) + else if (type.Equals("intlist")) { - + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); } - else if (listTType.Equals("string")) + else if (type.Equals("boollist")) { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("floatlist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("longlist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("stringlist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("uintlist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("ushortlist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("sbytelist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + else if (type.Equals("bytelist")) + { + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + } + + else if (type.Contains("list<")) + { + var tempS = type.Substring(5); + var listTType = tempS.Substring(0, tempS.Length - 1); + sb.Append($"\t\tif ({name} == null || {name}.Count == 0)\n"); + sb.Append("\t\t{\n"); + sb.Append("\t\t\twriter.Write(0);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t\telse\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\twriter.Write({name}.Count);\n"); + sb.Append($"\t\t\tfor (int i = 0; i < {name}.Count; i++)\n"); + sb.Append("\t\t\t{\n"); + sb.Append($"\t\t\t\twriter.Write({name}[i]);\n"); + sb.Append("\t\t\t}\n"); + sb.Append("\t\t}\n"); + if (listTType.Equals("int")) + { + } + else if (listTType.Equals("bool")) + { + + } + else if (listTType.Equals("float")) + { + + } + else if (listTType.Equals("long")) + { + + } + else if (listTType.Equals("string")) + { + + } + else + { + ConsoleHelper.WriteErrorLine("数组泛型T不是指定类型"); + } } else { - ConsoleHelper.WriteErrorLine("数组泛型T不是指定类型"); + ConsoleHelper.WriteErrorLine($"类型:{type}没有解析 {fileName}处理异常"); + return false; } } - else - { - ConsoleHelper.WriteErrorLine($"类型:{type}没有解析 {fileName}处理异常"); - return false; - } - } - sb.Append("\t}\n"); - sb.Append("}\n"); + sb.Append("\t}\n"); + sb.Append("}\n"); - sb.Append("\n"); - sb.Append("[Serializable]\n"); - sb.Append($"public partial class {excelName}Config : IBinarySerializable\n"); - sb.Append("{\n"); - // sb.Append($"\tpublic List<{excelName}> {excelName}Infos = new List<{excelName}>();\n"); - sb.Append($"\tDictionary {excelName}Infos = new Dictionary();\n"); - sb.Append($"\tList<{excelName}> {excelName}InfoList;\n"); - sb.Append("\n"); - sb.Append($"\tpublic List<{excelName}> {excelName}List()\n"); - sb.Append("\t{\n"); - sb.Append($"\t\tif ({excelName}InfoList == null)\n"); - sb.Append($"\t\t\t{excelName}InfoList = new List<{excelName}>({excelName}Infos.Values);\n"); - sb.Append($"\t\treturn {excelName}InfoList;\n"); - sb.Append("\t}\n"); - sb.Append("\n"); - sb.Append($"\tpublic void DeSerialize(BinaryReader reader)\n"); - sb.Append("\t{\n"); - sb.Append($"\t\tint count = reader.ReadInt32();\n"); - sb.Append($"\t\tfor (int i = 0;i < count; i++)\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{excelName} tempData = new {excelName}();\n"); - sb.Append($"\t\t\ttempData.DeSerialize(reader);\n"); - // sb.Append($"\t\t\t{excelName}Infos.Add(tempData);\n"); - sb.Append($"\t\t\t{excelName}Infos.Add(tempData.Id, tempData);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t}\n"); - sb.Append("\n"); - sb.Append("\tpublic void Serialize(BinaryWriter writer)\n"); - sb.Append("\t{\n"); - sb.Append($"\t\twriter.Write({excelName}Infos.Count);\n"); - sb.Append($"\t\tfor (int i = 0; i < {excelName}Infos.Count; i++)\n"); - sb.Append("\t\t{\n"); - sb.Append($"\t\t\t{excelName}Infos[i].Serialize(writer);\n"); - sb.Append("\t\t}\n"); - sb.Append("\t}\n\n"); - sb.Append($"\tpublic {excelName} QueryById(int id)\n"); - sb.Append("\t{\n"); - // sb.Append($"\t\tvar datas = from d in {excelName}Infos\n"); - // sb.Append($"\t\t\t\t\twhere d.Id == id\n"); - // sb.Append($"\t\t\t\t\tselect d;\n"); - // sb.Append("\t\treturn datas.First();\n"); - sb.Append($"\t\tif ({excelName}Infos.ContainsKey(id))\n"); - sb.Append($"\t\t\treturn {excelName}Infos[id];\n"); - sb.Append($"\t\telse\n"); - sb.Append($"\t\t\treturn null;\n"); - sb.Append("\t}\n"); - sb.Append("}\n"); - FileManager.WriteToFile(Path.Combine(outputDir, $"{excelName}.cs"), sb.ToString()); + sb.Append("\n"); + sb.Append("[Serializable]\n"); + sb.Append($"public partial class {sheetName}Config : IBinarySerializable\n"); + sb.Append("{\n"); + // sb.Append($"\tpublic List<{excelName}> {excelName}Infos = new List<{excelName}>();\n"); + sb.Append($"\tDictionary m_{sheetName.ToCamelCase()}Infos = new();\n"); + sb.Append($"\tList<{sheetName}> m_{sheetName.ToCamelCase()}InfoList;\n"); + sb.Append("\n"); + sb.Append($"\tpublic List<{sheetName}> {sheetName}List()\n"); + sb.Append("\t{\n"); + sb.Append($"\t\tthis.m_{sheetName.ToCamelCase()}InfoList ??= new List<{sheetName}>(m_{sheetName.ToCamelCase()}Infos.Values);\n"); + sb.Append($"\t\treturn this.m_{sheetName.ToCamelCase()}InfoList;\n"); + sb.Append("\t}\n"); + sb.Append("\n"); + sb.Append($"\tpublic void DeSerialize(BinaryReader reader)\n"); + sb.Append("\t{\n"); + sb.Append($"\t\tint count = reader.ReadInt32();\n"); + sb.Append($"\t\tfor (int i = 0;i < count; i++)\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\t{sheetName} tempData = new();\n"); + sb.Append($"\t\t\ttempData.DeSerialize(reader);\n"); + // sb.Append($"\t\t\t{excelName}Infos.Add(tempData);\n"); + sb.Append($"\t\t\tthis.m_{sheetName.ToCamelCase()}Infos.Add(tempData.Id, tempData);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t}\n"); + sb.Append("\n"); + sb.Append("\tpublic void Serialize(BinaryWriter writer)\n"); + sb.Append("\t{\n"); + sb.Append($"\t\twriter.Write(this.m_{sheetName.ToCamelCase()}Infos.Count);\n"); + sb.Append($"\t\tfor (uint i = 0; i < this.m_{sheetName.ToCamelCase()}Infos.Count; i++)\n"); + sb.Append("\t\t{\n"); + sb.Append($"\t\t\tthis.m_{sheetName.ToCamelCase()}Infos[i].Serialize(writer);\n"); + sb.Append("\t\t}\n"); + sb.Append("\t}\n\n"); + sb.Append($"\tpublic {sheetName} QueryById(uint id)\n"); + sb.Append("\t{\n"); + // sb.Append($"\t\tvar datas = from d in {excelName}Infos\n"); + // sb.Append($"\t\t\t\t\twhere d.Id == id\n"); + // sb.Append($"\t\t\t\t\tselect d;\n"); + // sb.Append("\t\treturn datas.First();\n"); + sb.Append($"\t\treturn this.m_{sheetName.ToCamelCase()}Infos.GetValueOrDefault(id);\n"); + sb.Append("\t}\n"); + sb.Append("}\n"); + + if (!string.IsNullOrEmpty(nameSpace)) + { + sb.Append("}\n"); // namespace 结束 + } + FileManager.WriteToFile(Path.Combine(outputDir, $"{sheetName}.cs"), sb.ToString()); + } return true; } catch (Exception ex) diff --git a/ExcelTool/Parser/TableExcelExportBytes.cs b/ExcelTool/Parser/TableExcelExportBytes.cs index c1e1957..797e67d 100644 --- a/ExcelTool/Parser/TableExcelExportBytes.cs +++ b/ExcelTool/Parser/TableExcelExportBytes.cs @@ -4,34 +4,40 @@ using System.IO; namespace ExcelTool.Parser { - public class TableExcelExportBytes + public static class TableExcelExportBytes { public static bool ExportToFile(string fileName, string outputDir = null) { try { - FileInfo fileInfo = new FileInfo(fileName); + FileInfo fileInfo = new(fileName); if (string.IsNullOrEmpty(outputDir)) { outputDir = fileInfo.DirectoryName; } - var excelName = fileInfo.Name.Remove(fileInfo.Name.IndexOf(".xlsx")); - //先写入行数,然后每一行的数据一次写入 小写类型、字符串 - List> datas = new List>(); - var tableData = ExcelHelper.ExcelDatas(fileName); - Tuple rowCount = new Tuple("int", tableData.RowCounts.ToString()); - datas.Add(rowCount); - foreach (var row in tableData.Rows) + + for (int sheetNum = 0; ; sheetNum++) { - for (int i = 0; i < tableData.CollonCount; i++) + var tableData = ExcelHelper.ExcelDatas(fileName, out string sheetName, out int sheetCount, sheetNum); + if (tableData == null || sheetName.StartsWith($"#") || sheetNum > sheetCount) + break; + + List> datas = new(); + //先写入行数,然后每一行的数据一次写入 小写类型、字符串 + Tuple rowCount = new("int", tableData.RowCounts.ToString()); + datas.Add(rowCount); + foreach (var row in tableData.Rows) { - var type = tableData.Headers[i].FieldType.ToLower(); - var data = row.StrList[i]; - datas.Add(new Tuple(type, data)); + for (int i = 0; i < tableData.CollonCount; i++) + { + var type = tableData.Headers[i].FieldType.ToLower(); + var data = row.StrList[i]; + datas.Add(new Tuple(type, data)); + } } + var binaryFilePath = Path.Combine(outputDir, $"{sheetName}.bytes"); + FileManager.WriteBinaryDatasToFile(binaryFilePath, datas); } - var binaryFilePath = Path.Combine(outputDir, $"{excelName}.bytes"); - FileManager.WriteBinaryDatasToFile(binaryFilePath, datas); return true; } catch (Exception ex) diff --git a/ExcelTool/Program.cs b/ExcelTool/Program.cs index 476e2d8..aa1c806 100644 --- a/ExcelTool/Program.cs +++ b/ExcelTool/Program.cs @@ -11,21 +11,47 @@ namespace ExcelTool static void Main(string[] args) { string path = AppDomain.CurrentDomain.BaseDirectory; - string exportPath = ""; + string outputCodeDir = ""; + string outputDataDir = ""; + string nameSpace = ""; - //TableExportFormat format = TableExportFormat.Bytes; - if (args is { Length: >= 1 }) + foreach (var arg in args) { - path = args[0]; //第一个是路径 + if (arg.StartsWith("--input=")) + { + path = arg["--input=".Length..]; + } + else if (arg.StartsWith("--outputCodeDir=")) + { + outputCodeDir = arg["--outputCodeDir=".Length..]; + + } + else if (arg.StartsWith("--outputDataDir=")) + { + outputDataDir = arg["--outputDataDir=".Length..]; + } + else if (arg.StartsWith("--namespace=")) + { + nameSpace = arg["--namespace=".Length..]; + } } - if (args is { Length: >= 2 }) + + if (string.IsNullOrEmpty(outputCodeDir) && string.IsNullOrEmpty(outputDataDir)) { - exportPath = args[1]; //第二个是输出路径 + outputDataDir = outputCodeDir = path; + }else if (string.IsNullOrEmpty(outputCodeDir)) + { + outputCodeDir = outputDataDir; + }else if (string.IsNullOrEmpty(outputDataDir)) + { + outputDataDir = outputCodeDir; } - DirectoryInfo dirInfo = new DirectoryInfo(path); + + + DirectoryInfo dirInfo = new(path); FileInfo[] csvs = dirInfo.GetFiles("*.csv", SearchOption.AllDirectories); FileInfo[] excels = dirInfo.GetFiles("*.xlsx", SearchOption.AllDirectories); - if ((csvs == null || csvs.Length <= 0) && (excels == null || excels.Length <= 0)) + if ((csvs.Length <= 0) && (excels.Length <= 0)) { "当前exe目录或者目标目录没有csv文件或者excels文件,请重新设置目录".WriteErrorLine(); } @@ -58,7 +84,7 @@ namespace ExcelTool if (file.Name.StartsWith("~$")) return; //生成CS文件 - bool res = GenModels.GenCSharpModel(file.FullName, exportPath); + bool res = GenModels.GenCSharpModel(file.FullName, outputCodeDir, nameSpace); if (res) { $"{file.Name}CS模板生成成功".WriteSuccessLine(); @@ -69,7 +95,7 @@ namespace ExcelTool } //生成二进制文件,如果list或者vector数据为空则写入0,要根据类型来读取csv的字段数据强转成对应的数据类型然后写入 - res = TableExcelExportBytes.ExportToFile(file.FullName, exportPath); + res = TableExcelExportBytes.ExportToFile(file.FullName, outputDataDir); if (res) { $"{file.Name}二进制数据生成成功".WriteSuccessLine(); @@ -86,7 +112,7 @@ namespace ExcelTool File.Delete(genExcels[i]); } - Dictionary dics = new Dictionary(); + Dictionary dics = new(); new List(dics.Values); //读取测试 @@ -102,8 +128,6 @@ namespace ExcelTool //{ // ConsoleHelper.WriteErrorLine("读取失败"); //} - - Console.Read(); } } }