添加对uint, ushort, byte, sbyte的支持
This commit is contained in:
+67
-38
@@ -3,6 +3,7 @@ using NPOI.XSSF.UserModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using ExcelTool.Parser;
|
||||
|
||||
namespace ExcelTool
|
||||
{
|
||||
@@ -12,36 +13,41 @@ namespace ExcelTool
|
||||
{
|
||||
try
|
||||
{
|
||||
var headers = new List<TableExcelHeader>();
|
||||
IWorkbook wk = null;
|
||||
string extension = Path.GetExtension(fileName);
|
||||
FileStream fs = File.OpenRead(fileName);
|
||||
if (extension.Equals(".xlsx"))
|
||||
wk = new XSSFWorkbook(fs);
|
||||
List<TableExcelHeader> headers = new();
|
||||
|
||||
using FileStream fs = File.OpenRead(fileName);
|
||||
IWorkbook wk = new XSSFWorkbook(fs);
|
||||
ISheet sheet = wk.GetSheetAt(0);
|
||||
IRow row = sheet.GetRow(0); //读取当前第一行的数据
|
||||
var descRow = sheet.GetRow(1);//读取注释
|
||||
for (int j = 0; j < row.LastCellNum; j++)
|
||||
|
||||
IRow nameRow = sheet.GetRow(0); // 字段名
|
||||
IRow typeRow = sheet.GetRow(1); // 类型
|
||||
IRow descRow = sheet.GetRow(2); // 注释
|
||||
|
||||
for (int j = 0; j < nameRow.LastCellNum; j++)
|
||||
{
|
||||
string value = row.GetCell(j).ToString();
|
||||
var descValue = descRow.GetCell(j) == null ? "" : descRow.GetCell(j).ToString();
|
||||
var array = value.Split(',');
|
||||
if (array.Length != 2)
|
||||
string fieldName = nameRow.GetCell(j)?.ToString() ?? "";
|
||||
string fieldType = typeRow.GetCell(j)?.ToString() ?? "";
|
||||
string fieldDesc = descRow.GetCell(j)?.ToString() ?? "";
|
||||
|
||||
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;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine(ex.ToString());
|
||||
ex.ToString().WriteErrorLine();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -52,38 +58,61 @@ namespace ExcelTool
|
||||
{
|
||||
var excelHeader = ExcelHeaders(fileName);
|
||||
var tableRows = new List<TableExcelRow>();
|
||||
IWorkbook wk = null;
|
||||
string extension = Path.GetExtension(fileName);
|
||||
FileStream fs = File.OpenRead(fileName);
|
||||
if (extension.Equals(".xlsx"))
|
||||
wk = new XSSFWorkbook(fs);
|
||||
|
||||
using FileStream fs = File.OpenRead(fileName);
|
||||
IWorkbook wk = new XSSFWorkbook(fs);
|
||||
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();
|
||||
|
||||
for (int j = 0; j < excelHeader.Count; j++)
|
||||
{
|
||||
var cellValue = row.GetCell(j);
|
||||
if (cellValue != null)
|
||||
tableExcelRow.Add(row.GetCell(j).ToString());
|
||||
else
|
||||
tableExcelRow.Add("");
|
||||
var cell = row.GetCell(j);
|
||||
tableExcelRow.Add(GetCellValue(cell));
|
||||
}
|
||||
|
||||
tableRows.Add(tableExcelRow);
|
||||
}
|
||||
|
||||
fs.Close();
|
||||
fs.Dispose();
|
||||
var tableExcelData = new TableExcelData(excelHeader, tableRows);
|
||||
return tableExcelData;
|
||||
return new TableExcelData(excelHeader, tableRows);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine(ex.ToString());
|
||||
ex.ToString().WriteErrorLine();
|
||||
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 "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,50 @@ namespace ExcelTool
|
||||
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"))
|
||||
{
|
||||
if (string.IsNullOrEmpty(data.Item2))
|
||||
@@ -283,6 +327,34 @@ namespace ExcelTool
|
||||
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"))
|
||||
{
|
||||
for (int i = 0; i < numStrs.Length; i++)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace ExcelTool
|
||||
namespace ExcelTool.Parser
|
||||
{
|
||||
public class GenModels
|
||||
{
|
||||
@@ -36,7 +36,14 @@ namespace ExcelTool
|
||||
for (int i = 0; i < headers.Count; i++)
|
||||
{
|
||||
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");
|
||||
var type = headers[i].FieldType.ToLower();
|
||||
if (type.Equals("vector"))
|
||||
@@ -67,6 +74,22 @@ namespace ExcelTool
|
||||
{
|
||||
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<"))
|
||||
{
|
||||
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(" { get; set; }\n");
|
||||
sb.Append(" { get; set; }\n\n");
|
||||
|
||||
}
|
||||
sb.Append("\n\tpublic void DeSerialize(BinaryReader reader)\n");
|
||||
sb.Append("\t{\n");
|
||||
@@ -112,6 +136,22 @@ namespace ExcelTool
|
||||
{
|
||||
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"))
|
||||
{
|
||||
sb.Append($"\t\t{name} = reader.ReadBoolean();\n");
|
||||
@@ -297,7 +337,7 @@ namespace ExcelTool
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine($"类型:{type}没有解析 {fileName}处理异常");
|
||||
$"类型:{type}没有解析 {fileName}处理异常".WriteErrorLine();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -308,7 +348,14 @@ namespace ExcelTool
|
||||
{
|
||||
var type = header.FieldType.ToLower();
|
||||
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");
|
||||
}
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ExcelTool
|
||||
namespace ExcelTool.Parser
|
||||
{
|
||||
public class TableExcelData
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace ExcelTool
|
||||
namespace ExcelTool.Parser
|
||||
{
|
||||
public class TableExcelExportBytes
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace ExcelTool
|
||||
namespace ExcelTool.Parser
|
||||
{
|
||||
public class TableExcelHeader
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ExcelTool
|
||||
namespace ExcelTool.Parser
|
||||
{
|
||||
public class TableExcelRow
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace ExcelTool
|
||||
namespace ExcelTool.Parser
|
||||
{
|
||||
/// <summary>
|
||||
/// 导出格式
|
||||
|
||||
+17
-16
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using ExcelTool.Parser;
|
||||
|
||||
namespace ExcelTool
|
||||
{
|
||||
@@ -13,36 +14,36 @@ namespace ExcelTool
|
||||
string exportPath = "";
|
||||
|
||||
//TableExportFormat format = TableExportFormat.Bytes;
|
||||
if (args != null && args.Length == 1)
|
||||
if (args is { Length: >= 1 })
|
||||
{
|
||||
path = args[0]; //第一个是路径
|
||||
}
|
||||
if (args != null && args.Length == 2)
|
||||
if (args is { Length: >= 2 })
|
||||
{
|
||||
exportPath = args[1]; //第二个是输出路径
|
||||
}
|
||||
DirectoryInfo dirInfo = new DirectoryInfo(path);
|
||||
var csvs = dirInfo.GetFiles("*.csv", SearchOption.AllDirectories);
|
||||
var excels = dirInfo.GetFiles("*.xlsx", SearchOption.AllDirectories);
|
||||
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))
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine("当前exe目录或者目标目录没有csv文件或者excels文件,请重新设置目录");
|
||||
"当前exe目录或者目标目录没有csv文件或者excels文件,请重新设置目录".WriteErrorLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsoleHelper.WriteSuccessLine("==========================================================");
|
||||
ConsoleHelper.WriteSuccessLine("== 根据csv/xlsx生成模板代码和二进制文件工具 ==");
|
||||
ConsoleHelper.WriteSuccessLine("== 说明:将exe放在csv/xlsx目录中或者exe或者传入csv根目录 ==");
|
||||
ConsoleHelper.WriteSuccessLine("==========================================================");
|
||||
"==========================================================".WriteSuccessLine();
|
||||
"== 根据csv/xlsx生成模板代码和二进制文件工具 ==".WriteSuccessLine();
|
||||
"== 说明:将exe放在csv/xlsx目录中或者exe或者传入csv根目录 ==".WriteSuccessLine();
|
||||
"==========================================================".WriteSuccessLine();
|
||||
|
||||
List<string> genExcels = new List<string>();
|
||||
foreach (var csv in csvs)
|
||||
List<string> genExcels = [];
|
||||
foreach (FileInfo csv in csvs)
|
||||
{
|
||||
//生成对应的xlsx文件
|
||||
var tempPath = CsvHelper.CsvToXlsx(csv.FullName);
|
||||
if (string.IsNullOrEmpty(tempPath))
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine($"csv:{csv.FullName}生成xlsx文件出错");
|
||||
$"csv:{csv.FullName}生成xlsx文件出错".WriteErrorLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -58,22 +59,22 @@ namespace ExcelTool
|
||||
bool res = GenModels.GenCSharpModel(file.FullName, exportPath);
|
||||
if (res)
|
||||
{
|
||||
ConsoleHelper.WriteSuccessLine($"{file.Name}CS模板生成成功");
|
||||
$"{file.Name}CS模板生成成功".WriteSuccessLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine($"{file.Name}CS模板生成失败");
|
||||
$"{file.Name}CS模板生成失败".WriteErrorLine();
|
||||
}
|
||||
|
||||
//生成二进制文件,如果list或者vector数据为空则写入0,要根据类型来读取csv的字段数据强转成对应的数据类型然后写入
|
||||
res = TableExcelExportBytes.ExportToFile(file.FullName, exportPath);
|
||||
if (res)
|
||||
{
|
||||
ConsoleHelper.WriteSuccessLine($"{file.Name}二进制数据生成成功");
|
||||
$"{file.Name}二进制数据生成成功".WriteSuccessLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsoleHelper.WriteErrorLine($"{file.Name}二进制数据生成失败");
|
||||
$"{file.Name}二进制数据生成失败".WriteErrorLine();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user