Vue中实现导出表格的功能

在Vue中实现导出表格的功能,需要使用第三方库,比如xlsx和FileSaver.js。

  1. 首先安装依赖:

    npm install xlsx file-saver --save

  2. 创建导出表格的方法:

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`);
}
  1. 调用导出方法:
javascript 复制代码
exportTableToExcel('tableId', 'example');

其中,tableId是要导出的表格的ID,example是导出的文件名。

  1. 增加样式

如果需要在导出的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

相关推荐
专业程序开发源14 分钟前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源28 分钟前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆66635 分钟前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人1 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)1 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan1 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_2 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒2 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技2 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
星光开发者3 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express