Node.js實(shí)現(xiàn)讀取Excel數(shù)據(jù)并插入MySQL
使用最新的MySQL2模塊,mysql2是最新的Node.js調(diào)用MySQL驅(qū)動(dòng)
本文從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(工作表) ) }
讀取一個(gè)Excel文件并打印一內(nèi)容。具體來說,代碼做了以下事情:
1.引入exceljs庫:這是一個(gè)用于處理Excel文件的JavaScript庫。
2.引入自定義模塊my.js:一個(gè)my類。
3.調(diào)用讀取EXCEL函數(shù):這是一個(gè)異步函數(shù),它執(zhí)行以下操作:
1)創(chuàng)建一個(gè)新的ExcelJS工作簿對象。
2) 使用readFile方法異步讀取指定路徑的Excel文件。這個(gè)路徑是EXCEL/生菜前端.xlsx,你需要替換為你實(shí)際的Excel文件路徑。
3)獲取工作簿的第7個(gè)工作表(在計(jì)算機(jī)中,索引從0開始,所以worksheets[6]指的是第7個(gè)工作表)。
使用工具.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 單個(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ù)庫語句
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, 時(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, 序號 INT, 學(xué)號 VARCHAR(100), 姓名 VARCHAR(200), 性別 VARCHAR(20), QQ VARCHAR(200), 手機(jī) 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]) }
這段代碼是一個(gè)使用Node.js和ExcelJS庫以及MySQL連接池的異步函數(shù)。
其主要功能是從一個(gè)Excel文件中讀取數(shù)據(jù),然后將這些數(shù)據(jù)插入到MySQL數(shù)據(jù)庫中的一個(gè)表中:
1)let config = {...}
:定義了一個(gè)對象,包含了連接到MySQL數(shù)據(jù)庫所需的配置。
2)const pool = await mysql.createPool(config)
:使用上述配置創(chuàng)建一個(gè)MySQL連接池。mysql2是一個(gè)最新的Node.js驅(qū)動(dòng)mysql數(shù)據(jù)庫模塊。
3)const 工作簿 = new ExcelJS.Workbook()
:創(chuàng)建一個(gè)新的ExcelJS工作簿對象。
4)await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx')
:異步讀取指定路徑的Excel文件。你需要替換路徑為你實(shí)際的Excel文件路徑。
5)const 工作表 = 工作簿.worksheets[6]
:獲取工作簿中的第7個(gè)工作表(在EXCEL中,工作表索引從0開始)。
6)let str = 工具.getStr(工作表)
:調(diào)用自定義模塊my.js中的getStr方法處理工作表,并將結(jié)果賦值給str。
7) 定義SQL插入語句,其中${str}是之前從Excel文件中讀取的數(shù)據(jù),會(huì)被插入到SQL語句
8)const result = await pool.execute(SQL)
:使用連接池執(zhí)行SQL插入語句。
9)console.log(result[0])
:打印插入操作的結(jié)果。
注意:此代碼中使用的MySQL語法可能存在問題,特別是使用字符串模板插入多個(gè)值。這可能會(huì)導(dǎo)致SQL注入問題。為了防止這種情況,建議使用參數(shù)化查詢或預(yù)編譯語句。同時(shí),請確保工具.getStr方法返回的數(shù)據(jù)格式與SQL插入語句的需求一致。
返回?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é)
注意插入語句返回結(jié)果在result[0]。
到此這篇關(guān)于Node.js實(shí)現(xiàn)讀取Excel數(shù)據(jù)并插入MySQL的文章就介紹到這了,更多相關(guān)Node.js讀取Excel數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(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)登錄注冊的實(shí)現(xiàn)代碼
本篇文章主要介紹了用node和express連接mysql實(shí)現(xiàn)登錄注冊的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07node.js?實(shí)現(xiàn)手機(jī)號驗(yàn)證碼登錄功能
這篇文章主要介紹了node.js?實(shí)現(xiàn)手機(jī)號驗(yàn)證碼登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08詳解nodejs的express如何自動(dòng)生成項(xiàng)目框架
本篇文章主要介紹了nodejs的express如何自動(dòng)生成項(xiàng)目框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07