前端实现文件导出

133 阅读1分钟

前端实现文件导出

下载xlsx插件

npm install xlsx

新建文件json2Excel.js 封装函数

import * as XLSX from "xlsx";
​
export default (data, sheetName, fileName) => {
  const jsonWorkSheet = XLSX.utils.json_to_sheet(data);
​
  const workBook = {
    SheetNames: [sheetName], // 指定有序 sheet 的 name
    Sheets: {
      [sheetName]: jsonWorkSheet, // 表格数据内容
    },
  };
​
  return XLSX.writeFile(workBook, fileName); // 向文件系统写出文件
};
​

组件使用

<template>
  <div class="exportFilePage">
    <el-table :data="jsonData" style="width: 100%">
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="age" label="年龄" width="180"> </el-table-column>
      <el-table-column prop="skill" label="技能"> </el-table-column>
      <el-table-column prop="telephone" label="电话"> </el-table-column>
      <el-table-column prop="address" label="地址"> </el-table-column>
    </el-table>
    <div class="fileName">
      <p class="fileName_title">文件名:</p>
      <el-input v-model="fileName"></el-input>
    </div>
    <div @click="exportFile" class="exportFileBtn">文件导出</div>
  </div>
</template>
<script>
import json2Excel from "@/utils/json2Excel";
​
export default {
  name: "",
  data() {
    return {
      // 测试的 JSON 数据
      jsonData: [
        {
          name: "喜洋洋",
          age: 18,
          skill: "破坏",
          telephone: 31220200825,
          address: "QQ群",
        },
        {
          name: "熊大",
          age: 19,
          skill: "干饭",
          telephone: 5520200826,
          address: "艾欧尼亚",
        },
        {
          name: "迪迦",
          age: 20000,
          skill: "打怪兽",
          telephone: 1420200827,
          address: "m8小黑屋",
        }
      ],
      fileName: "",
    };
  },
  created() {},
  computed: {},
  methods: {
    exportFile() {
      // key -> name 的映射
      const excelKeyToName = {
        name: "姓名",
        age: "年龄",
        skill: "特长",
        telephone: "电话",
        address: "地址",
      };
      // 格式化参数
      const data = this.jsonData.map((item) => {
        const newItem = {};
        Object.keys(item).forEach((key) => {
          newItem[excelKeyToName[key]] = item[key];
        });
        return newItem;
      });
​
      // 导出 Excel
      if (this.fileName == "") {
        this.fileName = "大傻逼的文件";
      }
      json2Excel(data, "sheet1", `${this.fileName}.xlsx`);
      this.fileName = "";
    },
  },
};
</script>
<style lang='scss'  scoped>
.exportFilePage {
  .exportFileBtn {
    width: 80px;
    height: 30px;
    line-height: 30px;
    text-align: center;
    background-color: rgb(0, 198, 46);
    margin-top: 12px;
    cursor: pointer;
  }
  .fileName {
    display: flex;
    width: 220px;
    height: 40px;
    line-height: 40px;
    margin-top: 12px;
    margin-bottom: 12px;
    .fileName_title {
      width: 80px;
    }
  }
}
</style>