Vue+Element前端導(dǎo)入導(dǎo)出Excel

https://www.jqhtml.com/40007.html

1.1 業(yè)務(wù)場景

由前臺導(dǎo)入Excel表格嘉栓,獲取批量數(shù)據(jù)按傅。

根據(jù)一個數(shù)組導(dǎo)出Excel表格。

2 實現(xiàn)原理

2.1 引入工具庫

file-saver、xlsx衷敌、script-loader

npm install -S file-saver xlsx

npm install -D script-loader

2.2 導(dǎo)入Excel

2.2.1 Element 上傳控

|

<el-upload

class=``"upload-demo"

action=``""

:on-change=``"handleChange"

:on-exceed=``"handleExceed"

:on-remove=``"handleRemove"

:``file``-list=``"fileListUpload"

:limit=``"limitUpload"

accept=``"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"

:auto-upload=``"false"``>

<el-button size=``"small" type``=``"primary"``>點擊上傳<``/el-button``>

<div slot=``"tip" class=``"el-upload__tip"``>只 能 上 傳 xlsx / xls 文 件<``/div``>

<``/el-upload``>

|

limitUpload = 1限制只能上傳1個文件

accept為默認(rèn)打開的可上傳的文件格式

|

handleChange(``file``, fileList){

this.fileTemp = file``.raw

},

handleRemove(``file``,fileList){

this.fileTemp = null

},

|

fileTemp這里定義了一下變量,指向最新上傳的附件拓瞪,起始定義為null缴罗。

這里發(fā)現(xiàn)控件file.raw是我們要用的File類型。

2.2.2 導(dǎo)入判斷

|

if``(this.fileTemp){

if``((this.fileTemp.``type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'``) || (this.fileTemp.``type == 'application/vnd.ms-excel'``)){

this.importfxx(this.fileTemp)

} else {

this.$message({

type``:``'warning'``,

message:``'附件格式錯誤祭埂,請刪除后重新上傳面氓!'

})

}

} else {

this.$message({

type``:``'warning'``,

message:``'請上傳附件!'

})

}

|

2.2.3 導(dǎo)入函數(shù)

|

importfxx(obj) {

let _this = this;

// 通過DOM取文件數(shù)據(jù)

this.``file = obj

var rABS = false``; //``是否將文件讀取為二進(jìn)制字符串

var f = this.``file``;

var reader = new FileReader();

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

FileReader.prototype.readAsBinaryString = function``(f) {

var binary = ""``;

var rABS = false``; //``是否將文件讀取為二進(jìn)制字符串

var pt = this;

var wb; //``讀取完成的數(shù)據(jù)

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)), { //``手動轉(zhuǎn)化

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.code = v``[``'設(shè)備ID'``]

obj.``type = v``[``'設(shè)備型號'``]

arr.push(obj)

})

return arr

}

reader.readAsArrayBuffer(f);

}

if``(rABS) {

reader.readAsArrayBuffer(f);

} else {

reader.readAsBinaryString(f);

}

},

|

arr就是我們要的結(jié)果蛆橡,是一個數(shù)組舌界。每一個值是個對象,包含了code type兩個屬性泰演。

excel中格式為橫向 設(shè)備ID 和 設(shè)備型號呻拌。

2.3 導(dǎo)出Excel

2.3.1 引入JS文件

可參考下載地址:- github

將其中的2個JS文件放入到自己的工程中。

2.3.2 修改JS文件中地址

[圖片上傳失敗...(image-3a9707-1557024337892)]
打開Export2Excel.js睦焕,會出現(xiàn)如上圖所示藐握。由于本人將Blob.jsExport2Excel.js放到了同一級,這里引入是這樣的垃喊。

這幾個文件不支持import引入猾普,所以需要script-loader來將他們掛載到全局環(huán)境下。

2.3.3 導(dǎo)出函數(shù)

|

getExcel(res) {

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

const { export_json_to_excel } = require(``'../../introduce/Export2Excel.js'``)

const tHeader = [``'姓名'``, '年齡'``]

const filterVal = [``'name'``, 'age'``]

const list = res

const data = this.formatJson(filterVal, list)

export_json_to_excel(tHeader, data, '導(dǎo)出列表名稱'``)

})

},

formatJson(filterVal, jsonData) {

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

},

|

這里的引用請根據(jù)自己的層級關(guān)系和文件夾命名require('../../introduce/Export2Excel.js')

res為傳入的數(shù)組缔御,格式如:res =[{name:'小白',age:'18'},{name:'小黑',age:'16'}]

tHeader為導(dǎo)出Excel表頭名稱抬闷,導(dǎo)出列表名稱即為導(dǎo)出Excel名稱

下載的Excel位置根據(jù)瀏覽器設(shè)置的下載位置而定

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笤成,更是在濱河造成了極大的恐慌评架,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕泳,死亡現(xiàn)場離奇詭異纵诞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)培遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門浙芙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人籽腕,你說我怎么就攤上這事嗡呼。” “怎么了皇耗?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵南窗,是天一觀的道長。 經(jīng)常有香客問我郎楼,道長万伤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任呜袁,我火速辦了婚禮敌买,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阶界。我一直安慰自己虹钮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布荐操。 她就那樣靜靜地躺著芜抒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪托启。 梳的紋絲不亂的頭發(fā)上宅倒,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音屯耸,去河邊找鬼拐迁。 笑死,一個胖子當(dāng)著我的面吹牛疗绣,可吹牛的內(nèi)容都是我干的线召。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼多矮,長吁一口氣:“原來是場噩夢啊……” “哼缓淹!你這毒婦竟也來了哈打?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讯壶,失蹤者是張志新(化名)和其女友劉穎料仗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伏蚊,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡立轧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躏吊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氛改。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖比伏,靈堂內(nèi)的尸體忽然破棺而出胜卤,到底是詐尸還是另有隱情,我是刑警寧澤赁项,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布瑰艘,位于F島的核電站,受9級特大地震影響肤舞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜均蜜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一李剖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囤耳,春花似錦篙顺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椎麦,卻和暖如春宰僧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背观挎。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工琴儿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘁捷。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓造成,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雄嚣。 傳聞我的和親對象是個殘疾皇子晒屎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容