2015/09/30

php导表工具


之前搞游戏后端研发时,会涉及到大量策划填写的数据,包括有人物经验升级数据,道具,装备,场景,NPC,武学招式,阵法等等一大推。比较普遍的做法就是定制好excel表规则,策划把数据 填写在excel表,然后我这边写个导表程序,把excel表数据按照自定义格式导出到指定文件中。记得当时第一版是用python写的,后来数据量过于庞大,每次全量导表需要花费10多20分钟时间, 忍受不了这龟速度就在github上找到一个用C写的库,这样每次导表只需要7分钟左右就完成。

先来说下excel表规则。主要是为了定制了每条数据的用处,类型,是否允许不填。假设一个道具的基本信息有:道具id,名称,道具描述一,道具描述二。现在我程序这边规定道具各个属性规则:


道具id 道具名称 道具描述一 道具描述二
ItemId Name Desc1 Desc2
number string string string
notnull notnull notnull
1001 气血包 恢复800点血量
1002 超级气血包 恢复100%点血量 此道具只能在战斗中使用

第一行:各个字段的名称描述

第二行:各个字段 key

第三行:各个字段类型 规定只能填写 number(数字类型),string(字符串类型)

第四行:各个字段是否可以为空 notnull(不能为空)

第五行开始为真实数据填写


有了以上信息,策划填写表格时就很明确,哪些字段填什么类型数据,是否可以不填。由上面的 道具id就限定了填写类型为数字,必须填写;道具描述二填写类型为字符串,可以不填。


单单形式上个策划说哪个字段必须,哪个字段只能是数字类型是不行的,因为策划还是经常把表格填错。所以我们必须要用程序来验证策划填写数据的正确性,不然,等到上线后才发现是表格出了 问题就得不偿失了。所以我们在将excel表数据导出到文件前,必须先验证数据,接着再进行自定义解析方式存储到文件中。


php第三方excel库还是有不错选择的,之前写了一遍 phpexcel库研究 ,研究了下 phpexcel 的用法和简单实现excel导入导出, 这里在此基础上进行扩展。

xlsgen文件目录结构

gen/
        3rd/phpexcel        --存放phpexcel库
        base/               --存放基本模块
            xls.php         --对excel数据导出并验证策划填写数据正确性,根据template.php模板生成存储数据
            template.php
        item/               --道具数据解析程序
        ...                 --每添加一个导表程序,在此添加一个相应目录

setting/                    --数据导出目录
        item/               --道具数据
        ...

xls/                        --excel原数据
        item/               --道具excel数据
        ...

genxls.php                  --指令执行文件

添加一个导表程序步骤:

1.在xls/下添加xls文件

2.在gen/下创建导表目录/导表程序.php

3.编写导表程序.php

4.在genxls.php中添加指令


编写导表程序.php规则:定制好gen类的各个必须属性参数,根据自定义解析格式编写gen::Dogen()接口。详细例子可以参考gen/item/gen_item.php

genxls地址:https://github.com/yangxgkem/genxls