詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫(kù)
說(shuō)在前面
最近搞了一個(gè)網(wǎng)站用來(lái)記錄自己日常的一些東西,之前的數(shù)據(jù)都是用Excel表格記錄的,現(xiàn)在需要將之前記錄的Excel數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫(kù)里,于是就想著用node寫一個(gè)簡(jiǎn)單的腳本來(lái)處理,所以就有了這一篇文章。
比如現(xiàn)在我們有這樣一份Excel數(shù)據(jù):

我們需要將這些數(shù)據(jù)插入到名為t_user的表中去。
1、導(dǎo)入模塊
首先,代碼導(dǎo)入了xlsx和fs模塊。xlsx模塊用于操作 Excel 文件,fs模塊用于文件系統(tǒng)操作。
const xlsx = require("xlsx");
const fs = require("fs");
2、讀取 Excel 文件
使用xlsx.readFile方法讀取指定路徑(./static/test.xlsx)的 Excel 文件,并將結(jié)果存儲(chǔ)在workBook變量中。
const workBook = xlsx.readFile("./static/test.xlsx");
3、獲取指定工作表并轉(zhuǎn)換為 JSON
- 從
workBook中獲取Sheet1的工作表,并存儲(chǔ)在sheet變量中。 - 使用
xlsx.utils.sheet_to_json方法將工作表轉(zhuǎn)換為 JSON 格式,并存儲(chǔ)在sheetJson變量中。 - 最后,使用
fs.writeFileSync方法將sheetJson以格式化的 JSON 字符串形式寫入到./file/sheetJson.text文件中。
const name = "Sheet1";
let sheet = workBook.Sheets[name];
const sheetJson = xlsx.utils.sheet_to_json(sheet);
fs.writeFileSync("./file/sheetJson.text", JSON.stringify(sheetJson, null, 2));
獲取到的json數(shù)據(jù)如下:

4、生成 SQL 插入語(yǔ)句
有了整理好的 JSON 數(shù)據(jù)后,我們就可以開始為將這些數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中做準(zhǔn)備了。
- 首先創(chuàng)建一個(gè)空數(shù)組
sqlList,用于存儲(chǔ)生成的 SQL 插入語(yǔ)句。 - 遍歷
sheetJson中的每個(gè)對(duì)象(代表 Excel 工作表中的一行數(shù)據(jù),就是一條完整的信息記錄。)。 - 對(duì)于每個(gè)對(duì)象,使用
for...in循環(huán)遍歷其屬性,構(gòu)建 SQL 插入語(yǔ)句的列名部分(keyStr)和值部分(valStr)。將字符串值用單引號(hào)括起來(lái)。 - 最后,將構(gòu)建好的 SQL 插入語(yǔ)句(
INSERT INTO t_user (${keyStr}) VALUES (${valStr});)添加到sqlList數(shù)組中。
let sqlList = [];
sheetJson.forEach((item) => {
let keyStr = "",
valStr = "";
for (const key in item) {
if (keyStr) keyStr += ",";
keyStr += key;
if (valStr) valStr += ",";
valStr += `'${item[key]}'`;
}
sqlList.push(`INSERT INTO t_user (${keyStr}) VALUES (${valStr});`);
});
這里的t_user是需要插入數(shù)據(jù)的表名,可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。
5、寫入 SQL 語(yǔ)句到文件
使用fs.writeFileSync方法將sqlList數(shù)組中的所有 SQL 插入語(yǔ)句以換行符連接后寫入到./file/excel2Sql.text文件中。
fs.writeFileSync("./file/excel2Sql.text", sqlList.join("\n"));
生成的sql插入語(yǔ)句如下:

6、插入數(shù)據(jù)庫(kù)
我們有一個(gè)t_user表,現(xiàn)在表里是空的

執(zhí)行生成的插入語(yǔ)句,將腳本生成的sql插入語(yǔ)句復(fù)制到控制臺(tái),執(zhí)行插入語(yǔ)句

成功執(zhí)行插入語(yǔ)句,我們就成功地將excel表中的數(shù)據(jù)都導(dǎo)入到數(shù)據(jù)庫(kù)中去了

7、完整代碼
const xlsx = require("xlsx");
const fs = require("fs");
const workBook = xlsx.readFile("./static/test.xlsx");
const name = "Sheet1";
let sheet = workBook.Sheets[name];
const sheetJson = xlsx.utils.sheet_to_json(sheet);
fs.writeFileSync("./file/sheetJson.text", JSON.stringify(sheetJson, null, 2));
let sqlList = [];
sheetJson.forEach((item) => {
let keyStr = "",
valStr = "";
for (const key in item) {
if (keyStr) keyStr += ",";
keyStr += key;
if (valStr) valStr += ",";
valStr += `'${item[key]}'`;
}
sqlList.push(`INSERT INTO t_user (${keyStr}) VALUES (${valStr});`);
});
fs.writeFileSync("./file/excel2Sql.text", sqlList.join("\n"));
這是一個(gè)將Excel數(shù)據(jù)轉(zhuǎn)為sql插入語(yǔ)句的簡(jiǎn)單腳本,大家可以根據(jù)自己的需求進(jìn)行微調(diào)后使用,也可以在node中直接連接數(shù)據(jù)庫(kù),省去手動(dòng)執(zhí)行的步驟,不過(guò)我覺得手動(dòng)插入也不麻煩,就直接生成插入語(yǔ)句然后手動(dòng)執(zhí)行語(yǔ)句來(lái)插入了
以上就是詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫(kù)的詳細(xì)內(nèi)容,更多關(guān)于node Excel導(dǎo)入數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node綁定全局TraceID的實(shí)現(xiàn)方法
這篇文章主要介紹了Node 綁定全局 TraceID的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了node如何通過(guò)腳本實(shí)現(xiàn)將Excel導(dǎo)入mysql數(shù)據(jù)庫(kù)里,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-11-11
如何將Node.js中的回調(diào)轉(zhuǎn)換為Promise
這篇文章主要給大家介紹了關(guān)于如何將Node.js中的回調(diào)轉(zhuǎn)換為Promise的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Nodejs進(jìn)階:核心模塊net入門學(xué)習(xí)與實(shí)例講解
本篇文章主要是介紹了Nodejs之NET模塊,net模塊是同樣是nodejs的核心模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
如何正確使用Nodejs 的 c++ module 鏈接到 OpenSSL
這篇文章主要介紹了如何正確使用Nodejs 的 c++ module 鏈接到 OpenSSL,需要的朋友可以參考下2014-08-08

