js中导入excel文件并转换为json格式的数据

选择的包为 xlsx一个 js 库

测试结合 Vue + ElementUI一起使用。

  • 先安装对应依赖
npm i xlsx --save
  • 引入 elementUI 后,使用 upload 上传组件来实现文件导入
<el-upload 
    ref="upload" 
    accept=".xls,.xlsx"
    action=""
    :auto-upload="false"
    :on-change="handleUpload" 
    :show-file-list="false">
    <el-button>EXCEL 导入</el-button>
</el-upload>
  • 编写读取 excel 文件的方法
<script>
  // 先导入 xlsx 
  import XLSX from 'xlsx'
  export default {
    methods: {
      readExcel (file) {
        const type = file.name.split('.')[1]
        if (!['xlsx', 'xls'].includes(type)) {
          this.$message({ type: 'warning', message: '文件格式错误!请重新选择' })
          return
        }

        const reader = new FileReader()
        const result = [] // 保存转化成功的 json格式
        reader.onload = e => {
          const data = e.target.result
          const wb = XLSX.read(data, {
            type: 'binary'
          })
          // 这里需要遍历,因为 excel 左下角有多张 sheet 表,如果只需要第一张表就不用遍历
          wb.SheetNames.forEach((sheetName) => {
              result.push({
                sheetName: sheetName,
                sheet: XLSX.utils.sheet_to_json(wb.Sheets[sheetName]) // 生成JSON表格内容
              })
          })
            
          // 处理 json 格式数据
          const test = []
          for (let item of result) {
            let time = null
            // excel导出json格式数据中有关时间的转换(因为导出json的时间格式为数字了,所以需要转换)
            if (typeof item['时间'] === 'number') {
              time = new Date(1900, 0, item['时间'] - 1).toLocaleDateString()
            }
          }
          console.log(test)
        }
        reader.readAsBinaryString(file.raw)
      },
      handleUpload (file) {
        this.readExcel(file)
      }
    }
  }
</script>
  • 上传文件改变调用方法
methods: {
    handleUpload (file) {
        this.readExcel(file) // 如果在这里接收导出的 json 数据的话,会拿不到预期结果
    }
}

导入excel文件为 json 格式
在这里插入图片描述
补充:
js 跳出循环使用 for of等

let test = []
for (let item of result) {
    for (let i of Object.keys(item)) {
      if (!formatCh.includes(i)) {
        this.$message({ type: 'warning', message: `表头 “${i}” 格式错误,请重新上传!` })
        return false
      }
    }
    // 数组对象替换对象的 key 值
    test.push({
      name: String(item.name),
      unit: item.unit
    })
  }
JavaScript导入excel转换json的方法有以下几种: 1. 使用第三方库js-xlsx,它可以将excel文件转换json格式,可以使用以下代码进行导入: ``` <script src="xlsx.full.min.js"></script> <script> var workbook = XLSX.readFile('test.xlsx'); var worksheet = workbook.Sheets[workbook.SheetNames[0]]; var data = XLSX.utils.sheet_to_json(worksheet); console.log(data); </script> ``` 2. 使用FileReader API,可以将excel文件读取为二进制字符串,然后再使用第三方库SheetJS将二进制字符串转换json格式,可以使用以下代码进行导入: ``` <input type="file" onchange="readExcelFile(this)"> <script src="xlsx.full.min.js"></script> <script> function readExcelFile(input) { var file = input.files[0]; var reader = new FileReader(); reader.onload = function(e) { var binaryString = e.target.result; var workbook = XLSX.read(binaryString, { type: 'binary' }); var worksheet = workbook.Sheets[workbook.SheetNames[0]]; var data = XLSX.utils.sheet_to_json(worksheet); console.log(data); }; reader.readAsBinaryString(file); } </script> ``` 3. 使用WebAssembly,可以使用SheetJS的web worker版本将excel文件转换json格式,可以使用以下代码进行导入: ``` <input type="file" onchange="readExcelFile(this)"> <script> function readExcelFile(input) { var file = input.files[0]; var worker = new Worker('worker.js'); worker.postMessage({ file: file }); worker.onmessage = function(e) { var data = e.data; console.log(data); }; } </script> ``` 其,worker.js代码如下: ``` importScripts('xlsx.full.min.js'); self.onmessage = function(e) { var file = e.data.file; var reader = new FileReaderSync(); var binaryString = reader.readAsBinaryString(file); var workbook = XLSX.read(binaryString, { type: 'binary' }); var worksheet = workbook.Sheets[workbook.SheetNames[0]]; var data = XLSX.utils.sheet_to_json(worksheet); self.postMessage(data); }; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值