• vue3导出表格excel(支持多sheet页),并自定义导出样式


    前期准备

    npm install file-saver

    npm install xlsx

    npm install xlsx-js-style

    先说一说这里为什么选择用xlsx-js-style插件设置导出excel的样式。因项目需要,我在网上找了很多关于导出excel自定义样式的文章,用的最多最普遍的插件就是xlsx-style,有一个比较麻烦的问题是在引用xlsx-style的时候会报错,这是官网上就已经写了的,解决方案一是改node-module中的源码,二是修改配置文件,但是我觉得这两种方法不是长久之计,而且xlsx-style已经许久没有更新和维护不确定是否会出现其它问题。官网上的解决方案我也试过,也安装过xlsx-style-medalsoft等其他插件,就是依旧报错,可能是不大支持vue3???有待研究...所以我就把xlsx-style抛弃啦

    html代码

    需要导出的表格要在table标签或者el-table标签加上id名(我在这使用table标签是根据需求和接口返回的数据来定的,如果接口数据是平常的数组套对象又不需要自定义标题用el-table是一样的),在导出的时候需要借助id名来找到对应的表格,这几个表格的数据都是从接口来的就不直接贴代码了。使用v-show="false"隐藏表格是因为页面上不需要显示表格,只是需要借助这个表格来导出。需要注意的是这里隐藏不能使用v-if,v-if="false"是不会渲染元素的,导出的时候就找不到这个元素。

    点击全部导出按钮绑定的方法

    /utils/exportExcel

    1. import FileSaver from 'file-saver'
    2. import * as XLSX from 'xlsx'//这是vue3导入XLSX的方法
    3. import XLSXS from 'xlsx-js-style'
    4. // 導出Excel文件的方法
    5. export function exportExcel(allTable, excelName) {
    6. const xlsxParam = { raw: true } // 导出的内容只做解析,不进行格式转换 如果不设置该属性80%可能导出的是0.8 可自行测试
    7. let wb = XLSX.utils.book_new()
    8. // 循环添加每一个表格/sheet (如果是只有一个sheet页的话就不需要循环,直接添加进去就可以了)
    9. for (const item of allTable) {
    10. let sheet = XLSX.utils.table_to_sheet(document.querySelector(item.eleName), xlsxParam)
    11. XLSX.utils.book_append_sheet(wb, sheet, item.title)
    12. }
    13. //console.log(wb) //打印查看wb的结构 看下图
    14. // 循环找到对应的单元格修改样式
    15. for (const key in wb.Sheets) {
    16. if (key == '損益表') {
    17. for (const k in wb.Sheets[key]) {
    18. // 非!开头的属性都是单元格
    19. if (!k.startsWith('!')) {
    20. const td = wb.Sheets[key][k]
    21. //td每一个是单元格对象 v:单元格内容 t:单元格内容类型如string s:单元格样式
    22. if (td.v.includes('(')) {
    23. // 設置字體顔色 帶括號的數字比如(1,000.00)改成紅色
    24. td.s = {
    25. font: {
    26. color: { rgb: 'ff0000' }
    27. // name: '仿宋',
    28. // sz: 20,
    29. // bold: true,
    30. }
    31. // border: {
    32. // top: {
    33. // style: 'thin',
    34. // color: { rgb: '000000' }
    35. // }
    36. // }
    37. }
    38. }
    39. }
    40. }
    41. }
    42. }
    43. const wbout = XLSXS.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
    44. try {
    45. FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${excelName}.xlsx`)
    46. } catch (e) {
    47. if (typeof console !== 'undefined') {
    48. console.log(e, wbout)
    49. }
    50. }
    51. return wbout
    52. }

    wb打印的结果:

     

    添加样式后单元格的结构:

    导出的效果:

    单元格样式

    设置单元格的样式,就是设置工作表对象中的单元格对象的 s 属性。这个属性的值是一个对象,它有五个属性:alignment、border、fill、font和numFmt。GitHub - gitbrent/xlsx-js-style: SheetJS Community Edition + Basic Cell Styles

  • 相关阅读:
    Nginx之静态文件服务器的搭建
    SystemServer是如何启动AMS的
    laravel 事件 & 订阅
    在 macOS 上安装 Rust 开发环境并运行第一个程序的详细步骤
    LocalDateTime、LocalDate、Date的相互转换工具类
    逆变器孤岛检测及其测试方法
    数据挖掘:分类,聚类,关联关系,回归
    【LINUX】Linux最常用的20个基本指令 介绍~分析
    cmd 命令关闭占用端口
    kubernetes client-go功能介绍
  • 原文地址:https://blog.csdn.net/weixin_55992854/article/details/126009473