vue 电子表格Excel的上传导入、导出下载、读取本地Excel、json转Excel

简介: vue 电子表格Excel的上传导入、导出下载、读取本地Excel、json转Excel

上传导入Excel

安装插件

npm install xlsx

main.js中

//  导入excel插件
import XLSX from 'xlsx'
Vue.prototype.$XLSX = XLSX

vue页面中

    <div>
        <el-upload
                action="/上传文件的接口"
                :on-change="onChange"
                :auto-upload="false"
                :show-file-list="false"
                accept=".xls, .xlsx"
        >
            <el-button size="small" type="primary" icon="el-icon-upload2">导入Excel</el-button>
        </el-upload>
        <br>
        <el-table :data="tableData" border >
            <el-table-column
                    prop="name"
                    label="姓名"
                    align="center"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="gender"
                    align="center"
                    label="性别">
            </el-table-column>
        </el-table>
    </div>
        data(){
            return{
                fileData:'',
                tableData: []
            }
        },
        methods:{
            // ----------以下为导入Excel数据功能--------------
            // 文件选择回调
            onChange(file) {
                this.fileData = file; // 保存当前选择文件
                this.readExcel(); // 调用读取数据的方法
            },
            // 读取数据
            readExcel() {
                let that = this;
                const files = that.fileData;
                if (!files) {
                    return false;
                } else if (!/\.(xls|xlsx)$/.test(files.name.toLowerCase())) {
                    this.$message.error("上传格式不正确,请上传xls或者xlsx格式");
                    return false;
                }
                const fileReader = new FileReader();
                fileReader.onload = ev => {
                    try {
                        const data = ev.target.result;
                        const workbook = this.$XLSX.read(data, {
                            type: "binary"
                        });

                        if (workbook.SheetNames.length >= 1) {
                            this.$message({
                                message: "导入数据表格成功",
                                showClose: true,
                                type: "success"
                            });
                        }
                        const wsname = workbook.SheetNames[0]; //取第一张表
                        const ws = this.$XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); //生成json表格内容
                        for (var i = 0; i < ws.length; i++) {
                            var sheetData = {
                                // 键名为绑定 el 表格的关键字,值则是 ws[i][对应表头名]
                                name: ws[i]["姓名"],
                                gender: ws[i]["性别"],
                            };
                            that.tableData.push(sheetData);
                        }
                        this.$refs.upload.value = "";
                    } catch (e) {
                        return false;
                    }
                };
                // 如果为原生 input 则应是 files[0]
                fileReader.readAsBinaryString(files.raw);
            },
        }

导出下载Excel

  1. 下载引入Blob.js和 Export2Excel.js
    https://pan.baidu.com/share/init?surl=Qa6Quk-dJLuYSuskK_piiw
    提取码:dy8m

将下载的Blob.js和 Export2Excel.js文件放在src/plugins文件夹中

  1. 安装插件
npm install -D script-loader
npm install -S file-saver


  1. vue页面中
    <div>
        <el-button size="small" type="primary" icon="el-icon-download" @click="exportToExcel">导出Excel</el-button>
        <br>
        <br>
        <el-table :data="tableData" border>
            <el-table-column
                    prop="name"
                    label="姓名"
                    align="center"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="gender"
                    align="center"
                    label="性别">
            </el-table-column>
        </el-table>
    </div>
        data() {
            return {
                tableData: [{"name": "张三", "gender": "男"}, {"name": "李四", "gender": "女"}]
            }
        },
        methods: {
            exportToExcel() {
                require.ensure([], () => {
                    const {export_json_to_excel} = require("@/plugins/Export2Excel");
                    // 导出后excel的表头
                    const tHeader = [
                        "姓名",
                        "性别"
                    ];
                    // 源数据对应的属性名
                    const filterVal = [
                        "name",
                        "gender"
                    ];
                    // 获取源数据
                    const list = this.tableData;
                    const data = this.formatJson(filterVal, list);
                    export_json_to_excel(tHeader, data, "导出后的文件名");
                });
            },
            formatJson(filterVal, jsonData) {
                return jsonData.map(v => filterVal.map(j => v[j]));
            },
        }

读取本地Excel

  1. 将本地的Excel拷贝到项目的public文件夹中
    比如Excel文件相对于index.html文件的相对路径为 “./Excels/极度认真系统.xlsx”
  2. 安装插件
npm install xlsx
  1. 安装axios
npm install axios --save-dev

在 src/main.js 中导入 axios

import axios from 'axios'
Vue.prototype.$http = axios
  1. vue页面中
import XLSX from 'xlsx'
 
created() {
    // Excel文件相对于index.html文件的相对路径
    let url = "./Excels/极度认真系统.xlsx"
    this.$http.get(url, {responseType: 'arraybuffer'})
        .then((res) => {
            let data = new Uint8Array(res.data)
            let wb = XLSX.read(data, {type: "array"})
            // ‘2020年日记’ 为Excel文件中的表名
            let content = wb.Sheets['2020年日记']
            this.data = XLSX.utils.sheet_to_json(content)
        })
},

假设本地表格中的内容为:

姓名 性别
张三
李四

则此时 data中中的数据为

data:[
    {
        "姓名":'张三',  "性别":'男',
    },
    {
        "姓名":'李四',  "性别":'女',
    },
],

json转Excel

原理与导出下载Excel相同

  1. 下载引入Blob.js和 Export2Excel.js
    https://pan.baidu.com/share/init?surl=Qa6Quk-dJLuYSuskK_piiw
    提取码:dy8m

将下载的Blob.js和 Export2Excel.js文件放在src/plugins文件夹中

  1. 安装插件
npm install -D script-loader
npm install -S file-saver
  1. json转Excel的函数
            JSONtoExcel(JSONdata) {
                require.ensure([], () => {
                    const {export_json_to_excel} = require("@/plugins/Export2Excel");

                    // 将源数据转化为对象
                    let list = JSON.parse(JSONdata)

                    let keyList =[]

                    for (let key in list[0]) {
                        keyList.push(key)
                    }

                    // 导出后excel的表头
                    const tHeader = keyList

                    // 源数据对应的属性名
                    const filterVal = keyList

                    const data = this.formatJson(filterVal, list);
                    export_json_to_excel(tHeader, data, "导出后的文件名");
                });
            },

[
{"name": "张三", "gender": "男"},
{"name": "李四", "gender": "女"}
]
目录
相关文章
|
26天前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
27 1
|
28天前
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
160 3
|
1月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
99 8
|
1月前
|
Java API Apache
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
51 4
|
2月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
91 6
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
160 0
在Java中处理JSON数据:Jackson与Gson库比较

热门文章

最新文章

下一篇
DataWorks