在使用vue的xlsx解析文件时,由于我的excel文件没有标题行,第一行就是内容了,在使用默认解析方法时,将第一行的内容解析成了列名,查看文档后,返现在使用XLSX.utils.sheet_to_json方法时,要增加参数{header:1}来取消标题列.
xlsx官方文档:https://www.npmjs.com/package/xlsx
下面是我的关于文件解析的代码:
<el-form-item label="excel文件" label-width="110px">
<el-upload ref="upload" action=""
multiple
:on-change="changeFileList"
:on-remove="changeFileList"
:auto-upload="false"
:http-request="httpFile"
:file-list="fileList"
accept=".xlsx">
<el-button size="small" type="primary" >点击上传</el-button>
<div slot="tip" class="el-upload__tip">
格式说明:
</div>
</el-upload>
</el-form-item>
data() {
return {
fileList:[],
fullscreenLoading:false,
fileList:[],
updateFileList:[],
xlsxDate:[],
}
}
method(){
//更改文件文件的方法,在文件上传按钮中使用:on-change方法属性绑定,file参数是更改的文件,fileList是已选择附件的集合.
changeFileList(file, fileList){
this.fullscreenLoading = true;
this.xlsxDate=[];
this.updateFileList = fileList;
//重新遍历所有的文件进行解析
var j;
var len;
for(j = 0,len=this.updateFileList.length; j < len; j++) {
this.file2Xce(this.updateFileList[j]).then(tabJson => {
if (tabJson && tabJson.length > 0) {
this.xlsxJson = tabJson;
var i;
var leng;
for(i = 0,leng=this.xlsxJson[0].sheet.length; i < leng; i++) {
this.xlsxDate.push(this.xlsxJson[0].sheet[i]);
}
}
})
};
console.log(this.updateFileList);
setTimeout(() => {
this.fullscreenLoading = false;
}, 2000);
},
//解析xlsx文件
file2Xce(file) {
return new Promise(function(resolve, reject) {
const reader = new FileReader()
reader.onload = function(e) {
const data = e.target.result
this.wb = XLSX.read(data, {
type: 'binary'
})
const result = []
this.wb.SheetNames.forEach((sheetName) => {
result.push({
sheetName: sheetName,
//添加{header:1},表示第一行不为标题,直接按内容解析为json.
sheet: XLSX.utils.sheet_to_json(this.wb.Sheets[sheetName],{header:1})
})
})
resolve(result)
}
reader.readAsBinaryString(file.raw)
})
}
}
如果是有多行标题的情况,可以在解析前,删除多余的标题行.