利用Node转换Excel成JSON的详细步骤

 更新时间:2022年11月28日 16:53:50   作者:空城机  
最近工作中遇到一个需求,大致需求就是将Excel文件在导入时解析为json格式转换数据结构再传输给后台,下面这篇文章主要给大家介绍了关于如何利用Node转换Excel成JSON的详细步骤,需要的朋友可以参考下

前言

目前想使用Cocos Creator做一个文字游戏,类似于我的人生重开模拟器。

那么其中最重要的一点就是关于数据的存储了。在我的人生重开模拟器中大部分事件和天赋的数据是存储在excel表格当中的,当然如果要使用Cocos Creator,因为我不准备布置服务器,所以需要将数据提前转换成JSON文件,那么可以创建一个项目,使用node读取excel文件,并通过格式转换,将数据转换成JSON

这里网上有一些node调用excel的库,我使用了node-xlsx,此库底层基于强大的 SheetJS 构建,对 xlsx 文档的格式兼容性足够好。

npm地址:node-xlsx - npm (npmjs.com)

开始

在此之前我已经新建了一个天赋表格talentTable.xlsx,里面已经添加了许多天赋,并且有不同的属性加成

pnpm init创建一个项目,然后使用pnpm add node-xlsx将库导入项目当中。

创建一个主文件excelMain.js,此文件中需要引入需要的库

import { fileURLToPath } from 'node:url'
import path from 'path';
import fs from 'fs';
import xlsx from 'node-xlsx';

可以提前先将需要的存储的json文件talent.json创建好,通过path将xlsx和json的文件夹相对路径找到

// 获取 __dirname 的 ESM 写法
const __dirname = path.dirname(fileURLToPath(import.meta.url))
// xlsx文件路径
const xlsxPath = path.resolve(__dirname, '../../assets/JsonData');

因为我有很几个表格,所以可以创建一个表格的路径对象

// 事件, 玩家, 门派, 天赋, 武学
let dataNames = ['event', 'player', 'sect', 'talent', 'skill']
let dataPaths = {};
for(let iname of dataNames) {
    dataPaths[iname] = {
        xlsx: path.resolve(xlsxPath, `./${iname}Table.xlsx`),
        json: path.resolve(xlsxPath, `./${iname}.json`)
    }
}

然后创建一个读取文件方法,这里需要用到fs中的readFileSync

// 读取数据表方法
const readFileData = (tableName)=>{
    let fname = dataPaths[tableName].xlsx
    const xlsxData = xlsx.parse(fs.readFileSync(fname));
    ......
}

这里读取到的xlsxData是一个数组对象,数组中的元素代表的其实是一张张sheet表格,xlsx表格中并不是只有一个表格,所以才会是数组对象,不过我需要的只是第一张表格。

所以获取xlsxData[0].data的数据即可,data的数据是按照行排列的数组对象

然后到转换成JSON格式数据是,需要变成属性:属性值的格式,所以可创建一个方法,将第一行属性和从第三行开始的数据结合,创建一个对象数组。

const oneAndTwo = (arr)=>{
    if (arr.length <= 2) return [];
    let newarr = []
    for(let i = 2; i < arr.length; i++) {
        let newobj = {};
        for(let j = 0; j < arr[0].length; j++) {
            let jname = arr[0][j];
            newobj[jname] = (arr[i][j] != undefined)? arr[i][j] : null;
        }
        newarr.push(newobj)
    }
    return newarr;
}

这样返回的对象就如下了

接下来就可以将数据开始写入json文件当中,使用fs.writeFile方法,格式使用utf-8即可

// 写入JSON文件方法
const writeJson = (arr, jsonName)=>{
    let path = dataPaths[jsonName].json;
    let d = { data: arr }
    fs.writeFile(path, JSON.stringify(d), 'utf-8', (err)=>{
        console.log(`${jsonName}写入成功`);
    });
}

这样需要的游戏固定事件和天赋数据json就可以出现了。

对于JSON数据存储为excel对象也比较容易,需要用到xlsx.build方法,这里就不做过多的介绍了,可以去参考npm地址上的使用方法。

总结

到此这篇关于利用Node转换Excel成JSON的文章就介绍到这了,更多相关Node转换Excel成JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈node使用jwt生成的token应该存在哪里

    浅谈node使用jwt生成的token应该存在哪里

    早上逛某乎的时候,遇到一位同学在问这个问题,很好奇jwt的存储位置。本文详细的介绍一下,感兴趣的可以了解一下
    2021-06-06
  • Node.js进程管理之Process模块详解

    Node.js进程管理之Process模块详解

    本文详细讲解了Node.js进程管理之Process模块,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 详解如何使用Node.js实现热重载页面

    详解如何使用Node.js实现热重载页面

    这篇文章主要介绍了详解如何使用Node.js实现热重载页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Vue+Node实现的商城用户管理功能示例

    Vue+Node实现的商城用户管理功能示例

    这篇文章主要介绍了Vue+Node实现的商城用户管理功能,结合实例形式详细分析了商城用户管理的前台登录、校验、跳转、退出等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • 让你的Node.js应用程序处理数百万的API请求技巧

    让你的Node.js应用程序处理数百万的API请求技巧

    欢迎阅读关于优化 NodeJS 应用以处理数百万 API 请求的终极指南,如果你是一名开发人员,希望扩展应用,那么你来对地方了,在这篇博客中,我们将深入研究最佳实践和技术,帮助你处理高流量负载,确保应用保持性能和响应速度
    2023-10-10
  • cnpm安装详细步骤(附图文!)

    cnpm安装详细步骤(附图文!)

    由于npm软件包管理器有时可能不太稳定,安装依赖包容易报错,所以就有了cnpm,这篇文章主要给大家介绍了关于cnpm安装的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • nodejs+socket.io实现p2p消息实时发送的项目实践

    nodejs+socket.io实现p2p消息实时发送的项目实践

    本文主要介绍了nodejs+socket.io实现p2p消息实时发送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Node.js 使用request模块下载文件的实例

    Node.js 使用request模块下载文件的实例

    今天小编就为大家分享一篇Node.js 使用request模块下载文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 说说node中的可读流和可写流的区别

    说说node中的可读流和可写流的区别

    这篇文章主要介绍了说说node中的可读流和可写流的区别,详细的介绍了可读流和可写流,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Node.js 的 GC 机制详解

    Node.js 的 GC 机制详解

    随着 Node 的发展,JavaScript 的应用场景早已不再局限在浏览器中。但随着 Node 在服务端的广泛应用,JavaScript 的内存管理需要引起我们的重视。下面我们来一起学习一下吧
    2019-06-06

最新评论