node将Excel导入数据库

说在前面

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

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

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

1、导入模块

  • 首先,代码导入了xlsxfs模块。xlsx模块用于操作 Excel 文件,fs模块用于文件系统操作。
javascript 复制代码
const xlsx = require("xlsx");
const fs = require("fs");

2、读取 Excel 文件

  • 使用xlsx.readFile方法读取指定路径(./static/test.xlsx)的 Excel 文件,并将结果存储在workBook变量中。
javascript 复制代码
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文件中。
javascript 复制代码
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数组中。
javascript 复制代码
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文件中。
javascript 复制代码
fs.writeFileSync("./file/excel2Sql.text", sqlList.join("\n"));

生成的sql插入语句如下:

6、插入数据库

  • 我们有一个t_user表,现在表里是空的
  • 执行生成的插入语句,将脚本生成的sql插入语句复制到控制台,执行插入语句
  • 成功执行插入语句,我们就成功地将excel表中的数据都导入到数据库中去了

7、完整代码

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

相关推荐
多则惑少则明20 分钟前
Vue开发系列——自定义组件开发
前端·javascript·vue.js
用户2506949216127 分钟前
next框架打包.next文件夹部署
前端
程序猿小蒜30 分钟前
基于springboot的校园社团信息管理系统开发与设计
java·前端·spring boot·后端·spring
一叶难遮天30 分钟前
开启RN之旅——前端基础
前端·javascript·promise·js基础·es6/ts·npm/nrm
申阳31 分钟前
Day 4:02. 基于Nuxt开发博客项目-整合 Inspira UI
前端·后端·程序员
程序猿_极客35 分钟前
【期末网页设计作业】HTML+CSS+JavaScript 猫咪主题网站开发(附源码与效果演示)
前端·css·html·课程设计·网页设计作业
IT古董35 分钟前
【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI 完整实战教程-第1章:项目概述与技术栈介绍
前端·react.js·前端框架
有点笨的蛋37 分钟前
从零搭建小程序首页:新手也能看懂的结构解析与实战指南
前端·微信小程序
爱宇阳37 分钟前
Vue3 前端项目 Docker 容器化部署教程
前端·docker·容器
Irene199138 分钟前
前端缓存技术和使用场景
前端·缓存