第一步:安装依赖

使用npm:

npm install -S file-saver xlsx(这里其实安装了2个依赖)

npm install -D script-loader

或使用yarn:

yarn add file-saver

yarn add xlsx

yarn add script-loader --dev

第二步:在src目录下新建一个excel文件夹引入Blob.js和Export2Excel.js

image.png

Blob.js

/* eslint-disable */

/* Blob.js*/

/*global self, unescape */

/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,

plusplus: true */

/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */

(function (view) {

"use strict";

view.URL = view.URL || view.webkitURL;

if (view.Blob && view.URL) {

try {

new Blob;

return;

} catch (e) {

}

}

// Internally we use a BlobBuilder implementation to base Blob off of

// in order to support older browsers that only have BlobBuilder

var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function (view) {

var

get_class = function (object) {

return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];

}

, FakeBlobBuilder = function BlobBuilder() {

this.data = [];

}

, FakeBlob = function Blob(data, type, encoding) {

this.data = data;

this.size = data.length;

this.type = type;

this.encoding = encoding;

}

, FBB_proto = FakeBlobBuilder.prototype

, FB_proto = FakeBlob.prototype

, FileReaderSync = view.FileReaderSync

, FileException = function (type) {

this.code = this[this.name = type];

}

, file_ex_codes = (

"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "

+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"

).split(" ")

, file_ex_code = file_ex_codes.length

, real_URL = view.URL || view.webkitURL || view

, real_create_object_URL = real_URL.createObjectURL

, real_revoke_object_URL = real_URL.revokeObjectURL

, URL = real_URL

, btoa = view.btoa

, atob = view.atob

, ArrayBuffer = view.ArrayBuffer

, Uint8Array = view.Uint8Array

, origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/

;

FakeBlob.fake = FB_proto.fake = true;

while (file_ex_code--) {

FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;

}

// Polyfill URL

if (!real_URL.createObjectURL) {

URL = view.URL = function (uri) {

var

uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a")

, uri_origin

;

uri_info.href = uri;

if (!("origin" in uri_info)) {

if (uri_info.protocol.toLowerCase() === "data:") {

uri_info.origin = null;

} else {

uri_origin = uri.match(origin);

uri_info.origin = uri_origin && uri_origin[1];

}

}

return uri_info;

};

}

URL.createObjectURL = function (blob) {

var

type = blob.type

, data_URI_header

;

if (type === null) {

type = "application/octet-stream";

}

if (blob instanceof FakeBlob) {

data_URI_header = "data:" + type;

if (blob.encoding === "base64") {

return data_URI_header + ";base64," + blob.data;

} else if (blob.encoding === "URI") {

return data_URI_header + "," + decodeURIComponent(blob.data);

}

if (btoa) {

return data_URI_header + ";base64," + btoa(blob.data);

} else {

return data_URI_header + "," + encodeURIComponent(blob.data);

}

} else if (real_create_object_URL) {

return real_create_object_URL.call(real_URL, blob);

}

};

URL.revokeObjectURL = function (object_URL) {

if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {

real_revoke_object_URL.call(real_URL, object_URL);

}

};

FBB_proto.append = function (data/*, endings*/) {

var bb = this.data;

// decode data to a binary string

if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {

var

str = ""

, buf = new Uint8Array(data)

, i = 0

, buf_len = buf.length

;

for (; i < buf_len; i++) {

str += String.fromCharCode(buf[i]);

}

bb.push(str);

} else if (get_class(data) === "Blob" || get_class(data) === "File") {

if (FileReaderSync) {

var fr = new FileReaderSync;

bb.push(fr.readAsBinaryString(data));

} else {

// async FileReader won't work as BlobBuilder is sync

throw new FileException("NOT_READABLE_ERR");

}

} else if (data instanceof FakeBlob) {

if (data.encoding === "base64" && atob) {

bb.push(atob(data.data));

} else if (data.encoding === "URI") {

bb.push(decodeURIComponent(data.data));

} else if (data.encoding === "raw") {

bb.push(data.data);

}

} else {

if (typeof data !== "string") {

data += ""; // convert unsupported types to strings

}

// decode UTF-16 to binary string

bb.push(unescape(encodeURIComponent(data)));

}

};

FBB_proto.getBlob = function (type) {

if (!arguments.length) {

type = null;

}

return new FakeBlob(this.data.join(""), type, "raw");

};

FBB_proto.toString = function () {

return "[object BlobBuilder]";

};

FB_proto.slice = function (start, end, type) {

var args = arguments.length;

if (args < 3) {

type = null;

}

return new FakeBlob(

this.data.slice(start, args > 1 ? end : this.data.length)

, type

, this.encoding

);

};

FB_proto.toString = function () {

return "[object Blob]";

};

FB_proto.close = function () {

this.size = 0;

delete this.data;

};

return FakeBlobBuilder;

}(view));

view.Blob = function (blobParts, options) {

var type = options ? (options.type || "") : "";

var builder = new BlobBuilder();

if (blobParts) {

for (var i = 0, len = blobParts.length; i < len; i++) {

if (Uint8Array && blobParts[i] instanceof Uint8Array) {

builder.append(blobParts[i].buffer);

}

else {

builder.append(blobParts[i]);

}

}

}

var blob = builder.getBlob(type);

if (!blob.slice && blob.webkitSlice) {

blob.slice = blob.webkitSlice;

}

return blob;

};

var getPrototypeOf = Object.getPrototypeOf || function (object) {

return object.__proto__;

};

view.Blob.prototype = getPrototypeOf(new view.Blob());

}(

typeof self !== "undefined" && self

|| typeof window !== "undefined" && window

|| this

));

Export2Excel.js

/* eslint-disable */

require('script-loader!file-saver');

// require('script-loader!src/vendor/Blob');

require('script-loader!./Blob');

require('script-loader!xlsx/dist/xlsx.core.min');

function generateArray(table) {

var out = [];

var rows = table.querySelectorAll('tr');

var ranges = [];

for (var R = 0; R < rows.length; ++R) {

var outRow = [];

var row = rows[R];

var columns = row.querySelectorAll('td');

for (var C = 0; C < columns.length; ++C) {

var cell = columns[C];

var colspan = cell.getAttribute('colspan');

var rowspan = cell.getAttribute('rowspan');

var cellValue = cell.innerText;

if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;

//Skip ranges

ranges.forEach(function (range) {

if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {

for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);

}

});

//Handle Row Span

if (rowspan || colspan) {

rowspan = rowspan || 1;

colspan = colspan || 1;

ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});

}

;

//Handle Value

outRow.push(cellValue !== "" ? cellValue : null);

//Handle Colspan

if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);

}

out.push(outRow);

}

return [out, ranges];

};

function datenum(v, date1904) {

if (date1904) v += 1462;

var epoch = Date.parse(v);

return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);

}

function sheet_from_array_of_arrays(data, opts) {

var ws = {};

var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};

for (var R = 0; R != data.length; ++R) {

for (var C = 0; C != data[R].length; ++C) {

if (range.s.r > R) range.s.r = R;

if (range.s.c > C) range.s.c = C;

if (range.e.r < R) range.e.r = R;

if (range.e.c < C) range.e.c = C;

var cell = {v: data[R][C]};

if (cell.v == null) continue;

var cell_ref = XLSX.utils.encode_cell({c: C, r: R});

if (typeof cell.v === 'number') cell.t = 'n';

else if (typeof cell.v === 'boolean') cell.t = 'b';

else if (cell.v instanceof Date) {

cell.t = 'n';

cell.z = XLSX.SSF._table[14];

cell.v = datenum(cell.v);

}

else cell.t = 's';

ws[cell_ref] = cell;

}

}

if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);

return ws;

}

function Workbook() {

if (!(this instanceof Workbook)) return new Workbook();

this.SheetNames = [];

this.Sheets = {};

}

function s2ab(s) {

var buf = new ArrayBuffer(s.length);

var view = new Uint8Array(buf);

for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;

return buf;

}

export function export_table_to_excel(id) {

var theTable = document.getElementById(id);

console.log('a')

var oo = generateArray(theTable);

var ranges = oo[1];

/* original data */

var data = oo[0];

var ws_name = "SheetJS";

console.log(data);

var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);

/* add ranges to worksheet */

// ws['!cols'] = ['apple', 'banan'];

ws['!merges'] = ranges;

/* add worksheet to workbook */

wb.SheetNames.push(ws_name);

wb.Sheets[ws_name] = ws;

var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});

saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")

}

function formatJson(jsonData) {

console.log(jsonData)

}

export function export_json_to_excel(th, jsonData, defaultTitle) {

/* original data */

var data = jsonData;

data.unshift(th);

var ws_name = "SheetJS";

var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);

/* add worksheet to workbook */

wb.SheetNames.push(ws_name);

wb.Sheets[ws_name] = ws;

var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});

var title = defaultTitle || '列表'

saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")

}

第三步:在main.js中引入

import Blob from './excel/Blob.js'

import Export2Excel from './excel/Export2Excel.js'

第四步:webpack.base.conf.js做如下修改:

resolve: {

extensions: ['.js', '.vue', '.json'],

alias: {

'vue$': 'vue/dist/vue.esm.js',

'@': resolve('src'),

'scss_vars': '@/styles/vars.scss',

'excel': path.resolve(__dirname, '../src/excel'),//新增加一行

}

},

第五步:在页面中导出的时候调用outExe方法:

// 导出

outExe() {

this.$confirm('此操作将导出excel文件, 是否继续?', '提示', {

confirmButtonText: '确定',

cancelButtonText: '取消',

type: 'warning'

}).then(() => {

this.excelData = this.dataList //你要导出的数据list。

this.export2Excel()

}).catch(() => {

});

},

export2Excel() {

var that = this;

require.ensure([], () => {

const { export_json_to_excel } = require('../../excel/Export2Excel'); //这里必须使用绝对路径

const tHeader = ['id','withNum', 'userId', 'name','amount','status','amountIn','amountSuccess','createTime']; // 导出的表头名

const filterVal = ['id','withNum','userId', 'name','amount','status','amountIn','amountSuccess','createTime']; // 导出的表头字段名

const list = that.excelData;

const data = that.formatJson(filterVal, list);

let time1,time2 = '';

if(this.start !== '') {

time1 = that.moment(that.start).format('YYYY-MM-DD')

}

if(this.end !== '') {

time2 = that.moment(that.end).format('YYYY-MM-DD')

}

export_json_to_excel(tHeader, data, `[${time1}-${time2}]提现管理excel`);// 导出的表格名称,根据需要自己命名

})

},

formatJson(filterVal, jsonData) {

return jsonData.map(v => filterVal.map(j => v[j]))

}```

第六步:在页面中导入Excel时的调用:

// 导入

导入表格

importfxx(obj) {

let _this = this;

let inputDOM = this.$refs.inputer;

// 通过DOM取文件数据

this.file = event.currentTarget.files[0];

var rABS = false; //是否将文件读取为二进制字符串

var f = this.file;

var reader = new FileReader();

//if (!FileReader.prototype.readAsBinaryString) {

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]]);//outdata就是你想要的东西

this.da = [...outdata]

let arr = []

this.da.map(v => {

let obj = {}

obj.id = v.id

obj.status = v.status

arr.push(obj)

})

console.log(arr)

let para = {

//withList: JSON.stringify(this.da)

withList: arr

}

_this.$message({

message: '请耐心等待导入成功',

type: 'success'

});

withImport(para).then(res => {

window.location.reload()

})

}

reader.readAsArrayBuffer(f);

}

if(rABS) {

reader.readAsArrayBuffer(f);

} else {

reader.readAsBinaryString(f);

}

},

vue导出excel加一个进度条_vue 实现Excel 导入导出功能相关推荐

  1. vue导出excel加一个进度条_Vue实现在前端导出Excel

    安装依赖 进入项目文件夹,打开cmd或者在Webstorm中的Terminal中输入: npm install -S file-saver xlsx npm install -D script-loa ...

  2. vue导出excel加一个进度条_vue 实现excel导出功能

    最近Vue项目中用到了导出功能,在网上搜索了一番之后,决定采用Blob方式,这也是大家推荐的一种的方式,特此做下记录. 导出Excel功能 我是使用vue-cli3.0的框架,所以在安装过程中没有遇到 ...

  3. vue导出excel加一个进度条_vue导出excel遇到的问题解决方法

    本篇文章给大家带来的内容是关于vue导出excel遇到的问题解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 需求: Vue+element UI el-table下的导出当前 ...

  4. vue导出excel加一个进度条_vue项目中如何把数据导出成excel文件

    Loading... 关于vue中如何把数据导出成excel文件 ### 1. 安装依赖 ``` yarn add file-saver yarn add xlsx yarn add script-l ...

  5. vue导出excel加一个进度条_vue纯前端导出excel表格

    一.安装依赖 npm install file-saver --save npm install xlsx --save npm install script-loader --save-dev 二. ...

  6. vue导出excel加一个进度条_运用vue导出excel碰到的那些坑

    需求: Vue+element UI el-table下的导出当前一切数据到一个excel文件里. 先根据网上的要领,看看有哪些坑 准备工作: 1.装置依靠:yarn add xlsx file-sa ...

  7. vue导入excel进度条_Vue结合后台导入导出Excel问题详解

    最近Vue项目中用到了导入导出功能,在网上搜索了一番之后,决定采用Blob方式,这也是大家推荐的一种的方式,特此做下记录. 导出Excel功能 这里不谈别人怎么实现的,我是从后台生成了Excel流文件 ...

  8. vue导出excel加一个进度条_使用vue导出excel文件

    今天再开发中遇到一件事情,就是怎样用已有数据导出excel文件,网上有许多方法,有说用数据流的方式,https://www.cnblogs.com/yeqrblog/p/9758981.html,但是 ...

  9. vue aplayer 进度条无法拖动_为 Vue 的惰性加载加一个进度条

    // 每日前端夜话 第412篇// 正文共:1800 字// 预计阅读时间:8 分钟 简介 通常用 Vue.js 编写单页应用(SPA)时,当加载页面时,所有必需的资源(如 JavaScript 和 ...

最新文章

  1. Go 语言 2019 调查报告发布(内含 Go 语言图谱下载)
  2. LeetCode 1290 二进制链表转整数
  3. 判断浏览器是否为IE和版本
  4. 借助共享缓存redis实现分布式锁
  5. 通用性好的win2003序列号: (推荐先用这个里面的)
  6. java 启动xms_关于java:启动JVM时-Xms和-Xmx参数是什么?
  7. 模型调参(AutoML)— optuna
  8. Caffe傻瓜系列(9):训练和测试自己的图片
  9. java调用python机器学习模型的坑
  10. C++/测绘附和导线测量源码
  11. win10 LTSC 2019 激活
  12. 5万成员丨CSDN 大数据领域网红社区!
  13. 使用尾注添加参考文献并删除尾注中的横线和空格
  14. 王者勋章服务器维护中,【维护】4月1日官方维护公告(抢鲜服)
  15. 古人用计算机计算图片,人类最早的计算器《算表》如何帮助古人完成计算?
  16. SuperMap iServer服务器安全性最优做法
  17. web浮动框架 简易灯箱画廊设计
  18. 不用重做系统,教你如何把机械硬盘上面的系统迁移到固态硬盘!
  19. 定制 CFileDialog 的相关 ID
  20. 金庸感人的经典爱情对白

热门文章

  1. 导出微信公众号文章批量下载的小工具
  2. 美术集网校—入门学习水彩,刚需教程建议先码后看
  3. 正序 逆序写 java_C语言版和JAVA版 把一个字节正序(高位在前)转为逆序(低位在前) 和 逆序转为正序...
  4. Python编程从入门到实践 动手试一试 代码合集
  5. 文章同步多平台操作教程!
  6. D2D引擎与GDI\GDI+绘制效果对比
  7. 如何通过海外住宅代理预防Facebook账号出现关联的情况
  8. 推进企业使用正版软件工作部际联席会议第四次全体会议(2010)
  9. 王阳明没法帮你造出光刻机
  10. win7(主机)+win7虚拟机(vmware,被调试机)+windbg配置内核驱动调试