vue解析excel,csv为JSON记录

1、官网文档

读取excel文件  Reading Files | SheetJS Community Edition

读取csv文件  Documentation - Papa Parse

编码解析GitHub - aadsm/jschardet:JavaScript 中的字符编码自动检测(python's chardet 的端口)

2、安装xlsx、csv、编码解析

npm i xlsx;

npm i papaparse;

npm i jschardet;

 3、引入解析插件

import Xlsx from 'xlsx';

import Papa from 'papaparse';

4、解析excel为JSON 

uploadFile(file) {
      // 拿到所导入文件的名字(file是input标签拿到的文件信息)
      let fileName = file
      //定义reader,存放文件读取方法
      let reader = new FileReader()
      //启动函数
      reader.readAsBinaryString(fileName)
      //onload在文件被读取时自动触发
      reader.onload = e => {
        try {
          //workbook存放excel的所有基本信息
          const workbook = Xlsx.read(e.target.result, {
            type: 'binary',
            cellDates: true
          })
          //定义sheetList中存放excel表格的sheet表,就是最下方的tab
          let sheet = workbook.SheetNames[0] // 工作表名称(选第一个sheet)
          let worksheet = workbook.Sheets[sheet] // 只能通过工作表名称来获取指定工作表
          let results = Xlsx.utils.sheet_to_json(worksheet, { header: 1, range: 0 }) // Xlsx解析工作表信息 header: 1 含表头  range: 0 从第一行开始读取不设置从有实际内容开始读取
          this.fieldDateList = results // 这里results就是我们要拿到的信息
          this.$emit("fieldDateListFun", this.fieldDateList);
        } catch (error) {
          this.$message.warning('文件类型不正确!')
        }
      }
},

 5、解析csv文件为JSON

// 上传文件解析csv
importCsv(file) {
      let selectedFile = file;
      var reader = new FileReader();
      reader.readAsDataURL(selectedFile);
      reader.onload = evt => {
        // 检查编码,支持不同语言
        let encoding = this.checkEncoding(evt.target.result);
        // 将csv转换成二维数组
        Papa.parse(selectedFile, {
          encoding: encoding,
          complete: res => {
            // UTF8 \r\n与\n混用时有可能会出问题
            let results = res.data;
            if (results[results.length - 1] === "") {
              //去除最后的空行
              results.pop();
            }
            this.fieldDateList = results
            this.$emit("fieldDateListFun", this.fieldDateList);
          }
        });
      };
},
// 编码转换
checkEncoding(base64Str) {
   // 这种方式得到的是一种二进制串
   let str = atob(base64Str.split(';base64,')[1])
   // 要用二进制格式
   const jschardet = require("jschardet");
   let encoding = jschardet.detect(str)
   encoding = encoding.encoding
   if (encoding === 'windows-1252') {
     encoding = 'ANSI'
   }
   return encoding
},

6、结合若依FileUpload使用,能不大改就不大改

// 上传结束处理
    uploadedSuccessfully() {
      if (this.number > 0 && this.uploadList.length === this.number) {
        this.fileList = this.fileList.concat(this.uploadList);
        this.uploadList = [];
        this.number = 0;
        this.$emit("input", this.listToString(this.fileList));
        this.$modal.closeLoading();
        // 上传结束解析文件
        if (this.fieldDate) {
          switch (this.file.name.split('.')[this.file.name.split('.').length - 1]) {
            case "csv":
              this.importCsv(this.file)
              break;
            case "CSV":
              this.importCsv(this.file)
              break;
            case "xlsx":
              this.uploadFile(this.file)
              break;
            case "xls":
              this.uploadFile(this.file)
              break;
          }
        }
      }
    },

7、结合input框实时读取第n行内容

// 读取某行表格 this.fileListNow为4、5拿到的解析数组,tempNum为第n行
fileListNowFun(tempNum, ev = this.fileListNow) {
      // 转换为后端数据
      let fileListOld = []
      // 读取指定行数的内容
      if (ev.length !== 0 && tempNum <= ev.length) {
        // 单行表头
        let tempFileListOld = ev[tempNum - 1]
        if (tempFileListOld.length !== 0) {
          // 字符串不为空时,转换字段
          tempFileListOld.map((v, i, a) => {
            if (!!v) {
              // 转换字段
              fileListOld.push({
                tempOne:v
              })
            }
          })
        }
      }
      // 没有列表时页面存在至少一条数据
      if (fileListOld.length === 0) {
        fileListOld = [{
          temp:''
        }]
      }
      this.$emit("fileListNewFun", fileListOld)
}

Vue解析Excel表格可以通过以下步骤实现。首先,你需要使用Excel解析库,比如XLSX,来读取Excel文件并将其转换为JavaScript对象。你可以使用以下代码来实现解析: ```javascript const workbook = XLSX.read(file, { type: 'array' }); const sheet = workbook.Sheets\[workbook.SheetNames\[0\]\]; const data = XLSX.utils.sheet_to_json(sheet, { header: 1 }); ``` 其中,`file`是你上传的Excel文件。这段代码将Excel文件读取为一个Workbook对象,然后从中获取第一个Sheet,并将其转换为JSON格式的数据。 接下来,你可以将解析出来的数据在Vue组件中进行展示。你可以使用Vue的Table组件或其他适合的组件来展示数据。例如,你可以将解析出来的数据存储在Vue的data属性中,并在模板中使用v-for指令来遍历数据并展示在表格中。以下是一个简单的示例: ```html <template> <table> <thead> <tr> <th v-for="header in headers" :key="header">{{ header }}</th> </tr> </thead> <tbody> <tr v-for="row in data" :key="row"> <td v-for="cell in row" :key="cell">{{ cell }}</td> </tr> </tbody> </table> </template> <script> export default { data() { return { data: \[\], // 解析出来的数据 headers: \[\] // 表头 }; }, methods: { parseExcel(file) { const workbook = XLSX.read(file, { type: 'array' }); const sheet = workbook.Sheets\[workbook.SheetNames\[0\]\]; this.data = XLSX.utils.sheet_to_json(sheet, { header: 1 }); this.headers = this.data.shift(); // 将第一行作为表头并从数据中移除 } } }; </script> ``` 在这个示例中,我们使用了一个Table组件来展示解析出来的数据。通过遍历数据的行和列,我们将数据动态地展示在表格中。 请注意,这只是一个简单的示例,你可以根据你的需求进行修改和扩展。同时,你需要在Vue组件中引入XLSX库,并确保你已经正确安装了相关的依赖。 #### 引用[.reference_title] - *1* *2* *3* [如何使用Vue实现Excel表格数据的导入,在前端实现Excel表格文件的上传和解析,并使用Table组件将解析出来的...](https://blog.csdn.net/qq_43320293/article/details/130542684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值