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

