前提:已经安装好 file-saver xlsx和 script-loader,如未安装,请查看 https://www.cnblogs.com/luyuefeng/p/8031597.html

新建一个js文件。

import Vue from 'vue';

/**
* @method formatJson
* @param {Array} filterVal 导出表头的中文表头对应的英文名称
* 例:['name', 'age']
* @param {Array} jsonData 导出的数据
* 例:[{
* name: '张三',
* age: 14
* }]
* @return {Array} 组装成需要导出的excel数据
*/
let formatJson = (filterVal, jsonData) => {
return jsonData.map(v => filterVal.map(j => v[j]));
}; /**
* @method dateTransition
* @param {Array} outdata excel表导入的数据
* 例:[{
* 姓名: '张三',
年龄: 14
* }]
* @param {Array} importModel excel表头中文名称和其对应的英文名称
* 例:[{
* label: '姓名',
* value: 'name'
* },{
* label: '年龄',
* value: 'age'
* }]
* @return {Array} 组装成需要导入的excel数据
*/
let dateTransition = (outdata, importModel) => {
console.log('outdata', outdata);
console.log('importModel', importModel);
let importData = [];
for(let item of outdata) {
let obj = {};
for(let key in item) {
for(let childItem of importModel) {
if(key === childItem.label) {
obj[childItem.value] = item[key];
break;
}
}
}
importData.push(obj);
}
return importData;
}; /**
* @method $exportExcel
* @param {Array} tHeader 导出表格的中文表头
* 例:['姓名', '年龄']
* @param {Array} filterVal 导出表头的中文表头对应的英文名称
* 例:['name', 'age']
* @param {Array} exportList 导出的数据
* 例:[{
* name: '张三',
* age: 14
* }]
* @param {String} excelName 导出的excel表格名称
* @return {null} 无返回值
*/
Vue.prototype.$exportExcel = (tHeader, filterVal, exportList, excelName) => {
require.ensure([], () => {        
const { export_json_to_excel } = require('@/vendor/Export2Excel');  //引入文件
tHeader.unshift('序号');
filterVal.unshift('index');
for(let i = 0;i < exportList.length;i++){
exportList[i].index=i+1+'';
}      
const data = formatJson(filterVal, exportList);
console.log('data', data); 
export_json_to_excel(tHeader, data, excelName);
});
}; /**
* @method $importExcel
* @param {Object} event 文件表单触发change事件的event对象
* @param {Array} importModel excel表头中文名称和其对应的英文名称
* 例:[{
* label: '姓名',
* value: 'name'
* },{
* label: '年龄',
* value: 'age'
* }]
* @return {null} 无返回值
*/
// 导入
Vue.prototype.$importExcel = (event, importModel) => {
return new Promise((resolve, reject) => {
var f = event.currentTarget.files[0];
var rABS = false; //是否将文件读取为二进制字符串 var reader = new FileReader();
FileReader.prototype.readAsBinaryString = function(f) {
var binary = "";
var rABS = false; //是否将文件读取为二进制字符串
var pt = this;
var wb; //读取完成的数据
var outdata;
var reader = new FileReader();
reader.onload = function(e) {
var bytes = new Uint8Array(reader.result);
var length = bytes.byteLength;
for(var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
var XLSX = require('xlsx'); if(rABS) {
wb = XLSX.read(btoa(fixdata(binary)), { //手动转化
type: 'base64'
});
} else {
wb = XLSX.read(binary, {
type: 'binary'
});
}
outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
let importList = dateTransition(outdata, importModel);
resolve(importList);
}
reader.readAsArrayBuffer(f);
}
if(rABS) {
reader.readAsArrayBuffer(f);
} else {
reader.readAsBinaryString(f);
}
});
};

vue项目使用js-xlsx进行excel表格的导入和导出方法的简单原型封装的更多相关文章

  1. php操作excel表格的导入和导出

    前言:对于excel大家肯定熟悉不过了的,那么我们在日常的业务中应该是有对这些文件的导入导出操作的 类的下载:composer require phpoffice/phpexcel,其中Classes ...

  2. 【面试题】js实现将excel表格copy到页面

    js实现将excel表格copy到页面 点击打开视频讲解更加详细 其实最核心的技术,还是copy的是我们粘贴板上的数据 就像平常怎么粘贴复制其他的数据一样,只是我们在excel粘贴的是一个表格数据 这 ...

  3. vue中excal表格的导入和导出

    注意:vue中要实现表格的导入与导出,首先要install两个依赖, npm install -S file-saver xlsx  和  npm install -D script-loader.其 ...

  4. 使用PHPExcel实现Excel文件的导入和导出(模板导出)

    在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...

  5. vue项目 引入js文件

    例如我想将laydate.js引到vue项目中 将用到的js文件放到static文件夹内,在项目的根目录下的index.html内引入 <script src="static/js/l ...

  6. 【翻译】将Ext JS Grid转换为Excel表格

    原文:Converting an Ext 5 Grid to Excel Spreadsheet 稍微迟来的礼物--Ext JS Grid转为Excel代码,现在支持Ext JS 5! 功能包括: - ...

  7. C# 在excel表格中检索并导出数据

    由于工作需要,我经常使用excel文档来存储和处理各种数据,在生活中偶尔也会使用excel表格来记录各种开销,相信很多朋友也和我一样.Excel的功能很强大,其中一个很实用的数据处理功能就是查找和替换 ...

  8. 数据库数据生成Excel表格(多用在导出数据)

    最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...

  9. Excel表格数据导入MySQL数据库

    有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...

随机推荐

  1. for循环中执行setTimeout问题(任务队列的问题)

    for(var i=0;i<8;i++){ setTimeout(function () { console.log(i) },0) } 输出了8次8,这跟js的执行顺序和作用域链有关. 规则: ...

  2. PHP中输出字符串(echo,print,printf,print_r和var_dump)的区别【转载】

    php中常见的输出语句 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. prin ...

  3. jmeter beanshell postprocessor 使用

    String newtoken=bsh.args[0];print(newtoken);${__setProperty(newtoken,${token},)}; String newcompanyI ...

  4. oracle知识博客链接

    http://blog.csdn.net/YiQiJinBu/article/category/1100395/1

  5. 【题解】Crossing River

    题目描述 几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间. 输入格式 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间. 输出格式 输出t行数据,每行1个数 ...

  6. CentOS6.5源码安装MySQL5.6.35

    CentOS6.5源码安装MySQL5.6.35 一.卸载旧版本 1.使用下面的命令检查是否安装有mysql [root@localhost tools]# rpm -qa|grep -i mysql ...

  7. USACO Milk Routing /// 优先队列广搜

    题目大意: 在n个点 m条边的无向图中 需要运送X单位牛奶 每条边有隐患L和容量C 则这条边上花费时间为 L+X/C 求从点1到点n的最小花费 优先队列维护 L+X/C 最小 广搜到点n #inclu ...

  8. sed(seream editor)流编辑器

    sed:既然是流编辑器,自然只会是改变输入输出流的内容,对源文件并不进行丝毫修改,不信的话,你可以用cat sourcefille试试啊~ 另,如果你想将修改保存到源文件,可以用输入输出重定向啊~ s ...

  9. 树莓派上Opencv highgui的问题

    错误描述:https://bbs.csdn.net/topics/394616975?page=1#post-409508178 解决方案:直接改系统环境变量 # vim /etc/profile e ...

  10. tomcat部署项目后,项目没有成功部署到tomcat里面,或者部署的是之前项目

    用svn下载java项目到本地,导入eclipse里面,然后部署到tomcat里,启动tomcat,一闪而过,在浏览器中打开,报404错(找不到页面),其实是项目没有成功部署到tomcat,可以打开t ...