自己写了一个根据策划excel数据生成lua表的工具。

之前使用CocoStudio的数据编辑器生成json格式的数据。
后来用着不是很方便(有时候会生成两份一样的数据),就自己写了一个工具直接生成lua表,比需要加载json然后还要注意区分json格式和table要好一些。所以分享一下。

excel的格式是xlsx,里头的具体数据格式与CocoStudio数据编辑器所需格式一样即可。
该工具使用python写成,需要python2.7(这个无需当心,因为cocos本身需要),还需要一个解析excel表格的插件叫做xlrd,请自行下载一下。

excel表不要起中文名称,需要英文名,例如ratio.xlsx会在当前目录下生成ratio.lua这样的文件。
总体思路是,所有这些生成的策划配置数据自动生成后,由一个自动生成的Tables.lua文件统一管理,其他任何地方都不要尝试直接访问里头的ratio.lua(即不要写 local ratio = import("…youPath.ratio")这样的代码,而是直接 local Tables = import("…youpath.Tables")),然后利用Tables中的函数访问这些表格数据Tables.ratio(1,“概率”)即可访问ratio表的key为1的某个字段“概率”。

里头我还专门对多语言的本地化做了支持,由于项目原因,里头已经写死了的strings_i18n.xlsx生成的表格就是中文版本的字符串数据,strings_i18n_en.xlsx是英文版本,以此类推(呵呵,总共也就支持三种,还有一种繁体)。
至于strings_i18n.xlsx应该如何定义,我在工具中已经加了说明。总之字符串的访问我希望是能达到这么个效果Tables.getStringFromTable(Tables.enumHintForAlert)。其中前面的函数可以匹配游戏中的当前语言从而选择不同语言的字符串(但无需我在调用的地方显式指明语言),里头的参数我不希望使用1,2,3这样的数字方式访问字符串,而代替是一个枚举。至于怎么实现,可以看看我工具中的说明。

忘记说明了,既然会生成一个Tables.lua的管理文件,那么excel表格绝对不可以也有一个Tables.xlsx这样的表格存在。

谢谢分享 标记一下

Sub exportHeroSkillData(result)
    Dim skillIdx As Integer
    Dim level As Integer
    Dim idx As Integer
    Dim row As Integer
    Dim col As Integer
    Dim i As Integer
    
    result = result & Chr(13) & Chr(13) & "ExcelHeroSkillData = {}" & Chr(13) & Chr(13)
    For skillIdx = 1 To 11
        col = skillIdx * 5 - 4
        result = result & "ExcelHeroSkillData" & Sheet6.Cells(1, col + 1).Value & "] = {" & Chr(13)
        level = Sheet6.Cells(1, col + 3).Value
        For idx = 1 To level
            row = idx + 2
            result = result & "    " & idx & "] = {" & Chr(13)
            If Len(Sheet6.Cells(row, col + 1)) > 0 Then
                result = result & "        cd = " & Sheet6.Cells(row, col + 1) & "," & Chr(13)
            End If
            If Len(Sheet6.Cells(row, col + 2)) > 0 Then
                result = result & "        time = " & Sheet6.Cells(row, col + 2) & "," & Chr(13)
            End If
            result = result & "        value = " & Sheet6.Cells(row, col + 3) & "," & Chr(13)
            result = result & "        money = " & Sheet6.Cells(row, col + 4) & "," & Chr(13)
            result = result & "    }," & Chr(13)
        Next
        result = result & "}" & Chr(13)
    Next
End Sub

Sub exportData()
    Dim result As String
    
    Call exportHeroSkillData(result)
    
    Kill ThisWorkbook.Path & "\ExcelData.lua"
    Open ThisWorkbook.Path & "\ExcelData.lua" For Binary As #1
        Put #1, , result
        Close #1
    MsgBox "OutPut Success!"
End Sub

```


当初微微蓝说的。用VBA。简单可控。上面是摘的一段完整的。

谢谢分享 标记一下