Skip to content

Commit aae9690

Browse files
committed
修复: v2升级到v3的问题
1 parent 88b5651 commit aae9690

26 files changed

+241
-131
lines changed

entry_v3.go

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ func V3Entry() {
9393
goto Exit
9494
}
9595

96+
report.Log.Debugln("Generate files...")
9697
err = GenFile(globals)
9798
if err != nil {
9899
goto Exit

flag.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ var (
1919
// 文件类型导出
2020
var (
2121
paramPackageName = flag.String("package", "", "override the package name in table @Types")
22-
paramCombineStructName = flag.String("combinename", "Config", "combine struct name, code struct name")
22+
paramCombineStructName = flag.String("combinename", "Table", "combine struct name, code struct name")
2323
paramProtoOut = flag.String("proto_out", "", "output protobuf define (*.proto)")
2424
paramPbtOut = flag.String("pbt_out", "", "output proto text format (*.pbt)")
2525
paramLuaOut = flag.String("lua_out", "", "output lua code (*.lua)")

util/conv.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func StringToPrimitive(str string, value interface{}) (error, bool) {
4242
switch str {
4343
case "是":
4444
v = true
45-
case "否":
45+
case "否", "":
4646
v = false
4747
default:
4848
v, err = strconv.ParseBool(str)

v2tov3/dataheader.go

+10
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ func importDataHeader(globals *model.Globals, sourceSheet, targetSheet *xlsx.She
2727
break
2828
}
2929

30+
// 列头中带有#的,特别是最后一行
31+
if strings.HasPrefix(oft.FieldName, "#") {
32+
continue
33+
}
34+
3035
if headerRow == nil {
3136
headerRow = targetSheet.AddRow()
3237
}
@@ -52,6 +57,11 @@ func importDataHeader(globals *model.Globals, sourceSheet, targetSheet *xlsx.She
5257

5358
oft.Name = helper.GetSheetValueString(sourceSheet, 3, col)
5459

60+
if oft.Name == "" {
61+
log.Warnf("v2的字段注释为空, %s | %s", oft.FieldName, tableName)
62+
oft.Name = oft.FieldName
63+
}
64+
5565
var disabledForV3 string
5666

5767
// 添加V3表头

v2tov3/example/golang_gen.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ type SampleDefine struct {
4040
}
4141

4242
// Combine struct
43-
type Config struct {
43+
type Table struct {
4444
SampleDefine []*SampleDefine // table: SampleDefine
4545
}
46-
47-
//

v2tov3/tab_data.go

+49-13
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import (
55
"github.com/davyxu/tabtoy/v2tov3/model"
66
"github.com/davyxu/tabtoy/v3/helper"
77
"github.com/tealeg/xlsx"
8+
"strings"
89
)
910

10-
func importDatas(globals *model.Globals, sourceSheet, targetSheet *xlsx.Sheet, headerList []model.ObjectFieldType) error {
11+
func importDatas(sourceSheet, targetSheet *xlsx.Sheet, headerList []model.ObjectFieldType, fileName string) error {
1112

1213
var row, col int
1314

@@ -24,14 +25,18 @@ func importDatas(globals *model.Globals, sourceSheet, targetSheet *xlsx.Sheet, h
2425

2526
sourceCell := sourceSheet.Cell(row, col)
2627

28+
sourceCell.Value = strings.TrimSpace(sourceCell.Value)
29+
2730
targetCell := rowData.AddCell()
2831

2932
if header.IsArray() {
3033
targetCell.SetValue(sourceCell.Value)
3134
continue
3235
}
3336

34-
setTargetCell(header.FieldType, sourceCell, targetCell, row, col)
37+
if err := setTargetCell(header.FieldType, sourceCell, targetCell, row, col, fileName); err != nil {
38+
return err
39+
}
3540
}
3641

3742
}
@@ -40,49 +45,80 @@ func importDatas(globals *model.Globals, sourceSheet, targetSheet *xlsx.Sheet, h
4045

4146
}
4247

43-
func setTargetCell(headerFieldType string, sourceCell, targetCell *xlsx.Cell, row, col int) {
48+
func setTargetCell(headerFieldType string, sourceCell, targetCell *xlsx.Cell, row, col int, fileName string) (err error) {
49+
4450
switch headerFieldType {
4551
case "int32", "uint32":
4652

4753
if sourceCell.Value == "" {
48-
targetCell.SetInt(0)
54+
targetCell.SetValue("")
4955
break
5056
}
5157

52-
v, err := sourceCell.Int()
58+
var v int
59+
v, err = sourceCell.Int()
5360
if err != nil {
54-
log.Errorf("单元格转换错误 @%s, %s", util.R1C1ToA1(row+1, col+1), err.Error())
61+
goto OnError
62+
}
63+
64+
if v == 0 {
65+
targetCell.SetValue("")
5566
} else {
5667
targetCell.SetInt(v)
5768
}
5869

5970
case "int64", "uint64":
60-
v, err := sourceCell.Int64()
71+
var v int64
72+
v, err = sourceCell.Int64()
6173
if err != nil {
62-
log.Errorf("单元格转换错误 @%s, %s", util.R1C1ToA1(row+1, col+1), err.Error())
74+
goto OnError
75+
}
76+
77+
if v == 0 {
78+
targetCell.SetValue("")
6379
} else {
6480
targetCell.SetInt64(v)
6581
}
82+
6683
case "float":
6784
if sourceCell.Value == "" {
6885
targetCell.SetFloat(0)
6986
break
7087
}
7188

72-
v, err := sourceCell.Float()
89+
var v float64
90+
v, err = sourceCell.Float()
7391
if err != nil {
74-
log.Errorf("单元格转换错误 @%s, %s", util.R1C1ToA1(row+1, col+1), err.Error())
92+
goto OnError
93+
}
94+
95+
if v == 0 {
96+
targetCell.SetValue("")
7597
} else {
7698
targetCell.SetFloat(v)
7799
}
100+
78101
case "bool":
79102
var v bool
80-
if err, _ := util.StringToPrimitive(sourceCell.Value, &v); err != nil {
81-
log.Errorf("单元格转换错误 @%s, %s", util.R1C1ToA1(row+1, col+1), err.Error())
103+
104+
if err, _ = util.StringToPrimitive(sourceCell.Value, &v); err != nil {
105+
goto OnError
106+
}
107+
108+
if v {
109+
targetCell.SetValue("是")
82110
} else {
83-
targetCell.SetBool(v)
111+
targetCell.SetValue("")
84112
}
113+
85114
default:
86115
targetCell.SetValue(sourceCell.Value)
87116
}
117+
118+
return
119+
120+
OnError:
121+
log.Errorf("单元格转换错误 %s|%s, %s", fileName, util.R1C1ToA1(row+1, col+1), err.Error())
122+
123+
return
88124
}

v2tov3/tab_index.go

+44-7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package v2tov3
33
import (
44
"github.com/davyxu/tabtoy/v2tov3/model"
55
"github.com/davyxu/tabtoy/v3/helper"
6+
"sort"
67
)
78

89
func ExportIndexTable(globals *model.Globals) error {
@@ -12,25 +13,61 @@ func ExportIndexTable(globals *model.Globals) error {
1213
if err != nil {
1314
return err
1415
}
16+
1517
helper.WriteIndexTableHeader(globals.TargetIndexSheet)
1618

19+
var tabList []*helper.MemFileData
20+
1721
globals.TargetTables.VisitAllTable(func(data *helper.MemFileData) bool {
1822

1923
if data.FileName == "Index.xlsx" {
2024
return true
2125
}
2226

23-
var mode string
24-
if data.FileName == "Type.xlsx" {
25-
mode = "类型表"
26-
} else {
27-
mode = "数据表"
27+
tabList = append(tabList, data)
28+
29+
return true
30+
})
31+
32+
// 内容排序
33+
sort.SliceStable(tabList, func(i, j int) bool {
34+
35+
a := tabList[i]
36+
b := tabList[j]
37+
38+
if aMode, bMode := getMode(a), getMode(b); aMode != bMode {
39+
40+
if aMode == "类型表" {
41+
return true
42+
}
43+
44+
if aMode == "数据表" {
45+
return false
46+
}
47+
2848
}
2949

30-
helper.WriteRowValues(globals.TargetIndexSheet, mode, data.TableName+"Define", markFileNameUpgrade(data.FileName)+data.FileName)
50+
if a.TableName != b.TableName {
51+
return a.TableName < b.TableName
52+
}
3153

32-
return true
54+
return a.FileName < b.FileName
3355
})
3456

57+
for _, data := range tabList {
58+
59+
helper.WriteRowValues(globals.TargetIndexSheet, getMode(data), data.TableName+"Define", data.FileName)
60+
}
61+
3562
return nil
3663
}
64+
65+
func getMode(data *helper.MemFileData) (mode string) {
66+
if data.FileName == "Type.xlsx" {
67+
mode = "类型表"
68+
} else {
69+
mode = "数据表"
70+
}
71+
72+
return
73+
}

v2tov3/tab_type.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package v2tov3
22

33
import (
4+
"errors"
5+
"fmt"
46
"github.com/davyxu/golexer"
57
"github.com/davyxu/tabtoy/v2tov3/model"
68
"github.com/davyxu/tabtoy/v3/helper"
@@ -31,7 +33,7 @@ func ExportTypes(globals *model.Globals) error {
3133
return nil
3234
}
3335

34-
func importTypes(globals *model.Globals, sheet *xlsx.Sheet, tabPragma *golexer.KVPair) error {
36+
func importTypes(globals *model.Globals, sheet *xlsx.Sheet, tabPragma *golexer.KVPair, fileName string) error {
3537

3638
pragma := helper.GetSheetValueString(sheet, 0, 0)
3739

@@ -74,14 +76,18 @@ func importTypes(globals *model.Globals, sheet *xlsx.Sheet, tabPragma *golexer.K
7476

7577
if oft.Value == "" {
7678
oft.Kind = table.TableKind_None
79+
} else {
80+
oft.Kind = table.TableKind_Enum
81+
}
82+
83+
if globals.SourceTypeExists(oft.ObjectType, oft.FieldName) {
84+
85+
return errors.New(fmt.Sprintf("重复定义的类型 %s %s @ %s", oft.ObjectType, oft.FieldName, fileName))
7786

87+
} else {
7888
globals.AddSourceType(oft)
79-
continue
8089
}
8190

82-
oft.Kind = table.TableKind_Enum
83-
84-
globals.AddSourceType(oft)
8591
}
8692

8793
return nil

0 commit comments

Comments
 (0)