在Vue中实现导出表格的功能,需要使用第三方库,比如xlsx和FileSaver.js。
- 首先安装依赖:
npm install xlsx file-saver --save
- 创建导出表格的方法:
import XLSX from 'xlsx';
import { saveAs } from 'file-saver';export function exportTableToExcel(tableId, fileName) {const table = document.getElementById(tableId);const wb = XLSX.utils.table_to_book(table, { sheet: fileName });const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'binary' });function s2ab(s) {const buf = new ArrayBuffer(s.length);const view = new Uint8Array(buf);for (let i = 0; i < s.length; i += 1) {view[i] = s.charCodeAt(i) & 0xFF;}return buf;}saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), `${fileName}.xlsx`);
}
- 调用导出方法:
exportTableToExcel('tableId', 'example');
其中,tableId
是要导出的表格的ID,example
是导出的文件名。
- 增加样式
如果需要在导出的Excel表格中增加样式,可以使用xlsx-style
库,安装方法如下:
npm install xlsx-style --save
然后修改导出表格的方法:
import XLSX from 'xlsx-style';
import { saveAs } from 'file-saver';export function exportTableToExcel(tableId, fileName) {// 表格样式const wscols = [{ wpx: 100 }, { wpx: 200 }, { wpx: 300 }, { wpx: 400 }];const table = document.getElementById(tableId);const wb = XLSX.utils.book_new();const ws = XLSX.utils.table_to_sheet(table);ws['!cols'] = wscols;wb.SheetNames.push(fileName);wb.Sheets[fileName] = ws;const wbout = XLSX.write(wb, {bookType: 'xlsx',bookSST: true,type: 'binary',cellStyles: true,});function s2ab(s) {const buf = new ArrayBuffer(s.length);const view = new Uint8Array(buf);for (let i = 0; i < s.length; i += 1) {view[i] = s.charCodeAt(i) & 0xFF;}return buf;}saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), `${fileName}.xlsx`);
}
在这个实现中,我们通过const wscols
定义了每一列的宽度,通过ws['!cols'] = wscols
为每个sheet设置了列宽。
如果需要给单元格添加样式,可以参考官方文档中的Styles
一章节。 https://github.com/SheetJS/sheetjs/blob/main/docs/styles.md