最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)出效果

只需要序號,姓名和年齡字段,且工作表名為個人信息表

js-export-excel

import ExportJsonExcel from 'js-export-excel';

const jsExportExcelHandle = (dataTable = []) => {
	const option = [];
	option.fileName = "個人信息文件";
	const sheetData = dataTable; // 有需要映射的話需要先映射
	const sheetFilter = ["index", "name", "age"];
	const sheetHeader = ["序號", "姓名", "年齡"];
	option.datas = [
		{
			sheetData,
			sheetName: "個人信息表",
			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: "序號",
		name: "姓名",
		age: "年齡",
	},
	// 先過濾出需要的屬性
	const headList = Object.keys(headerMap); 
	// 返回新的對象數(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]);//["序號", "年齡", "姓名"]
    dataArr.unshif(headerTranslated); // 插入
    const workSheet = utils.aoa_to_sheet(dataArr); // 轉(zhuǎn)為工作表對象
    // 設(shè)置每個的單元格的列寬
    workSheet["!cols"] = new Array(headList.length).fill({wch: 20}); // {!cols:(13)[{wch:20},...],A1:{v: "序號", t: "s"},...} 
    const workBook = utils.book_new();
    utils.book_append_sheet(workBook, workSheet);
    // writeFile 方法只能在 node 環(huán)境下使用。
    writeFile(workBook, "個人信息文件.xlsx", {
        Props: { // 作者的相關(guān)信息
            title: "個人信息明細(xì)",
            creator: window.User,
         
        }
    })
}

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

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

單元格對象中的屬性

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

總結(jié)

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

2024/1/22更新

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

// 應(yīng)該根據(jù)表頭headerMap重新組裝每一行的對象
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React 使用browserHistory項(xiàng)目訪問404問題解決

    React 使用browserHistory項(xiàng)目訪問404問題解決

    這篇文章主要介紹了React 使用browserHistory項(xiàng)目訪問404問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • React超詳細(xì)講述Fiber的使用

    React超詳細(xì)講述Fiber的使用

    在fiber出現(xiàn)之前,react的架構(gòu)體系只有協(xié)調(diào)器reconciler和渲染器render。當(dāng)前有新的update時(shí),react會遞歸所有的vdom節(jié)點(diǎn),如果dom節(jié)點(diǎn)過多,會導(dǎo)致其他事件影響滯后,造成卡頓。即之前的react版本無法中斷工作過程,一旦遞歸開始無法停留下來
    2023-02-02
  • React實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel文件

    React實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel文件

    本文主要介紹了React實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel文件,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 探討JWT身份校驗(yàn)與React-router無縫集成

    探討JWT身份校驗(yàn)與React-router無縫集成

    這篇文章主要為大家介紹了JWT身份校驗(yàn)與React-router無縫集成的探討解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解React中Fragment的簡單使用

    詳解React中Fragment的簡單使用

    這篇文章主要介紹了詳解React中Fragment的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對我們學(xué)習(xí)React有一定的幫助,感興趣的小伙伴們可以參考一下
    2022-10-10
  • React實(shí)現(xiàn)登錄界面的項(xiàng)目實(shí)踐

    React實(shí)現(xiàn)登錄界面的項(xiàng)目實(shí)踐

    本文主要介紹了用React創(chuàng)建登錄表單,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • 利用React Router4實(shí)現(xiàn)的服務(wù)端直出渲染(SSR)

    利用React Router4實(shí)現(xiàn)的服務(wù)端直出渲染(SSR)

    這篇文章主要介紹了利用React Router4實(shí)現(xiàn)的服務(wù)端直出渲染(SSR),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • react native配置路徑別名alias過程

    react native配置路徑別名alias過程

    文章介紹了如何在React Native項(xiàng)目中使用TypeScript進(jìn)行開發(fā),包括安裝依賴、配置babel.config.js、創(chuàng)建tsconfig.json文件、使用@別名引入src文件夾下的文件,并展示了效果圖
    2026-03-03
  • React Native全面屏狀態(tài)欄和底部導(dǎo)航欄適配教程詳細(xì)講解

    React Native全面屏狀態(tài)欄和底部導(dǎo)航欄適配教程詳細(xì)講解

    最近在寫 React Native 項(xiàng)目,調(diào)試應(yīng)用時(shí)發(fā)現(xiàn)頂部狀態(tài)欄和底部全面屏手勢指示條區(qū)域不是透明的,看起來很難受。研究了一下這個問題,現(xiàn)在總結(jié)一下解決方案,這篇文章主要介紹了React Native全面屏狀態(tài)欄和底部導(dǎo)航欄適配教程
    2023-01-01
  • 在React項(xiàng)目中動態(tài)樣式切換的方法大全

    在React項(xiàng)目中動態(tài)樣式切換的方法大全

    在 React 應(yīng)用開發(fā)中,根據(jù)組件的狀態(tài)(state)、屬性(props) 或外部數(shù)據(jù)來動態(tài)改變其外觀是一項(xiàng)極其常見的任務(wù),本文將全面、深入地探討在 React 項(xiàng)目中動態(tài)切換樣式的各種方法,從基礎(chǔ)到高級,并提供大量代碼示例和最佳實(shí)踐,需要的朋友可以參考下
    2025-09-09

最新評論

连平县| 阜康市| 长汀县| 富阳市| 庆阳市| 庆云县| 克山县| 伊川县| 岐山县| 昭通市| 临漳县| 昭通市| 双峰县| 光泽县| 乌恰县| 铜梁县| 诏安县| 措勤县| 大埔县| 邳州市| 孝昌县| 永济市| 福清市| 邢台县| 厦门市| 阳春市| 博乐市| 镇赉县| 大冶市| 五指山市| 左权县| 弋阳县| 永平县| 宝丰县| 仙桃市| 那曲县| 陆良县| 镇沅| 板桥市| 洮南市| 德阳市|