美文网首页
vue ElementUI使用js-xlsx导入数据

vue ElementUI使用js-xlsx导入数据

作者: 小明同学喜欢熊 | 来源:发表于2019-07-07 18:31 被阅读0次

最近有一个项目要从excel表格导入数据,于是上网查找了一下,找到了js-xlsx插件。js-xlsx官网:https://github.com/SheetJS/js-xlsx

<template>
  <div class="index">
    <!--     
        <input type="file" @change="importFile(this)"/>
        使用原始input标签
    -->
    <el-upload 
      ref="upload"
      action="/"
      :show-file-list="false"
      :on-change="importExcel"
      :auto-upload="false">
      <el-button
        icon="el-icon-upload"
        size="small"
        type="primary">
        上传文件
      </el-button>
    </el-upload>
  </div>
</template>

对于以上的一些属性有不懂的在Element官网有对应的解释说明:
https://element.eleme.io/#/zh-CN/component/upload

  • JavaScript 代码
import XLSX from 'xlsx'
export default {
  name: 'App',
  data(){
    return{
    }
  },
  methods:{
    importExcel(file) {
        // let file = file.files[0] // 使用原始的input方法需要加上这一步
        const types = file.name.split('.')[1]
        const fileType = ['xlsx', 'xlc', 'xlm', 'xls', 'xlt', 'xlw', 'csv'].some(item => item === types)
        if (!fileType) {
          this.$message('格式错误!请重新选择')
          return
        }
        this.file2Xce(file).then(tabJson => {
          if (tabJson && tabJson.length > 0) {
            this.xlsxJson = tabJson
            console.log('数据:', this.xlsxJson)
            // xlsxJson就是解析出来的json数据,数据格式如下
            // [
            //   {
            //     sheetName: sheet1
            //     sheet: sheetData
            //   }
            // ]
        }
      })
    },
    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,
              sheet: XLSX.utils.sheet_to_json(this.wb.Sheets[sheetName])
            })
          })
          resolve(result)
        }
        reader.readAsBinaryString(file.raw)
        // reader.readAsBinaryString(file)     //使用原始input方法
      })
    }
  },
}

效果图如下

效果图

相关文章

网友评论

      本文标题:vue ElementUI使用js-xlsx导入数据

      本文链接:https://www.haomeiwen.com/subject/uhcihctx.html