在Vue中实现导出表格的功能,需要使用第三方库,比如xlsx和FileSaver.js。
-
首先安装依赖:
npm install xlsx file-saver --save
-
创建导出表格的方法:
javascript
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`);
}
- 调用导出方法:
javascript
exportTableToExcel('tableId', 'example');
其中,tableId
是要导出的表格的ID,example
是导出的文件名。
- 增加样式
如果需要在导出的Excel表格中增加样式,可以使用xlsx-style
库,安装方法如下:
npm install xlsx-style --save
然后修改导出表格的方法:
javascript
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