使用vue-json-excel生成并导出excel

2021-03-23  本文已影响0人  熊爸天下_56c7

这里我们用到了一个库: vue-json-excel

该库的npm地址:
https://www.npmjs.com/package/vue-json-excel

一. 安装vue-json-excel

npm install vue-json-excel

在main.js中导入此模块

import JsonExcel from "vue-json-excel";

并在Vue对象上绑定此组件

Vue.component("downloadExcel", JsonExcel);

然后就可以直接使用

二 . 使用举例

download-excel就是下载excel的组件, 详细属性见第三节

<template>
  <div class="hello">
    <download-excel
      :data="json_data"
      :fields="json_fields"
      worksheet="My Worksheet"
      name="filename.xls"
    >
      <button>download</button>
    </download-excel>
  </div>
</template>

<script>
export default {
  name: "ExcelDemo",
  data() {
    return {
      json_fields: {              //表头设计
        "全名": "name",
        "城市": "city",
        "电话1": "phone.mobile",
        "电话2": {
          field: "phone.landline",
          callback: (value) => {   //电话2这一列通过一个回调函数格式化了该列数据
            return `Landline Phone - ${value}`;
          },
        },
      },
      json_data: [               //表格数据
        {
          name: "Tony Peña",
          city: "New York",
          country: "United States",
          birthdate: "1978-03-15",
          phone: {
            mobile: "1-541-754-3010",
            landline: "(541) 754-3010",
          },
        },
        {
          name: "Thessaloniki",
          city: "Athens",
          country: "Greece",
          birthdate: "1987-11-23",
          phone: {
            mobile: "+1 855 275 5071",
            landline: "(2741) 2621-244",
          },
        },
      ],
    };
  },
};
</script>

在此组件中实现的方法是使用HTML表绘制.xls文件,Microsoft Excel不再将HTML识别为本机内容,因此在打开文件之前将显示警告消息, 这不可避免。但是内容将完美呈现。

3. 属性

属性名 类型 描述 默认值
data 数组 要输出的数据
fields Object 声明要导出的JSON对象中的字段。就像是在制作表头 默认将导出JSON中的所有属性。
export-fields Object 用于解决其他组件使用可变fields的问题,exportFields的工作原理与fields完全相同
type 字符串 表格类型 [xls, csv]
name 字符串 文件名 data.xls
header 标题 表格的标题
footer 字符串 页脚
default-value 字符串 用于填充空置单元格 ''
worksheet 字符串 表单名称 'Sheet1'
fetch 函数 进行回调,以便在下载之前获取数据(如果已设置),则在按下鼠标后以及下载过程之前会立即运行。重要信息:仅在未定义数据属性的情况下有效。
before-generate 函数 回调以在生成/获取数据之前立即调用方法,例如:显示加载进度
before-finish 函数 在下载框弹出之前进行回调以调用方法,例如:隐藏加载进度
stringifyLongNum 布尔 字符串化长整数和十进制(解决数字精度丢失的问题),默认值:false
escapeCsv 布尔 可以转义CSV值,以解决数字字段中的一些问题。

4. 多行值将出现在单个单元格中

包含换行符的单个文本值将在Excel中显示为单个单元格。这避免了多行值被拆分为多个单元格的情况。

5. 按需获取数据

<template>
  <div id="app">
 
    <hr>
    <h2>Fetch Example</h2>
    <downloadexcel
      class            = "btn"
      :fetch           = "fetchData"
      :fields          = "json_fields"
      :before-generate = "startDownload"
      :before-finish   = "finishDownload">
      Download Excel
    </downloadexcel>
  </div>
</template>
 
<script>
import downloadexcel from "vue-json-excel";
import axios from 'axios';
 
export default {
  name: "App",
  components: {
    downloadexcel,
  },
  data(){
    return {
      json_fields: {
        'Complete name': 'name',
        'Date': 'date',
      },
    }
  }, //data
  methods:{
    async fetchData(){
      const response = await axios.get('https://holidayapi.com/v1/holidays?key=a4b2083b-1577-4acd-9408-6e529996b129&country=US&year=2017&month=09');
      console.log(response);
      return response.data.holidays;
    },
    startDownload(){
        alert('show loading');
    },
    finishDownload(){
        alert('hide loading');
    }
  }
};
</script>
上一篇 下一篇

猜你喜欢

热点阅读