当前位置: 首页 > article >正文

利用ExcelJS封装一个excel表格的导出

ExcelJS 操作和写入Excel 文件。
直接上代码,js部分:
exportFn.js

import ExcelJS from 'exceljs';
import { saveAs } from 'file-saver';

export function exportExcleUtils(tHeader, filterVal, listData, fileName) {
  //设置工作簿属性
  const workbook = new ExcelJS.Workbook();
  workbook.creator = 'Me';
  workbook.lastModifiedBy = 'Her';
  workbook.created = new Date();
  workbook.modified = new Date();
  workbook.lastPrinted = new Date();
  //添加工作薄
  const worksheet = workbook.addWorksheet('sheet1');
  //计算标题宽
  let colWidth = calculateColumnWidth(tHeader);
  console.log(colWidth);
  let style = { alignment: { vertical: 'middle', horizontal: 'center' } };
  let columns = [];
  for (let i = 0; i < tHeader.length; i++) {
    let header = {
      header: tHeader[i],
      key: filterVal[i] ? filterVal[i] : i + '',
      width: colWidth[i] ? colWidth[i] + 20 : 10,
      style: JSON.parse(JSON.stringify(style)),
    };
    columns.push(header);
  }
  worksheet.columns = columns;

  //添加数据
  listData.forEach((item) => {
    worksheet.addRow(item);
  });

  worksheet.getRow(1).font = { name: '宋体', family: 4, size: 16, bold: true };

  fileName = fileName + '.xlsx';
  workbook.xlsx.writeBuffer().then((data) => {
    let blob = new Blob([data], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    });
    saveAs(blob, fileName);
  });
}

export function calculateColumnWidth(tHeader) {
  let colWidth = [];
  //计算列宽
  for (let i = 0; i < tHeader.length; i++) {
    if (colWidth[i] && colWidth[i] < tHeader[i].length) {
      colWidth[i] = tHeader[i].length * 2;
    } else if (colWidth[i] === undefined) {
      colWidth[i] = tHeader[i].length * 2;
    }
  }
  return colWidth;
}

举个栗子:

//从公共函数中拿出
import { exportExcleUtils } from '@/libs/exportFn';
...
...
...
//再写个按钮
    <el-button type="primary" @click="exportFn">导出按钮</el-button>
...
...
...

    //导出
    exportFn() {
      let loadingInstance = Loading.service({
        text: '正在导出,请稍等...',
      });

      let table = this.selectedRowArr;
		//表头
      let tHeader = [
		     'a',
		     'b',
		     'c',
		     'd',
      ];
		//数据的里字段
      let filterVal = [
	        'person',
	    	'dog',
	    	'cat',
	    	'pig',
      ];
      let fileName = '导出的表文件名';
      loadingInstance.close();
      exportExcleUtils(tHeader, filterVal, table, fileName);
    },

PS:上文的selectedRowArr变量是我项目里的,自己去塞数据,数组对象形式


http://www.kler.cn/a/378131.html

相关文章:

  • 【linux】HTTPS 协议原理
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。
  • 代码随想录第十七天
  • leetcode-88-合并两个有序数组
  • 《Java 实现希尔排序:原理剖析与代码详解》
  • Centos8安装软件失败更换镜像源
  • git 入门作业
  • 学习记录:基于Z-Stack 3.0.1的Zigbee智能插座实现
  • Django-分页
  • 构建后端为etcd的CoreDNS的容器集群(七)、编写适合阅读的域名管理脚本
  • Vue2.0 通过vue-pdf-signature@4.2.7和pdfjs-dist@2.5.207实现PDF预览
  • 目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8
  • Claude 3.5 新功能 支持对 100 页的PDF 图像、图表和图形进行可视化分析
  • diffusion model 学习笔记
  • nodejs入门教程14:nodejs querystring模块
  • ssm基于SSM的校内信息服务发布系统的设计与实现+vue
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (1) - 让 OpenGLES 应用跑起来
  • YOLOv11改进策略【卷积层】| CVPR-2020 Strip Pooling 空间池化模块 处理不规则形状的对象 含二次创新
  • Node.js 应用程序中的文件写入提升为 RCE
  • 江协科技STM32学习- P25 UART串口协议
  • 系统安全与加解密技术
  • 【网络】传输层协议TCP
  • 甄选学习平台 优化员工培训体验
  • huggingface利用bert-base-chinese实现中文情感分类
  • Jenkins面试整理-如何在 Jenkins 中配置构建任务?
  • 新生代对象垃圾回收如何避免全堆扫描