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格式导入时可能会报错,为了避免不必要的格式错误,直 ...
随机推荐
- PHP 3DES 加解密(CBC模式,pkcs5padding填充)
1.前言:项目中接入第三方支付遇到3DES加密,以前也没用过,搜了好多,都不适用,各种不对,后来自己结合搜到的终于弄正确了,检测地址:http://tool.chacuo.net/crypt3des. ...
- 【C++第一个Demo】---控制台RPG游戏2【通用宏、背包类】
[通用 ]--一些游戏中常用的宏.函数和枚举 #ifndef _MARCO_H_ #define _MARCO_H_ //------------------------常用系统库---------- ...
- 浅析Draw Call
Draw Call是CPU对GPU的一种命令,仅仅指向一个需要被渲染的图元列表,在OpenGL和DirectX中分别体现为glDrawElements和DrawIndexedPrimitive图像编程 ...
- Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题
最近在Windows7下将Qt4.8.4+MSVC2008的项目移植到QT5.2下时,遇到了一些小问题: 问题一:错误:C1083: 无法打开包括文件:"QApplication&q ...
- multiple-cursors做代码对齐
multiple-cursors做代码对齐 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839 ...
- 使用pip 时报错 Fatal error in launcher: Unable to create process using '"D:\pytghon2.7\python.exe" "D:\python2.7\S
无法创建使用pip.exe创建进程,说白了就是无法启动pip安装插件. 解决方法升级pip: python -m pip install -U pip
- Codeforces A Mist of Florescence
A Mist of Florescence 题目大意: 事先告诉你每种颜色分别有几个联通块,构造一个不超过 \(50*50\) 的矩形.用 \(A,B,C,D\) 四种颜色来对矩形进行涂色使它满足要求 ...
- day10 python算法 冒泡算法 二分法 最快查找算法 c3算法
day10 python 1.冒泡算法 冒泡排序,把列表竖起来看,就像一个个气泡往上去(时间复杂度大) lst = [12,3,3,2424,14,3567,534,324 ...
- model字段对象和forms字段对象的区别和联系
一.model字段对象 (一)_meta _meta是django.db.models.options.Options的实例,获取字段对象可通过模型类来进行获取,而_meta可提供如下功能: 获取模型 ...
- react 的生命周期函数
生命周期函数: 是指在某一时刻组件自动执行 的函数 初始化: 设置props和state mounting: componentWillMount 在组件即将被挂载到页面的时候自动执行 render ...