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文件。如果您在项目中遇到了类似的需求,希望本篇文章可以为您提供一些帮助。