表格添加方法
May 11, 2017 · View on GitHub
导表工具支持两种导表方式,直接模式(Direct)和配置模式(Config)。需要根据自己项目的情况,选择合适的模式。
空白行或者列都是有效数据分割符,位于空白列右侧或空白行下侧,都会被导表工具忽略,因此可以存放注释或临时数据。
1.直接模式
直接模式下,程序使用的字段名(field)和字段类型,都由表头提供。

| Excel行 | 描述 |
|---|---|
| 1 | 表格属性。可以描述表格版本,键值是否唯一,表格描述等参数。 |
| 2 | 预留。可以通过修改配置参数SHEET_ROW_INDEX,来移除改行。 |
| 3 | 表头文字描述。建议保持唯一 |
| 4 | 程序使用的字段名。必须唯一 |
| 5 | 字段的类型。目前支持:int, long, float, boolean, String。复杂类型都会转成String类型。 |
| 6 | 从该行开始,都是数据。 |
数据的第一列为表格的键值(key),key可以不唯一,但必须要在表格属性中指定。
表格属性
Excel表的第一行为表格属性。每两列为一组,每组第一列为描述,第二列为数值。
| A | B | C | D | E | F |
|---|---|---|---|---|---|
| 版本: | 100 | 键值是否重复: | 1 | 说明: | 这是一张测试表 |
如果要添加额外的表格属性,可以修改配置文件的ARGUMENT_CONVERTER
2.配置模式
配置模式下,程序使用的字段名和字段类型,都由脚本提供。表头只需要提供一行中文表头。
表格结构

| 行 | 描述 |
|---|---|
| 1 | 表格属性。 |
| 2 | 表头文字描述。 |
| 3 | 从该行开始,都是数据 |
配置模式下,key不必是第一列,可以在脚本中指定。同样,重复key也需要在脚本中指定。
添加转换器脚本
在converter目录下添加python转换器脚本。详细写法,可参考sample2/converters/converter/example.py。基本内容如下:
KEY_NAME = "ID"
CONFIG = (
("编号", "ID", int),
("名称", "name", str),
("描述", "describe", str, True),
("品质", "quality", int, True, 0),
)
CONFIG是一个数组,描述了如何将excel表头转换成程序用的字段。
| 数组索引 | 描述 |
|---|---|
| 0 | Excel表头文字 |
| 1 | 程序使用的字段名 |
| 2 | 转换函数。将excel表中的单元格数据转换成指定类型。 |
| 3 | 表示此列是否可缺省,即是否可不填。不指定表示为必填,如果漏填,导表工具会有错误提示。 |
| 4 | 缺省值。脚本中使用此值替代excel中没有填的位置,如果没有指定缺省值,脚本中就不会出现该单元格的数据。 |
转换器脚本除了能够转换数据类型,还可以对数据做深度处理。在转换器中添加上回调函数,导表工具会自动调用。
- 后处理回调
导表工具将数据表作为参数传递进来,脚本可以直接修改数据结构。或者基于数据表生成其他辅助表,并返回。
def post_process(data_module):
# 这里可以修改data_module.main_sheet数据
# 构造新的子表
another_sheets = {
"sheet2" : {"key" : 123},
"sheet3" : [1,2,3],
}
return another_sheets
- 数据检查回调
导表工具将整个数据模块作为参数传递进来,脚本可以检查数据是否合法。如果不合法,向外抛出异常即可。导表工具会捕获异常并报告错误。
def post_check(data_module, exporter):
pass
注册转换器脚本
转换器写完之后,需要与Excel表建立对应关系。在配置文件中修改CONVENTION_TABLE,添加上Excel表路径与转换器的对应关系。
CONVENTION_TABLE = (
("example.xlsx", "example", ),
)
根据转换器参数自动生成Excel表头
配置模式下,可以根据转换器参数,自动生成Excel表的表头。
python main.py --gen-header your_configure_file