跳到主要内容
版本:4.x

Excel 定义 Schema

__tables__.xlsx / __beans__.xlsx / __enums__.xlsx(文件名以工程为准)在表格里维护结构定义。适合业务表频繁加字段、希望策划也能看到结构表的场景。

在 luban.conf 里挂上

"schemaFiles": [
{"fileName": "Defines", "type": ""},
{"fileName": "Datas/__tables__.xlsx", "type": "table"},
{"fileName": "Datas/__beans__.xlsx", "type": "bean"},
{"fileName": "Datas/__enums__.xlsx", "type": "enum"}
]
type内容
table有哪些表、input、index、mode、value 类型等
bean结构体与字段
enum枚举项

三类定义必须分文件(或分表)维护;列名以你工程模板为准,下文用逻辑列名举例。

__tables__ 示例

full_namevalue_typeread_schema_from_fileinputindexmodegroupcomment
TbItemItemfalseitem.xlsxid道具表
item.TbEquipitem.Equiptrueitem/equip.xlsxidmapc,s从数据表头读字段
TbDropListDropEntryfalsedrop.xlsxlist无主键列表
TbUnionKeyUnionRowfalseunion.xlsxkey1+key2list联合主键
TbMultiKeyMultiKeyRowfalsemulti.xlsxkey1,key2list两个独立索引
TbGlobalGlobalConfigfalseglobal.xlsxone全局单例

字段含义:

说明
full_name表全名;可带模块前缀,如 item.TbEquip
value_type行记录 bean 名;可同模块前缀
read_schema_from_filetrue:从 数据表 表头推断 bean 字段;此时不要在 __beans__ 再定义同名 bean
input相对 dataDir 的数据源;多文件用逗号,或 Sheet名@文件.xlsx
index主键;联合用 a+b,多个独立索引用 a,b;list/one 常可空
modemap(默认)/ list / one(或 singleton
group表级导出分组;空则按 luban.confdefault: true 的 group
comment / tags / output注释、标签、自定义输出文件名(可选)

mode / index 对照

需求modeindex生成侧常见用法
普通 id 表空或 mapidGet(id) / 字典
无主键列表list遍历列表
联合主键lista+b多字段唯一
独立多索引lista,b多个查找字典
全局单例one一张表一条(或纵表)配置
警告

多数语言没有内建联合索引 HashMap,目前仅为 C#、Python 等少量语言生成联合索引相关代码;但无论是否生成代码,导出数据时都会按联合索引校验主键合法性。

未写 index 且 mode 为 map 时,常默认取 value bean 的第一个字段。

两种建 bean 的路径

A. 在 __beans__ 显式定义(推荐稳定结构)

__tables__read_schema_from_file=falsevalue_type=Item;在 __beans__ 定义 Item 字段。

B. 从数据表头读定义(适合快速加表)

__tables__read_schema_from_file=true,数据表带 ##var / ##type

##varidnameprice
##typeintstringint
1001金币0

此时 不要 再在 __beans__ 定义同名 Item/Reward,否则重复定义报错。表本身仍须在 __tables__ 注册。

__beans__ 示例

full_nameparentvalueTypesepaliasgroupcommentfields
Vec3true,三维向量(见下)
Cost消耗(见下)
Shape形状基类(可无字段)
CircleShape(见下)

字段列表在 Excel 里通常是嵌套列/子表,逻辑上等价于:

beannametypegroupcomment
Vec3xfloat
Vec3yfloat
Vec3zfloat
Costidint道具 id
Costcountint数量
Circleradiusfloat
说明
full_namebean 全名,可 common.Vec3
parent父类全名;有子类时父类一般为抽象类型
valueTypetrue 时按值类型语义导出(如向量)
sep流式/紧凑填写时的默认分隔符,如 ,
alias多态填表可用的中文别名等
fieldsname / type / group / comment / tags

类型字符串写法见 类型速查;多态见 多态

__enums__ 示例

full_nameflagsuniquecommentitems
Qualityfalsetrue品质(见下)
OpenFlagtrue开关位(见下)

枚举项逻辑示意:

enumnamealiasvaluecomment
QualityWHITE1
QualityGREEN绿2
QualityBLUE3
OpenFlagNone0
OpenFlagA1
OpenFlagB2
OpenFlagCA|Bflags 组合
说明
flags是否按位标志枚举
unique项值是否必须唯一
items.name / alias / value项名、填表别名、显式值(可十/十六进制,或 A\|B

数据表里填 WHITE 均可(有 alias 时)。

与 XML 共存

同一工程可同时有 Defines/*.xml__*.xlsx

  • 向量、公共结构、深继承 → XML(Defines
  • 业务表登记、业务 bean/enum → Excel schema

最终汇入同一套 Schema,类型名不要冲突。

常见坑

  • 只改数据表头,却 read_schema_from_file=false 且未同步 __beans__
  • read_schema_from_file=true 又在 __beans__ 重复定义同名 bean。
  • mode/index 与查找方式不匹配(例如要 Get(id) 却写成 list)。
  • input 路径相对 dataDir,写错会导致「找不到数据」。

相关链接