forked from davyxu/tabtoy
/
dataheader.go
97 lines (70 loc) · 2.26 KB
/
dataheader.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package v2tov3
import (
"github.com/davyxu/golexer"
"github.com/davyxu/tabtoy/v2tov3/model"
"github.com/davyxu/tabtoy/v3/helper"
v3model "github.com/davyxu/tabtoy/v3/model"
"github.com/tealeg/xlsx"
"strings"
)
func importDataHeader(globals *model.Globals, sourceSheet, targetSheet *xlsx.Sheet, tableName string) (headerList []model.ObjectFieldType) {
var headerRow *xlsx.Row
// 遍历所有行
for col := 0; ; col++ {
var oft model.ObjectFieldType
oft.ObjectType = tableName
oft.Kind = v3model.TypeUsage_HeaderStruct
oft.FieldName = helper.GetSheetValueString(sourceSheet, 0, col)
// 空列,终止
if oft.FieldName == "" {
break
}
// 列头中带有#的,特别是最后一行
if strings.HasPrefix(oft.FieldName, "#") {
continue
}
if headerRow == nil {
headerRow = targetSheet.AddRow()
}
oft.FieldType = helper.GetSheetValueString(sourceSheet, 1, col)
// 元信息
meta := helper.GetSheetValueString(sourceSheet, 2, col)
oft.Meta = golexer.NewKVPair()
if err := oft.Meta.Parse(meta); err != nil {
continue
}
if strings.HasPrefix(oft.FieldType, "[]") {
oft.FieldType = oft.FieldType[2:]
oft.ArraySplitter = oft.Meta.GetString("ListSpliter")
if oft.ArraySplitter == "" {
log.Warnln("array list no ListSpliter:", oft.FieldName, oft.ObjectType)
}
}
oft.Name = helper.GetSheetValueString(sourceSheet, 3, col)
if oft.Name == "" {
log.Warnf("v2的字段注释为空, %s | %s", oft.FieldName, tableName)
oft.Name = oft.FieldName
}
var disabledForV3 string
// 添加V3表头
if globals.TypeIsNoneKind(oft.FieldType) {
disabledForV3 = "#"
}
// 结构体等类型,标记为nong,输出为#
if !model.IsNativeType(oft.FieldType) {
targetOft := globals.ObjectTypeByName(oft.FieldType)
// 类型已经被前置定义,且不是枚举(那就是结构体)时,标记为空,后面不会被使用
if targetOft != nil && targetOft.Kind != v3model.TypeUsage_Enum {
oft.Kind = v3model.TypeUsage_None
}
}
// 新表的表头加列
headerRow.AddCell().SetValue(disabledForV3 + oft.Name)
// 拆分字段填充的数组
if !globals.SourceTypeExists(oft.ObjectType, oft.FieldName) {
globals.AddSourceType(oft)
}
headerList = append(headerList, oft)
}
return
}