📋 策划工具-xlsx2py
概述:
策划EXCEL工具就是帮助策划人员把Excel文件输出成服务端使用的py文件和客户端使用的json文件的工具。模块名为xlsx2py,是一个基于Python写的一整套工具,其中包括从Excel生成python文件、从Excel生成json文件两个功能。同时,附带一个rpgdemo,该文件夹中包含:针对不同excel文件的批处理文件以及默认设置的文件夹结构。
工具位于:kbe/tools/xlsx2py
文件夹下。
- rpgdemo : 是一个使用的例子;
- xlsx2py : 核心模块脚本存放的文件夹;
- tool_installation.log : 工具安装手册;
- tool_rules.log : 工具使用规范。
安装:
一般的,该工具的使用者是在Windows下的,所以这里只介绍了Windows下的安装。
1:Python环境
首先,必须要有Python环境,见《脚本开发环境》一文。这里不再赘述。
2:pywin32-xxx-py3.x
这是Python对windows的扩展包,可以使Python操作win32的程序,访问windows系统API的库,xlsx2py是需要操作这些库的。
下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/
注意:如果你的Python是64位,则需要对应的64位pywin32,如果两者不统一,会运行失败!
3:office2010及以上的安装
我们需要调用Excel相关的API,请确保office正确安装。具体请见Microsoft官网,自行进行下载和安装。
Office官网:https://products.office.com/
使用rpgdemo进行验证:

提示
rpgdemo中定义了一些默认的文件夹和输出的规范,新手可以参考着进行自己的xlsx导出。等对这个工具熟悉后,大可以自行调整。
1:pydatas文件夹是数据输出的py文件放置地。
2:xlsxs文件夹是放置excel文件的。
3:bat批处理是对Python调用的一些快捷设置,包括调用的模块路径、excel文件路径等设置。
我们使用编辑工具打开一个entities.bat,如下:
call basePath.bat
@echo off
set pydatas=%ktpydatas%/d_entities.py
set excel=%ktexcels%/xlsxs/entities.xlsx
echo on
python ../xlsx2py/xlsx2py.py %pydatas% %excel%
if not defined ktall (ping -n 30 127.1>nul)
该批处理脚本会先call当前目录下的basePath.bat,并设置pydatas的输出路径和excel的excel文件路径。之后调用模块xlsx2py,完成。
我们来看一下basePath.bat里的内容:
@echo off
title=kttools::ktexcel
mode con cols=100 lines=46
color 2
set ktexcels=.
set ktpydatas=pydatas
set haskt=1
echo Input directory:[%ktexcels%]
echo Output directory:[%ktpydatas%]
echo on
这个basePath.bat是对基本路径进行设置用的,包括把ktpydatas设置为pydatas目录地址(即为我们之前提到的文件夹pydatas)以及把ktexcels设置为当前目录。
4:执行
直接双击需要输出的excel对应的批处理脚本即可,如我们例子中的entities.bat。执行结果会在pydatas文件夹下生成d_entities.py和d_entities.py.datas.json两个文件。其中,py文件可以放入服务端开发的data目录下,给脚本直接调用并使用;json文件可以放入客户端,提供给客户端进行使用。
同样的,其他批处理文件如avatar_init.bat就是对avatar_init.xlsx文件的输出配置,其他类似。
Excel内的规则:
定义:
先定义一些名词:
- 代对表:excel文件中的表的名字为”代对表=”的表
- 导出表:excel文件中表的名字以”@”为前缀的表的集合
- 数值:excel中数据的值
- 变量(名):针对程序而言,这个请不要是用中文,Python无法使用中文变量名
导出表:
标识:
一个excel上会存在多份表, 不一定每张表都是需要导出的, 因此需要这样一个命令标识此表需要导出:
- 在表名前面加前缀 “@”。例如:”@普通任务表”
- 该表导出为变量名请在代对表中定义
- 导出表的表名需要在代对表中进行代对填写,格式为: 表名(不含@):变量名(只能为英文) 例如: 普通任务表:normalQuest
表中内容的要求:
1:第一行是程序用的属性标签的定义,还包括一些导出规则。格式如下:
line1: "ID [.][func]" | "name [][func]"
line2: "技能ID" | "技能名称"
其中,ID是属性名,在导出的文件中会以它作为属性名。第一个[],是导出规则的设置。第二个[]是所使用的转换函数名,这些函数定义在\xlsx2py\functions.py中,可以让大家写自己需要的转换方式。如:
def func_int(data):
return int(data)
def func_xxx(data):
x, y = data.split(";")
return (x, y)
2:第二行是策划用的真正的表头, 说明此列数据的用途。
3:第三行开始就是数据行,请添加与func匹配的数据类型。
导出规则定义:
1:命令符号-点.
代表此项必须填写,如检查到没有填写则报错,并退出导出。
如果没有定义则随便填不填写,导出到py会给个默认值(具体看这列所定义的数据类别)。
2:命令符号$
表示此列数据导出后是需要从对代表中进行数据替代的, 这样就可以让策划用中文填写配置了。
代对表请见下面介绍–《代对表》
3:命令符号-感叹号!
表示该列数据为所在行的主key,现在主key只能是1个,如需多个key请在\xlsx2py\config.py配置EXPORT_KEY_NUMS
注意
请使用英文的符号,程序未做中文的处理!!
代对表:
代对表第一行为说明,第二行以后为代对关系。代对表每个单元格格式如(物理技能 :BASE_SKILL_TYPE_PHYSICS),如图:

导出数据的格式:
如:某Excel文件有导出表(@表1, @表2, …)。代对表中有代对关系:表1:sheet1,表2:sheet2。
则导出的py文件中存在字典:
sheet1 = {
key: {...},
....
}
sheet2 = {
key: {...},
....
}
...
datas = [sheet1, sheet2, ...]
比如,刚才例子中d_entities.py中如下:
datas={
10001001: {'entityType': 'NPC', 'id': 10001001, 'etype': 1, 'name': '新手接待员', 'modelID': 10001001, 'moveSpeed': 50, 'runSpeed': 65, 'dialogID': 10001001},
10002001: {'entityType': 'NPC', 'id': 10002001, 'etype': 1, 'name': '传送员', 'modelID': 10001001, 'moveSpeed': 50, 'runSpeed': 65, 'dialogID': 10001001}
}
allDatas = {
'NPC表':datas,
}
注意
与程序相关的变量名请使用英文!