Luban快速上手
请先安装 dotnet sdk 8.0或更高版本sdk
官方文档 https://www.datable.cn/docs/beginner
官方样例demo https://gitee.com/focus-creative-games/luban_examples
概念术语
一、表结构
上图是一张excel表。红框单元格声明该行类型,蓝框单元格为各类型对应的值。数据按照类型,按行填充。
| 行首单元格 | 行类型 | 说明 |
|---|---|---|
| ##var | 字段名行 | 标识该行数据全为字段名。 |
| ##type | 字段类型行 | 常见类型有int,string,bool,double,datetime等 |
| ##group | 分组行 | c表示字段属于客户端,s表示属于属于服务器,c,s表示同时属于所有,留空也表示属于所有。 |
| ## | 注释行 | 注释行可以有多行,可以出现在任何位置。 |
| 空 | 数据行 | 填充数据的行,可以有多行 |
注意:
- 以
##为首的行,顺序可以交换。其中##,##group是可选的。 - 建议使用蛇形字段命名风格。
- 当标题行字段名为空或者以’#’开头时,这个列会被当作注释列而忽略。
二、数据类型
byte、short、int、long 符合常识,直接填整数
float、double符合常识,直接填浮点数
| 数据类型 | 有效值 | 说明 |
|---|---|---|
| bool | true、false、0、1、是、否 | 大小写不敏感 |
| string | 一切字符串 | 如果希望将字符串中\n替换为换行符,则需要添加上escape=1tag,如string#escape=1 |
| datetime | excel中的内置日期格式yyyy-mm-dd hh:mm:ss 字符串格式yyyy-mm-dd hh:mm 字符串格式。此时秒自动取0yyyy-mm-dd hh 字符串格式。此时分与秒取0yyyy-mm-dd 字符串格式。此时时分秒都取0 | 除了datetime以外的基础数据格式都可以留空,自动取默认值 |
2.1 enum类型
枚举(enum)就是“一个字段只能从一组固定选项里选”。这组固定选项里的每一个选项,就叫枚举项。
枚举定义方式:在官方demo中Datas目录下,可在__enums__.xlsx中定义枚举类型。
枚举类型:通过enum表中的flags字段区别一个枚举类型是普通枚举,还是flags枚举。
-
普通 enum:一个字段只能取一个枚举项。(比如颜色非黑即白)。其枚举项的值可以是0进制或者16进制整数,也可以为其他枚举项的或值,如 **A B C** - flags enum:一个字段可以同时包含 多个枚举项(比如权限同时有 READ 和 WRITE)。其枚举项的值为整数时,要求值只能是2的幂(值%2==0)。
| flags枚举的枚举值,可以直接写成或值,如 A | B | C 。 |
也可以拆成多列,每列下面填0或1,以此标识该flags枚举字段的值。
左右两红框写法是等价的。
2.2 bean类型
bean,即自定义结构体/对象类型,将多个字段(含基础类型、enum、列表、嵌套 bean)打包成一个可复用的数据结构。
bean定义方式:在官方demo中Datas目录下,可在__beans__.xlsx中定义bean类型。
典型的bean文件格式如下:
| 字段 | 可空 | 默认值 | 说明 |
|---|---|---|---|
| full_name | 否 | 类型全名,即可以是不包含命名空间,如 Hello,也可以包含命名空间如 item.Item | |
| parent | 是 | 父类名,如果名字不包含命名空间,会优先从当前命名空间找,再从全局命名空间找 | |
| valueType | 是 | FALSE | 对应schema逻辑结构中isValueType字段 |
| sep | 是 | ||
| alias | 是 | FALSE | |
| comment | 是 | ||
| group | 是 | ||
| tags | 是 | ||
| fields | 否 | 字段列表 |
现有一个结构体Item,我们要将其写成一个bean。如图所示。
type Item struct{
id int
count int
desc string
}
对于这种属性字段都是基本数据类型的bean,填写起来很简单。但如果一个bean的字段是其他bean类型(姑且称之为子bean)情况就有些不同。
现有以下几个结构体 Shape、Circle、Rectangle。在Luban中如图定义。
type Shape struct{}
type Circle struct{
Shape
radius float32
}
type Rectangle struct{
Shape
width float32
height float32
}
现将Shape称为父Bean,Circle、Triangle称为子Bean。
根据上图案例可知:
- 若一字段声明为父 bean 类型,则需先填写子bean类型名/别名,再依次填充子bean属性值。
- 一条记录/行数据 只能选择一个子 bean,因为一个字段最终只能实例化成一种具体类型。你不可能让同一个
shape同时既是Circle又是Rectangle。
我们通过上述案例也可以看出,Shape与Circle、Triangle…之间存在“继承关系”。Shape是父类,Circle、Triangle等是子类。我们将Shape 这种有1个及以上子类的类型称为多态类型。详见此处
容器类型有array/list/set,map。数据填充格式有以下三种:
- 单行格式:合并单元格,把一个容器的所有数据写在一行内,
- array/list/set :一格一个元素
- map:第一格 key,第二格 value;然后再下一对
- 多行格式:只要字段名前加’*‘,则表示以多行方式填写数据,每行一个元素,详细见Excel格式
- 单格格式:只占一行,一行只占一个单元格。