Struct 嵌套 Struct

Excel struct 嵌套 struct 的规范说明。

Struct in struct

HelloWorld.xlsx 中的 worksheet ItemConf

RewardIDRewardItemIDRewardItemNum
{Reward}int32{Item}int32int32
Reward’s IDItem’s IDItem’s num
1110

生成结果:

hello_world.proto
// --snip--
option (tableau.workbook) = {name:"HelloWorld.xlsx" namerow:1 typerow:2 noterow:3 datarow:4};

message ItemConf {
  option (tableau.worksheet) = {name:"ItemConf"};

  Reward reward = 1 [(tableau.field) = {name:"Reward"}];
  message Reward {
    int32 id = 1 [(tableau.field) = {name:"ID"}];
    Item item = 2 [(tableau.field) = {name:"Item"}];
    message Item {
      int32 id = 1 [(tableau.field) = {name:"ID"}];
      int32 num = 2 [(tableau.field) = {name:"Num"}];
    }
  }
}
ItemConf.json
{
    "reward": {
        "id": 1,
        "item": {"id": 1, "num": 10}
    }
}

Predefined-struct in struct

common.proto 中预定义的 Item

message Item {
    int32 id = 1 [(tableau.field) = {name:"ID"}];
    int32 num = 2 [(tableau.field) = {name:"Num"}];
}

HelloWorld.xlsx 中的 worksheet ItemConf

RewardIDRewardItemIDRewardItemNum
{Reward}int32{.Item}int32int32
Reward’s IDItem’s IDItem’s num
1110

生成结果:

hello_world.proto
// --snip--
import "common.proto";
option (tableau.workbook) = {name:"HelloWorld.xlsx" namerow:1 typerow:2 noterow:3 datarow:4};

message ItemConf {
  option (tableau.worksheet) = {name:"ItemConf"};

  Reward reward = 1 [(tableau.field) = {name:"Reward"}];
  message Reward {
    int32 id = 1 [(tableau.field) = {name:"ID"}];
    protoconf.Item item = 2 [(tableau.field) = {name:"Item"}];
  }
}
ItemConf.json
{
    "reward": {
        "id": 1,
        "item": {"id": 1, "num": 10}
    }
}

Incell-struct in struct

HelloWorld.xlsx 中的 worksheet ItemConf

RewardIDRewardItem
{Reward}int32{int32 ID, int32 Num}Item
Reward’s IDReward’s item
11,100
2,200

生成结果:

hello_world.proto
// --snip--
option (tableau.workbook) = {name:"HelloWorld.xlsx" namerow:1 typerow:2 noterow:3 datarow:4};

message ItemConf {
  option (tableau.worksheet) = {name:"ItemConf"};

  Reward reward = 1 [(tableau.field) = {name:"Reward"}];
  message Reward {
    int32 id = 1 [(tableau.field) = {name:"ID"}];
    Item item = 2 [(tableau.field) = {name:"Item" span:SPAN_INNER_CELL}];
    message Item {
      int32 id = 1 [(tableau.field) = {name:"ID"}];
      int32 num = 2 [(tableau.field) = {name:"Num"}];
    }
  }
}
ItemConf.json
{
    "reward": {
        "id": 1,
        "item": {"id": 2, "num": 200}
    }
}