npm install file-saver xlsx
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx';
<el-table
:data="tableData"
ref="multipleTableRef"
style="width: 100%"
id="my-table">
为了方法连接
导出
- const exportClick = () => {
- var table = document.querySelector('#my-table');
- // 复制表格,不包括第一列和最后一列
- var clonedTable = table.cloneNode(true);
- clonedTable.querySelectorAll('tr').forEach(row => {
- var cells = row.cells;
- if (cells.length > 0) {
- // 删除每行的第一个单元格
- row.deleteCell(0);
- // 删除每行的最后一个单元格
- row.deleteCell(cells.length - 1);
- }
- });
- // 创建一个新的工作簿
- var wb = XLSX.utils.book_new();
- // 创建一个新的工作表
- var ws = XLSX.utils.table_to_sheet(clonedTable);
- // 调整每列的列宽以适应内容
- autoSizeColumns(ws);
-
- // 将工作表添加到工作簿中
- XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
-
- // 导出工作簿
- const wbout = XLSX.write(wb, {
- bookType: 'xlsx',
- bookSST: true,
- type: 'binary',
- cellStyles: true, // 启用单元格样式
- });
- try {
- FileSaver.saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), '客户表.xlsx');
- } catch (e) {
- if (typeof console !== 'undefined') console.log(e, wbout);
- }
- };
- // 将字符串转换为字节数组
- function s2ab(s) {
- const buf = new ArrayBuffer(s.length);
- const view = new Uint8Array(buf);
- for (let i = 0; i < s.length; i++) {
- view[i] = s.charCodeAt(i) & 0xFF;
- }
- return buf;
- }
- function autoSizeColumns(ws) {
- const range = XLSX.utils.decode_range(ws['!ref']);
- for (let C = range.s.c; C <= range.e.c; ++C) {
- let maxColWidth = 0;
- for (let R = range.s.r; R <= range.e.r; ++R) {
- const cellAddress = { c: C, r: R };
- const cellRef = XLSX.utils.encode_cell(cellAddress);
- const cell = ws[cellRef];
- if (cell && cell.v) {
- const cellText = cell.w || cell.v.toString();
- const cellWidth = cellText.length + 2; // 加 2 以适应列头和数据
- if (cellWidth > maxColWidth) {
- maxColWidth = cellWidth;
- }
- }
- }
- const colWidth = maxColWidth > 20 ? maxColWidth : 20; // 设置最小列宽
- const col = ws['!cols'][C];
- if (col) {
- col.wch = colWidth;
- } else {
- ws['!cols'][C] = { wch: colWidth };
- }
- }
- }