1. js 解析Excle文件

1.1. index.html

  • https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.15.3/xlsx.full.min.js
  • https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.15.3/shim.min.js
  • format 转换格式

      <script src="/js_xls/shim.min.js" type="text/javascript"></script>
      <script src="/js_xls/jszip.js" type="text/javascript"></script>
      <script src="/js_xls/xlsx.full.min.js" type="text/javascript"></script>
    //...
      <div >
          <div>
                  <input type="hidden" name="format" value="html"/>
                  <p><input type="file" name="xlfile" id="xlf"/></p>
                          <br>
                  <b>选项:</b> 
                  <br>
                  worker是否可用 :<input type="checkbox" name="useworker" disabled checked>
                              <br>
                  二进制是否可用: <input type="checkbox" name="userabs" disabled checked>
          </div>
                  <div id="out">
    
                  </div>
                  <div id="htmlout">
    
                  </div>
      </div>
    
      //...
    <script type="application/javascript">
          /*jshint browser:true */
          /* eslint-env browser */
          /* eslint no-use-before-define:0 */
          /*global Uint8Array, Uint16Array, ArrayBuffer */
          /*global XLSX */
          var X = XLSX;
          var XW = {
              /* worker message */
              msg: 'xlsx',
              /* worker scripts */
              worker: '/js_xls/xlsxworker.js'
          };
    
          var global_wb;
    
          var process_wb = (function () {
              var OUT = document.getElementById('out');
              var HTMLOUT = document.getElementById('htmlout');
    
              var get_format = (function () {
                  var radios = document.getElementsByName("format");
                  return function () {
                      for (var i = 0; i < radios.length; ++i) if (radios[i].checked || radios.length === 1) return radios[i].value;
                  };
              })();
    
              var to_json = function to_json(workbook) {
                  var result = {};
                  workbook.SheetNames.forEach(function (sheetName) {
                      var roa = X.utils.sheet_to_json(workbook.Sheets[sheetName], {header: 1});
                      if (roa.length) result[sheetName] = roa;
                  });
                  return JSON.stringify(result, 2, 2);
              };
    
              var to_csv = function to_csv(workbook) {
                  var result = [];
                  workbook.SheetNames.forEach(function (sheetName) {
                      var csv = X.utils.sheet_to_csv(workbook.Sheets[sheetName]);
                      if (csv.length) {
                          result.push("SHEET: " + sheetName);
                          result.push("");
                          result.push(csv);
                      }
                  });
                  return result.join("\n");
              };
    
              var to_fmla = function to_fmla(workbook) {
                  var result = [];
                  workbook.SheetNames.forEach(function (sheetName) {
                      var formulae = X.utils.get_formulae(workbook.Sheets[sheetName]);
                      if (formulae.length) {
                          result.push("SHEET: " + sheetName);
                          result.push("");
                          result.push(formulae.join("\n"));
                      }
                  });
                  return result.join("\n");
              };
    
              var to_html = function to_html(workbook) {
                  HTMLOUT.innerHTML = "";
                  workbook.SheetNames.forEach(function (sheetName) {
                      var htmlstr = X.write(workbook, {sheet: sheetName, type: 'string', bookType: 'html'});
                      HTMLOUT.innerHTML += htmlstr;
                  });
                  return "";
              };
    
              return function process_wb(wb) {
                  global_wb = wb;
                  var output = "";
                  switch (get_format()) {
                      case "form":
                          output = to_fmla(wb);
                          break;
                      case "html":
                          output = to_html(wb);
                          break;
                      case "json":
                          output = to_json(wb);
                          break;
                      default:
                          output = to_csv(wb);
                  }
                  if (OUT.innerText === undefined) OUT.textContent = output;
                  else OUT.innerText = output;
                  if (typeof console !== 'undefined') console.log("output", new Date());
              };
          })();
    
          var setfmt = window.setfmt = function setfmt() {
              if (global_wb) process_wb(global_wb);
          };
    
          var b64it = window.b64it = (function () {
              var tarea = document.getElementById('b64data');
              return function b64it() {
                  if (typeof console !== 'undefined') console.log("onload", new Date());
                  var wb = X.read(tarea.value, {type: 'base64', WTF: false});
                  process_wb(wb);
              };
          })();
          (function () {
    
              var do_file = (function () {
                  var rABS = typeof FileReader !== "undefined" && (FileReader.prototype || {}).readAsBinaryString;
                  var domrabs = document.getElementsByName("userabs")[0];
                  if (!rABS) domrabs.disabled = !(domrabs.checked = false);
    
                  var use_worker = typeof Worker !== 'undefined';
                  var domwork = document.getElementsByName("useworker")[0];
                  if (!use_worker) domwork.disabled = !(domwork.checked = false);
    
                  var xw = function xw(data, cb) {
                      var worker = new Worker(XW.worker);
                      worker.onmessage = function (e) {
                          switch (e.data.t) {
                              case 'ready':
                                  break;
                              case 'e':
                                  console.error(e.data.d);
                                  break;
                              case XW.msg:
                                  cb(JSON.parse(e.data.d));
                                  break;
                          }
                      };
                      worker.postMessage({d: data, b: rABS ? 'binary' : 'array'});
                  };
    
                  return function do_file(files) {
                      rABS = domrabs.checked;
                      use_worker = domwork.checked;
                      var f = files[0];
                      var reader = new FileReader();
                      reader.onload = function (e) {
                          if (typeof console !== 'undefined') console.log("onload", new Date(), rABS, use_worker);
                          var data = e.target.result;
                          if (!rABS) data = new Uint8Array(data);
                          if (use_worker) xw(data, process_wb);
                          else process_wb(X.read(data, {type: rABS ? 'binary' : 'array'}));
                      };
                      if (rABS) reader.readAsBinaryString(f);
                      else reader.readAsArrayBuffer(f);
                  };
              })();
              var xlf = document.getElementById('xlf');
              if (!xlf.addEventListener) return;
              function handleFile(e) {
                  do_file(e.target.files);
                  //TODO ...上传
              }
              xlf.addEventListener('change', handleFile, false);
          })();
    </script>
    

    1.2. 使用worker xlsxworker.js

/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
importScripts('shim.min.js');
importScripts('xlsx.full.min.js');
postMessage({t:"ready"});

onmessage = function (evt) {
    var v;
    try {
        v = XLSX.read(evt.data.d, {type: evt.data.b});
        postMessage({t:"xlsx", d:JSON.stringify(v)});
    } catch(e) { postMessage({t:"e",d:e.stack||e}); }
};

results matching ""

    No results matching ""