vue excel上传预览和table内容下载到excel文件中

yizhihongxing
  1. Vue Excel上传预览

在Vue中实现Excel上传预览,需要使用以下三个库:xlsx、file-saver、vue-xlsx。引入这三个库后,在Vue组件中可以实现以下代码:

<template>
  <div>
    <input type="file" @change="onUpload" />
    <p v-if="previewData.length > 0">
      <button @click="onDownload">下载Excel文件</button>
    </p>
    <table>
      <thead>
        <tr>
          <th v-for="header in headers">{{ header }}</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="row in previewData">
          <td v-for="value in row">{{ value }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
import XLSX from "xlsx";
import { saveAs } from "file-saver";
import VueXlsx from "vue-xlsx";

export default {
  data() {
    return {
      headers: [],
      previewData: [],
    };
  },
  methods: {
    onUpload(event) {
      const file = event.target.files[0];
      if (!file) {
        return;
      }
      const reader = new FileReader();
      reader.onload = (e) => {
        const data = new Uint8Array(e.target.result);
        const workbook = XLSX.read(data, { type: "array" });
        const worksheet = workbook.Sheets[workbook.SheetNames[0]];
        const headers = VueXlsx.utils.sheet_to_json(worksheet)[0];
        const previewData = VueXlsx.utils.sheet_to_json(worksheet, { header: 1 });
        this.headers = headers;
        this.previewData = previewData.slice(1);
      };
      reader.readAsArrayBuffer(file);
    },
    onDownload() {
      const worksheet = VueXlsx.utils.json_to_sheet(this.previewData, {
        header: this.headers,
      });
      const workbook = VueXlsx.utils.book_new();
      VueXlsx.utils.book_append_sheet(workbook, worksheet);
      const data = VueXlsx.write(workbook, { bookType: "xlsx", type: "array" });
      const blob = new Blob([data], { type: "application/octet-stream" });
      saveAs(blob, "example.xlsx");
    },
  },
};
</script>

其中,onUpload方法用于读取Excel文件数据,解析并生成headers和previewData数据。previewData用于展示在组件中的表格中,headers用于渲染表头。而onDownload方法则用于将previewData以Excel文件的形式下载到本地。

  1. Vue Table内容下载到Excel文件中

在Vue中实现将Table内容下载到Excel文件中,同样需要使用以上三个库,并新增一些方法和代码。在Vue组件中可以实现以下代码:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th v-for="header in headers">{{ header }}</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="row in tableData">
          <td v-for="value in row">{{ value }}</td>
        </tr>
      </tbody>
    </table>
    <button @click="onDownload">下载Excel文件</button>
  </div>
</template>

<script>
import XLSX from "xlsx";
import { saveAs } from "file-saver";
import VueXlsx from "vue-xlsx";

export default {
  data() {
    return {
      headers: ["名称", "价格", "数量"],
      tableData: [
        ["商品1", 10, 30],
        ["商品2", 20, 20],
        ["商品3", 5, 25],
      ],
    };
  },
  methods: {
    onDownload() {
      const worksheet = VueXlsx.utils.json_to_sheet([this.headers, ...this.tableData]);
      const workbook = VueXlsx.utils.book_new();
      VueXlsx.utils.book_append_sheet(workbook, worksheet);
      const data = VueXlsx.write(workbook, { bookType: "xlsx", type: "array" });
      const blob = new Blob([data], { type: "application/octet-stream" });
      saveAs(blob, "example.xlsx");
    },
  },
};
</script>

其中,headers和tableData分别为表格中的表头和数据。当用户点击“下载Excel文件”按钮时,程序会根据headers和tableData生成相应的Excel文件,并自动下载到本地。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue excel上传预览和table内容下载到excel文件中 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue中v-for循环给标签属性赋值的方法

    在Vue中使用v-for循环渲染元素时,经常需要根据数据动态地给标签属性赋值,例如给一个标签的src属性赋值等。下面是一个完整的攻略,包括示例说明: 1. 基本语法 在Vue中,可以使用v-bind指令绑定属性值,语法格式如下: <img v-bind:src="imageUrl"> <!– 或者简写成 –> …

    Vue 2023年5月27日
    00
  • 对VUE中的对象添加属性

    对VUE中的对象添加属性,可以通过以下步骤进行: 步骤1:定义一个VUE对象 <script> export default { data () { return { user: { name: ‘张三’, age: 20 } } } } </script> 步骤2:添加属性 接下来就可以随时添加属性了,可以通过以下两种方式: 方式1…

    Vue 2023年5月28日
    00
  • vue3 setup() 高级用法示例详解

    下面我来为您详细讲解“vue3 setup() 高级用法示例详解”的完整攻略。 什么是vue3 setup()函数 setup()是Vue3中的一个新函数,用来替代Vue2中的data、computed、methods等选项,用于组件的数据响应、计算属性、方法等快速开发,同时还可以在其中访问props、context等组件相关对象。setup()函数是Vue…

    Vue 2023年5月28日
    00
  • Vue extend的基本用法(实例详解)

    Vue.extend的基本用法 介绍 Vue.extend是Vue.js提供的扩展一个构造函数的功能。扩展一个构造函数,可以使用基础 Vue 构造器,创建一个“子类”,允许在它基础上拓展一些功能。Vue.extend返回的是一个新的构造器,我们可以基于这个构造器创建出新的Vue实例。 语法 Vue.extend(options) options:选项对象,提…

    Vue 2023年5月28日
    00
  • Vue3对比Vue2的优点总结

    Vue3对比Vue2的优点总结 1. 更快的速度 Vue3使用了Proxy对象,通过动态代理实现了响应式系统,比Vue2使用的Object.defineProperty()更加高效。Vue3还优化了渲染流程,比Vue2更快。 Vue3还支持组合式API,可以更灵活的管理组件中的逻辑和状态。 2. 更好的TypeScript支持 Vue3内置了TypeScri…

    Vue 2023年5月27日
    00
  • vue组件库的在线主题编辑器的实现思路

    让我来详细讲解一下“Vue组件库的在线主题编辑器的实现思路”的完整攻略。 简介 Vue组件库的在线主题编辑器可以让用户在浏览器中快速地在前端组件之间切换不同的主题,实现对组件样式的高效编辑和定制。实现思路主要分为以下几个步骤: 构建基于Vue的组件库 实现主题JSON文件的存储和读取 实现在浏览器中编辑主题的可视化交互界面 实现主题对组件的动态更换 下面我针…

    Vue 2023年5月28日
    00
  • Vue数据驱动模拟实现3

    Vue数据驱动模拟实现是指通过手动实现Vue框架底层的部分功能,来深入理解Vue的数据响应式原理。下面我们将给出实现Vue数据驱动的完整攻略: 1. 实现数据响应式 Vue的数据响应式是基于Object.defineProperties实现的,我们可以手动实现一个简化版的数据响应式: function defineReactive(obj, key, val…

    Vue 2023年5月28日
    00
  • vue.js实现格式化时间并每秒更新显示功能示例

    下面是“vue.js实现格式化时间并每秒更新显示功能示例”的完整攻略。 思路分析 实现该功能需要使用Vue.js框架,其核心思路是将需要更新的时间保存在Vue实例的data中,然后利用Vue实例的响应式机制,在每秒钟更新时间的同时更新视图。 具体实现方法可以使用Vue.js提供的计算属性,或者通过Vue.js生命周期函数中的定时器实现。 计算属性实现示例 下…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部