liuchengsis / ExcelToJson

纯AHK编写的导表工具,支持复杂的excel结构,支持跨文件的主从引用,一键导出JSON,转JSON部分使用了飞跃大佬的JSON.ahk库

Home Page:https://github.com/liuchengsis/ExcelToJson

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExcelToJson

  • 纯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 or YYYY年M月D日 or YYYY-M-D H m 等等,尾部的 可以依次省略。
  • 13位时间戳类型:列名#timestamp13。只能以年月日时分秒的格式顺序填写。比如YYYY/M/D H:m:s or YYYY年M月D日 or YYYY-M-D H m 等等,尾部的 可以依次省略。13位时间戳的后三位固定是000
  • 布尔类型:命名形式 列名#bool
  • 数组:命名形式 列名#[],单元格内数组的书写方式与JS相同,若要表示字符串格式的纯数字或true、false、null,请将其括在双引号中,如"123"。
  • 对象:命名形式 列名#{},单元格内对象的书写方式与JS相同,若要表示字符串格式的纯数字或true、false、null,请将其括在双引号中,如"123""null"
  • 主键:命名形式列名#id ,A列必须存在#id才会导出。
  • 外键:命名形式列名#owner,表中只能有一列,只存在于从表中。
  • 列名字以!开头则不导出此列。

sheet规则

  • sheet名字以!开头则不导出此表。
  • 从表的名字 从表名字@主表名字,主表可以在同一批导出的excel文件的任何位置(可以与从表不在同一个文件)。

主从表相关规则(master/follower)

  • 主表必须定义主键,主键在导出时进行重名检测,同一批次导出的excel文件共用一个重名检测列表,"0"不可以作为主键
  • 从表在表名中通过@主表名来声明主从关系,主表名必须存在(主表名如果不存在,从表将不会被导出)
  • 定义了主键的从表可以拥有自己的从表(多级引用),但不可以循环引用
  • 从表可以不定义主键,即便未定义主键,也应当保留#id列,否则无法定位标头行,未定义主键的从表数据不能再被引用
  • 从表中定义的主键(#id)虽然与主表的主键值无关,但是仍然不允许其他表的主键值重复
  • 从表中必须要有#owner列,从表每一行的数据必须定义外键(#owner)值,若从表中存在未定义外键的数据可能导致提前结束导出
  • owner的值必须是(@主表名)中已存在的主键值(外键引用验证),若引用了不存在的主键,该条数据不会被导出
  • 主表结束导出的标志是空主键单元格,从表结束导出的标志是空外键单元格

函数说明

excel_tojson(xlsx_path,json_path,exportmode:=0)
  • 将指定目录下所有xlsx文件按所选模式导出为json
  • 参数xlsx_pathexcel表所在目录,导出时会递归所有子文件夹,目录及其子文件夹内的所有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表名作为文件名
  • sjson字符串
errlog(errcode,filepath,sheetname,row,col)
  • 错误日志打印函数
Unix_timestamp(formattedtime,len:=10)
  • 将格式日期转换为时间戳,默认输出10位时间戳,可以改变第二个参数的值为13来输出13位的时间戳

补充

示例表格展示了表头示例、嵌套对象、多级主从引用等

About

纯AHK编写的导表工具,支持复杂的excel结构,支持跨文件的主从引用,一键导出JSON,转JSON部分使用了飞跃大佬的JSON.ahk库

https://github.com/liuchengsis/ExcelToJson

License:MIT License


Languages

Language:AutoHotkey 100.0%