- 纯AHK编写的导表工具,支持复杂的excel结构,支持跨文件的主从引用,一键导出JSON,转JSON部分使用了飞跃大佬的JSON.ahk库
- 版本需要AHK1.1.37.01+,需要安装Excel(因为使用了COM对象)
GUI4ExcelToJson
是为ExcelToJson库编写的可视化UI,整合了导出进度可视化、目录管理、配置管理、日志管理等功能,可以自动生成配置文件- 编译后可以在Windows平台不依赖任何代码环境运行
- 支持自动识别表头所在行
- 支持导出boolean、null和时间戳数据类型
- 支持多层嵌套结构(可以在单元格内直接写入数组或者对象)
- 支持基于引用的主从结构,可以跨文件引用,也支持乱序引用(从表可以不在主表后面),支持多级主从结构
- 支持无主键从表
- 支持主键重名检测和外键引用验证
- 支持主从表数据合并(可选)
boolean
布尔。timestamp
可以将格式化的日期导出为时间戳。{}
对象,同JS对象一致,支持多层嵌套。[]
数组,同JS数组一致,支持多层嵌套。id
主键类型,表中A列必须存在列名#id
单元格,作为识别表头位置的锚点,若不想定义主键值,将下方单元格置空即可。owner
外键类型,只存在于从表中。
- 基础数据类型(string,number):
列名#normal
不需要设置会自动判断,如果想导出字符串形式的纯数字,可以将数字括在双引号中,如"123"
。 - 时间戳类型:
列名#timestamp
。只能以年月日时分秒
的格式顺序填写。比如YYYY/M/D H:m:s
orYYYY年M月D日
orYYYY-M-D H m
等等,尾部的秒
分
时
日
月
可以依次省略。 - 13位时间戳类型:
列名#timestamp13
。只能以年月日时分秒
的格式顺序填写。比如YYYY/M/D H:m:s
orYYYY年M月D日
orYYYY-M-D H m
等等,尾部的秒
分
时
日
月
可以依次省略。13位时间戳的后三位固定是000
- 布尔类型:命名形式
列名#bool
。 - 数组:命名形式
列名#[]
,单元格内数组的书写方式与JS相同,若要表示字符串格式的纯数字或true、false、null,请将其括在双引号中,如"123"。 - 对象:命名形式
列名#{}
,单元格内对象的书写方式与JS相同,若要表示字符串格式的纯数字或true、false、null,请将其括在双引号中,如"123"
,"null"
。 - 主键:命名形式
列名#id
,A列必须存在#id
才会导出。 - 外键:命名形式
列名#owner
,表中只能有一列,只存在于从表中。 - 列名字以
!
开头则不导出此列。
- sheet名字以
!
开头则不导出此表。 - 从表的名字
从表名字@主表名字
,主表可以在同一批导出的excel文件的任何位置(可以与从表不在同一个文件)。
- 主表必须定义主键,主键在导出时进行重名检测,同一批次导出的excel文件共用一个重名检测列表,"0"不可以作为主键
- 从表在表名中通过
@主表名
来声明主从关系,主表名必须存在(主表名如果不存在,从表将不会被导出) - 定义了主键的从表可以拥有自己的从表(多级引用),但不可以循环引用
- 从表可以不定义主键,即便未定义主键,也应当保留#id列,否则无法定位标头行,未定义主键的从表数据不能再被引用
- 从表中定义的主键(#id)虽然与主表的主键值无关,但是仍然不允许其他表的主键值重复
- 从表中必须要有
#owner
列,从表每一行的数据必须定义外键(#owner)值,若从表中存在未定义外键的数据可能导致提前结束导出 - owner的值必须是(@主表名)中已存在的主键值(外键引用验证),若引用了不存在的主键,该条数据不会被导出
- 主表结束导出的标志是空主键单元格,从表结束导出的标志是空外键单元格
excel_tojson(xlsx_path,json_path,exportmode:=0)
- 将指定目录下所有xlsx文件按所选模式导出为json
- 参数
xlsx_path
excel表所在目录,导出时会递归所有子文件夹,目录及其子文件夹内的所有xlsx格式文件都会视为数据源 - 参数
json_path
导出的json文件存放目录 - 参数
exportmode
导出模式,默认为0
exportmode=0
只导出合并数据后的主表,默认值exportmode=1
导出合并数据后的主表和含主键的从表(合并数据后的从表数据中不存在外键)exportmode=2
导出合并数据后的主表和所有原始从表(从表的外键也会保留)exportmode=3
不合并数据,强制导出所有原始表exportmode=-1
不导出,调试用
json_toobj(s)
- 将json字符串解析为ahk对象
ahk_tojson(obj, space:="")
- 将ahk对象转换为json字符串
typeof(v)
- 检查类型,可以分辨五种ahk基本类型
create_jsonfile(dest,sheetname,s)
- 创建json文件
dest
拟导出json文件的目录sheetname
表名作为文件名s
json字符串
errlog(errcode,filepath,sheetname,row,col)
- 错误日志打印函数
Unix_timestamp(formattedtime,len:=10)
- 将格式日期转换为时间戳,默认输出10位时间戳,可以改变第二个参数的值为
13
来输出13位的时间戳
示例表格展示了表头示例、嵌套对象、多级主从引用等