cocos商店: Cocos Store
使用python3将excel生成json文件
- 将多个excel文件按照工作表生成json文件,以工作表为一个文件单位
- 不生成字段,一般用于策划自行备注的信息
- 不生成工作表,一般用于备份、备注等作用
- 关卡文件分开excel,比如东京和夏威夷两个大地图的excel文件,里面包含格式一模一样,对应生成两种地图前缀的json
前期准备:
- python下载,注意本项目使用3.x版本。或自行百度。
- pip安装指令pip:安装好python后,建议使用pip,或自行百度。
- python的表格支持xlrd:pip install xlrd(或自行百度)
- python的解码支持codecs:pip install codecs(或自行百度)
- 本案例包含的excel文件
功能说明
1. 字段类型:
类型 | 标签 | 格式 | 生成 | 备注 |
---|---|---|---|---|
数字 | number | 100 | 100 | 普通数字 |
字符串 | string | testStr | “testStr” | 普通文本 |
一维数组(数字) | array1 | 1|2|3|4 | [1,2,3,4] | 使用竖线分割 |
一维数组(字符串) | array1string | test1|test2|test3|test4 | [“test1”,“test2”,“test3”,“test4”] | 使用竖线分割 |
二维数组(数字) | array2 | 1#2|22#32|32#28#32 | [[1,2],[22,32],[32,28,32]] | 组合间使用竖线分割,组合内使用#分割 |
二维数组(字符串) | array2string | te#st4|te#st|te#st7 | [[“te”,“st4”],[“te”,“st”],[“te”,“st7”]] | 组合间使用竖线分割,组合内使用#分割 |
不生成 | none | 随意内容不生成 | 本字段不生成到json文件,用于在文档里备注等信息 |
2. 工作表生成
- 一个工作表对应生成一个同名json文件,但工作表带“_NO”表示不需生成
案例:《testConfig.xls》文件里包含三个工作表:map、map_NO、shop,对应生成《map.json》《shop.json》两个文件
工作表名 | 生成文件 |
---|---|
map | 《map.json》 |
map_NO | 带“_NO”表示不需生成 |
shop | 《shop.json》 |
- 对应多个关卡信息表
文件名包含下划线,表示同类型的文件需要带固定前缀。
比如《tokyo_东京.xls》《hawaii_夏威夷.xls》,自动截取下横线前部分为生成的json名前缀。
案例:《tokyo_东京.xls》文件包含的三个工作表:scene、level、res,对应生成《tokyo_scene.json》《tokyo_res.json》《tokyo_level.json》三个文件
工作表名 | 生成文件 |
---|---|
scene | 《tokyo_scene.json》 |
level | 《tokyo_level.json》 |
res | 《tokyo_res.json》 |
使用说明
修改使用
为了快速将配置生成到项目工程里面,可以修改python代码,删除前面#号注释标记
- 注释137行,开启第139行。为配置excel文件的路径,意味着不再是执行本文件夹内的excel,而是"D:\test"目录下:
# 取当前目录
# curPath = os.path.dirname(__file__)
# 取绝对路径目录
curPath = "D:\\test"
print('当前操作路径: %s' % curPath)
- 进阶修改,配置和程序不同文件夹,生成后直接将json文件放于程序目标文件夹。文件安排如下(建议使用英文命名文件夹):
|--项目总文件夹
|--程序项目(代码 Code_your_project)
|--assets
|--resources
|--config (配置生成后存放路径,具体自行修改)
|--build
|--library
|--...
|--配置(配置excel文件 Config_your_project)
|--python工具
|--配置工具(py脚本放置的文件夹)
第136行后面代码删除,粘贴以下代码覆盖。
注意两个路径需要改名:Config_your_project、Code_your_project
# 取当前目录
curPath = os.path.dirname(__file__)
print('当前所在路径: %s' % curPath)
#上上层目录路径
upperDir = os.path.abspath(os.path.join(os.getcwd(), "../.."))
print('项目路径: %s' % upperDir)
configsPath = upperDir + "\\Config_your_project)"
print('配置路径: %s' % configsPath)
projectPath = upperDir + "\\Code_your_project\\assets\\resources\\configs\\"
print('程序工程路径: %s' % projectPath)
# 判断文件夹是否存在决定建不建文件夹
isExists = os.path.exists(projectPath)
if not isExists:
os.makedirs(projectPath)
# 遍历当前目录查询出所有的excel表
fileNameList = os.listdir(configsPath)
print(fileNameList)
for a in fileNameList:
print("获得文件:%s"%(a))
# 这里只能读取xlsx的表 如果是其他的表请加入判断
extName = os.path.splitext(a)
# 剔除缓存的表
if(extName[0].find("~") >= 0 or extName[0].find("$") >= 0):
continue
# 只有这三种格式的才转 其他的不管
if(extName[1] == '.xlsx' or extName[1] == ".csv" or extName[1] == ".xls"):
data = xlrd.open_workbook(configsPath+'\\'+a)
# print("读取sheet名字:%s"%(data.sheet_names()))
for sheetName in data.sheet_names():
if(sheetName.find("_NO") >= 0):
# _NO标记不生成的表
continue
table = data.sheet_by_name(sheetName)
# print("读取sheet获得table:%s"%(table))
if( "_" in a) :
#局内场景配置,需要输出固定名字
sceneName = a.split("_")
table2json(table, sceneName[0]+"_"+sheetName+'.json', projectPath)
else :
table2json(table, sheetName+'.json', projectPath)
print("所有的表转换完成")
input('Press Enter to exit...')
备注
- 建议直接复制案例excel文件进行修改,防止因为不同版本导致错误(如wps和office不同,xls和xlsx不同等)
- 开发者技术支持邮箱:eddy_liangwei@qq.com
- 其它版本期望:
- 指定生成客户端还是服务端的配置,C/S、C、S三种类型的文件夹放置
- 语言翻译使用另外导出路径,用于不同语言bundle的切换
- 配置版本控制,策划编辑后双击脚本,即可完成生成并自动累加版本号,而后提交到服务器。程序包每次启动进行检测本地(缓存localStrong)配置和服务器版本对应更新,需更新则进行简单加密保存本地
- 配置打包类型,debug或者release等,对应生成在其文件夹。双击py,询问打包类型选择,对应发布到文件夹。同时配合上面3号功能,实现打包不同需求的配置