自己寫的SHEETJS中需要轉EXCEL列的例子

 

 

<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>

    <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) {//導入

                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'
                        });
                    }
                    // 循環頁籤取數
                    console.log("頁籤數量:" + workbook.SheetNames.length);
                    var showHtml = "";

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

                        var first_sheet_name = workbook.SheetNames[sheetNum]; // 獲取工作簿中的工作表名字
                        console.log("workbook.SheetNames[0]" + first_sheet_name)
                        var address_of_cell = 'B1'; // 提供一個引用樣式(單元格下標)
                        var address_of_cell2 = 'B2'; // 提供一個引用樣式(單元格下標)

                        var worksheet = workbook.Sheets[first_sheet_name]; // 獲取對應的工作表對象
                        //				console.log(worksheet['!ref']) // 獲得該excel的內容範圍 例如: A1:F30


                            var scope = worksheet['!ref'];
                            if (scope == undefined) {
                                console.log("文件格式有誤!")
                                showHtml = showHtml + first_sheet_name + "頁籤解析有誤,請檢查格式是否正確! <br />"
                                break;
                            } else {
                                showHtml = showHtml + first_sheet_name + "頁籤已解析完成 <br />"
                            }
                            // js截取某個字符串後面的內容:
                            scope = scope.match(/:(\S*)/)[1]; // 獲取表格邊界 例如:F30
                            console.log("aaaa====" + scope);
                            var reg = /[A-Z]/g;
                            char_scope = scope.match(reg); //
                            console.log("====bbb=======" + char_scope);
                            console.log("====bbb=======" + char_scope[0]);

                            var col_loop = 0;
                            var col_loop_2 = 1;//--第二個字母 例如AE列的E
                            var col_z = 1;

                            if (char_scope.length == 1) {
                                col_loop = 1;
                            }
                            //---正常情況下不會大於ZZ列
                            if (char_scope.length > 1) {
                                col_loop = char_scope[0].charCodeAt(0) - 64;
                                col_loop2 = char_scope[1].charCodeAt(0) - 64;
                            }

                            col_z = col_loop * 26 + col_loop2;
                            console.log("=====col_z======" + col_z);


                            // 用正則去除字符串種的數字,獲取表格邊界字母值  例如:F
                            var scopeLetter = scope.replace(/\d+/g, '');
                            console.log("=====ssss======" + scopeLetter.length);
                            // 用正則將非數字的去除,獲取表格邊界行值  例如:30
                            var scopeNum = scope.replace(/[^0-9]/ig, "");
                            console.log("==行數====" + Number(scopeNum));

                        

                        var letters;

                            for (var y = 0; y < col_z; y++) {
                                if (y <26) {
                                    console.log(String.fromCharCode(64 + (parseInt(y / 26) + 1 + (y % 26))));
                                }
                                if (y >= 26) {

                                    letters = (String.fromCharCode(64 + (parseInt(y / 26))));
                                    var letter2 = String.fromCharCode((64 - (parseInt(y / 26)) + (parseInt(y / 26) + 1 + (y % 26))));
                                    console.log(letters + letter2);
                                }
                                      
                            }

                        
                    }
                    document.getElementById("demo").innerHTML = showHtml;
                };
                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;
            }
    </script>


</body>
</html>

 

主要是轉換 EXCEL 中的列,求對應的列數所對應的EXCEL列,例如 AA列對應的是27列,57列對應到BE列

留存作爲記錄

 

 



<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>
    <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) {//導入
                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'                        });                    }                    // 循環頁籤取數                    console.log("頁籤數量:" + workbook.SheetNames.length);                    var showHtml = "";
                    for (var sheetNum = 0; sheetNum < Number(workbook.SheetNames.length); sheetNum++) {
                        var first_sheet_name = workbook.SheetNames[sheetNum]; // 獲取工作簿中的工作表名字                        console.log("workbook.SheetNames[0]" + first_sheet_name)                        var address_of_cell = 'B1'; // 提供一個引用樣式(單元格下標)                        var address_of_cell2 = 'B2'; // 提供一個引用樣式(單元格下標)
                        var worksheet = workbook.Sheets[first_sheet_name]; // 獲取對應的工作表對象                        //console.log(worksheet['!ref']) // 獲得該excel的內容範圍 例如: A1:F30

                            var scope = worksheet['!ref'];                            if (scope == undefined) {                                console.log("文件格式有誤!")                                showHtml = showHtml + first_sheet_name + "頁籤解析有誤,請檢查格式是否正確! <br />"                                break;                            } else {                                showHtml = showHtml + first_sheet_name + "頁籤已解析完成 <br />"                            }                            // js截取某個字符串後面的內容:                            scope = scope.match(/:(\S*)/)[1]; // 獲取表格邊界 例如:F30                            console.log("aaaa====" + scope);                            var reg = /[A-Z]/g;                            char_scope = scope.match(reg); //                            console.log("====bbb=======" + char_scope);                            console.log("====bbb=======" + char_scope[0]);
                            var col_loop = 0;                            var col_loop_2 = 1;//--第二個字母 例如AE列的E                            var col_z = 1;
                            if (char_scope.length == 1) {                                col_loop = 1;                            }                            //---正常情況下不會大於ZZ列                            if (char_scope.length > 1) {                                col_loop = char_scope[0].charCodeAt(0) - 64;                                col_loop2 = char_scope[1].charCodeAt(0) - 64;                            }
                            col_z = col_loop * 26 + col_loop2;                            console.log("=====col_z======" + col_z);

                            // 用正則去除字符串種的數字,獲取表格邊界字母值  例如:F                            var scopeLetter = scope.replace(/\d+/g, '');                            console.log("=====ssss======" + scopeLetter.length);                            // 用正則將非數字的去除,獲取表格邊界行值  例如:30                            var scopeNum = scope.replace(/[^0-9]/ig, "");                            console.log("==行數====" + Number(scopeNum));
                        
                        var letters;
                            for (var y = 0; y < col_z; y++) {                                if (y <26) {                                    console.log(String.fromCharCode(64 + (parseInt(y / 26) + 1 + (y % 26))));                                }                                if (y >= 26) {
                                    letters = (String.fromCharCode(64 + (parseInt(y / 26))));                                    var letter2 = String.fromCharCode((64 - (parseInt(y / 26)) + (parseInt(y / 26) + 1 + (y % 26))));                                    console.log(letters + letter2);                                }                                                                  }
                                            }                    document.getElementById("demo").innerHTML = showHtml;                };                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;            }    </script>

</body></html>

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