Vue使用xlsx插件導(dǎo)出excel文件的詳細(xì)指南
安裝與引入
安裝
npm install xlsx npm install file-saver # 或者 yarn add xlsx yarn add file-saver
引入
import * as XLSX from 'xlsx'; import FileSaver from 'file-saver'
基本功能
讀取 Excel 文件
// 讀取文件內(nèi)容
const workbook = XLSX.readFile('path/to/file.xlsx');
// 獲取第一個工作表
const firstSheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[firstSheetName];
// 將工作表轉(zhuǎn)換為 JSON 格式
const data = XLSX.utils.sheet_to_json(worksheet);
console.log(data);
寫入 Excel 文件
// 創(chuàng)建工作簿 const workbook = XLSX.utils.book_new(); // 創(chuàng)建工作表 const data = [ ['Name', 'Age', 'Email'], ['Alice', 25, 'alice@example.com'], ['Bob', 30, 'bob@example.com'] ]; const worksheet = XLSX.utils.aoa_to_sheet(data); // 將工作表添加到工作簿 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 導(dǎo)出文件 XLSX.writeFile(workbook, 'output.xlsx');
高級功能
自定義樣式
// 創(chuàng)建樣式
const ws = XLSX.utils.aoa_to_sheet(data);
const wscols = [
{ wch: 15 },
{ wch: 10 },
{ wch: 30 }
];
ws['!cols'] = wscols;
// 添加樣式
const cell = ws['A1'];
cell.s = {
font: { bold: true },
fill: { fgColor: { rgb: 'FF0000' } }
};
合并單元格
// 合并單元格
ws['!merges'] = [
{ s: { r: 0, c: 0 }, e: { r: 0, c: 2 } } // 合并 A1:C1
];
添加水印
// 添加水印
XLSX.utils.sheet_add_aoa(ws, [['Watermark']], { origin: -1 });
使用示例
導(dǎo)出數(shù)據(jù)到 Excel 方法
import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';
export function exportJsonToExcel(options) {
// 默認(rèn)配置
const defaultOptions = {
sheetName: 'Sheet1',
autoWidth: true,
watermark: ''
};
const { header, data, filename, sheetName, autoWidth, watermark } = {
...defaultOptions,
...options
};
// 1. 創(chuàng)建工作簿
const wb = XLSX.utils.book_new();
// 2. 處理數(shù)據(jù)(添加表頭)
const exportData = [header, ...data];
// 3. 創(chuàng)建工作表
const ws = XLSX.utils.aoa_to_sheet(exportData);
// 4. 自動設(shè)置列寬
if (autoWidth) {
const colWidths = header.map((_, colIndex) => {
return {
wch: Math.max(
...exportData.map(row => {
const cellValue = row[colIndex];
if (cellValue == null) return 10;
return String(cellValue).replace(/[^\x00-\xff]/g, 'aa').length * 8 + 2;
})
)
};
});
ws['!cols'] = colWidths;
}
// 5. 添加水印
if (watermark) {
if (!ws['!merges']) ws['!merges'] = [];
ws['!merges'].push({
s: { r: exportData.length + 1, c: 0 },
e: { r: exportData.length + 1, c: header.length - 1 }
});
XLSX.utils.sheet_add_aoa(ws, [[watermark]], { origin: -1 });
}
// 6. 將工作表添加到工作簿
XLSX.utils.book_append_sheet(wb, ws, sheetName);
// 7. 導(dǎo)出文件
const excelBuffer = XLSX.write(wb, {
bookType: 'xlsx',
type: 'array'
});
const blob = new Blob([excelBuffer], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
FileSaver.saveAs(blob, `${filename}.xlsx`);
}
參數(shù)說明
header: 表頭數(shù)組,包含列名。
data: 數(shù)據(jù)數(shù)組,包含要導(dǎo)出的數(shù)據(jù)。
filename: 導(dǎo)出的 Excel 文件名。
sheetName: 工作表名稱,默認(rèn)為 Sheet1。
autoWidth: 是否自動調(diào)整列寬,默認(rèn)為 true。
watermark: 水印文本,默認(rèn)為空字符串。
使用
import { exportJsonToExcel } from "@/utils/index";
// 導(dǎo)出Excel
const exportExcel = () => {
const header = [
"時間",
"類型",
"地址",
"ID",
];
const data = tableData.value.map((item) => [
item.time,
item.type,
item.address,
item.id,
]);
exportJsonToExcel({
header,
data,
filename: "excel名",
});
};
到此這篇關(guān)于Vue使用xlsx插件導(dǎo)出excel文件的詳細(xì)指南的文章就介紹到這了,更多相關(guān)Vue xlsx導(dǎo)出excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Vue學(xué)習(xí)筆記進(jìn)階篇之列表過渡及其他
本篇文章主要介紹了詳解Vue學(xué)習(xí)筆記進(jìn)階篇之列表過渡及其他,具有一定的參考價值,有興趣的可以了解一下2017-07-07
Vue路由跳轉(zhuǎn)與接收參數(shù)的實現(xiàn)方式
這篇文章主要介紹了Vue路由跳轉(zhuǎn)與接收參數(shù)的實現(xiàn)方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
Vue框架中如何調(diào)用模擬數(shù)據(jù)你知道嗎
這篇文章主要為大家詳細(xì)介紹了Vue框架中如何調(diào)用模擬數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
解決element ui select下拉框不回顯數(shù)據(jù)問題的解決
這篇文章主要介紹了解決element ui select下拉框不回顯數(shù)據(jù)問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02

