TH1/ExcelExport/README_ExcelExport.md
2025-11-21 17:44:58 +08:00

3.5 KiB
Raw Blame History

Excel导表工具 (MemoryPack版本)

功能说明

这是一个基于MemoryPack序列化的Excel配置表导出工具。它可以将Excel文件转换为C#类和二进制数据文件。

主要特性

  1. 自动生成C#类: 根据Excel表头自动生成对应的C#配置类
  2. MemoryPack序列化: 使用高性能的MemoryPack进行二进制序列化
  3. 动态编译: 运行时动态编译生成的C#代码
  4. 类型安全: 支持多种数据类型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);

注意事项

  1. Excel文件必须是 .xlsx 格式
  2. 第一个数据字段第3列必须是 Id 且类型为 int
  3. 字段名必须符合C#命名规范
  4. 第2行字段位置使用 # 可以忽略该字段
  5. 数据行的第2列使用 # 可以注释该行数据

依赖包

  • EPPlus: Excel文件读取
  • MemoryPack: 高性能序列化
  • Microsoft.CodeAnalysis.CSharp: 动态编译C#代码

配置路径说明

默认配置路径为 ../Config/Excel/,可以在 Export.cs 中修改 excelDir 常量来更改。