前端通过xlsx.js处理excel表格

803 阅读1分钟

需求:对excel表格中的字段进行处理,提取日期并新建一列

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <input type="file" id="fileid">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.2/xlsx.full.min.js" integrity="sha512-oCjkwxjURabnte5K4Zeoc+hZ/G5pQE7GI4DYl+0wl6WaJIkBjb9FvUIaMU3lOPoBMSRZZ7QrczpGQoBFAKKB1Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <script>
    // 读取本地excel文件
    function readWorkbookFromLocalFile(file, callback){
      var reader = new FileReader();
      reader.onload = function(e){
        var data = e.target.result;
        var workbook = XLSX.read(data, {type:'binary'});
        if(callback) callback(workbook);
      };
      reader.readAsBinaryString(file);
    }
    document.querySelector('#fileid').onchange = (e) => {
      const file = e.target.files[0];
      // console.log(file);
      const Name = file.name;
      readWorkbookFromLocalFile(file, (res) => {
        // console.log(res)
        // 以二进制流方式读取得到整份excel表格对象
        const workbook = res;
        let data = []; // 存储获取到的数据
        // 遍历每张工作表进行读取(这里默认只读取第一张表)
        for (const sheet in workbook.Sheets) {
          if (workbook.Sheets.hasOwnProperty(sheet)) {
            // 利用 sheet_to_json 方法将 excel 转成 json 数据
            data = data.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
            // break; // 如果只取第一张表,就取消注释这行
          }
        }
        // 过滤日期
        const finarr = data.map((v, i) => {
          const itmarr = v.摘要.match(/\d{4}[\-|\.]?\d{1,2}/g);
          console.log()
          if (itmarr && itmarr.length) {
            let ly = itmarr[itmarr.length-1];
            if (ly.length === 5) {
              const yy = ly.slice(0,4)
              let mm = ly.slice(4)
              mm = '0' + mm
              ly = yy + mm;
            }
            if (/\-|\./.test(ly)) {
              const nd = new Date(ly);
              const fyear = nd.getFullYear();
              let fm = nd.getMonth() + 1;
              if (fm <= 9) {
                fm = '0' + fm;
              }
              v.业务期间 = fyear.toString()+fm.toString();
            } else {
              v.业务期间 = ly
            };
          } else {
            v.业务期间 = "";
            console.log(v.摘要,i)
          }
          return v;
        })
        // console.log(finarr);
        var filename = Name; //文件名称
        var ws_name = "Sheet1"; //Excel第一个sheet的名称
        var wb = XLSX.utils.book_new();
        const ws = XLSX.utils.json_to_sheet(finarr);
        XLSX.utils.book_append_sheet(wb, ws, ws_name);  //将数据添加到工作薄
        XLSX.writeFile(wb, filename); //导出Excel
      })
    }
  </script>
</body>
</html>