高效完成一个基础版游戏配置导出工具

游戏工具配置数据的使用流程主要是以下三步:

1、策划通过Excel表进行游戏数据配置管理

2、技术编写对Excel表导出工具,把策划配置导出json格式文件

3、游戏内加载json配置数据在游戏内使用

下面我介绍通过node js 的 xlsx库高效完成一个基础版Excel表配置表导出工具

准备工作:电脑安装好node js。

下面是详细的流程:

一、安装xlsx 库:

npm install xlsx

二、准备一个excel表,这里我以角色.xlsx做例子

新建一个目录命名ExcelTool,在新建子目录命名xlsx;把角色.xlsx配置放到xlsx目录。后期用到的所有配置都放到改目录。我们编写一个工具把xlsx目录下的所有excel表导出到一个文件

高效完成一个基础版游戏配置导出工具_第1张图片

三、编写导出工具

1、在ExcelTool目录下新建exceltool.js文件

2、引入xlsx库,fs库

const xlsx = require('xlsx');

const fs = require('fs');

3、遍历xlsx目录,读取所有excel表配置

function readExcels() {
    var files = fs.readdirSync(xlsxDir);
    for (let i = 0, len = files.length; i < len; i++) {
        let fileName = files[i];
        if (fileName.indexOf("xlsx") != -1&&fileName.indexOf("~$") == -1) {
            let excelName = xlsxDir + fileName;
            console.log("读取配置:" + excelName);
            readOneExcel(fileName);
        }
    }
}

4、读取每个excel表的数据,以表的第一列作为key,存储每一行数据

function readOneExcel(fileName) {
    let xlName = xlsxDir + fileName;
    const workbook = xlsx.readFile(xlName);
    const sheetNames = workbook.SheetNames;
    const sheetDatas = {};

    for (let i = 0, len = sheetNames.length; i < len; i++) {
        var sheetName = sheetNames[i];
        const worksheet = workbook.Sheets[sheetName];

        //获取工作表数据,遍历工作表的每一行
        let excelRows = xlsx.utils.sheet_to_json(worksheet, { header: 1, range: 0 });
        //表头描述 名字
        let sheetHeadNames = excelRows[0];
        //表变量名
        let sheetVars = excelRows[1];
        for (let j = 2, jl = excelRows.length; j < jl; j++) {
            let row = excelRows[j];
            if (!row || row.length == 0)
                break;
            let rowJson = getRowJson(sheetVars, row);
            sheetDatas[rowJson[sheetVars[0]]] = rowJson;
        }
    }
    excelDatas[sheetName] = sheetDatas;
}

function getRowJson(sheetVars, row) {
    let rowJson = {};
    for (let i = 0, len = row.length; i < len; i++) {
        rowJson[sheetVars[i]] = row[i];
    }

    return rowJson;
}

5、保存json数据到文件中

function exportData() {
    // 判断目录是否存在,不存在则创建
    if (!fs.existsSync(expDir)) {
        fs.mkdirSync(expDir, { recursive: true });
    }
     fs.writeFileSync(expDir + `conf.json`, JSON.stringify(excelDatas));
}

 以下是完整的代码:

const xlsx = require('xlsx');
const fs = require('fs');
const xlsxDir = "xlsx/";
const expDir = "data/";
var excelDatas = {};
readExcels();
exportData();
function readExcels() {
    var files = fs.readdirSync(xlsxDir);
    for (let i = 0, len = files.length; i < len; i++) {
        let fileName = files[i];
        if (fileName.indexOf("xlsx") != -1 && fileName.indexOf("~$") == -1) {
            let excelName = xlsxDir + fileName;
            console.log("读取配置:" + excelName)
            readOneExcel(fileName);
        }
    }
}

function readOneExcel(fileName) {
    let xlName = xlsxDir + fileName;
    const workbook = xlsx.readFile(xlName);
    const sheetNames = workbook.SheetNames;
    const sheetDatas = {};

    for (let i = 0, len = sheetNames.length; i < len; i++) {
        var sheetName = sheetNames[i];
        const worksheet = workbook.Sheets[sheetName];

        //获取工作表数据,遍历工作表的每一行
        let excelRows = xlsx.utils.sheet_to_json(worksheet, { header: 1, range: 0 });
        //表头描述 名字
        let sheetHeadNames = excelRows[0];
        //表变量名
        let sheetVars = excelRows[1];
        for (let j = 2, jl = excelRows.length; j < jl; j++) {
            let row = excelRows[j];
            if (!row || row.length == 0)
                break;
            let rowJson = getRowJson(sheetVars, row);
            sheetDatas[rowJson[sheetVars[0]]] = rowJson;
        }
    }
    excelDatas[sheetName] = sheetDatas;
}

function getRowJson(sheetVars, row) {
    let rowJson = {};
    for (let i = 0, len = row.length; i < len; i++) {
        rowJson[sheetVars[i]] = row[i];
    }

    return rowJson;
}

function exportData() {
    // 判断目录是否存在,不存在则创建
    if (!fs.existsSync(expDir)) {
        fs.mkdirSync(expDir, { recursive: true });
    }
     fs.writeFileSync(expDir + `conf.json`, JSON.stringify(excelDatas));
}

运行 node exceltool.js 即可导出excel表配置

以上是一个简单的excel表配置导出工具的框架,包含的导出基本流程。这里我主要是一个抛砖引玉的目的,大家可以在这个框架的基础上去拓展。根据自己具体项目需求完成对应的功能,完成各种强大的功能,提高项目生成效率。

你可能感兴趣的:(游戏,javascript,人工智能,程序人生,学习,前端,编辑器)