詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫
說在前面
最近搞了一個網(wǎng)站用來記錄自己日常的一些東西,之前的數(shù)據(jù)都是用Excel表格記錄的,現(xiàn)在需要將之前記錄的Excel數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫里,于是就想著用node寫一個簡單的腳本來處理,所以就有了這一篇文章。
比如現(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é)果存儲在workBook
變量中。
const workBook = xlsx.readFile("./static/test.xlsx");
3、獲取指定工作表并轉(zhuǎn)換為 JSON
- 從
workBook
中獲取Sheet1
的工作表,并存儲在sheet
變量中。 - 使用
xlsx.utils.sheet_to_json
方法將工作表轉(zhuǎn)換為 JSON 格式,并存儲在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 插入語句
有了整理好的 JSON 數(shù)據(jù)后,我們就可以開始為將這些數(shù)據(jù)插入到數(shù)據(jù)庫中做準(zhǔn)備了。
- 首先創(chuàng)建一個空數(shù)組
sqlList
,用于存儲生成的 SQL 插入語句。 - 遍歷
sheetJson
中的每個對象(代表 Excel 工作表中的一行數(shù)據(jù),就是一條完整的信息記錄。)。 - 對于每個對象,使用
for...in
循環(huán)遍歷其屬性,構(gòu)建 SQL 插入語句的列名部分(keyStr
)和值部分(valStr
)。將字符串值用單引號括起來。 - 最后,將構(gòu)建好的 SQL 插入語句(
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 語句到文件
使用fs.writeFileSync
方法將sqlList
數(shù)組中的所有 SQL 插入語句以換行符連接后寫入到./file/excel2Sql.text
文件中。
fs.writeFileSync("./file/excel2Sql.text", sqlList.join("\n"));
生成的sql插入語句如下:
6、插入數(shù)據(jù)庫
我們有一個t_user表,現(xiàn)在表里是空的
執(zhí)行生成的插入語句,將腳本生成的sql插入語句復(fù)制到控制臺,執(zhí)行插入語句
成功執(zhí)行插入語句,我們就成功地將excel表中的數(shù)據(jù)都導(dǎo)入到數(shù)據(jù)庫中去了
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"));
這是一個將Excel數(shù)據(jù)轉(zhuǎn)為sql插入語句的簡單腳本,大家可以根據(jù)自己的需求進(jìn)行微調(diào)后使用,也可以在node中直接連接數(shù)據(jù)庫,省去手動執(zhí)行的步驟,不過我覺得手動插入也不麻煩,就直接生成插入語句然后手動執(zhí)行語句來插入了
以上就是詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫的詳細(xì)內(nèi)容,更多關(guān)于node Excel導(dǎo)入數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法
這篇文章主要給大家介紹了在Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-06-06整理幾個關(guān)鍵節(jié)點(diǎn)深入理解nodejs
這篇文章主要介紹了整理幾個關(guān)鍵節(jié)點(diǎn)深入理解nodejs,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下,需要的小伙伴可以參考一下2022-07-07詳解nodejs微信公眾號開發(fā)——4.自動回復(fù)各種消息
這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——4.自動回復(fù)各種消息,非常具有實(shí)用價值,需要的朋友可以參考下2017-04-04深入理解Node.js 事件循環(huán)和回調(diào)函數(shù)
這篇文章主要介紹了深入理解Node.js 事件循環(huán)和回調(diào)函數(shù),詳細(xì)的介紹Node.js 事件循環(huán)和Node.js回調(diào)函數(shù),需要學(xué)習(xí)的可以參考一下。2016-11-11淺析Node.js實(shí)現(xiàn)HTTP文件下載
本文介紹如何用Node.js來實(shí)現(xiàn)HTTP文件下載,文章以實(shí)例演示所以很詳細(xì),有需要的小伙伴們可以參考學(xué)習(xí)。2016-08-08Node.js中console.log()輸出彩色字體的方法示例
這篇文章主要給大家介紹了關(guān)于Node.js中console.log()輸出彩色字體的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Windows上安裝Node-RED的實(shí)現(xiàn)
Node-RED是一個用于物聯(lián)網(wǎng)編程的工具,提供了一個基于瀏覽器的編程環(huán)境和豐富的節(jié)點(diǎn)類型,本文就來介紹一下Windows上安裝Node-RED的實(shí)現(xiàn),感興趣的可以了解一下2025-02-02