Vue使用xlsx組件輕松實(shí)現(xiàn)Excel導(dǎo)出的完整代碼
一、5分鐘快速上手
1. 安裝核心依賴
npm install xlsx file-saver --save
2. 基礎(chǔ)導(dǎo)出模板(復(fù)制即用)
<template>
<button @click="exportExcel">導(dǎo)出Excel</button>
</template>
<script>
import { saveAs } from 'file-saver';
import XLSX from 'xlsx';
export default {
methods: {
exportExcel() {
// 示例數(shù)據(jù)
const data = [
['姓名', '年齡', '部門'],
['張三', 28, '技術(shù)部'],
['李四', 32, '產(chǎn)品部']
];
// 創(chuàng)建工作簿
const ws = XLSX.utils.aoa_to_sheet(data);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, '員工信息');
// 生成文件并保存
const buffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
const blob = new Blob([buffer], { type: 'application/octet-stream' });
saveAs(blob, '員工列表.xlsx');
}
}
}
</script>
二、高級功能拓展
1. 復(fù)雜數(shù)據(jù)結(jié)構(gòu)處理
// 對象數(shù)組轉(zhuǎn)換(自動匹配表頭)
const employees = [
{ name: '王五', age: 25, department: '設(shè)計(jì)部' },
{ name: '趙六', age: 30, department: '市場部' }
];
const ws = XLSX.utils.json_to_sheet(employees);
2. 多Sheet頁導(dǎo)出
const ws1 = XLSX.utils.aoa_to_sheet(/* 數(shù)據(jù)源1 */); const ws2 = XLSX.utils.aoa_to_sheet(/* 數(shù)據(jù)源2 */); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws1, '第一季度'); XLSX.utils.book_append_sheet(wb, ws2, '第二季度');
3. 表格樣式調(diào)整(需xlsx-style擴(kuò)展版)
// 設(shè)置列寬
ws['!cols'] = [{ width: 20 }, { width: 15 }, { width: 25 }];
// 添加標(biāo)題樣式
const titleCell = { v: '員工統(tǒng)計(jì)表', s: { font: { bold: true, sz: 18 }, alignment: { horizontal: 'center' } } };
三、性能優(yōu)化方案
1. 大數(shù)據(jù)量分塊處理
// 使用Web Worker處理百萬級數(shù)據(jù)
const worker = new Worker('./excel.worker.js');
worker.postMessage(largeData);
2. 前端分頁導(dǎo)出
let currentPage = 1;
const pageSize = 10000;
function exportByPage() {
const pageData = getData(currentPage, pageSize);
// 追加到現(xiàn)有文件...
currentPage++;
}
3. 二進(jìn)制流加速
// 使用Stream模式處理文件
const writer = XLSX.stream.to_csv(wb, { FS: ',' });
const readable = new ReadableStream({ ... });
四、常見問題排雷
1. 中文文件名亂碼
saveAs(blob, '\uFEFF' + encodeURIComponent('中文名稱.xlsx'));
2. 日期格式處理
// 轉(zhuǎn)換日期為Excel數(shù)字格式
XLSX.SSF.format('yyyy-mm-dd', new Date());
3. 瀏覽器兼容方案
// IE兼容處理
if (window.navigator.msSaveBlob) {
navigator.msSaveBlob(blob, filename);
}
五、最佳實(shí)踐建議
- 數(shù)據(jù)預(yù)處理:在服務(wù)端完成復(fù)雜計(jì)算,前端只做格式轉(zhuǎn)換
- 內(nèi)存管理:及時(shí)清理不再使用的Worksheet對象
- 錯(cuò)誤捕獲:添加try-catch處理可能的導(dǎo)出異常
- 進(jìn)度提示:添加加載動畫提升用戶體驗(yàn)
掌握這些技巧后,相信你能輕松應(yīng)對各種Excel導(dǎo)出需求。
到此這篇關(guān)于Vue使用xlsx組件輕松實(shí)現(xiàn)Excel導(dǎo)出的完整示例代碼的文章就介紹到這了,更多相關(guān)Vue xlsx實(shí)現(xiàn)Excel導(dǎo)出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決vue.js中settimeout遇到的問題(時(shí)間參數(shù)短效果不穩(wěn)定)
這篇文章主要介紹了解決vue.js中settimeout遇到的問題(時(shí)間參數(shù)短效果不穩(wěn)定),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Vue利用高德地圖API實(shí)現(xiàn)實(shí)時(shí)天氣
這篇文章主要為大家詳細(xì)介紹了Vue如何利用高德地圖API實(shí)現(xiàn)實(shí)時(shí)天氣,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
vue3動態(tài)加載組件以及動態(tài)引入組件詳解
?平常的vue項(xiàng)目開發(fā),已經(jīng)很難遇見一千行,甚至幾千行代碼的頁面了,畢竟大家都會去拆分組件,下面這篇文章主要給大家介紹了關(guān)于vue3動態(tài)加載組件以及動態(tài)引入組件的相關(guān)資料,需要的朋友可以參考下2023-03-03
vue+openlayer5獲取當(dāng)前鼠標(biāo)滑過的坐標(biāo)實(shí)現(xiàn)方法
在vue項(xiàng)目中怎么獲取當(dāng)前鼠標(biāo)劃過的坐標(biāo)呢?下面通過本文給大家分享實(shí)現(xiàn)步驟,感興趣的朋友跟隨小編一起看看吧2021-11-11
vue-quill-editor富文本編輯器上傳視頻功能詳解
需求需要實(shí)現(xiàn)富文本的功能,同時(shí)富文本中還可以上傳視頻和圖片,選來選去最后決定了用這個(gè)富文本編輯器,下面這篇文章主要給大家介紹了關(guān)于vue-quill-editor富文本編輯器上傳視頻功能的相關(guān)資料,需要的朋友可以參考下2023-05-05
vue中使用百度腦圖kityminder-core二次開發(fā)的實(shí)現(xiàn)
這篇文章主要介紹了vue中使用百度腦圖kityminder-core二次開發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

