因为需求需要读取excel的.xlsx和.xls文件来批量生成网页数据。找了网上的资料后发现js-xlsx可以实现。

首先安装依赖:

  1. $ npm install xlsx

HTML部分:

  1. <input type="file" ref="upload" accept=".xls,.xlsx" class="outputlist_upload">

引入:

  1. import XLSX from 'xlsx'

设置数据:

  1. data() {
  2. return {
  3. outputs: []
  4. }
  5. },

给input标签绑定监听事件:

  1. mounted() {
  2. this.$refs.upload.addEventListener('change', e => {//绑定监听表格导入事件
  3. this.readExcel(e);
  4. })
  5. },

读取excel文件信息并输出内容:

  1. methods: {
  2. readExcel(e) {//表格导入
  3. var that = this;
  4. const files = e.target.files;
  5. console.log(files);
  6. if(files.length<=0){//如果没有文件名
  7. return false;
  8. }else if(!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())){
  9. this.$Message.error('上传格式不正确,请上传xls或者xlsx格式');
  10. return false;
  11. }
  12.  
  13. const fileReader = new FileReader();
  14. fileReader.onload = (ev) => {
  15. try {
  16. const data = ev.target.result;
  17. const workbook = XLSX.read(data, {
  18. type: 'binary'
  19. });
  20. const wsname = workbook.SheetNames[0];//取第一张表
  21. const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]);//生成json表格内容
  22. console.log(ws);
  23. that.outputs = [];//清空接收数据
  24. for(var i= 0;i<ws.length;i++){
  25. var sheetData = {
  26. address: ws[i].addr,
  27. value: ws[i].value
  28. }
  29. that.outputs.push(sheetData);
  30. }
  31. this.$refs.upload.value = '';
  32.  
  33. } catch (e) {
  34.  
  35. return false;
  36. }
  37. };
  38. fileReader.readAsBinaryString(files[0]);
  39. }
  40. },

输出结果示例(outputs):

  1. [{
  2. addr:'abcadadadad',
  3. value:0.001
  4. },
  5. {
  6. addr:'abcadadadad',
  7. value:0.001
  8. }]

注意:

excel的第一行必须是对应的键值,比如:

addr
value
abcadadadad
0.001
abcadadadad
0.001