vue3采用xlsx库实现本地上传excel文件功能

 更新时间:2025年02月24日 09:55:31   作者:阿丽塔~  
这篇文章主要为大家详细介绍了vue3如何采用xlsx库实现本地上传excel文件功能,并且前端解析为Json数据,感兴趣的小伙伴可以了解一下

需求:本地上传excel 文件,但需要对excel 文件的内容进行解析,然后展示出来

1. 安装依赖

首先,确保安装了 xlsx 库:

npm install xlsx

2. 创建 Vue 组件

创建一个 Vue 组件(如 ExcelUpload.vue),用于实现文件上传和解析功能。

组件代码:

<template>
  <div>
    <input type="file" class="file-btn hoverPointer" accept=".xls,.xlsx"

                            @change="changeExcel($event)" />
    <div v-if="tableData.length > 0">
      <table>
        <thead>
          <tr>
            <th v-for="header in headers" :key="header">{{ header }}</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="(row, index) in tableData" :key="index">
            <td v-for="cell in row" :key="cell">{{ cell }}</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</template>

<script>
import { ref } from 'vue';
import * as XLSX from 'xlsx';

export default {
  setup() {
    const headers = ref([]);
    const tableData = ref([]);

    const changeExcel= (event) => {

        const files = e.target.files

        if (files.length <= 0) {

            return false

        } else if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) {

            console.log('上传格式不正确,请上传xls或者xlsx格式')

            return false

        }

      const reader = new FileReader();
      reader.onload = (e) => {
        const data = e.target.result;
        const workbook = XLSX.read(data, { type: 'binary' });
        const sheetName = workbook.SheetNames[0];
        const worksheet = workbook.Sheets[sheetName];
        const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 });

        headers.value = json[0]; // 表头
        tableData.value = json.slice(1); // 表格数据
      };
      reader.readAsBinaryString(files);
    };

    return {
      headers,
      tableData,
      handleFileUpload,
    };
  },
};
</script>

<style scoped>
table {
  width: 100%;
  border-collapse: collapse;
}
th, td {
  border: 1px solid #ccc;
  padding: 8px;
  text-align: left;
}
</style>

3. 使用组件

在主应用文件(如 App.vue)中引入并使用该组件:

<template>
  <div id="app">
    <ExcelUpload />
  </div>
</template>

<script>
import ExcelUpload from './components/ExcelUpload.vue';

export default {
  name: 'App',
  components: {
    ExcelUpload,
  },
};
</script>

4. 功能说明

文件上传:通过 <input type="file"> 元素选择 Excel 文件。

文件读取:使用 FileReader 读取文件内容为二进制字符串 。

解析为 JSON:使用 xlsx 库将 Excel 数据转换为 JSON 格式 。

数据展示:将解析后的表头和数据展示在表格中。

5. 扩展功能

错误处理:在文件读取和解析过程中添加错误处理,提示用户文件格式错误或解析失败。

大文件优化:对于大文件,可以分页显示数据或使用异步加载。

自定义解析逻辑:根据实际需求,对数据进行格式转换或校验。

通过以上步骤,你可以在 Vue 3 项目中实现本地上传 Excel 文件并解析为 JSON 数据的功能。

以上就是vue3采用xlsx库实现本地上传excel文件功能的详细内容,更多关于vue3 xlsx实现excel上传的资料请关注脚本之家其它相关文章!

相关文章

  • Vue常见组件间通信方案及典型应用场景详解

    Vue常见组件间通信方案及典型应用场景详解

    这篇文章主要为大家介绍了Vue常见组件间通信方案及典型应用场景详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Vue+ElementUI实现从后台动态填充下拉框的示例代码

    Vue+ElementUI实现从后台动态填充下拉框的示例代码

    本文主要介绍了Vue+ElementUI实现从后台动态填充下拉框的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • vue.extend与vue.component的区别和联系

    vue.extend与vue.component的区别和联系

    这篇文章主要介绍了vue.extend与vue.component的区别和联系,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-09-09
  • 解决vue 退出动画无效的问题

    解决vue 退出动画无效的问题

    这篇文章主要介绍了解决vue 退出动画无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • elementUI+vue+printJs实现页面表格数据打印功能实例

    elementUI+vue+printJs实现页面表格数据打印功能实例

    打印功能是一个很普遍的需求,这两天我又遇到了,这篇文章主要介绍了elementUI+vue+printJs实现页面表格数据打印功能的相关资料,包括安装依赖、引用插件、设置打印区域div、绑定按钮事件加载全量数据并调用printJS方法,需要的朋友可以参考下
    2025-06-06
  • vue粘贴复制功能的实现过程记录

    vue粘贴复制功能的实现过程记录

    最近在项目中遇到点击按钮复制链接功能,所以这篇文章主要给大家介绍了关于vue粘贴复制功能的实现过程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Vue通过v-for实现年份自动递增

    Vue通过v-for实现年份自动递增

    这篇文章主要为大家详细介绍了Vue通过v-for实现年份自动递增,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Vue3中导航守卫的基本使用方法

    Vue3中导航守卫的基本使用方法

    这篇文章主要给大家介绍了关于Vue3中导航守卫的基本使用方法,正如其名vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航,下面需要的朋友可以参考下
    2023-03-03
  • Vue Socket.io源码解读

    Vue Socket.io源码解读

    这篇文章主要介绍了Vue Socket.io源码解读,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Vue.js中用v-bind绑定class的注意事项

    Vue.js中用v-bind绑定class的注意事项

    关于数据绑定一个常见需求就是操作元素的class列表和它的内联样式。因为它们都是属性,我们可以用 v-bind 处理它们,但是使用v-bind绑定class的时候我们要有一些注意事项,下面这篇文章就给大家分享了下要注意的方面,希望能对大家有所帮助,下面来一起看看吧。
    2016-12-12

最新评论