详解node如何将Excel导入数据库
说在前面
最近搞了一个网站用来记录自己日常的一些东西,之前的数据都是用Excel表格记录的,现在需要将之前记录的Excel数据导入到mysql数据库里,于是就想着用node写一个简单的脚本来处理,所以就有了这一篇文章。
比如现在我们有这样一份Excel数据:
我们需要将这些数据插入到名为t_user
的表中去。
1、导入模块
首先,代码导入了xlsx
和fs
模块。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数据如下:
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插入语句如下:
6、插入数据库
我们有一个t_user表,现在表里是空的
执行生成的插入语句,将脚本生成的sql插入语句复制到控制台,执行插入语句
成功执行插入语句,我们就成功地将excel表中的数据都导入到数据库中去了
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中直接连接数据库,省去手动执行的步骤,不过我觉得手动插入也不麻烦,就直接生成插入语句然后手动执行语句来插入了
以上就是详解node如何将Excel导入数据库的详细内容,更多关于node Excel导入数据库的资料请关注脚本之家其它相关文章!
相关文章
Nodejs中使用puppeteer控制浏览器中视频播放功能
本项目主要功能为在浏览器中自动播放视频,并且实现音量控制,快进快退,全屏控制,播放暂停控制等功能。对Nodejs中使用puppeteer控制浏览器中视频播放功能感兴趣的朋友跟随小编一起看看吧2019-08-08详解如何使用node.js的开发框架express创建一个web应用
这篇文章主要介绍了详解如何使用node.js的开发框架express创建一个web应用,网上各种搜索后,整理了下快速搭建express框架的步骤。非常具有实用价值,需要的朋友可以参考下2018-12-12使用cluster 将自己的Node服务器扩展为多线程服务器
nodejs在v0.6.x之后 增加了一个模块 cluster 用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程的问题。2014-11-11
最新评论