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

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

ExcelJS 操作和写入Excel 文件。
直接上代码,js部分:
exportFn.js
  1. import ExcelJS from 'exceljs';
  2. import { saveAs } from 'file-saver';
  3. export function exportExcleUtils(tHeader, filterVal, listData, fileName) {
  4.   //设置工作簿属性
  5.   const workbook = new ExcelJS.Workbook();
  6.   workbook.creator = 'Me';
  7.   workbook.lastModifiedBy = 'Her';
  8.   workbook.created = new Date();
  9.   workbook.modified = new Date();
  10.   workbook.lastPrinted = new Date();
  11.   //添加工作薄
  12.   const worksheet = workbook.addWorksheet('sheet1');
  13.   //计算标题宽
  14.   let colWidth = calculateColumnWidth(tHeader);
  15.   console.log(colWidth);
  16.   let style = { alignment: { vertical: 'middle', horizontal: 'center' } };
  17.   let columns = [];
  18.   for (let i = 0; i < tHeader.length; i++) {
  19.     let header = {
  20.       header: tHeader[i],
  21.       key: filterVal[i] ? filterVal[i] : i + '',
  22.       width: colWidth[i] ? colWidth[i] + 20 : 10,
  23.       style: JSON.parse(JSON.stringify(style)),
  24.     };
  25.     columns.push(header);
  26.   }
  27.   worksheet.columns = columns;
  28.   //添加数据
  29.   listData.forEach((item) => {
  30.     worksheet.addRow(item);
  31.   });
  32.   worksheet.getRow(1).font = { name: '宋体', family: 4, size: 16, bold: true };
  33.   fileName = fileName + '.xlsx';
  34.   workbook.xlsx.writeBuffer().then((data) => {
  35.     let blob = new Blob([data], {
  36.       type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  37.     });
  38.     saveAs(blob, fileName);
  39.   });
  40. }
  41. export function calculateColumnWidth(tHeader) {
  42.   let colWidth = [];
  43.   //计算列宽
  44.   for (let i = 0; i < tHeader.length; i++) {
  45.     if (colWidth[i] && colWidth[i] < tHeader[i].length) {
  46.       colWidth[i] = tHeader[i].length * 2;
  47.     } else if (colWidth[i] === undefined) {
  48.       colWidth[i] = tHeader[i].length * 2;
  49.     }
  50.   }
  51.   return colWidth;
  52. }
复制代码
举个栗子:
  1. //从公共函数中拿出
  2. import { exportExcleUtils } from '@/libs/exportFn';
  3. ...
  4. ...
  5. ...
  6. //再写个按钮
  7.     <el-button type="primary" @click="exportFn">导出按钮</el-button>
  8. ...
  9. ...
  10. ...
  11.     //导出
  12.     exportFn() {
  13.       let loadingInstance = Loading.service({
  14.         text: '正在导出,请稍等...',
  15.       });
  16.       let table = this.selectedRowArr;
  17.                 //表头
  18.       let tHeader = [
  19.                      'a',
  20.                      'b',
  21.                      'c',
  22.                      'd',
  23.       ];
  24.                 //数据的里字段
  25.       let filterVal = [
  26.                 'person',
  27.                     'dog',
  28.                     'cat',
  29.                     'pig',
  30.       ];
  31.       let fileName = '导出的表文件名';
  32.       loadingInstance.close();
  33.       exportExcleUtils(tHeader, filterVal, table, fileName);
  34.     },
复制代码
PS:上文的selectedRowArr变量是我项目里的,本身去塞数据,数组对象形式

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表