vue导出excel表格及合并单元格
这⾥写⾃定义⽬录标题
安装
npm install file-saver -S
npm install xlsx -S
npm install -D script-loader
导⼊两个⽂件
在src⽬录下新建⼀个vendor(可以是别的名字,但是导⼊时需注意,没事别改,⼤神请忽略)⽬录,⽬录下放新建两个⽂件Blob.js和Export2Excel.js
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 purl.eligrey/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 String.call(object).match(/^\[object\s(.*)\]$/)[1];
}
,FakeBlobBuilder=function BlobBuilder(){
this.data =[];
}
,FakeBlob=function Blob(data, type, encoding){
this.data = data;
this.size = data.length;
}
, FBB_proto = FakeBlobBuilder.prototype
, FB_proto = FakeBlob.prototype
, FileReaderSync = view.FileReaderSync
,
FileException=function(type){
}
, file_ex_codes =(
, 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 = ateObjectURL
,
real_revoke_object_URL = vokeObjectURL
,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(!ateObjectURL){
URL= view.URL=function(uri){
var
uri_info = ateElementNS("/1999/xhtml","a")
, uri_origin
;
uri_info.href = uri;
if(!("origin"in uri_info)){
if(uri_LowerCase()==="data:"){
igin =null;
}else{
uri_origin = uri.match(origin);
igin = uri_origin && uri_origin[1];
}
}
return uri_info;
};
}
var
type = pe
, data_URI_header
;
if(type ===null){
type ="application/octet-stream";
}
if(blob instanceof FakeBlob){
data_URI_header ="data:"+ type;
ding ==="base64"){
return data_URI_header +";base64,"+ blob.data;
}else ding ==="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);
}
};
if(object_URL.substring(0,5)!=="data:"&& real_revoke_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.adAsBinaryString(data));
}else{
// async FileReader won't work as BlobBuilder is sync
throw new FileException("NOT_READABLE_ERR");
}
}else if(data instanceof FakeBlob){
ding ==="base64"&& atob){
bb.push(atob(data.data));
}else ding ==="URI"){
bb.push(decodeURIComponent(data.data));
}else ding ==="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)));
}
};
Blob=function(type){
if(!arguments.length){
type =null;
}
return new FakeBlob(this.data.join(""), type,"raw");
};
String=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
,ding
);
};
String=function(){
return"[object Blob]";
};
FB_proto.close=function(){
FB_proto.close=function(){
this.size =0;
delete this.data;
};
return FakeBlobBuilder;
}(view));
view.Blob=function(blobParts, options){
var type = options ?(pe ||""):"";
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 = Blob(type);
if(!blob.slice && blob.webkitSlice){
blob.slice = blob.webkitSlice;
}
return blob;
};
var getPrototypeOf = PrototypeOf ||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');
// 注意,更改vendor⽬录此处导⼊需修改
require('script-loader!src/vendor/Blob');
require('script-loader!xlsx/in');
function generateArray(table){
var out =[];
var rows = table.querySelectorAll('tr');
typeof arrayvar 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 = Attribute('colspan');
var rowspan = Attribute('rowspan');
var cellValue = cell.innerText;
if(cellValue !==""&& cellValue ==+cellValue) cellValue =+cellValue;
/
/Skip ranges
ranges.forEach(function(range){
if(R>= range.s.r &&R<= && outRow.length >= range.s.c && outRow.length <= ){ for(var i =0; i <= - 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;
<R) =R;
<C) =C;
var cell ={v: data[R][C]};
if(cell.v ==null)continue;
var cell_ref =de_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']=de_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);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论