背景:游戏开发中, 策划使用Excel配置游戏中的参数数据,写一个工具用于导出这些配置

工具选择使用 python来开发,这样Windows、macOS、Linux平台都可以使用,而且有丰富的第三方模块。

本机先安装python,我这边使用的是python3.10.6。

确定Excel的结构

假设我们需要的配置是这种结构的:

Items = {
	[1001] = { id = 1001, name = "新手武器", level = 1, attrs = { atk = 10 }, icon = "resource/items/1001.png" },
	[1002] = { id = 1002, name = "新手衣服", level = 1, attrs = { def = 10 }, icon = "resource/items/1002.png" },
	[1003] = { id = 1003, name = "新手护手", level = 1, attrs = { atk = 3, def = 3 }, icon = "resource/items/1003.png" }
}

表格中则为这样:在这里插入图片描述

我们称每一个Items项为ItemData,第一行为ItemData的中所有的key,第一列为ItemData在Items表中的key,从第二行开始每一格填入所在列的key对应的值,然后我们直接以文本格式读取所有内容,用=号连接key和value即可。

文件命名为:道具表.xlsx,表单名先设置为lua配置的表名:Items。

生成配置文件config.lua的代码大概是这种模式:

with open('config.lua', 'w', encoding="utf-8") as file:
    file.write("Items = {\n")

	#写入表格数据

    file.write("}")

生成文件:
在这里插入图片描述

读取Excel中的数据

Excel中的数据这里使用pandas模块来读取,然后写入config.lua中
先安装padas:pip install pandas

import pandas

#参数1是Excel文件路径
#参数2是表单名 
#参数header=n表示表头在第n+1行,没有表头则不填,我们这里表头在第一行所以填0
#参数dtype=str表示格子内的数据按字符串格式读取
#返回值是pandas读取表单生成的DataFrame
df = pandas.read_excel(".//配置表.xlsx", "Items", header=0, dtype=str)

#数据的行、列数
row, column = df.shape

with open('config.lua', 'w', encoding="utf-8") as file:
    file.write("Items = {\n")

    #遍历所有行 每一行是一条 ItemData
    for r in range(row):
        row_data = df.iloc[r,:]

        #第一列是ItemData 的 key
        #df.columns 是表头内容
        key = row_data[df.columns[0]]
        file.write(f"[{key}]=")
        file.write("{")
    
        #遍历所有列 
        for c in range(column):
            sub_key = df.columns[c]
            sub_value = row_data[sub_key]
            file.write(f"{sub_key} = {sub_value}, ")

        file.write("},\n")


    file.write("}")

导出所有表单

pandas可以通过下述方法遍历sheet列表:

import pandas

ef = pandas.ExcelFile(".//配置表.xlsx")
for name in ef.sheet_names:
	# read_excel的参数1也可以使用ExcelFile
	df = pandas.read_excel(ef, name, header=0, dtype=str)
	
	#数据的行、列数
	row, column = df.shape
	
	with open('config.lua', 'w', encoding="utf-8") as file:
		file.write(name)
	    file.write(" = {\n")
		
		... 
		...

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部