引入模块
import * as XLSX from ‘xlsx’
解析EXCEL文件
importfxx(obj) {
let _this = this;//将当前this重新指向,以防this改变
// 通过DOM取文件数据
this.file = obj;
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]], {
/** Default value for null/undefined values */
defval: ''//给defval赋值为空的字符串
}
); //outdata就是你想要的东西
this.da = [...outdata];
let arr = [];
this.da.map(v => {
arr.push(v);
});
_this.columnName = Object.keys(outdata[0])
let tableArr = []
for (let i = 0; i < _this.columnName.length; i++) {
let flag = _this.columnIdentify(_this.columnName[i]);
let o = {
prop: _this.columnName[i],
label: _this.columnName[i],
minWidth: '120',
align: 'center',
tooltip: true,
resizable: true,
identify: flag,
searchType: '',
typeOthers: [],
}
tableArr.push(o);
}
_this.importData = arr;
// console.log(arr);
_this.importColumn = tableArr
_this.columnSet = tableArr
//修改当前表格数据为导入的数据
//表格的数据表头字段与数据字段名要相同才能改变当前表格值
_this.excelData = outdata;
return arr;
};
reader.readAsArrayBuffer(f);
};
if (rABS) {
reader.readAsArrayBuffer(f);
} else {
reader.readAsBinaryString(f);
}
}
关键代码
outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], {defval: ‘’ })
新增 参数{defval:“”}代表默认值为空时,给定一个初始值"",在转json时列对应的数值为空串。