Post

Luban快速上手

Luban快速上手

请先安装 dotnet sdk 8.0或更高版本sdk

官方文档 https://www.datable.cn/docs/beginner

官方样例demo https://gitee.com/focus-creative-games/luban_examples

概念术语

一、表结构

img

上图是一张excel表。红框单元格声明该行类型,蓝框单元格为各类型对应的值。数据按照类型,按行填充。

行首单元格 行类型 说明
##var 字段名行 标识该行数据全为字段名。
##type 字段类型行 常见类型有int,string,bool,double,datetime等
##group 分组行 c表示字段属于客户端,s表示属于属于服务器,c,s表示同时属于所有,留空也表示属于所有。
## 注释行 注释行可以有多行,可以出现在任何位置。
数据行 填充数据的行,可以有多行

注意:

  • ##为首的行,顺序可以交换。其中 ####group可选的。
  • 建议使用蛇形字段命名风格。
  • 当标题行字段名为空或者以’#’开头时,这个列会被当作注释列而忽略。

img

二、数据类型

  1. 基本数据类型

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以外的基础数据格式都可以留空,自动取默认值
  1. 自定义数据类型

官方文档参考

2.1 enum类型

枚举(enum)就是“一个字段只能从一组固定选项里选”。这组固定选项里的每一个选项,就叫枚举项。

枚举定义方式:在官方demo中Datas目录下,可在__enums__.xlsx中定义枚举类型。

img

枚举类型:通过enum表中的flags字段区别一个枚举类型是普通枚举,还是flags枚举

img

  • 普通 enum:一个字段只能取一个枚举项。(比如颜色非黑即白)。其枚举项的值可以是0进制或者16进制整数,也可以为其他枚举项的或值,如 **A B C**
  • flags enum:一个字段可以同时包含 多个枚举项(比如权限同时有 READ 和 WRITE)。其枚举项的值为整数时,要求值只能是2的幂(值%2==0)。

img

flags枚举的枚举值,可以直接写成或值,如 A B C

也可以拆成多列,每列下面填0或1,以此标识该flags枚举字段的值。

左右两红框写法是等价的。

2.2 bean类型

bean,即自定义结构体/对象类型,将多个字段(含基础类型、enum、列表、嵌套 bean)打包成一个可复用的数据结构。

bean定义方式:在官方demo中Datas目录下,可在__beans__.xlsx中定义bean类型。

img

典型的bean文件格式如下:

img

字段 可空 默认值 说明
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)情况就有些不同。

现有以下几个结构体 ShapeCircleRectangle。在Luban中如图定义。

type Shape struct{}

type Circle struct{
    Shape
    radius float32
}
type Rectangle struct{
    Shape
    width float32
    height float32
}

现将Shape称为父Bean,Circle、Triangle称为子Bean。

img

根据上图案例可知:

  • 若一字段声明为父 bean 类型,则需先填写子bean类型名/别名,再依次填充子bean属性值。
  • 一条记录/行数据 只能选择一个子 bean,因为一个字段最终只能实例化成一种具体类型。你不可能让同一个 shape 同时既是 Circle 又是 Rectangle

我们通过上述案例也可以看出,Shape与Circle、Triangle…之间存在“继承关系”。Shape是父类,Circle、Triangle等是子类。我们将Shape 这种有1个及以上子类的类型称为多态类型详见此处

  1. 容器类型

容器类型有array/list/set,map。数据填充格式有以下三种

  • 单行格式:合并单元格,把一个容器的所有数据写在一行内,

img

  • array/list/set :一格一个元素
  • map:第一格 key,第二格 value;然后再下一对
  • 多行格式:只要字段名前加’*‘,则表示以多行方式填写数据,每行一个元素,详细见Excel格式

img

img

  • 单格格式:只占一行,一行只占一个单元格。