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

React使用xlsx和js-export-excel實(shí)現(xiàn)前端導(dǎo)出

 更新時(shí)間:2024年02月04日 13:48:57   作者:某哈壓力大  
這篇文章主要為大家詳細(xì)介紹了React如何分別使用xlsx和js-export-excel實(shí)現(xiàn)前端導(dǎo)出功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

背景

在數(shù)據(jù)量不太大,或者開發(fā)周期比較急迫的情況下,可以把導(dǎo)出excel功能放到前端實(shí)現(xiàn)。

這里筆者結(jié)合實(shí)際開發(fā)的經(jīng)驗(yàn),由于我司開發(fā)技術(shù)選型為React,最終選擇

js-export-excel (1.1.4) 和 xlsx (0.18.5)

分別進(jìn)行介紹如何實(shí)現(xiàn)前端導(dǎo)出excel功能。

前置數(shù)據(jù)模擬以及導(dǎo)出預(yù)期結(jié)果

mock導(dǎo)出的數(shù)據(jù)

const dataTable = [
	{index: "1", name: "niko", age: "18", birth: "Mon Dec 11 10:08:15 CST 2023"},
    {index: "1", name: "vivi", age: "16", birth: "Sun Dec 11 10:49:18 CST 2023"},
]

預(yù)期導(dǎo)出效果

只需要序號(hào),姓名和年齡字段,且工作表名為個(gè)人信息表

js-export-excel

import ExportJsonExcel from 'js-export-excel';

const jsExportExcelHandle = (dataTable = []) => {
	const option = [];
	option.fileName = "個(gè)人信息文件";
	const sheetData = dataTable; // 有需要映射的話需要先映射
	const sheetFilter = ["index", "name", "age"];
	const sheetHeader = ["序號(hào)", "姓名", "年齡"];
	option.datas = [
		{
			sheetData,
			sheetName: "個(gè)人信息表",
			sheetFilter,
			sheetHeader,
			columnWidth: new Array(sheethaeader.length).fill(10); // 列寬
		}
	];
	const toExcel = new ExportJsonExcel(option);
	toExcel.saveExcel()
}

xlsx

import { utils, writeFile } from 'xlsx';

const xlsxHandle = (dataTable = []) => {
	// 表頭映射為中文
	const headerMap = {
		index: "序號(hào)",
		name: "姓名",
		age: "年齡",
	},
	// 先過濾出需要的屬性
	const headList = Object.keys(headerMap); 
	// 返回新的對(duì)象數(shù)組
	const _dataTable = dataTable.map(item => {
		const filteredItem = {};
		Object.keys(item).forEach(key => {
			if(headList.includes(key)){
				filteredItem[key] = item[key];
			}
		})
        return filteredItem
	})
    
    // xlsx需要轉(zhuǎn)為二維數(shù)組
    const dataArr = _dataTable.map(item => Object.values(item));
    // 將表頭映射為中文(name => 姓名)
    const headerTranslated = Object.keys(headerMap).map(key => header[key]);//["序號(hào)", "年齡", "姓名"]
    dataArr.unshif(headerTranslated); // 插入
    const workSheet = utils.aoa_to_sheet(dataArr); // 轉(zhuǎn)為工作表對(duì)象
    // 設(shè)置每個(gè)的單元格的列寬
    workSheet["!cols"] = new Array(headList.length).fill({wch: 20}); // {!cols:(13)[{wch:20},...],A1:{v: "序號(hào)", t: "s"},...} 
    const workBook = utils.book_new();
    utils.book_append_sheet(workBook, workSheet);
    // writeFile 方法只能在 node 環(huán)境下使用。
    writeFile(workBook, "個(gè)人信息文件.xlsx", {
        Props: { // 作者的相關(guān)信息
            title: "個(gè)人信息明細(xì)",
            creator: window.User,
         
        }
    })
}

worksheet['!cols']:存儲(chǔ)列對(duì)象的數(shù)組,可以在這里設(shè)置列寬。

//wpx 字段表示以像素為單位,wch 字段表示以字符為單位
worksheet['!cols'] = [
  { wpx: 200 }, //設(shè)置第1列列寬為200像素
  { wch: 50 },  //設(shè)置第2列列寬為50字符
];

單元格對(duì)象中的屬性

//設(shè)置A1單元格的值是序號(hào),類型是字符串,字體顏色是FF0187FA
worksheet["A1"] = {
    v: "序號(hào)",
    t: "s",
    s: {
        font: {
            color: { rgb: "FF0187FA" }
        },
    }
}

總結(jié)

其實(shí)js-export-excel是在xlsx的基礎(chǔ)上二次封裝的,以上是個(gè)人工作中對(duì)于第三方插件使用的一個(gè)小記錄,有寫錯(cuò)的地方還請(qǐng)不吝賜教

2024/1/22更新

使用xlsx轉(zhuǎn)為二維數(shù)組的時(shí)候,可能導(dǎo)致數(shù)據(jù)和表頭對(duì)應(yīng)不上的問題(23行)

// 應(yīng)該根據(jù)表頭headerMap重新組裝每一行的對(duì)象
const dataArr = _dataTable.map(item => 
    Object.keys(headerMap)
    .map(key => item[key])
)

到此這篇關(guān)于React使用xlsx和js-export-excel實(shí)現(xiàn)前端導(dǎo)出的文章就介紹到這了,更多相關(guān)React前端導(dǎo)出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • react中用less的問題

    react中用less的問題

    本文主要介紹了react中用less的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • React掌握openapi-typescript-codegen快速生成API客戶端代碼的過程

    React掌握openapi-typescript-codegen快速生成API客戶端代碼的過程

    openapi-typescript-codegen是一個(gè)開源工具,用于根據(jù)OpenAPI規(guī)范自動(dòng)生成TypeScript代碼,包括類型定義和API客戶端代碼,它幫助開發(fā)者節(jié)省手動(dòng)編寫代碼的時(shí)間,提高開發(fā)效率,感興趣的朋友一起看看吧
    2024-11-11
  • ReactNative頁面跳轉(zhuǎn)Navigator實(shí)現(xiàn)的示例代碼

    ReactNative頁面跳轉(zhuǎn)Navigator實(shí)現(xiàn)的示例代碼

    本篇文章主要介紹了ReactNative頁面跳轉(zhuǎn)Navigator實(shí)現(xiàn)的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • React key值的作用和使用詳解

    React key值的作用和使用詳解

    這篇文章主要介紹了React key值的作用和使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • ReactNative實(shí)現(xiàn)弧形拖動(dòng)條的代碼案例

    ReactNative實(shí)現(xiàn)弧形拖動(dòng)條的代碼案例

    本文介紹了ReactNative實(shí)現(xiàn)弧形拖動(dòng)條,本組件使用到了react-native-svg和PanResponder,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 詳解如何使用React構(gòu)建跑馬燈組件

    詳解如何使用React構(gòu)建跑馬燈組件

    當(dāng)你想到跑馬燈時(shí),往往會(huì)想到游樂園里那些充滿活力的燈光和旋轉(zhuǎn)的顯示,帶回童年的美好回憶,本文將和大家一起探索如何在 React 中構(gòu)建一個(gè)引人入勝的跑馬燈組件,需要的朋友可以參考下
    2024-04-04
  • 解決react?antd?Table組件使用radio單選框?更新選中數(shù)據(jù)不渲染問題

    解決react?antd?Table組件使用radio單選框?更新選中數(shù)據(jù)不渲染問題

    這篇文章主要介紹了解決react?antd?Table組件使用radio單選框?更新選中數(shù)據(jù)不渲染問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React路由中的redux和redux知識(shí)點(diǎn)拓展

    React路由中的redux和redux知識(shí)點(diǎn)拓展

    這篇文章主要介紹了React路由中的redux和redux知識(shí)點(diǎn)拓展,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考學(xué)習(xí)一下
    2022-08-08
  • React實(shí)現(xiàn)圖片縮放的示例代碼

    React實(shí)現(xiàn)圖片縮放的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用React實(shí)現(xiàn)圖片縮放的功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解下
    2023-10-10
  • React常見的?HOC?使用案例及示例代碼

    React常見的?HOC?使用案例及示例代碼

    高階組件(Higher-Order?Component,HOC)是一種用于在?React?中復(fù)用組件邏輯的技術(shù),這篇文章主要介紹了React常見的?HOC?使用案例示例代碼,需要的朋友可以參考下
    2024-08-08

最新評(píng)論