Node转换Excel成JSON

news2024/10/7 14:28:40

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

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

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

开始

在此之前我已经新建了一个天赋表格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].xlsxconst 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地址上的使用方法。

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC核心技术_第8章:数据库连接池

目录8.1 JDBC数据库连接池的必要性8.2 数据库连接池技术8.3 多种开源的数据库连接池8.3.1 C3P0数据库连接池8.3.2 DBCP数据库连接池8.3.3 Druid&#xff08;德鲁伊&#xff09;数据库连接池8.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时&#xff0c;传统的模…

【蓝桥杯系列】2020省赛真题之回文日期

⭐️前面的话⭐️ 本篇文章介绍来蓝桥杯真题之回文日期的题解&#xff0c;展示语言java。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4cc;本文由未见花闻原创&#xff0c…

ArcGIS基础实验操作100例--实验81创建点群最小边界几何

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验81 创建点群最小边界几何 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

MySQL是怎么保证高可用的?

在上一篇文章中,我和你介绍了 binlog 的基本内容,在一个主备关系中,每个备库接收主库的 binlog 并执行。 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。 但是,MySQL 要提供高可用能力…

Python中zipfile压缩包模块的使用

本文主要介绍了Python中zipfile压缩包模块的使用&#xff0c;zipfile 模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具&#xff0c;本文做一个简单的总结。 简介 ZIP 文件格式是一个常用的归档与压缩标准&#xff0c;zipfile 模块提供了创建、读取、写入、添加及列出 …

如何通过QA质量管理提高软件质量?

1、构建了质量检查系统 为了保证软件开发质量&#xff0c;一般来说QA检查单按照检查阶段划分为&#xff1a;需求分析、系统设计、系统实现、系统测试、交付验收、系统运维。 QA质量管理&#xff1a;CoCode项目管理 QA质量管理——QA检查单​ 为了进一步提高检查效果&…

【笔记:第4课】学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春

文章目录前言来源正文小结前言 创作开始时间&#xff1a;2023年1月10日22:41:26 如题&#xff0c;学习一下RISC-V。 来源 https://www.bilibili.com/video/BV1Q5411w7z5?p4&vd_source73a25632b4f745be6bbcfe3c82bb7ec0 正文 操作系统&#xff1a;POSIX 标准。 LLVM有…

ArcGIS基础实验操作100例--实验80随机采样统计

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验80 随机采样统计 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

2022年度总结——一切都在慢慢变好

人生天地之间&#xff0c;若白驹过隙&#xff0c;忽然而已&#xff0c;每个人都希望留下自己的足迹。——题记日月两盏灯&#xff0c;春秋一场梦。回想一年前的现在我在干什么呢&#xff1f;去年的寒假我刚步入大学一个学期&#xff0c;迷茫彷徨&#xff0c;怅然若失&#xff0…

Promise处理异步的并行和串行

一、异步的“并行” 同时处理&#xff0c;相互之间没啥依赖 // 执行FN1返回一个promise实例&#xff0c;实例中管理了一个异步编程的代码&#xff0c;当定时器到时间后&#xff0c;才会把实例的状态改为成功 const fn1 () > {return new Promise(resolve > {setTimeou…

nginx使用!

一&#xff1a;概述 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用 Nginx 网站用户有&#xff1a;百度、京…

NTN(二) Timing Advance

微信同步更新欢迎关注同名modem协议笔记 地面移动系统的传播延迟通常小于 1 毫秒。 相比之下&#xff0c;NTN 中的传播延迟要长得多&#xff0c;延迟从几毫秒到数百毫秒不等&#xff0c;具体取决于星载或机载平台的高度以及 NTN 中的payload类型。 因此对NTN系统&#xff0c;处…

Java 脚本引擎的使用

1. 前言 Java 6 版本就已经引入了 Rhino 引擎用以支持脚本代码运行&#xff0c;而从 Java 8 开始 Nashorn 取代 Rhino 成为 Java 内嵌的 JavaScript 引擎。Nashorn 引擎允许开发人员将 JavaScript 代码嵌入到 Java 中执行&#xff0c;这个特性在复杂的配置系统中有比较大的应用…

javascript reduce()方法

相信挺多人对这个方法还是那么的陌生&#xff0c;其实也能理解&#xff0c;毕竟它能做到的事情还有其他的方法能做到。下面就说一下我个人的理解吧&#xff01;&#xff01;&#xff01;reduce()方法&#xff1a;用法&#xff1a;array.reduce(function(total,currentData,curr…

管理bug的工具

一、国内的bug管理软件&#xff1a; 1、禅道 禅道是第一款国产开源项目管理软件。它的核心管理思想基于敏捷方法scrum&#xff0c;内置了产品管理和项目管理&#xff0c;同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能。在一个软件中就…

nodejs+vue+element+eachers构建开源项目大型连续剧(5)前端请求封装,完成用户注册。

在前端项目开发中&#xff0c;一个好的请求封装可以给我们带来诸多便利&#xff0c;减少了代码重复&#xff0c;优化了问题处理等。那接下来我们一起学习一下怎么做到对一个请求的简单封装吧。主要通过对axios请求的二次封装&#xff0c;实现页面的请求以及必要的优化。 一、引…

Word处理控件Aspose.Words功能演示:在 C# 中将 Word DOC DOCX 转换为 Markdown

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

每个Java程序员都必须知道的四种负载均衡算法

前言 一般来说&#xff0c;我们在设计系统的时候&#xff0c;为了系统的高扩展性&#xff0c;会尽可能的创建无状态的系统&#xff0c;这样我们就可以采用集群的方式部署&#xff0c;最终很方便的根据需要动态增减服务器数量。但是&#xff0c;要使系统具有更好的可扩展性&…

【UE4 第一人称射击游戏】32-添加击杀AI的提示功能(使用到控件蓝图的动画功能)

上一篇&#xff1a;【UE4 第一人称射击游戏】31-更好的UI界面本篇效果&#xff1a;可以看到在击杀AI后&#xff0c;右上角有击杀提示信息步骤&#xff1a;新建一个控件蓝图命名为“KillPopup”双击打开“KillPopup”&#xff0c;拖入一个图像控件&#xff0c;锚点设置为右上角&…

RobotFramework测试库

在RF 测试库里面&#xff0c;分为三种测试库标准测试库扩展测试库远程测试库标准测试库随 Robot Framework 版本一同发布的测试库&#xff0c; 不需要单独安装&#xff0c;但部分标准库仍然需要手动导入标准库有扩展测试库标准库以外的其他测试库都统称为扩展测试库&#xff0c…