修复只生成第一个表byte数据的问题

This commit is contained in:
2026-03-10 17:59:43 +08:00
parent 3689739589
commit 1cf8f41644
3 changed files with 95 additions and 39 deletions
+1 -1
View File
@@ -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<TableExcelRow>();
using FileStream fs = File.OpenRead(fileName);
+75 -36
View File
@@ -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<string, string> 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/// </summary>\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<float> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("vectorlist"))
{
sb.Append(string.Format("\tpublic List<List<float>> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("intlist"))
{
sb.Append(string.Format("\tpublic List<int> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("boollist"))
{
sb.Append(string.Format("\tpublic List<bool> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("floatlist"))
{
sb.Append(string.Format("\tpublic List<float> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("stringlist"))
{
sb.Append(string.Format("\tpublic List<string> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("longlist"))
{
sb.Append(string.Format("\tpublic List<long> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("uintlist"))
{
sb.Append(string.Format("\tpublic List<uint> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("ushortlist"))
{
sb.Append(string.Format("\tpublic List<ushort> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("sbytelist"))
{
sb.Append(string.Format("\tpublic List<sbyte> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (type.Equals("bytelist"))
{
sb.Append(string.Format("\tpublic List<byte> {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<int> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (newType.Equals("bool"))
{
sb.Append(string.Format("\tpublic List<bool> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (newType.Equals("float"))
{
sb.Append(string.Format("\tpublic List<float> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (newType.Equals("long"))
{
sb.Append(string.Format("\tpublic List<long> {0}", headers[i].FieldName));
sb.Append(" { get; set; }\n\n");
}
else if (newType.Equals("string"))
{
sb.Append(string.Format("\tpublic List<string> {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<float>();\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<List<float>>();\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<float>();\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<int>();\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<uint>();\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<bool>();\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<float>();\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<string>();\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<long>();\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<int>();\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<bool>();\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<float>();\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<long>();\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<string>();\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") ||
+19 -2
View File
@@ -10,6 +10,13 @@ namespace ExcelTool.Parser
{
try
{
Dictionary<string, string> 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<Tuple<string, string>> datas = new();
// # 开头的 sheet 只跳过
if (sheetName.StartsWith("#"))
continue;
List<Tuple<string, string>> datas = [];
//先写入行数,然后每一行的数据一次写入 小写类型、字符串
Tuple<string, string> 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<string, string>(type, data));
}
}