我自己做的基於SheetJs做的例子

基本思路:

通過<input type="file" >獲取選中的本地excel文件流。再通過 FileReader 對象讀取文件,然後使用FileReader.onload 事件監聽操作

 

FileReader僅用於以安全的方式從用戶(遠程)系統讀取文件內容 它不能用於從文件系統中按路徑名簡單地讀取文件。 要在JavaScript中按路徑名讀取文件,應使用標準Ajax解決方案進行服務器端文件讀取,如果讀取跨域,則使用CORS權限。 

 

 

可以處理對應列,跳過行頭,生成JSON

 

<html>
<head>

    <title>JS-XLSX Live Demo</title>

    <style>
        #drop {
            border: 2px dashed #bbb;
            -moz-border-radius: 5px;
            -webkit-border-radius: 5px;
            border-radius: 5px;
            padding: 25px;
            text-align: center;
            font: 20pt bold,"Vollkorn";
            color: #bbb
        }

        #b64data {
            width: 100%;
        }

        a {
            text-decoration: none
        }

        button {
        }
    </style>

    <script type="text/javascript" src="dist/xlsx.full.min.js"></script>
    <script type="text/javascript" src="dist/xlsx.core.min.js"></script>

    <script type="text/javascript" src="dist/jquery.min.js"></script>

</head>

<body>
<pre>
<input type="file" name="xlfile" id="xlf" onchange="importf(this)">
</pre>
<pre id="out"></pre>
    <br>
    <div id="demo">


      </div>
    <div>
        <textarea id='debug' rows="30" cols="100"></textarea>

    </div>




    <script>
            /*
                  FileReader共有4種讀取方法:
                  1.readAsArrayBuffer(file):將文件讀取爲ArrayBuffer。
                  2.readAsBinaryString(file):將文件讀取爲二進制字符串
                  3.readAsDataURL(file):將文件讀取爲Data URL
                  4.readAsText(file, [encoding]):將文件讀取爲文本,encoding缺省值爲'UTF-8'
                               */
            var workbook;//讀取完成的數據
            var rABS = false; //是否將文件讀取爲二進制字符串

            



        function importf(obj) {//導入


            const headers = ["A", "B", "C", "D", "E","F"]; //針對G0107中的表樣,做的6列
            const ranges = 4;                              //針對G0107中的表樣,跳過的表頭


                if (!obj.files) {
                    return;
                }
                var f = obj.files[0];
                var reader = new FileReader();
                reader.onload = function (e) {
                    var data = e.target.result;
                    if (rABS) {
                        workbook = XLSX.read(btoa(fixdata(data)), {//手動轉化
                            type: 'base64'
                        });
                    } else {
                        workbook = XLSX.read(data, {
                            type: 'binary'
                        });
                    }
                    var out_json;

                    for (var sheetNum = 0; sheetNum < Number(workbook.SheetNames.length); sheetNum++) {

                        var first_sheet_name = workbook.SheetNames[sheetNum];

                        //var json = XLSX.utils.sheet_to_json(workbook.Sheets[first_sheet_name]);
                        var json = XLSX.utils.sheet_to_json(workbook.Sheets[first_sheet_name],
                            {  header: headers, raw: true, defval:''}
                        );

                        debugger;
                        //console.log(json);

                        out_json = getOutput(json, 'json');
                        $('#debug').val(out_json);


                    }
                    
                };
                if (rABS) {
                    reader.readAsArrayBuffer(f);
                } else {
                    reader.readAsBinaryString(f);
                }
            }

            function fixdata(data) { //文件流轉BinaryString
                var o = "",
                    l = 0,
                    w = 10240;
                for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
                o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
                return o;
        }


        function getOutput(obj, type) {
            switch (type) {
                case 'json':
                    return JSON.stringify(obj);
                    break;
                case 'obj':
                    return obj;
                    break;
                default:
                    return JSON.stringify(obj);
            }
        }

    </script>


</body>
</html>

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章