欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs使用exceljs實現(xiàn)excel導入導出

 更新時間:2024年03月18日 09:35:29   作者:云牧  
在日常開發(fā)中,我們常需在后臺管理系統(tǒng)中實現(xiàn)數(shù)據(jù)的導入與導出功能,以便與?Excel?文件進行交互,本文將使用使用exceljs實現(xiàn)excel導入導出功能,需要的可以參考下

Excel 數(shù)據(jù)處理簡介

Excel 是廣泛應用于辦公場景的數(shù)據(jù)處理軟件。

在日常開發(fā)中,我們常需在后臺管理系統(tǒng)中實現(xiàn)數(shù)據(jù)的導入與導出功能,以便與 Excel 文件進行交互。

使用 exceljs 庫進行 excel 數(shù)據(jù)處理

exceljs 簡介

在 Node.js 環(huán)境和瀏覽器中,我們常用 exceljs 這個包來解析和生成 Excel 文件。該包在 npm 官網(wǎng)上每周有超過 30 萬的下載量,足見其受歡迎程度。

環(huán)境搭建

mkdir exceljs-test
cd exceljs-test
npm init -y

安裝 exceljs:

npm install exceljs

新建 data.xlsx:

從 Excel 文件讀取數(shù)據(jù)

工作表結(jié)構(gòu)遵循層級關(guān)系:workbook(工作簿)> worksheet(工作表)> row(行)> cell(單元格)。通過遍歷這些層級,我們可以獲取所有數(shù)據(jù):

// 引入 exceljs 庫
const { Workbook } = require('exceljs');

// 異步函數(shù)讀取 Excel 文件
async function main() {
	// 創(chuàng)建一個Workbook實例,用于處理Excel文件
	const workbook = new Workbook();

	// 從指定路徑讀取Excel文件
	const dataBook = await workbook.xlsx.readFile('./data.xlsx');

	// 遍歷Excel中的每個工作表
	dataBook.eachSheet((sheet, index1) => {
		console.log('工作表 ' + index1);

		// 遍歷每個工作表中的每行數(shù)據(jù)
		sheet.eachRow((row, index2) => {
			const rowData = []; // 用于存儲當前行的數(shù)據(jù)

			row.eachCell((cell, index3) => {
				// 遍歷當前行的每個單元格,并將值存儲到rowData數(shù)組中
				rowData.push(cell.value);
			});

			console.log('行 ' + index2, rowData);
		});
	});
}

main();

node 運行:

我們已經(jīng)解析出 excel 數(shù)據(jù)了。

exceljs 還提供了簡便的方法,可以直接調(diào)用 worksheet 的 getSheetValues 來拿到表格數(shù)據(jù),不用自己遍歷:

這就是解析 excel 文件。

導入數(shù)據(jù)的時候,按照格式從中解析數(shù)據(jù)然后存入數(shù)據(jù)庫就行。

一般我們都會提供一個 excel 模版,用這個模版來填數(shù)據(jù),然后再導入。

數(shù)據(jù)導出

使用 exceljs 進行數(shù)據(jù)導出:

const { Workbook } = require('exceljs');

async function main() {
	// 創(chuàng)建一個新的工作簿
	const workbook = new Workbook();
	// 添加一個新的工作表,命名為'hong'
	const worksheet = workbook.addWorksheet('hong');

	// 定義工作表的列結(jié)構(gòu)
	worksheet.columns = [
		{ header: 'ID', key: 'id', width: 20 },
		{ header: '姓名', key: 'name', width: 40 },
		{ header: '年齡', key: 'age', width: 20 },
	];

	// 數(shù)據(jù)數(shù)組,用于填充工作表
	const data = [
		{ id: 1, name: '探春', age: 18 },
		{ id: 2, name: '迎春', age: 19 },
		{ id: 3, name: '惜春' },
	];

	// 向工作表中添加數(shù)據(jù)行
	worksheet.addRows(data);

	// 將工作簿保存為Excel文件
	workbook.xlsx.writeFile('./data2.xlsx');
}

main();

運行后產(chǎn)生的 data2.xlsx 如下:

我們可以遍歷行和列,對特定單元格進行樣式設置,如字體、背景色、邊框等。

比如通過 cell.style 可以設置 font、fill、border、alignment 這些。

在瀏覽器中使用 ExcelJS 庫解析 Excel 文件

創(chuàng)建 index.html,引入 exceljs 包:

<!DOCTYPE html>
<html lang="en">
	<head>
		<!-- 加載ExcelJS庫 -->
		<script src="https://unpkg.com/exceljs@4.4.0/dist/exceljs.min.js"></script>
	</head>
	<body>
		<!-- 文件選擇輸入框 -->
		<input id="fileInput" type="file" />

		<script>
			const fileInput = document.getElementById('fileInput');

			// 文件選擇變化時的處理邏輯
			fileInput.onchange = async () => {
				// 獲取選中的文件
				const file = fileInput.files[0];

				const { Workbook } = ExcelJS;

				const workbook = new Workbook();

				const loadedWorkbook = await workbook.xlsx.load(file);

				loadedWorkbook.eachSheet((sheet, index1) => {
					console.log('工作表' + index1);

					const value = sheet.getSheetValues();

					console.log(value);
				});
			};
		</script>
	</body>
</html>

啟動靜態(tài)服務器:

npx http-server .

同樣解析出了 excel 的內(nèi)容。

在瀏覽器中使用 ExcelJS 庫生成 Excel 文件并下載

然后再試試生成 excel:

這里我創(chuàng)建了一個 10M 的 ArrayBuffer 來寫入數(shù)據(jù),之后再讀取。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<script src="https://unpkg.com/exceljs@4.4.0/dist/exceljs.min.js"></script>
	</head>
	<body>
		<script>
			const { Workbook } = ExcelJS;

			async function main() {
				// 創(chuàng)建一個新的工作簿
				const workbook = new Workbook();
				// 添加一個新的工作表,命名為'hong'
				const worksheet = workbook.addWorksheet('hong');

				// 定義工作表的列結(jié)構(gòu)
				worksheet.columns = [
					{ header: 'ID', key: 'id', width: 20 },
					{ header: '姓名', key: 'name', width: 40 },
					{ header: '年齡', key: 'age', width: 20 },
				];

				// 數(shù)據(jù)數(shù)組,用于填充工作表
				const data = [
					{ id: 1, name: '寶玉', age: 18 },
					{ id: 2, name: '寶釵', age: 19 },
					{ id: 3, name: '黛玉' },
				];

				worksheet.addRows(data);

				// 將工作簿寫入 ArrayBuffer 并下載
				const buffer = new ArrayBuffer(10 * 1024 * 1024); // 分配足夠大的內(nèi)存空間
				const res = await workbook.xlsx.writeBuffer(buffer);

				download(res.buffer);
			}

			function download(arrayBuffer) {
				const link = document.createElement('a');

				// 創(chuàng)建 Blob 對象并生成 URL
				const blob = new Blob([arrayBuffer]);
				const url = URL.createObjectURL(blob);
				link.href = url;
				// 設置下載的文件名
				link.download = 'honglou.xlsx';

				// 插入鏈接到頁面并觸發(fā)點擊下載
				document.body.appendChild(link);

				link.click();
				// 下載完成后移除鏈接
				link.addEventListener('click', () => {
					link.remove();
				});
			}

			main();

			// 在頁面加載完畢后執(zhí)行
			window.onload = generateExcel;
		</script>
	</body>
</html>

和前面的邏輯一樣,只是把 writeFile 換成了 writeBuffer。

在瀏覽器中打開 index.html,Excel 文件將自動生成并下載:

到此這篇關(guān)于Nodejs使用exceljs實現(xiàn)excel導入導出的文章就介紹到這了,更多相關(guān)Nodejs excel導入導出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node.js連接mysql與基本用法示例

    node.js連接mysql與基本用法示例

    這篇文章主要介紹了node.js連接mysql與基本用法,結(jié)合實例形式分析了nodejs中mysql模塊的安裝、引入、創(chuàng)建連接、sql語句執(zhí)行等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • nodejs教程之環(huán)境安裝及運行

    nodejs教程之環(huán)境安裝及運行

    文章從nodejs環(huán)境安裝、文件結(jié)構(gòu)、路由做了詳細介紹,然后結(jié)合mongodb制作注冊功能也做了細致的講述,是篇非常不錯的文章,這里推薦給大家
    2014-11-11
  • Nodejs連接mysql并實現(xiàn)增、刪、改、查操作的方法詳解

    Nodejs連接mysql并實現(xiàn)增、刪、改、查操作的方法詳解

    這篇文章主要介紹了Nodejs連接mysql并實現(xiàn)增、刪、改、查操作的方法,結(jié)合實例形式詳細分析了nodejs針對mysql數(shù)據(jù)庫的的連接、mysql數(shù)據(jù)庫的創(chuàng)建及nodejs針對mysql增刪改查等相關(guān)操作具體實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • nodejs實現(xiàn)百度輿情接口應用示例

    nodejs實現(xiàn)百度輿情接口應用示例

    這篇文章主要介紹了nodejs實現(xiàn)百度輿情接口應用,結(jié)合實例形式分析了node.js調(diào)用百度輿情接口的具體使用技巧,需要的朋友可以參考下
    2020-02-02
  • 使用nodeJS中的fs模塊對文件及目錄進行讀寫,刪除,追加,等操作詳解

    使用nodeJS中的fs模塊對文件及目錄進行讀寫,刪除,追加,等操作詳解

    nodeJS中fs模塊對系統(tǒng)文件及目錄進行讀寫操作,本文將詳細介紹nodejs中的文件操作模塊fs的使用方法
    2020-02-02
  • NodeJS有難度的面試題(能答對幾個)

    NodeJS有難度的面試題(能答對幾個)

    這篇文章主要介紹了NodeJS有難度的面試題(能答對幾個),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • nodejs更新package.json中的dependencies依賴到最新版本的方法

    nodejs更新package.json中的dependencies依賴到最新版本的方法

    今天小編就為大家分享一篇nodejs更新package.json中的dependencies依賴到最新版本的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • node封裝一個控制臺進度條插件???????詳情

    node封裝一個控制臺進度條插件???????詳情

    這篇文章主要介紹了node封裝一個控制臺進度條插件???????詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Ajax獲取node服務器數(shù)據(jù)的完整步驟

    Ajax獲取node服務器數(shù)據(jù)的完整步驟

    這篇文章主要給大家介紹了關(guān)于Ajax獲取node服務器數(shù)據(jù)的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Mac 安裝 nodejs方法(圖文詳細步驟)

    Mac 安裝 nodejs方法(圖文詳細步驟)

    這篇文章主要介紹了Mac 安裝 nodejs方法(圖文詳細步驟),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論