Node.js實(shí)現(xiàn)讀取Excel數(shù)據(jù)并插入MySQL
使用最新的MySQL2模塊,mysql2是最新的Node.js調(diào)用MySQL驅(qū)動(dòng)
本文從EXCEL中讀取數(shù)據(jù),然后使用一條語(yǔ)句將數(shù)據(jù)插入到MySQL中
INSERT INTO 學(xué)生 (序號(hào), 學(xué)號(hào), 姓名,性別)
VALUES
${str}
npm包地址 www.npmjs.com/package/mysql2#mysql-2
mysql2中文文檔:github.com/sidorares/node-mysql2/blob/HEAD/documentation/zh-cn/
一、代碼執(zhí)行效果

二、讀取EXCEL數(shù)據(jù)
目標(biāo)得到:(1,22503,'王','女'),(2,22503,'葉甜','女')格式的數(shù)據(jù)


主函數(shù)代碼:
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(工作表) )
}讀取一個(gè)Excel文件并打印一內(nèi)容。具體來(lái)說(shuō),代碼做了以下事情:
1.引入exceljs庫(kù):這是一個(gè)用于處理Excel文件的JavaScript庫(kù)。
2.引入自定義模塊my.js:一個(gè)my類(lèi)。
3.調(diào)用讀取EXCEL函數(shù):這是一個(gè)異步函數(shù),它執(zhí)行以下操作:
1)創(chuàng)建一個(gè)新的ExcelJS工作簿對(duì)象。
2) 使用readFile方法異步讀取指定路徑的Excel文件。這個(gè)路徑是EXCEL/生菜前端.xlsx,你需要替換為你實(shí)際的Excel文件路徑。
3)獲取工作簿的第7個(gè)工作表(在計(jì)算機(jī)中,索引從0開(kāi)始,所以worksheets[6]指的是第7個(gè)工作表)。
使用工具.getStr方法處理工作表,并將結(jié)果打印到控制臺(tái)
自定義類(lèi)代碼:
class my{
getStr(工作表){
let str = ''
let arr = this.to_arr(工作表)
for(let i=1; i<arr.length ; i++ ){
let one = arr[i]
let 單個(gè) = `(${one[0]},${one[1]},'${one[2]}','${one[3]}'),`
str+= 單個(gè)
}
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三、數(shù)據(jù)庫(kù)語(yǔ)句
CREATE DATABASE 考勤 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE 考勤;
CREATE TABLE 年級(jí) (
id INT AUTO_INCREMENT,
年級(jí) INT,
專(zhuān)業(yè) VARCHAR(255),
行政班名 VARCHAR(500),
班級(jí)編號(hào) VARCHAR(100),
輔導(dǎo)員 VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE 課程 (
id INT AUTO_INCREMENT,
教室 TEXT,
時(shí)段 VARCHAR(255),
日期 DATE,
PRIMARY KEY(id)
);
INSERT INTO 課程
(教室,時(shí)段,日期)
VALUES
('615教室','1-4','2023-11-08'),
('606教室','5-8','2023-11-08');
CREATE TABLE 學(xué)生(
id INT AUTO_INCREMENT,
序號(hào) INT,
學(xué)號(hào) VARCHAR(100),
姓名 VARCHAR(200),
性別 VARCHAR(20),
QQ VARCHAR(200),
手機(jī) VARCHAR(200),
PRIMARY KEY(id)
)
INSERT INTO 學(xué)生 (序號(hào), 學(xué)號(hào), 姓名,性別) 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 學(xué)生 (序號(hào), 學(xué)號(hào), 姓名,性別)
VALUES
${str}
`
const result = await pool.execute(SQL);
console.log(result[0])
}這段代碼是一個(gè)使用Node.js和ExcelJS庫(kù)以及MySQL連接池的異步函數(shù)。
其主要功能是從一個(gè)Excel文件中讀取數(shù)據(jù),然后將這些數(shù)據(jù)插入到MySQL數(shù)據(jù)庫(kù)中的一個(gè)表中:
1)let config = {...}:定義了一個(gè)對(duì)象,包含了連接到MySQL數(shù)據(jù)庫(kù)所需的配置。
2)const pool = await mysql.createPool(config):使用上述配置創(chuàng)建一個(gè)MySQL連接池。mysql2是一個(gè)最新的Node.js驅(qū)動(dòng)mysql數(shù)據(jù)庫(kù)模塊。
3)const 工作簿 = new ExcelJS.Workbook():創(chuàng)建一個(gè)新的ExcelJS工作簿對(duì)象。
4)await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx'):異步讀取指定路徑的Excel文件。你需要替換路徑為你實(shí)際的Excel文件路徑。
5)const 工作表 = 工作簿.worksheets[6]:獲取工作簿中的第7個(gè)工作表(在EXCEL中,工作表索引從0開(kāi)始)。
6)let str = 工具.getStr(工作表):調(diào)用自定義模塊my.js中的getStr方法處理工作表,并將結(jié)果賦值給str。
7) 定義SQL插入語(yǔ)句,其中${str}是之前從Excel文件中讀取的數(shù)據(jù),會(huì)被插入到SQL語(yǔ)句
8)const result = await pool.execute(SQL):使用連接池執(zhí)行SQL插入語(yǔ)句。
9)console.log(result[0]):打印插入操作的結(jié)果。
注意:此代碼中使用的MySQL語(yǔ)法可能存在問(wèn)題,特別是使用字符串模板插入多個(gè)值。這可能會(huì)導(dǎo)致SQL注入問(wèn)題。為了防止這種情況,建議使用參數(shù)化查詢或預(yù)編譯語(yǔ)句。同時(shí),請(qǐng)確保工具.getStr方法返回的數(shù)據(jù)格式與SQL插入語(yǔ)句的需求一致。
返回?cái)?shù)據(jù)結(jié)果:
ResultSetHeader {
fieldCount: 0,
affectedRows: 46,
insertId: 95,
info: 'Records: 46 Duplicates: 0 Warnings: 0',
serverStatus: 2,
warningStatus: 0,
changedRows: 0
}五、小結(jié)
注意插入語(yǔ)句返回結(jié)果在result[0]。
到此這篇關(guān)于Node.js實(shí)現(xiàn)讀取Excel數(shù)據(jù)并插入MySQL的文章就介紹到這了,更多相關(guān)Node.js讀取Excel數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解NodeJs項(xiàng)目 CentOs linux服務(wù)器線上部署
這篇文章主要介紹了NodeJs項(xiàng)目 CentOs linux服務(wù)器線上部署,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
用node和express連接mysql實(shí)現(xiàn)登錄注冊(cè)的實(shí)現(xiàn)代碼
本篇文章主要介紹了用node和express連接mysql實(shí)現(xiàn)登錄注冊(cè)的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07
node.js?實(shí)現(xiàn)手機(jī)號(hào)驗(yàn)證碼登錄功能
這篇文章主要介紹了node.js?實(shí)現(xiàn)手機(jī)號(hào)驗(yàn)證碼登錄功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
詳解nodejs的express如何自動(dòng)生成項(xiàng)目框架
本篇文章主要介紹了nodejs的express如何自動(dòng)生成項(xiàng)目框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

