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

前端使用xlsx導(dǎo)出數(shù)據(jù)生成Excel文件的全過程

 更新時(shí)間:2023年08月29日 09:52:38   作者:swimxu  
這篇文章主要給大家介紹了關(guān)于前端使用xlsx導(dǎo)出數(shù)據(jù)生成Excel文件的相關(guān)資料,最近在做項(xiàng)目中,后端偷懶不做導(dǎo)出功能,讓我前端實(shí)現(xiàn),所以在這里記錄下前端導(dǎo)出功能,需要的朋友可以參考下

安裝 xlsx

xlsx 算是基礎(chǔ)版本,不能對(duì)單元格進(jìn)行樣式(對(duì)齊方式、文字顏色、背景顏色等)的修飾,如果需要修飾單元格,可使用 xlsx-js-style

npm i xlsx

引入 xlsx

import xlsx from 'xlsx';

需要導(dǎo)出的數(shù)據(jù)源

// 一般我們拿到的是從接口中請(qǐng)求到的對(duì)象數(shù)組,在使用是需要轉(zhuǎn)成二維數(shù)組,下面有介紹
const data = [
  { name: '商品01', mb_num: 50, mb_sum: 5000, pc_num: 30, pc_sum: 3000, total_num: 80, total_sum: 8000 },
  { name: '商品02', mb_num: 50, mb_sum: 5000, pc_num: 30, pc_sum: 3000, total_num: 80, total_sum: 8000 },
  { name: '商品03', mb_num: 50, mb_sum: 5000, pc_num: 30, pc_sum: 3000, total_num: 80, total_sum: 8000 },
]

將數(shù)據(jù)源轉(zhuǎn)成需要的二維數(shù)組

const body = data.map(x => ([x.name, x.mb_num, x.mb_sum, x.pc_num, x.pc_sum, x.total_num, x.total_sum]))
// 轉(zhuǎn)換后的數(shù)據(jù)為一個(gè)二維數(shù)組
[
  ['商品01', 50, 5000, 30, 3000, 80, 8000]
  ['商品02', 50, 5000, 30, 3000, 80, 8000]
  ['商品03', 50, 5000, 30, 3000, 80, 8000]
]

定義 Excel 表頭

// 根據(jù)需要導(dǎo)出的目標(biāo) Excel格式,先定義好表頭
const header = [
  ['一月(2022年01月)'], 
  ['商品名稱', '手機(jī)客戶端', '', '電腦客戶端', '', '總計(jì)', ''], 
  ['', '銷售數(shù)量', '銷售金額', '銷售數(shù)量', '銷售金額', '銷售數(shù)量', '銷售金額']
]

將定義好的表頭添加到 body 中

body.unshift(...header);
//分別為每一行單元格內(nèi)的值,需要合并的單元格給一個(gè)空值進(jìn)行站位
[
  ['一月(2022年01月)','','','','','','']
  ['商品名稱', '手機(jī)客戶端', '', '電腦客戶端', '', '總計(jì)', '']
  ['', '銷售數(shù)量', '銷售金額', '銷售數(shù)量', '銷售金額', '銷售數(shù)量', '銷售金額']
  ['商品01', 50, 5000, 30, 3000, 80, 8000]
  ['商品02', 50, 5000, 30, 3000, 80, 8000]
  ['商品03', 50, 5000, 30, 3000, 80, 8000]
]

1 創(chuàng)建虛擬的 workbook

Excel整個(gè)表格可稱為 workbook里面的每張表分別是 sheet

const workbook = xlsx.utils.book_new();

2 將二維數(shù)組轉(zhuǎn)成 sheet

// 這里我們舉例是用 aoa_to_sheet ,所以是需要將數(shù)據(jù)源轉(zhuǎn)成一個(gè)二維數(shù)組
const sheet = xlsx.utils.aoa_to_sheet(body);
// aoa_to_sheet  	是將【一個(gè)二維數(shù)組】轉(zhuǎn)化成 sheet
// json_to_sheet 	是將【由對(duì)象組成的數(shù)組】轉(zhuǎn)化成sheet
// table_to_sheet  	是將【table的dom】直接轉(zhuǎn)成sheet

!merges 設(shè)置單元格合并

const merges = [
  { s: { r: 0, c: 0 }, e: { r: 0, c: 6 } },
  { s: { r: 1, c: 1 }, e: { r: 1, c: 2 } },
  { s: { r: 1, c: 3 }, e: { r: 1, c: 4 } },
  { s: { r: 1, c: 5 }, e: { r: 1, c: 6 } },
  { s: { r: 1, c: 0 }, e: { r: 2, c: 0 } },
]
sheet['!merges'] = merges; // 添加到sheet中
// merges 為一個(gè)對(duì)象數(shù)組,每個(gè)對(duì)象設(shè)定了單元格合并的規(guī)則
// { s: { r: 0, c: 0 }, e: { r: 0, c: 2 } }, 即為一個(gè)規(guī)則,s:開始位置, e:結(jié)束位置, r:行, c:列

!cols 設(shè)置列寬

// cols 為一個(gè)對(duì)象數(shù)組,依次表示每一列的寬度
const cols = [
    { wch: 10 },
    { wch: 10 }, 
    { wch: 10 },
    { wch: 10 },
    { wch: 10 },
    { wch: 10 }, 
    { wch: 10 }
];
sheet['!cols'] = cols; // 添加到sheet中

!rows 設(shè)置行高

// rows 為一個(gè)對(duì)象數(shù)組,依次表示每一行的高度
const rows = [
    { hpx: 20 }, 
    { hpx: 16 },
    { hpx: 18 }
]
sheet['!rows'] = rows; // 添加到sheet中

3 向 workbook 中添加 sheet

xlsx.utils.book_append_sheet(workbook, sheet, 'sheet名稱');
// 一個(gè) workbook 允許添加多個(gè) sheet,即可以同時(shí)創(chuàng)建多個(gè)表
// xlsx.utils.book_append_sheet(workbook, sheet2, 'sheet名稱2');

4 導(dǎo)出 workbook

// 注意:定義導(dǎo)出 excel 的名稱時(shí)需要加上后綴 .xlsx
xlsx.writeFile(workbook, 'excel名稱.xlsx');

完整示例:

import xlsx from 'xlsx'; // 引入 xlsx
......
// 需要導(dǎo)出的數(shù)據(jù)源
const data = [
  { name: '商品01', mb_num: 50, mb_sum: 5000, pc_num: 30, pc_sum: 3000, total_num: 80, total_sum: 8000 },
  { name: '商品02', mb_num: 50, mb_sum: 5000, pc_num: 30, pc_sum: 3000, total_num: 80, total_sum: 8000 },
  { name: '商品03', mb_num: 50, mb_sum: 5000, pc_num: 30, pc_sum: 3000, total_num: 80, total_sum: 8000 },
]
// 將數(shù)據(jù)源轉(zhuǎn)成我們需要的二維數(shù)組
const body = data.map(x => ([x.name, x.mb_num, x.mb_sum, x.pc_num, x.pc_sum, x.total_num, x.total_sum]))
// 定義Excel表頭
const header = [
  ['一月(2022年01月)'],
  ['商品名稱', '手機(jī)客戶端', '', '電腦客戶端', '', '總計(jì)', ''],
  ['', '銷售數(shù)量', '銷售金額', '銷售數(shù)量', '銷售金額', '銷售數(shù)量', '銷售金額']
]
body.unshift(...header);// 將定義好的表頭添加到 body 中
const workbook = xlsx.utils.book_new();// 創(chuàng)建虛擬的 workbook
const sheet = xlsx.utils.aoa_to_sheet(body);// aoa_to_sheet 將二維數(shù)組轉(zhuǎn)成 sheet
const merges = [
  { s: { r: 0, c: 0 }, e: { r: 0, c: 6 } },
  { s: { r: 1, c: 1 }, e: { r: 1, c: 2 } },
  { s: { r: 1, c: 3 }, e: { r: 1, c: 4 } },
  { s: { r: 1, c: 5 }, e: { r: 1, c: 6 } },
  { s: { r: 1, c: 0 }, e: { r: 2, c: 0 } },
]
sheet['!merges'] = merges; // 將merges添加到sheet中,設(shè)置合并單元格
const cols = [ { wch: 10 },{ wch: 10 },{ wch: 10 },{ wch: 10 },{ wch: 10 },{ wch: 10 },{ wch: 10 } ];
sheet['!cols'] = cols; // 將cols添加到sheet中,設(shè)置列寬
const rows = [ { hpx: 20 },{ hpx: 16 },{ hpx: 18 }]
sheet['!rows'] = rows; // 將rows添加到sheet中,設(shè)置行高
xlsx.utils.book_append_sheet(workbook, sheet, 'sheet名稱'); // 向 workbook 中添加 sheet
xlsx.writeFile(workbook, 'excel名稱.xlsx'); // 導(dǎo)出 workbook
// 注意:定義導(dǎo)出 excel 的名稱時(shí)需要加上后綴 .xlsx

總結(jié)

其中,創(chuàng)建虛擬的 workbook、將數(shù)組轉(zhuǎn)成 sheet、向workbook中添加sheet和導(dǎo)出workbook,這四個(gè)步驟是必要的。
設(shè)置合并單元格、設(shè)置列寬、設(shè)置行高是可選的,根據(jù)需求進(jìn)行添加。

到此這篇關(guān)于前端使用xlsx導(dǎo)出數(shù)據(jù)生成Excel文件的文章就介紹到這了,更多相關(guān)前端導(dǎo)出數(shù)據(jù)生成Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS遍歷數(shù)組和對(duì)象的區(qū)別及遞歸遍歷對(duì)象、數(shù)組、屬性的方法詳解

    JS遍歷數(shù)組和對(duì)象的區(qū)別及遞歸遍歷對(duì)象、數(shù)組、屬性的方法詳解

    本文給大家js遍歷數(shù)組和遍歷對(duì)象的區(qū)別,一般來說for用來遍歷數(shù)組對(duì)象而for-in用來遍歷非數(shù)組對(duì)象。接下來小編給大家?guī)砹薺s遍歷數(shù)組和對(duì)象的區(qū)別及js遞歸遍歷對(duì)象、數(shù)組、屬性的方法詳解,一起看下吧
    2016-06-06
  • js核心基礎(chǔ)之構(gòu)造函數(shù)constructor用法實(shí)例分析

    js核心基礎(chǔ)之構(gòu)造函數(shù)constructor用法實(shí)例分析

    這篇文章主要介紹了js核心基礎(chǔ)之構(gòu)造函數(shù)constructor用法,結(jié)合具體實(shí)例形式分析了javascript構(gòu)造函數(shù)constructor概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • 基于JS繪制2021的煙花效果 附源碼下載

    基于JS繪制2021的煙花效果 附源碼下載

    這篇文章主要介紹了基于JS繪制2021的煙花效果,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • uniapp中獲取dom元素的方法及更改dom元素顏色踩坑記錄

    uniapp中獲取dom元素的方法及更改dom元素顏色踩坑記錄

    最近學(xué)到了一個(gè)比較好用的框架uni-app,可以做六端適配,學(xué)習(xí)一下,下面這篇文章主要給大家介紹了關(guān)于uniapp中獲取dom元素的方法及更改dom元素顏色踩坑記錄的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • webpack DllPlugin xxx is not defined解決辦法

    webpack DllPlugin xxx is not defined解決辦法

    這篇文章主要介紹了webpack DllPlugin xxx is not defined解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • MATLAB中fillmissing函數(shù)用法小結(jié)

    MATLAB中fillmissing函數(shù)用法小結(jié)

    這篇文章主要介紹了MATLAB中fillmissing函數(shù)用法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • JavaScript中this機(jī)制是如何真正工作的

    JavaScript中this機(jī)制是如何真正工作的

    JavaScript中this機(jī)制提供了更優(yōu)雅的方式來隱含地“傳遞”一個(gè)對(duì)象引用,導(dǎo)致更加干凈的API設(shè)計(jì)和更容易的復(fù)用,this既不是函數(shù)自身的引用,也不是函數(shù)詞法作用域的引用,this實(shí)際上是在函數(shù)被調(diào)用時(shí)建立的一個(gè)綁定,它指向什么是完全由函數(shù)被調(diào)用的調(diào)用點(diǎn)來決定的
    2023-11-11
  • JavaScript+html5 canvas實(shí)現(xiàn)圖片破碎重組動(dòng)畫特效

    JavaScript+html5 canvas實(shí)現(xiàn)圖片破碎重組動(dòng)畫特效

    這篇文章主要介紹了JavaScript+html5 canvas實(shí)現(xiàn)破碎重組的視頻特效,感興趣的小伙伴們可以參考一下
    2016-02-02
  • js substr、substring和slice使用說明小記

    js substr、substring和slice使用說明小記

    關(guān)于substr、substring和slice方法區(qū)別的文章,網(wǎng)上搜到了許多,文章內(nèi)容也基本一致。而后,我將其中一篇文章中的代碼挪到本地進(jìn)行了測(cè)試,發(fā)現(xiàn)測(cè)試結(jié)果和原文中的有些出入。
    2011-09-09
  • [js+css]點(diǎn)擊隱藏層,點(diǎn)擊另外層不能隱藏原層

    [js+css]點(diǎn)擊隱藏層,點(diǎn)擊另外層不能隱藏原層

    [js+css]點(diǎn)擊隱藏層,點(diǎn)擊另外層不能隱藏原層...
    2007-03-03

最新評(píng)論

赤壁市| 从江县| 泰兴市| 新竹市| 桑植县| 金昌市| 沙坪坝区| 万山特区| 屯门区| 张掖市| 扶绥县| 崇义县| 靖远县| 兴和县| 五大连池市| 扶风县| 郴州市| 满洲里市| 西安市| 内黄县| 丁青县| 平原县| 都江堰市| 胶南市| 台江县| 工布江达县| 云阳县| 巍山| 奉化市| 栾川县| 电白县| 陆川县| 南安市| 榆树市| 神池县| 拜泉县| 金秀| 青州市| 山东省| 连江县| 伊川县|