vue项目使用js-xlsx进行excel表格的导入和导出方法的简单原型封装
前提:已经安装好 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表格的导入和导出方法的简单原型封装的更多相关文章
- php操作excel表格的导入和导出
前言:对于excel大家肯定熟悉不过了的,那么我们在日常的业务中应该是有对这些文件的导入导出操作的 类的下载:composer require phpoffice/phpexcel,其中Classes ...
- 【面试题】js实现将excel表格copy到页面
js实现将excel表格copy到页面 点击打开视频讲解更加详细 其实最核心的技术,还是copy的是我们粘贴板上的数据 就像平常怎么粘贴复制其他的数据一样,只是我们在excel粘贴的是一个表格数据 这 ...
- vue中excal表格的导入和导出
注意:vue中要实现表格的导入与导出,首先要install两个依赖, npm install -S file-saver xlsx 和 npm install -D script-loader.其 ...
- 使用PHPExcel实现Excel文件的导入和导出(模板导出)
在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...
- vue项目 引入js文件
例如我想将laydate.js引到vue项目中 将用到的js文件放到static文件夹内,在项目的根目录下的index.html内引入 <script src="static/js/l ...
- 【翻译】将Ext JS Grid转换为Excel表格
原文:Converting an Ext 5 Grid to Excel Spreadsheet 稍微迟来的礼物--Ext JS Grid转为Excel代码,现在支持Ext JS 5! 功能包括: - ...
- C# 在excel表格中检索并导出数据
由于工作需要,我经常使用excel文档来存储和处理各种数据,在生活中偶尔也会使用excel表格来记录各种开销,相信很多朋友也和我一样.Excel的功能很强大,其中一个很实用的数据处理功能就是查找和替换 ...
- 数据库数据生成Excel表格(多用在导出数据)
最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...
- Excel表格数据导入MySQL数据库
有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...
随机推荐
- inline-block 导致元素下沉 解决方法添加vertical-align:middle属性
<div class="layui-input-block"> <input name="username" lay-verify=" ...
- HDU 1847 Good Luck in CET-4 Everybody! (巴什博弈)
题目链接:HDU 1847 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此. ...
- HTTP 请求及响应 (转)
HTTP请求 4.1.HTTP请求包括的内容 客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求. 一个完整的HTTP请求包括如下内容:一个请求行.若干消息头. ...
- CSS Sprites技术原理和使用
在分析各个网站的CSS时,我们经常可以看到一些网站有很多的元素共享了一张背景图片,而这张背景图片包含了所有这些元素需要的背景,这种技术就叫做CSS Sprites. 淘宝的css sprites ...
- jmeter 函数学习
https://jmeter.apache.org/usermanual/functions.html#__threadNum
- python基础【第六篇】
list列表 基本结构 lst =[1,2,3,5,6] 为什么学列表? 列表能够存储比字符串更多的数据 列表能够存储各种数据类型 列表的注意点 列表是有序的 列表是可变的,支持索引,切片,步 切片后 ...
- 迭代器,生成器,yield,yield from理解
迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...
- CSS3新增(选择器{属性选择器,结构伪类选择器,伪元素选择器})
1.属性选择器 属性选择器,可以根据元素特定的属性来选择元素,这样就不用借助 类 或者 id选择器. E [ att ] 选择具有 att 属性的 E 元素 例如:input [ value ...
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了.不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直 ...
- 前端学习(十七)js数组(笔记)
数组: 1. var arr=[1,2,3,4]; 2. var arr=new Array(1,2,3,4,5); 区别: 1.写法不一样,选择第一种(好写) ...