前端数据导出

背景

在实际场景中,大多数情况下,数据量都是比较大且数据需要经过业务处理后导出的,在前端进行导出不适合;但是,如果数据量较小且业务简单时,可以采用前端导出的方式。

依赖

yarn add ant-design-vue
yarn add exceljs
yarn add file-saver

代码展示

<template>
  <div>
    <h3>excel下载表格</h3>
    <Button @click="excelExport">excelDown下载</Button>
  </div>
</template>
<script setup>
import { Button } from "ant-design-vue";
// 引入exceljs模块
import ExcelJS from "exceljs";

// 定义下载表格文件方法
const downloadFile = (buffer, fileName) => {
  console.log("downkloadFile导出");
  let fileUrl = window.URL.createObjectURL(new Blob([buffer]));
  let fileLink = document.createElement("a");
  fileLink.href = fileUrl;
  fileLink.setAttribute("download", fileName);
  document.body.appendChild(fileLink);
  fileLink.click();
};

// 定义导出方法
const excelExport = async () => {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet("sheet1");
  // 模拟数据列表
  const data = [
    {
      id: "1",
      name: "Jack",
      age: 18,
      gender: "male",
      achievement: 70,
    },
    {
      id: "2",
      name: "Lily",
      age: 16,
      gender: "female",
      achievement: 90,
    },
  ];
  /**
   * 设置列
   * header: 列名
   * key: 列字段
   * width: 列宽度
   * */
  worksheet.columns = [
    {
      header: "编号",
      key: "id",
      width: 12,
    },
    {
      header: "姓名",
      key: "name",
      width: 16,
    },
    {
      header: "年龄",
      key: "age",
      width: 12,
    },
    {
      header: "性别",
      key: "gender",
      width: 12,
    },
    {
      header: "成绩",
      key: "achievement",
      width: 12,
    },
  ];
  // 插入多条数据
  data.forEach((item) => {
    worksheet.addRow(item);
  });

  // 设置整个表格数据样式
  worksheet.eachRow((row, rowNum) => {
    const size = rowNum % 2 == 1 ? 20 : 14;
    const bold = rowNum % 2 == 1 ? true : false;
    // 设置列头样式
    row.eachCell((cell) => {
      cell.font = {
        size,
        bold,
      };
      cell.alignment = {
        horizontal: "center",
        vertical: "middle",
      };
    });
    // 设置表格整体行高
    row.height = 40;
  });

  // 将表格名称“成绩单”插入表格第一行
  const rowIndex = 1; // 插入行的索引
  const newRow = worksheet.insertRow(rowIndex);
  // 设置插入行的名称
  newRow.getCell(1).value = "成绩单";

  /**
   * 自定义表格样式font
   * size: 字体大小
   * color: 颜色(rgb)
   * bold: 加粗
   * */
  // alignment 设置单元格的水平和垂直居中
  const A1 = worksheet.getCell("A1");
  A1.font = {
    size: 20,
    color: { rgb: "FFFFAA00" },
    bold: true,
  };
  A1.alignment = {
    horizontal: "center",
    vertical: "middle",
  };

  // 个性化设置,要放在批量设置之后
  // 设置第2行的行高
  worksheet.getRow(2).height = 30;
  // 合并单元格
  worksheet.mergeCells("A1:E1");

  // 合并后居中设置
  worksheet.getCell("A1").alignment = {
    horizontal: "center",
    vertical: "middle",
  };

  // 将表格数据文件
  const buffer = await workbook.xlsx.writeBuffer();
  // 下载表格文件
  downloadFile(buffer, "成绩单.xlsx");
};
</script>
<style scoped lang="scss"></style>

导出文件内容展示

Alt

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要利用exceljs将前端数据导出成Excel,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了exceljs和file-saver这两个依赖库。你可以使用npm命令进行安装,如下所示: ``` npm install exceljs npm install file-saver ``` 2. 在你的前端代码中引入ExcelJS和saveAs: ``` import ExcelJS from 'exceljs'; import saveAs from 'file-saver'; ``` 3. 创建一个Excel对象,并定义导出Excel的方法。你可以参考下面的代码示例: ``` const exportExcel = () => { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('Sheet 1'); // 添加表头 const headerRow = worksheet.addRow(header); // 设置自定义表头 headerRow.eachCell((cell, index) => { cell.value = customHeader\[index - 1\]; }); // 添加数据 tableData.forEach((data) => { const row = worksheet.addRow(Object.values(data)); }); // 合并单元格 mergeList.forEach((merge) => { worksheet.mergeCells(merge.startRow, merge.startColumn, merge.endRow, merge.endColumn); }); // 导出Excel文件 workbook.xlsx.writeBuffer().then((buffer) => { const blob = new Blob(\[buffer\], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, '表格文件名称.xlsx'); }); }; ``` 4. 在你的页面中调用exportExcel方法来触发导出操作。你可以在按钮的点击事件中调用该方法,如下所示: ``` <button @click="exportExcel">导出</button> ``` 通过以上步骤,你就可以利用exceljs将前端数据导出成Excel文件了。请注意,你需要根据你的具体需求来调整代码中的变量和参数,以适应你的数据结构和导出需求。 #### 引用[.reference_title] - *1* *3* [使用ExcelJS实现excel的前端导出功能(Vue3+TS)](https://blog.csdn.net/weixin_50543490/article/details/131207514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [纯前端导出带样式的excel:exceljs](https://blog.csdn.net/shangshuxian1999/article/details/129087172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值