Node.js实现读取Excel数据并插入MySQL
使用最新的MySQL2模块,mysql2是最新的Node.js调用MySQL驱动
本文从EXCEL中读取数据,然后使用一条语句将数据插入到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,你需要替换为你实际的Excel文件路径。
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 fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
这篇文章主要介绍了Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-09-09node.js中的定时器nextTick()和setImmediate()区别分析
本文介绍了node.js中的定时器nextTick()和setImmediate()的区别分析,非常的不错,这里推荐给大家。2014-11-11
最新评论