vue 는 js-xlsx 플러그 인 을 사용 하여 Excel 표 데 이 터 를 가 져 옵 니 다.
2049 단어 그 해 에 만난 구덩이vue 기초 비망록
import Vue from 'vue'
import XLSX from 'xlsx'
/**
* ex json
* Vue ,
* template $importf
* this.$importf
* :
* this.$importf(id) json
*/
const importf = (id) => {
let promise = new Promise((resolve, reject) => {
//
// FileReader 4 :
// 1.readAsArrayBuffer(file) : ArrayBuffer。
// 2.readAsBinaryString(file) :
// 3.readAsDataURL(file) : Data URL
// 4.readAsText(file, [encoding]) : ,encoding 'UTF-8'
var wb //
var rABS = false //
let obj = document.getElementById(id)
if (!obj.files) {
return
}
var f = obj.files[0]
var reader = new FileReader()
if (rABS) {
reader.readAsArrayBuffer(f)
} else {
reader.readAsBinaryString(f)
}
var arr = []
reader.onload = function (e) {
var data = e.target.result
if (rABS) {
wb = XLSX.read(btoa(fixdata(data)), { //
type: 'base64'
})
} else {
wb = XLSX.read(data, {
type: 'binary'
})
}
// wb.SheetNames[0] Sheets Sheet
// wb.Sheets[Sheet ] Sheet
arr = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]])
// console.log(JSON.stringify(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]])))
// console.log(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]))
// return XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]])
resolve(arr)
}
reader.onerror = function (e) {
reject(arr)
}
})
return promise
}
const fixdata = (data) => { // BinaryString
var o = ''
var l = 0
var w = 10240
for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)))
o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)))
return o
}
Vue.prototype.$importf = importf