zoukankan      html  css  js  c++  java
  • 使用xlsx实现Excel导入

    需求

    • 实现在系统里批量导入数据,通过上传一个excel文件,前端将文件处理为json数据发送给后端。(最好与后端定义好上传的文件模板,方便处理数据)

    实现

    代码

    • 实现导入Excel方法
    function importsExcel(file: any) {
      //使用promise导入
      return new Promise((resolve, reject) => {
        // 获取上传的文件对象
        const { files } = file.target; //获取里面的所有文件
        // 通过FileReader对象读取文件
        const fileReader = new FileReader();
    
        fileReader.onload = (event) => {
          //异步操作  excel文件加载完成以后触发
          try {
            const { result } = event.target as any;
            // 以二进制流方式读取得到整份excel表格对象
            const workbook = XLSX.read(result, { type: "binary" });
            let data: any = []; // 存储获取到的数据
            // 遍历每张工作表进行读取
            for (const sheet in workbook.Sheets) {
              if (workbook.Sheets.hasOwnProperty(sheet)) {
                data = data.concat(
                  // 将工作表转换为json数据
                  XLSX.utils.sheet_to_json(workbook.Sheets[sheet])
                );
              }
            }
            resolve(data); //导出数据
          } catch (e) {
            // 这里可以抛出文件类型错误不正确的相关提示
            reject("失败"); //导出失败
          }
        };
        // 以二进制方式打开文件
        fileReader.readAsBinaryString(files[0]);
      });
    }
    
    • 页面功能调用
        <input
            type="file"
            accept=".xls,.xlsx"
            onChange={(e) => {
              importsExcel(e).then(
                function (data) {
                  console.log(data);
                },
                function (data) {
                  console.log(data);
                }
              );
            }}
          />
    
  • 相关阅读:
    中间件的应用
    报表和日志
    Cookie和Session
    表单的应用
    静态资源和Ajax请求
    导入导出EXEC
    DATEDIFF() 函数返回两个日期之间的时间
    解决echarts柱形图X轴标题显示不全的问题
    Sqlserver 游标 慢
    sql语句根据日期查询,本周,本月,本年,今日相关统计
  • 原文地址:https://www.cnblogs.com/shellon/p/15575962.html
Copyright © 2011-2022 走看看