前提:已经安装好 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. centos安装virtualbox

    参考:http://www.if-not-true-then-false.com/2010/install-virtualbox-with-yum-on-fedora-centos-red-hat-r ...

  2. 6.Jmeter 参数关联设置

    Jmeter的参数关联其实就是参数变量的在不同的采样器(sampler)的存储与传递. 如下我们有一个请求例子. 1.  发起下订单(下订单成功后会返回一个订单Id) 2.  针对该订单进行支付(需要 ...

  3. vue input框type=number 保留两位小数自定义组件

    第一步:自定义组件MyNumberInput.vue<template> <input class="numberInput" type="number ...

  4. tushare积分怎么获得 tushare pro 积分充值 积分转让

    本人是做量化投资的,团队转型,换了交易策略,手头有多个离职同事的闲置转让.600分:原价50元,仅需39元1500分:原价150元,仅需109元(售罄)2000分:原价200元,仅需149元5000分 ...

  5. Python 字符串常用判断函数

    判断字符串常用函数: S代表某字符串 S.isalnum()  所有字符都是数字或字母,为真返回Ture,否则返回False S.isalha()     所有字符都是字母,为真返回Ture,否则返回 ...

  6. jsp页面通过ajax取值/展示数据及分页显示

    jsp页面通过ajax从后台获取数据,在页面展示,并实现分页效果代码: [JavaScript部分代码] 1 <script> function getComposition(pageno ...

  7. Codesforces 485D Maximum Value

                                                      D. Maximum Value   You are given a sequence a cons ...

  8. mybatis 教程(mybatis in action)

    目录简介: 一:开发环境搭建二:以接口的方式编程 三:实现数据的增删改查 四:实现关联数据的查询 五:与spring3集成(附源码) 六:与Spring MVC 的集成 七:实现mybatis分页(源 ...

  9. shell 符号的定义(一)

    在shell中,在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”.但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小 ...

  10. timezone

    Calendar cal2 = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss&q ...