添加对uint, ushort, byte, sbyte的支持

This commit is contained in:
2026-03-10 11:36:26 +08:00
parent 86437ba639
commit 5c4e413949
9 changed files with 215 additions and 69 deletions
+67 -38
View File
@@ -3,6 +3,7 @@ using NPOI.XSSF.UserModel;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using ExcelTool.Parser;
namespace ExcelTool namespace ExcelTool
{ {
@@ -12,36 +13,41 @@ namespace ExcelTool
{ {
try try
{ {
var headers = new List<TableExcelHeader>(); List<TableExcelHeader> headers = new();
IWorkbook wk = null;
string extension = Path.GetExtension(fileName); using FileStream fs = File.OpenRead(fileName);
FileStream fs = File.OpenRead(fileName); IWorkbook wk = new XSSFWorkbook(fs);
if (extension.Equals(".xlsx"))
wk = new XSSFWorkbook(fs);
ISheet sheet = wk.GetSheetAt(0); ISheet sheet = wk.GetSheetAt(0);
IRow row = sheet.GetRow(0); //读取当前第一行的数据
var descRow = sheet.GetRow(1);//读取注释 IRow nameRow = sheet.GetRow(0); // 字段名
for (int j = 0; j < row.LastCellNum; j++) IRow typeRow = sheet.GetRow(1); // 类型
IRow descRow = sheet.GetRow(2); // 注释
for (int j = 0; j < nameRow.LastCellNum; j++)
{ {
string value = row.GetCell(j).ToString(); string fieldName = nameRow.GetCell(j)?.ToString() ?? "";
var descValue = descRow.GetCell(j) == null ? "" : descRow.GetCell(j).ToString(); string fieldType = typeRow.GetCell(j)?.ToString() ?? "";
var array = value.Split(','); string fieldDesc = descRow.GetCell(j)?.ToString() ?? "";
if (array.Length != 2)
if (string.IsNullOrEmpty(fieldName))
{ {
ConsoleHelper.WriteErrorLine("表格第一行类型定义有异常,不是类型,命名的形式"); $"列 {j} 字段名为空".WriteErrorLine();
continue;
} }
else
headers.Add(new TableExcelHeader()
{ {
headers.Add(new TableExcelHeader() { FieldName = array[1], FieldType = array[0], FieldDesc = descValue }); FieldName = fieldName,
FieldType = fieldType,
FieldDesc = fieldDesc
});
} }
}
fs.Close();
fs.Dispose();
return headers; return headers;
} }
catch (Exception ex) catch (Exception ex)
{ {
ConsoleHelper.WriteErrorLine(ex.ToString()); ex.ToString().WriteErrorLine();
return null; return null;
} }
} }
@@ -52,38 +58,61 @@ namespace ExcelTool
{ {
var excelHeader = ExcelHeaders(fileName); var excelHeader = ExcelHeaders(fileName);
var tableRows = new List<TableExcelRow>(); var tableRows = new List<TableExcelRow>();
IWorkbook wk = null;
string extension = Path.GetExtension(fileName); using FileStream fs = File.OpenRead(fileName);
FileStream fs = File.OpenRead(fileName); IWorkbook wk = new XSSFWorkbook(fs);
if (extension.Equals(".xlsx"))
wk = new XSSFWorkbook(fs);
ISheet sheet = wk.GetSheetAt(0); ISheet sheet = wk.GetSheetAt(0);
//跳过注释读取数据
for (int i = 2; i <= sheet.LastRowNum; i++) for (int i = 6; i <= sheet.LastRowNum; i++)
{ {
var row = sheet.GetRow(i); IRow row = sheet.GetRow(i);
if (row == null) continue;
var tableExcelRow = new TableExcelRow(); var tableExcelRow = new TableExcelRow();
for (int j = 0; j < excelHeader.Count; j++) for (int j = 0; j < excelHeader.Count; j++)
{ {
var cellValue = row.GetCell(j); var cell = row.GetCell(j);
if (cellValue != null) tableExcelRow.Add(GetCellValue(cell));
tableExcelRow.Add(row.GetCell(j).ToString());
else
tableExcelRow.Add("");
} }
tableRows.Add(tableExcelRow); tableRows.Add(tableExcelRow);
} }
fs.Close(); return new TableExcelData(excelHeader, tableRows);
fs.Dispose();
var tableExcelData = new TableExcelData(excelHeader, tableRows);
return tableExcelData;
} }
catch (Exception ex) catch (Exception ex)
{ {
ConsoleHelper.WriteErrorLine(ex.ToString()); ex.ToString().WriteErrorLine();
return null; return null;
} }
} }
private static string GetCellValue(ICell cell)
{
if (cell == null)
return "";
switch (cell.CellType)
{
case CellType.String:
return cell.StringCellValue;
case CellType.Numeric:
if (DateUtil.IsCellDateFormatted(cell))
{
return cell.DateCellValue.ToString();
}
return cell.NumericCellValue.ToString();
case CellType.Boolean:
return cell.BooleanCellValue ? "1" : "0";
case CellType.Formula:
return cell.ToString();
default:
return "";
}
}
} }
} }
+72
View File
@@ -81,6 +81,50 @@ namespace ExcelTool
bw.Write(Convert.ToInt32(data.Item2)); bw.Write(Convert.ToInt32(data.Item2));
} }
} }
else if (data.Item1.Equals("uint"))
{
if (string.IsNullOrEmpty(data.Item2))
{
bw.Write(Convert.ToUInt32(0));
}
else
{
bw.Write(Convert.ToUInt32(data.Item2));
}
}
else if (data.Item1.Equals("ushort"))
{
if (string.IsNullOrEmpty(data.Item2))
{
bw.Write(Convert.ToUInt16(0));
}
else
{
bw.Write(Convert.ToUInt16(data.Item2));
}
}
else if (data.Item1.Equals("sbyte"))
{
if (string.IsNullOrEmpty(data.Item2))
{
bw.Write(Convert.ToSByte(0));
}
else
{
bw.Write(Convert.ToSByte(data.Item2));
}
}
else if (data.Item1.Equals("byte"))
{
if (string.IsNullOrEmpty(data.Item2))
{
bw.Write(Convert.ToByte(0));
}
else
{
bw.Write(Convert.ToByte(data.Item2));
}
}
else if (data.Item1.Equals("bool")) else if (data.Item1.Equals("bool"))
{ {
if (string.IsNullOrEmpty(data.Item2)) if (string.IsNullOrEmpty(data.Item2))
@@ -283,6 +327,34 @@ namespace ExcelTool
bw.Write(Convert.ToInt32(numStrs[i])); bw.Write(Convert.ToInt32(numStrs[i]));
} }
} }
else if (listType.Equals("uint"))
{
for (int i = 0; i < numStrs.Length; i++)
{
bw.Write(Convert.ToUInt32(numStrs[i]));
}
}
else if (listType.Equals("ushort"))
{
for (int i = 0; i < numStrs.Length; i++)
{
bw.Write(Convert.ToUInt16(numStrs[i]));
}
}
else if (listType.Equals("sbyte"))
{
for (int i = 0; i < numStrs.Length; i++)
{
bw.Write(Convert.ToSByte(numStrs[i]));
}
}
else if (listType.Equals("byte"))
{
for (int i = 0; i < numStrs.Length; i++)
{
bw.Write(Convert.ToByte(numStrs[i]));
}
}
else if (listType.Equals("bool")) else if (listType.Equals("bool"))
{ {
for (int i = 0; i < numStrs.Length; i++) for (int i = 0; i < numStrs.Length; i++)
+53 -6
View File
@@ -1,8 +1,8 @@
using System; using System;
using System.IO; using System.IO;
using System.Text; using System.Text;
namespace ExcelTool namespace ExcelTool.Parser
{ {
public class GenModels public class GenModels
{ {
@@ -36,7 +36,14 @@ namespace ExcelTool
for (int i = 0; i < headers.Count; i++) for (int i = 0; i < headers.Count; i++)
{ {
sb.Append($"\t/// <summary>\n"); sb.Append($"\t/// <summary>\n");
sb.Append($"\t/// {headers[i].FieldDesc}\n"); var descLines = headers[i].FieldDesc?.Replace("\r", "").Split('\n');
if (descLines != null)
{
foreach (var line in descLines)
{
sb.Append($"\t/// {line}\n");
}
}
sb.Append($"\t/// </summary>\n"); sb.Append($"\t/// </summary>\n");
var type = headers[i].FieldType.ToLower(); var type = headers[i].FieldType.ToLower();
if (type.Equals("vector")) if (type.Equals("vector"))
@@ -67,6 +74,22 @@ namespace ExcelTool
{ {
sb.Append(string.Format("\tpublic List<long> {0}", headers[i].FieldName)); sb.Append(string.Format("\tpublic List<long> {0}", headers[i].FieldName));
} }
else if (type.Equals("uintlist"))
{
sb.Append(string.Format("\tpublic List<uint> {0}", headers[i].FieldName));
}
else if (type.Equals("ushortlist"))
{
sb.Append(string.Format("\tpublic List<ushort> {0}", headers[i].FieldName));
}
else if (type.Equals("sbytelist"))
{
sb.Append(string.Format("\tpublic List<sbyte> {0}", headers[i].FieldName));
}
else if (type.Equals("bytelist"))
{
sb.Append(string.Format("\tpublic List<byte> {0}", headers[i].FieldName));
}
else if (type.Contains("list<")) else if (type.Contains("list<"))
{ {
var tempS = type.Substring(5); var tempS = type.Substring(5);
@@ -100,7 +123,8 @@ namespace ExcelTool
{ {
sb.Append(string.Format("\tpublic {0} {1}", headers[i].FieldType.ToLower(), headers[i].FieldName)); sb.Append(string.Format("\tpublic {0} {1}", headers[i].FieldType.ToLower(), headers[i].FieldName));
} }
sb.Append(" { get; set; }\n"); sb.Append(" { get; set; }\n\n");
} }
sb.Append("\n\tpublic void DeSerialize(BinaryReader reader)\n"); sb.Append("\n\tpublic void DeSerialize(BinaryReader reader)\n");
sb.Append("\t{\n"); sb.Append("\t{\n");
@@ -112,6 +136,22 @@ namespace ExcelTool
{ {
sb.Append($"\t\t{name} = reader.ReadInt32();\n"); 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("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")) else if (type.Equals("bool"))
{ {
sb.Append($"\t\t{name} = reader.ReadBoolean();\n"); sb.Append($"\t\t{name} = reader.ReadBoolean();\n");
@@ -297,7 +337,7 @@ namespace ExcelTool
} }
else else
{ {
ConsoleHelper.WriteErrorLine($"类型:{type}没有解析 {fileName}处理异常"); $"类型:{type}没有解析 {fileName}处理异常".WriteErrorLine();
return false; return false;
} }
} }
@@ -308,7 +348,14 @@ namespace ExcelTool
{ {
var type = header.FieldType.ToLower(); var type = header.FieldType.ToLower();
var name = header.FieldName; var name = header.FieldName;
if (type.Equals("int") || type.Equals("bool") || type.Equals("float") || type.Equals("string")) if (type.Equals("int") ||
type.Equals("bool") ||
type.Equals("float") ||
type.Equals("string") ||
type.Equals("uint") ||
type.Equals("ushort") ||
type.Equals("sbyte") ||
type.Equals("byte"))
{ {
sb.Append($"\t\twriter.Write({name});\n"); sb.Append($"\t\twriter.Write({name});\n");
} }
+2 -5
View File
@@ -1,10 +1,7 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExcelTool namespace ExcelTool.Parser
{ {
public class TableExcelData public class TableExcelData
{ {
+1 -1
View File
@@ -2,7 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
namespace ExcelTool namespace ExcelTool.Parser
{ {
public class TableExcelExportBytes public class TableExcelExportBytes
{ {
+1 -1
View File
@@ -1,4 +1,4 @@
namespace ExcelTool namespace ExcelTool.Parser
{ {
public class TableExcelHeader public class TableExcelHeader
{ {
+1 -1
View File
@@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace ExcelTool namespace ExcelTool.Parser
{ {
public class TableExcelRow public class TableExcelRow
{ {
+1 -1
View File
@@ -1,4 +1,4 @@
namespace ExcelTool namespace ExcelTool.Parser
{ {
/// <summary> /// <summary>
/// 导出格式 /// 导出格式
+17 -16
View File
@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using ExcelTool.Parser;
namespace ExcelTool namespace ExcelTool
{ {
@@ -13,36 +14,36 @@ namespace ExcelTool
string exportPath = ""; string exportPath = "";
//TableExportFormat format = TableExportFormat.Bytes; //TableExportFormat format = TableExportFormat.Bytes;
if (args != null && args.Length == 1) if (args is { Length: >= 1 })
{ {
path = args[0]; //第一个是路径 path = args[0]; //第一个是路径
} }
if (args != null && args.Length == 2) if (args is { Length: >= 2 })
{ {
exportPath = args[1]; //第二个是输出路径 exportPath = args[1]; //第二个是输出路径
} }
DirectoryInfo dirInfo = new DirectoryInfo(path); DirectoryInfo dirInfo = new DirectoryInfo(path);
var csvs = dirInfo.GetFiles("*.csv", SearchOption.AllDirectories); FileInfo[] csvs = dirInfo.GetFiles("*.csv", SearchOption.AllDirectories);
var excels = dirInfo.GetFiles("*.xlsx", SearchOption.AllDirectories); FileInfo[] excels = dirInfo.GetFiles("*.xlsx", SearchOption.AllDirectories);
if ((csvs == null || csvs.Length <= 0) && (excels == null || excels.Length <= 0)) if ((csvs == null || csvs.Length <= 0) && (excels == null || excels.Length <= 0))
{ {
ConsoleHelper.WriteErrorLine("当前exe目录或者目标目录没有csv文件或者excels文件,请重新设置目录"); "当前exe目录或者目标目录没有csv文件或者excels文件,请重新设置目录".WriteErrorLine();
} }
else else
{ {
ConsoleHelper.WriteSuccessLine("=========================================================="); "==========================================================".WriteSuccessLine();
ConsoleHelper.WriteSuccessLine("== 根据csv/xlsx生成模板代码和二进制文件工具 =="); "== 根据csv/xlsx生成模板代码和二进制文件工具 ==".WriteSuccessLine();
ConsoleHelper.WriteSuccessLine("== 说明:将exe放在csv/xlsx目录中或者exe或者传入csv根目录 =="); "== 说明:将exe放在csv/xlsx目录中或者exe或者传入csv根目录 ==".WriteSuccessLine();
ConsoleHelper.WriteSuccessLine("=========================================================="); "==========================================================".WriteSuccessLine();
List<string> genExcels = new List<string>(); List<string> genExcels = [];
foreach (var csv in csvs) foreach (FileInfo csv in csvs)
{ {
//生成对应的xlsx文件 //生成对应的xlsx文件
var tempPath = CsvHelper.CsvToXlsx(csv.FullName); var tempPath = CsvHelper.CsvToXlsx(csv.FullName);
if (string.IsNullOrEmpty(tempPath)) if (string.IsNullOrEmpty(tempPath))
{ {
ConsoleHelper.WriteErrorLine($"csv:{csv.FullName}生成xlsx文件出错"); $"csv:{csv.FullName}生成xlsx文件出错".WriteErrorLine();
} }
else else
{ {
@@ -58,22 +59,22 @@ namespace ExcelTool
bool res = GenModels.GenCSharpModel(file.FullName, exportPath); bool res = GenModels.GenCSharpModel(file.FullName, exportPath);
if (res) if (res)
{ {
ConsoleHelper.WriteSuccessLine($"{file.Name}CS模板生成成功"); $"{file.Name}CS模板生成成功".WriteSuccessLine();
} }
else else
{ {
ConsoleHelper.WriteErrorLine($"{file.Name}CS模板生成失败"); $"{file.Name}CS模板生成失败".WriteErrorLine();
} }
//生成二进制文件,如果list或者vector数据为空则写入0,要根据类型来读取csv的字段数据强转成对应的数据类型然后写入 //生成二进制文件,如果list或者vector数据为空则写入0,要根据类型来读取csv的字段数据强转成对应的数据类型然后写入
res = TableExcelExportBytes.ExportToFile(file.FullName, exportPath); res = TableExcelExportBytes.ExportToFile(file.FullName, exportPath);
if (res) if (res)
{ {
ConsoleHelper.WriteSuccessLine($"{file.Name}二进制数据生成成功"); $"{file.Name}二进制数据生成成功".WriteSuccessLine();
} }
else else
{ {
ConsoleHelper.WriteErrorLine($"{file.Name}二进制数据生成失败"); $"{file.Name}二进制数据生成失败".WriteErrorLine();
} }
} }