Node.js使用mysql2与ExcelJS读取Excel并批量插入MySQL
本文介绍如何在Node.js环境中,利用mysql2驱动和ExcelJS库实现从Excel文件读取数据并批量插入MySQL数据库。文章详细解析了连接池配置、工作表读取、自定义数据处理类以及SQL插入语句的构建与执行过程,重点讨论了使用字符串模板拼接多值插入时的潜在风险及参数化查询建议。
采用最新的mysql2模块,这是目前Node.js中调用MySQL数据库的主流驱动程序。
本文演示如何从Excel文件中提取数据,并通过单条SQL语句将提取的数据批量插入到MySQL数据库中。
INSERT INTO 学生 (序号, 学号, 姓名,性别)
VALUES
${str}
npm包下载地址:www.npmjs.com/package/mysql2#mysql-2
mysql2中文文档地址:github.com/sidorares/node-mysql2/blob/HEAD/documentation/zh-cn/
一、代码执行效果

二、读取EXCEL数据
目标是将数据转换为如下格式:(1,22503,'王','女'),(2,22503,'叶甜','女'),以便后续插入数据库。


主函数代码:
const ExcelJS = require('exceljs')
//引入自定义模块myFun
const my = require('./my.js')
let 工具 = new my()
读取EXCEL()
async function 读取EXCEL() {
const 工作簿 = new ExcelJS.Workbook()
await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx') // 替换为您的Excel文件路径
const 工作表 = 工作簿.worksheets[6]
console.log( 工具.getStr(工作表) )
}该部分代码用于读取一个Excel文件并打印其内容。具体执行步骤如下:
1. 引入exceljs库:这是一个用于处理Excel文件的JavaScript库。
2. 引入自定义模块my.js:包含一个名为my的类。
3. 调用读取EXCEL函数:这是一个异步函数,执行以下操作:
1)实例化一个新的ExcelJS工作簿对象。
2)使用readFile方法异步读取指定路径的Excel文件。示例路径为EXCEL/生菜前端.xlsx,实际使用时需替换为真实的文件路径。
3)获取工作簿中的第7个工作表(计算机索引从0开始,因此worksheets[6]对应第7个工作表)。调用工具.getStr方法处理该工作表,并将结果打印至控制台。
自定义类代码:
class my{
getStr(工作表){
let str = ''
let arr = this.to_arr(工作表)
for(let i=1; i<arr.length ; i++ ){
let one = arr[i]
let 单个 = `(${one[0]},${one[1]},'${one[2]}','${one[3]}'),`
str+= 单个
}
str = str.slice(0, -1);
return str
}
to_arr(工作表) {
let arr = []
工作表.eachRow((row, rowIndex) => {
let rowArr = []
row.eachCell((cell, colIndex) => {
rowArr.push(cell.value)
})
arr.push(rowArr)
})
return arr
}
to_cellObj(工作表){
let OBJ = {}
const colArr = ['占位','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
工作表.eachRow((row,rowIndex) => {
row.eachCell((cell, colIndex) => {
let 列名 = colArr[colIndex]
OBJ[列名+rowIndex] = cell.value
})
})
return OBJ
}
}
module.exports = my三、数据库语句
CREATE DATABASE 考勤 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE 考勤;
CREATE TABLE 年级 (
id INT AUTO_INCREMENT,
年级 INT,
专业 VARCHAR(255),
行政班名 VARCHAR(500),
班级编号 VARCHAR(100),
辅导员 VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE 课程 (
id INT AUTO_INCREMENT,
教室 TEXT,
时段 VARCHAR(255),
日期 DATE,
PRIMARY KEY(id)
);
INSERT INTO 课程
(教室,时段,日期)
VALUES
('615教室','1-4','2023-11-08'),
('606教室','5-8','2023-11-08');
CREATE TABLE 学生(
id INT AUTO_INCREMENT,
序号 INT,
学号 VARCHAR(100),
姓名 VARCHAR(200),
性别 VARCHAR(20),
QQ VARCHAR(200),
手机 VARCHAR(200),
PRIMARY KEY(id)
)
INSERT INTO 学生 (序号, 学号, 姓名,性别) VALUES (?, ?, ?, ?, ?)四、完整代码
const mysql = require('mysql2/promise');
const ExcelJS = require('exceljs')
//引入自定义模块myFun
const my = require('./my.js')
let 工具 = new my()
main()
async function main(){
let config = {
host:'localhost',
port:3380,
user: 'root',
database: '考勤'
}
const pool = await mysql.createPool(config);
//从EXCEL中读取值
const 工作簿 = new ExcelJS.Workbook()
await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx') // 替换为您的Excel文件路径
const 工作表 = 工作簿.worksheets[6]
let str = 工具.getStr(工作表)
let SQL = `
INSERT INTO 学生 (序号, 学号, 姓名,性别)
VALUES
${str}
`
const result = await pool.execute(SQL);
console.log(result[0])
}这段代码是一个基于Node.js、ExcelJS库及MySQL连接池的异步函数。
其主要功能是从Excel文件中读取数据,并将这些数据插入到MySQL数据库的指定表中。
1)let config = {...}:定义一个对象,包含连接MySQL数据库所需的配置信息。
2)const pool = await mysql.createPool(config):利用上述配置创建MySQL连接池。mysql2是最新的Node.js驱动MySQL数据库的模块。
3)const 工作簿 = new ExcelJS.Workbook():创建一个新的ExcelJS工作簿对象。
4)await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx'):异步读取指定路径的Excel文件。需将路径替换为你实际的Excel文件路径。
5)const 工作表 = 工作簿.worksheets[6]:获取工作簿中的第7个工作表(在EXCEL中,工作表索引从0开始)。
6)let str = 工具.getStr(工作表):调用自定义模块my.js中的getStr方法处理工作表,并将结果赋值给变量str。
7) 定义SQL插入语句,其中${str}是之前从Excel文件中读取并处理的数据,将被插入到SQL语句中。
8)const result = await pool.execute(SQL):使用连接池执行SQL插入语句。
9)console.log(result[0]):打印插入操作的结果。
注意:此代码中使用的MySQL语法可能存在隐患,特别是通过字符串模板插入多个值的方式。这可能导致SQL注入风险。为防止此类问题,建议使用参数化查询或预编译语句。同时,请确保工具.getStr方法返回的数据格式与SQL插入语句的需求一致。
返回数据结果:
ResultSetHeader {
fieldCount: 0,
affectedRows: 46,
insertId: 95,
info: 'Records: 46 Duplicates: 0 Warnings: 0',
serverStatus: 2,
warningStatus: 0,
changedRows: 0
}五、小结
注意插入语句返回的结果存储在result[0]中。
到此这篇关于Node.js实现读取Excel数据并插入MySQL的文章就介绍到这了,更多相关Node.js读取Excel数据内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
Node.js中使用path模块获取文件名
2026-11-05 15:15:15
Node.js中url模块与querystring模块处理查询字符串的区别
2026-11-05 15:04:45
JavaScript(JS)主要用来做什么
2026-11-05 10:10:47
怎么修改Node.js和npm的全局安装路径与缓存目录
2026-11-04 19:48:28
NW.js 常见问题排查:Node 模块加载失败与版本兼容解决
2026-11-04 11:22:45
