当前位置:首页 > 每日看点

怎么用node读取excel并根据内容存入mysql?

卡卷网2年前 (2024-12-09)每日看点397

说在前面

最近搞了一个网站用来记录自己日常的一些东西,之前的数据都是用Excel表格记录的,现在需要将之前记录的Excel数据导入到mysql数据库里,于是就想着用node写一个简单的脚本来处理,所以就有了这一篇文章。

比如现在我们有这样一份Excel数据:

怎么用node读取excel并根据内容存入mysql?  第1张

我们需要将这些数据插入到名为t_user的表中去。

1、导入模块

  • 首先,代码导入了xlsxfs模块。xlsx模块用于操作 Excel 文件,fs模块用于文件系统操作。

const xlsx = require("xlsx"); const fs = require("fs");

2、读取 Excel 文件

  • 使用xlsx.readFile方法读取指定路径(./static/test.xlsx)的 Excel 文件,并将结果存储在workBook变量中。

const workBook = xlsx.readFile("./static/test.xlsx");

3、获取指定工作表并转换为 JSON

  • workBook中获取Sheet1的工作表,并存储在sheet变量中。
  • 使用xlsx.utils.sheet_to_json方法将工作表转换为 JSON 格式,并存储在sheetJson变量中。
  • 最后,使用fs.writeFileSync方法将sheetJson以格式化的 JSON 字符串形式写入到./file/sheetJson.text文件中。

const name = "Sheet1"; let sheet = workBook.Sheets[name]; const sheetJson = xlsx.utils.sheet_to_json(sheet); fs.writeFileSync("./file/sheetJson.text", JSON.stringify(sheetJson, null, 2));

获取到的json数据如下:

怎么用node读取excel并根据内容存入mysql?  第2张

4、生成 SQL 插入语句

有了整理好的 JSON 数据后,我们就可以开始为将这些数据插入到数据库中做准备了。

  • 首先创建一个空数组sqlList,用于存储生成的 SQL 插入语句。
  • 遍历sheetJson中的每个对象(代表 Excel 工作表中的一行数据,就是一条完整的信息记录。)。
  • 对于每个对象,使用for...in循环遍历其属性,构建 SQL 插入语句的列名部分(keyStr)和值部分(valStr)。将字符串值用单引号括起来。
  • 最后,将构建好的 SQL 插入语句(INSERT INTO t_user (${keyStr}) VALUES (${valStr});)添加到sqlList数组中。

let sqlList = []; sheetJson.forEach((item) => { let keyStr = "", valStr = ""; for (const key in item) { if (keyStr) keyStr += ","; keyStr += key; if (valStr) valStr += ","; valStr += `'${item[key]}'`; } sqlList.push(`INSERT INTO t_user (${keyStr}) VALUES (${valStr});`); });

这里的t_user是需要插入数据的表名,可以根据实际情况进行调整。

5、写入 SQL 语句到文件

  • 使用fs.writeFileSync方法将sqlList数组中的所有 SQL 插入语句以换行符连接后写入到./file/excel2Sql.text文件中。

fs.writeFileSync("./file/excel2Sql.text", sqlList.join("\n"));

生成的sql插入语句如下:

怎么用node读取excel并根据内容存入mysql?  第3张

6、插入数据库

  • 我们有一个t_user表,现在表里是空的

怎么用node读取excel并根据内容存入mysql?  第4张

  • 执行生成的插入语句,将脚本生成的sql插入语句复制到控制台,执行插入语句

怎么用node读取excel并根据内容存入mysql?  第5张

  • 成功执行插入语句,我们就成功地将excel表中的数据都导入到数据库中去了

怎么用node读取excel并根据内容存入mysql?  第6张

7、完整代码

const xlsx = require("xlsx"); const fs = require("fs"); const workBook = xlsx.readFile("./static/test.xlsx"); const name = "Sheet1"; let sheet = workBook.Sheets[name]; const sheetJson = xlsx.utils.sheet_to_json(sheet); fs.writeFileSync("./file/sheetJson.text", JSON.stringify(sheetJson, null, 2)); let sqlList = []; sheetJson.forEach((item) => { let keyStr = "", valStr = ""; for (const key in item) { if (keyStr) keyStr += ","; keyStr += key; if (valStr) valStr += ","; valStr += `'${item[key]}'`; } sqlList.push(`INSERT INTO t_user (${keyStr}) VALUES (${valStr});`); }); fs.writeFileSync("./file/excel2Sql.text", sqlList.join("\n"));

这是一个将Excel数据转为sql插入语句的简单脚本,大家可以根据自己的需求进行微调后使用,也可以在node中直接连接数据库,省去手动执行的步骤,不过我觉得手动插入也不麻烦,就直接生成插入语句然后手动执行语句来插入了

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 ,平时也喜欢写些东西,既为自己记录 ,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 ,写错的地方望指出,定会认真改进 ,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/3683.html

分享给朋友:

相关文章

你每天用来涨知识的手机应用程序有哪些?

你每天用来涨知识的手机应用程序有哪些?

经过深度使用和测评, 从100个APP中选出的这35个超实用的app,每一个都是最硬核最有料的涨知识神器!每天打开看看,能让你提神醒脑,眼界大开,成为朋友聚会上的话题王者! 先放上全部APP目录,有新闻资讯类、英语学习类、读书类、影视类…

如何进行 Elasticsearch 调优实践?

如何进行 Elasticsearch 调优实践?

面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s ,坑爹了。第一次搜索的…

荣耀magic 7 首发的应该都收到货了,感觉怎么样?

8号入手magic7,跟mate40pro比。 优点:1、电池真耐用,充电块,华为电池也是新换的但是明显荣耀耐用;2、系统明显快多了,mate40pro下半年开始卡的不行,实在受不了了。3、声音、震动效果提升明显,指纹反应灵敏很多。 缺点:…

为什么网易云音乐越做越烂了?

还记得当年周杰伦专辑授权到期的最后一天,他来个一次性打包买断给歌迷,结果歌迷花钱买完了,第二天授权到期,不能听了。 这种下三滥的操作,我不知道是哪个群体这么多年一直在吹网易云音乐。 一堆没有授权的英文歌,一堆民间翻唱的歌,他是怎么有脸搞付费…

我真的需要有人帮我选耳机!!如何挑选第一款头戴式耳机?

我真的需要有人帮我选耳机!!如何挑选第一款头戴式耳机?

挑选第一款头戴式耳机时,应综合考虑多个因素。‌ 首要考虑的是佩戴舒适度,其次是音质、降噪效果、续航能力和蓝牙版本‌。‌佩戴舒适度‌:选择轻量化设计,单耳重量不超过200克,材质柔软透气,如亲肤仿蛋白皮,以提升佩戴舒适度。 ‌音质‌:大尺寸的…

为什么百度贴吧还不凉?

你们都看小说么,那我跟你们说个东西,百度有个贴吧叫阅读吧,多牛逼呢,人家自己开发了一款应用,不在任何应用市场售卖,这个应用类似于一个壳子,一群大神天天找接口资源整理好打包,你装了这个应用再把接口导入到软件,是个小说你就搜吧,只要中文互联网有…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。