vue xlsx 导入导出_vue 导入导出Excel文件(使用js-xlsx库)

本文介绍了如何在Vue项目中利用js-xlsx库进行Excel文件的导入和导出。通过创建一个名为`excel.js`的文件,封装了`exportExcel`和`importExcel`两个方法,分别用于导出数据到Excel和从Excel文件中导入数据。导出时,将JSON数据转换为工作簿格式,并保存为.xlsx文件。导入时,通过FileReader读取文件内容,解析成JSON数据并回调返回。
摘要由CSDN通过智能技术生成

导入XLSX库

官方地址Github

安装

npm install xlsx --s

简单二次封装js-xlsx库导入导出功能

封装为excel.js

/* eslint-disable */

import XLSX from 'xlsx';

/**

* @description:

* @param {Object} json 服务端发过来的数据

* @param {String} name 导出Excel文件名字

* @return:

*/

function exportExcel(json, name) {

/* convert state to workbook */

var data = new Array();

var keyArray = new Array();

for (const key1 in json) {

if (json.hasOwnProperty(key1)) {

const element = json[key1];

var rowDataArray = new Array();

for (const key2 in element) {

if (element.hasOwnProperty(key2)) {

const element2 = element[key2];

rowDataArray.push(element2);

if (keyArray.length < getLength(element)) {

keyArray.push(key2);

}

}

}

data.push(rowDataArray);

}

}

data.splice(0, 0, keyArray);

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

const wb = XLSX.utils.book_new();

XLSX.utils.book_append_sheet(wb, ws, "SheetJS");

/* generate file and send to client */

XLSX.writeFile(wb, name + ".xlsx");

}

/**

* @description: 导入excel文件并返回数据

* @param {function} 回调函数参数data,dataRef,一个是数据,一个是exce表单的索引

* @return:

*/

function importExcel(callback) {

var inputObj = document.createElement('input')

inputObj.setAttribute('id', 'file');

inputObj.setAttribute('type', 'file');

inputObj.setAttribute('name', 'file');

inputObj.setAttribute("style", 'visibility:hidden');

inputObj.setAttribute("accept", ".xlsx,.xls,.csv")

inputObj.addEventListener('change', (evt) => {

const files = evt.target.files;

if (files && files[0]) _file(files[0], (data, dataRef) => {

callback(data, dataRef)

});

})

document.body.appendChild(inputObj);

inputObj.value;

inputObj.click();

}

/**

* @description: 处理文件

* @param {Object} file 文件对象

* @param {function} callback 回调函数

* @return:

*/

function _file(file, callback) {

const make_cols = refstr => Array(XLSX.utils.decode_range(refstr).e.c + 1).fill(0).map((x, i) => ({

name: XLSX.utils.encode_col(i),

key: i

}));

/* Boilerplate to set up FileReader */

const reader = new FileReader();

reader.onload = (e) => {

/* Parse data */

const bstr = e.target.result;

const wb = XLSX.read(bstr, {

type: 'binary'

});

/* Get first worksheet */

const wsname = wb.SheetNames[0];

const ws = wb.Sheets[wsname];

/* Convert array of arrays */

const data = XLSX.utils.sheet_to_json(ws, {

header: 1

});

/* Update state */

callback(data, make_cols(ws['!ref']))

};

reader.readAsBinaryString(file);

}

/**

* @description: 获取map的长度

* @param {Object} obj map对象

* @return: map的长度

*/

function getLength(obj) {

var count = 0;

for (var i in obj) {

if (obj.hasOwnProperty(i)) {

count++;

}

}

return count;

}

export default {

exportExcel,

importExcel

}

exportExcel导出文件,importExcel导入文件,参数说明看代码中注释

在其他文件使用封装的js

在App.vue中

首先import文件

import Excel from "./libs/excel.js";

示例导出的json对象,写在data中

{

name: "路人甲",

phone: "123456789",

email: "000@123456.com"

},

{

name: "炮灰乙",

phone: "123456789",

email: "000@123456.com"

},

{

name: "土匪丙",

phone: "123456789",

email: "000@123456.com"

},

{

name: "流氓丁",

phone: "123456789",

email: "000@123456.com"

}

]

method中写对应的方法

exportExcel() {

Excel.exportExcel(this.jsonData, "文件");

},

importFile() {

Excel.importExcel((data, dataRef) => {

alert("数据已经打印在控制台");

console.log(data);

console.log(dataRef);

});

}

太简单了没写demo,伸手党请不要来问demo。有疑问请留意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值