Vue与Excel的极致配合:如何实现数据的批量导入和导出

1.前言

在我们开发实际项目中,经常会遇到数据导入和导出的需求。而Excel作为一种常用的数据处理工具,数据的批量导入和导出也是Excel重要的应用场景之一。如果能够把Vue和Excel结合起来,就可以在前端实现数据的批量导入和导出,提高工作效率。本篇文章将会介绍如何使用Vue和Excel实现数据的批量导入和导出,希望对大家有所帮助。

2.Excel的数据格式

在使用Vue和Excel实现数据的批量导入和导出之前,首先需要了解一下Excel的数据格式。Excel中的数据可以分为如下几类:

2.1.文本

文本数据即为Excel中的字符串,如果文本中存在数值或日期,Excel会在输入时将其转化为数值或日期。

var textData = "Hello World";

2.2.数值

数值数据即Excel中的数字,可以进行四则运算等计算操作。

var numberData = 1234;

2.3.日期

日期数据即Excel中的日期格式,可以进行日期计算操作。

var dateData = new Date();

3.Vue中的Excel导入

在Vue中使用Excel数据进行导入,需要使用到以下两个库:

//使用xlsx库处理Excel数据

import XLSX from 'xlsx';

//使用file-saver库下载Excel文件

import { saveAs } from 'file-saver';

3.1.上传Excel文件

上传Excel文件主要使用标签来实现,HTML代码如下:

<template>

<div>

<input type="file" ref="file" accept=".xlsx, .xls" @change="importExcel" />

</div>

</template>

标签中的accept属性指定了上传文件的类型,这里只允许上传.xlsx和.xls类型的文件。

3.2.解析Excel数据

在获取Excel文件之后,需要使用xlsx库将Excel数据解析成一个JavaScript对象,代码实现如下:

import XLSX from 'xlsx';

export default {

methods: {

importExcel(e) {

//获取Excel文件

const file = e.target.files[0];

const reader = new FileReader();

reader.onload = (event) => {

const data = event.target.result;

const workbook = XLSX.read(data, { type: 'binary' });

const worksheet = workbook.Sheets[workbook.SheetNames[0]];

const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1, defval: '' });

console.log(jsonData);

};

reader.readAsBinaryString(file);

},

},

};

上述代码使用FileReader对象将Excel文件读取为二进制数据,再利用XLSX.read方法将二进制数据转换为对象。XLSX.read方法的第二个参数指定了文件类型为binary,表示二进制文件。接着使用XLSX.utils.sheet_to_json方法将工作表中的数据转换为一个JavaScript对象。

3.3.处理Excel数据

通过XLSX.utils.sheet_to_json得到的数据格式如下:

[

["姓名", "年龄", "地址"],

["张三", 18, "北京"],

["李四", 17, "上海"],

["王五", 19, "广州"]

]

可以看出,第一行是表头,其余行为数据。我们可以根据需求对这些数据进行处理,比如过滤掉某些无用的数据,转换日期格式等。下面是一个简单的例子,将Excel中的日期数据转换为JavaScript日期对象:

import XLSX from 'xlsx';

import moment from 'moment';

export default {

methods: {

importExcel(e) {

//获取Excel文件

const file = e.target.files[0];

const reader = new FileReader();

reader.onload = (event) => {

const data = event.target.result;

const workbook = XLSX.read(data, { type: 'binary' });

const worksheet = workbook.Sheets[workbook.SheetNames[0]];

const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1, defval: '' });

const newData = jsonData.slice(1).map((item) => {

const date = moment(item[2], 'MM/DD/YYYY');

return [item[0], item[1], date.toDate()];

});

console.log(newData);

};

reader.readAsBinaryString(file);

},

},

};

上述代码使用了moment库处理日期数据,将日期字符串转换为JavaScript日期对象,并将处理后的数据存储到newData数组中。

4.Vue中的Excel导出

在Vue中使用Excel数据进行导出,需要使用到以下两个库:

//使用xlsx库处理Excel数据

import XLSX from 'xlsx';

//使用file-saver库下载Excel文件

import { saveAs } from 'file-saver';

4.1.生成Excel数据

在生成Excel数据之前,需要将需要导出的数据存储到一个二维数组中,格式如下:

[

["姓名", "年龄", "地址"],

["张三", 18, "北京"],

["李四", 17, "上海"],

["王五", 19, "广州"]

]

然后使用XLSX.utils.aoa_to_sheet方法将数据转换为工作表对象:

const worksheet = XLSX.utils.aoa_to_sheet(data);

最后使用XLSX.utils.book_new方法将工作表对象存储到工作簿对象中:

const workbook = XLSX.utils.book_new();

XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

其中第三个参数表示工作表的名称。

4.2.将Excel数据保存到本地

最后使用file-saver库将Excel文件保存到本地,代码实现如下:

const wbout = XLSX.write(workbook, { bookType: 'xlsx', bookSST: false, type: 'array' });

const file = new Blob([wbout], { type: 'application/octet-stream' });

saveAs(file, 'data.xlsx');

其中Blob对象用于创建二进制数据,第一个参数为数据,第二个参数为数据类型。saveAs方法用于将Blob对象下载到本地,第一个参数为Blob对象,第二个参数为文件名称。

5.总结

本篇文章介绍了使用Vue和Excel实现数据的批量导入和导出,在数据导入时通过XLSX库解析Excel数据,进行相关数据格式转换,并在数据导出时生成Excel数据对象并使用file-saver库下载Excel文件。如果您在项目中遇到了类似的需求,希望本篇文章可以为您提供一些帮助。