vue读取excel表格内容

vue读取excel文件内容

1. 安装第三方工具 xlsx

npm install xlsx

2. 在vue组件中引入xlsx

import * as xlsx from 'xlsx'

3. 使用xlsx读取excel文件

html部分

<el-upload action="#" :auto-upload="false" :on-change="handleFileSelect" accept=".xls,.xlsx">
  <el-button type="primary">上传excel(使用第二行的英文表头)</el-button>
</el-upload>
<el-table ref="table" :data="tableData">
  <el-table-column label="籍贯" prop="province"></el-table-column>
  <el-table-column label="姓名">
    <template slot-scope="scope">
      {{ scope.row['person.name'] }}
    </template>
  </el-table-column>
  <el-table-column label="性别" prop="gender"></el-table-column>
  <el-table-column label="年龄" prop="age"></el-table-column>
</el-table>

js部分

handleFileSelect(event) {
  const file = event.raw;
  const reader = new FileReader();
  // 处理文件内容
  reader.onload = (e) => {
    const data = new Uint8Array(e.target.result);
    const workbook = xlsx.read(data, { type: 'array' });

    const worksheet = workbook.Sheets[workbook.SheetNames[0]];
    const jsonData = xlsx.utils.sheet_to_json(worksheet, { header: 1 });

    // 提取文件内容
    let headers = jsonData[1];
    jsonData.slice(2).forEach(row => {
      const rowData = row.reduce((accumulator, item, index) => {
        let column = headers[index]
        accumulator[column] = item;
        return accumulator
      }, {})
      this.tableData.push(rowData)
    })
  };
  // 读取文件内容
  reader.readAsArrayBuffer(file);
},

js代码详细说明

这段代码用于处理文件选择事件,具体来说,它处理的是一个Excel文件,并将其内容转换为JSON格式的数据。以下是代码的详细解释:

  1. 函数定义: handleFileSelect(event) 是一个函数,它接收一个 event 参数,该参数通常由文件选择相关的事件(如 元素的 change 事件)传递。
  2. 获取文件对象: const file = event.raw;这行代码从事件对象中获取原始的文件对象。在某些框架中,如Vue,可能需要使用 event.target.files[0] 来获取文件对象。
  3. 创建 FileReader 对象: const reader = new FileReader(); 创建一个新的 FileReader对象,它用于读取文件内容。
  4. 文件读取完成事件: reader.onload = (e) => { … };这行代码定义了一个事件监听器,它会在文件读取操作完成时触发。
  5. 读取文件为 Uint8Array: const data = new Uint8Array(e.target.result); 在onload 事件的处理函数中,使用 e.target.result 获取读取操作的结果,它是一个 ArrayBuffer对象。然后,将其转换为 Uint8Array 类型,这是一组整数的集合,用于后续的数据处理。
  6. 解析Excel文件: const workbook = xlsx.read(data, { type: ‘array’ }); 使用xlsx 库的 read 函数解析 Uint8Array 数据,将其转换为一个表示Excel工作簿的对象。{ type: ‘array’ } 选项指定了输入数据的类型。
  7. 提取工作表:
    const worksheet = workbook.Sheets[workbook.SheetNames[0]];这行代码获取工作簿中第一个工作表的数据。
  8. 转换工作表为JSON: const jsonData = xlsx.utils.sheet_to_json(worksheet, { header: 1 }); 使用 xlsx 库的 sheet_to_json 函数将工作表数据转换为JSON数组。{ header: 1 } 选项指定第二行(索引为1)作为列标题。
  9. 提取列标题: let headers = jsonData[1]; 这行代码假设第一行是列标题,并将其提取出来。
  10. 遍历数据行: jsonData.slice(2).forEach(row => { … });这行代码从第三行(索引为2,因为前两行分别是列标题和表头)开始遍历JSON数组中的每一行数据。
  11. 转换行数据为对象: 在 forEach 循环中,使用 reduce 函数将每一行的数据转换为一个对象。列标题 headers用作对象的键,而行数据中的值用作对象的值。
  12. 添加数据到数组: this.tableData.push(rowData) 将转换后的对象添加到 this.tableData数组中。这里假设 this.tableData 是组件的一个数据属性,用于存储处理后的数据。
  13. 读取文件内容: reader.readAsArrayBuffer(file); 最后,调用 FileReader 的readAsArrayBuffer 方法开始异步读取文件内容。

效果

excel表格内容

在这里插入图片描述

vue读取后的效果

在这里插入图片描述

  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤实现 Vue Excel 表格批量新增: 1. 首先,你需要安装并导入 `xlsx` 模块,它可以让你读取和写入 Excel 文件。你可以使用如下代码安装它: ``` npm install xlsx ``` 2. 在 Vue 组件中,你需要定义一个包含表格数据的数组。例如: ``` data() { return { tableData: [ { id: 1, name: 'John', age: 30 }, { id: 2, name: 'Alice', age: 25 } ] } } ``` 3. 在模板中,你需要添加一个文件上传组件和一个按钮,用于触发上传事件。例如: ``` <template> <div> <input type="file" ref="fileInput" @change="uploadFile"> <button @click="addRows">批量新增</button> <table> <thead> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> </tr> </thead> <tbody> <tr v-for="item in tableData" :key="item.id"> <td>{{ item.id }}</td> <td>{{ item.name }}</td> <td>{{ item.age }}</td> </tr> </tbody> </table> </div> </template> ``` 4. 在组件的方法中,你需要添加两个函数:`uploadFile` 和 `addRows`。`uploadFile` 函数用于读取上传的 Excel 文件,`addRows` 函数用于将文件中的数据添加到表格数据数组中。例如: ``` methods: { uploadFile() { const file = this.$refs.fileInput.files[0] const reader = new FileReader() reader.onload = (e) => { const data = new Uint8Array(e.target.result) const workbook = XLSX.read(data, { type: 'array' }) const sheetName = workbook.SheetNames[0] const worksheet = workbook.Sheets[sheetName] const json = XLSX.utils.sheet_to_json(worksheet) this.tableData = json } reader.readAsArrayBuffer(file) }, addRows() { // 这里可以处理数据并添加到 tableData 数组中 } } ``` 在 `uploadFile` 函数中,我们首先获取上传的文件,然后使用 `FileReader` 对象读取文件内容。一旦读取完成,我们使用 `xlsx` 模块将数据转换成 JSON 格式。最后,我们将 JSON 数据添加到 `tableData` 数组中,从而更新表格。 在 `addRows` 函数中,你可以处理表格数据并将处理后的数据添加到 `tableData` 数组中。例如,你可以使用 `Array.push()` 方法将新行添加到数组中。 这样,你就可以实现 Vue Excel 表格批量新增了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值