3.5 KiB
3.5 KiB
Excel导表工具 (MemoryPack版本)
功能说明
这是一个基于MemoryPack序列化的Excel配置表导出工具。它可以将Excel文件转换为C#类和二进制数据文件。
主要特性
- 自动生成C#类: 根据Excel表头自动生成对应的C#配置类
- MemoryPack序列化: 使用高性能的MemoryPack进行二进制序列化
- 动态编译: 运行时动态编译生成的C#代码
- 类型安全: 支持多种数据类型(int, string, float, array等)
Excel表格格式
Excel表格必须按以下格式组织(从第2行开始):
| 行号 | 内容说明 |
|---|---|
| 第2行 | 字段标记(可用#忽略字段) |
| 第3行 | 字段描述 |
| 第4行 | 字段名称 |
| 第5行 | 字段类型 |
| 第6行起 | 数据行 |
列说明
- 第1列: 注释列(可选)
- 第2列: 数据行标记(用#可忽略该行)
- 第3列起: Id和其他字段数据
文件命名规则
- 普通文件:
ConfigName.xlsx- 标准配置表 - 多表合并:
ConfigName_1.xlsx,ConfigName_2.xlsx- 会合并为同一个ConfigName配置 - 忽略文件: 文件名以
#开头或包含#的文件会被忽略 - 临时文件: 以
~$开头的文件(Excel打开时的临时文件)会被忽略
支持的数据类型
- 基础类型: int, uint, long, float, double, string, bool
- 数组类型: int[], uint[], long[], float[], double[], string[]
- 数组在Excel中用逗号分隔,例如:
1,2,3,4
输出目录结构
ExcelExport/
├── GenerateCS/ # 生成的C#类文件
└── GenerateBytes/ # 生成的二进制文件
使用方法
1. 准备Excel文件
将Excel配置文件放到 ../Config/Excel/ 目录下。
示例Excel结构:
行2: ## ## ##
行3: 描述 ID 名称 等级
行4: Desc Id Name Level
行5: string int string int
行6: 1001 物品1 10
行7: 1002 物品2 20
2. 运行导表工具
cd ExcelExport
dotnet run
或者直接运行编译后的exe:
.\bin\Debug\net8.0\ExcelExport.exe
3. 查看生成结果
- C#类文件:
GenerateCS/目录 - 二进制数据:
GenerateBytes/目录
生成的类结构
每个配置会生成两个类:
// 配置容器类
[MemoryPackable]
public partial class ConfigNameCategory
{
[MemoryPackInclude]
public Dictionary<int, ConfigName> Dict { get; set; }
public ConfigName Get(int id) { ... }
public bool Contain(int id) { ... }
// ...
}
// 配置项类
[MemoryPackable]
public partial class ConfigName
{
[MemoryPackInclude]
public int Id { get; set; }
// 其他字段...
}
加载配置数据(使用方)
// 读取二进制文件
byte[] bytes = File.ReadAllBytes("GenerateBytes/ConfigName.bytes");
// 反序列化
var category = MemoryPackSerializer.Deserialize<ConfigNameCategory>(bytes);
// 使用配置
var config = category.Get(1001);
Console.WriteLine(config.Name);
注意事项
- Excel文件必须是
.xlsx格式 - 第一个数据字段(第3列)必须是
Id且类型为int - 字段名必须符合C#命名规范
- 第2行字段位置使用
#可以忽略该字段 - 数据行的第2列使用
#可以注释该行数据
依赖包
- EPPlus: Excel文件读取
- MemoryPack: 高性能序列化
- Microsoft.CodeAnalysis.CSharp: 动态编译C#代码
配置路径说明
默认配置路径为 ../Config/Excel/,可以在 Export.cs 中修改 excelDir 常量来更改。