zoukankan      html  css  js  c++  java
  • SheetJS 入门案例

    js插件下载地址:

    https://github.com/SheetJS/js-xlsx

    https://github.com/SheetJS/js-xls 

    <!doctype html>
    <html>
        <head>
        <title>EXCEL转JSON</title>
        <meta charset="UTF-8" />
        <script type="text/javascript" src="http://mat1.gtimg.com/www/asset/lib/jquery/jquery/jquery-1.11.1.min.js"></script>
        <script type="text/javascript" src="/xls/js/xls.js"></script>
        <script type="text/javascript" src="/xls/js/jszip.js"></script>
        <script type="text/javascript" src="/xls/js/xlsx.js"></script>
        </head>
        <body>
        <div>
            <input type='file' onchange='readFile(event)'>
        </div>
        <div>
            <textarea id='debug' rows="50" cols="200"></textarea>
        </div>
        </body>
        <script>
            var excel = new Object();
            var sheet = new Object();
            var row = new Object();
            var cell = new Object();
            var x ;
            var wb;
            var output;
            var filename;
            var rows_a,rows_b;
            var cols_a,cols_b;
            var range = new Object();
            
            var readFile = function(event) {
                var read = new FileReader();
                var file = event.target.files[0];
                read.readAsBinaryString(file);
                filename = file.name;
                read.onload = function (event){    
                    var res = event.currentTarget.result;
                    var fileType = getFileType(filename).toString();
                    switch (fileType){
                        case '.xls':
                            x = XLS;
                            break;
                        case '.xlsx':
                            x = XLSX;
                            break;    
                        default:
                            x = null;
                    }
                    if(x){
                        wb = x.read(res, { type: 'binary' });
                        excel = getEXCEL(wb);
                        output = excel;
                    }else{
                        var info =  {error:'can not resolve file end with :'+fileType};
                        output = getOutput(info,'obj');
                    }
                    console.log(output);
                    out_json =  getOutput(output,'json');
                    $('#debug').val(out_json);
                    
                 };
            };
            
            function getEXCEL(wb){
                var Sheetnames = wb.SheetNames;
                var Sheets = new Object();
                var Sheet = new Object();
                
                Sheets = wb.Sheets;
                excel['sheetSize'] = Sheetnames.length.toString();
                excel['excelName'] = filename;
                excel["sheets"] = [];
                
                
                for(var i=0;i<Sheetnames.length;i++){
                    Sheet = Sheets[Sheetnames[i]];
                    range = getRanger(Sheet['!ref']);
                    rows_a = range.row;
                    cols_a = range.col;    
                    var m = 0;
                    sheet = new Object();
                    sheet['rowSize'] = rows_a.toString();
                    sheet['colSize'] = cols_a.toString();
                    sheet['sheetName'] = Sheetnames[i];
                    sheet["rows"] = [];
                    sheet["title"] = new Object();
                    for(var j=0;j<rows_a;j++){
                        row = new Object();
                        row['cells'] = [];
                        for(var m=0;m<cols_a;m++){
                            cell = new Object();
                            row['cells'].push(cell);
                        }
                        sheet["rows"].push(row);
                    }
                    for(k in Sheet){
                        if(isCell(k)){
                            range = getRanger(k);
                            rows_b = range.row.toString();
                            cols_b = range.col.toString();
                            row = sheet["rows"][rows_b-1];
                            row.val = null;
                            row.val = 'true';
                            cell = row['cells'][cols_b-1];
                            cell.value = null;
                            cell.value = Sheet[k].w;
                        }
                    }
                    for(t in sheet["rows"]){
                        var tit = sheet["rows"][t];
                        if(tit.val){
                            sheet["title"] = sheet["rows"][t];
                            break;
                        }
                    }
                    excel["sheets"].push(sheet);
                }
                return excel;
            }
            
            function isCell(str){
                var reg = /^[a-zA-Z]+[0-9]+$/;
                return reg.test(str);
            }
            
            function getRowNumber(key){
                var reg = /[0-9]+$/;
                var rownumber = reg.exec(key);
                return rownumber;
            }
            
            function getColLetter(key){
                var reg = /^[a-zA-Z]+/;
                var colletter = reg.exec(key);
                return colletter;
            }
            
            function getColNumber(key){
                var reg = /[a-zA-Z]+/;
                var colletter = reg.exec(key);
                return colletter;
            }
            
            function getOutput(obj,type){
                switch (type){
                    case 'json' :
                        return JSON.stringify(obj);
                        break;
                    case 'obj'  :
                        return obj;
                        break;
                    default :
                        return JSON.stringify(obj);
                }
            }
            
            function getRanger(ref){
                if(ref == undefined){
                    range.row = "0";
                    range.col = "0";
                }else{
                    var reg = /:[a-zA-Z]+[0-9]+/;
                    var reg2 = /^[a-zA-Z]+[0-9]+$/;
                    var pos = reg.exec(ref);
                    if(pos == undefined ){
                        pos = reg2.exec(ref);
                    }
                    var r = getRowNumber(pos).toString();
                    var codes = [];
                    var n;
                    var letter = getColNumber(pos).toString();
                    letter = letter.toLocaleLowerCase();
                    n = 0;
                    for(i in letter){
                        var code = letter[i].charCodeAt()-96;
                        codes[i] = code;
                        n++;
                    }
                    n--;
                    var mathstr = 0;
                    for(j in codes){
                        mathstr = 'Math.pow(26,'+n+')*'+codes[j] + '+'+ mathstr;
                        n--;
                    }
                    var    c = eval(mathstr).toString();
                    range.row = r;
                    range.col = c;
                }
                return range;
            }
            
            function getFileType(filepath){
                var reg = /.[a-zA-Z0-9]+$/;
                var filePostfix = reg.exec(filepath);
                return filePostfix;
            }
        </script>
    </html>
  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/caer/p/7067313.html
Copyright © 2011-2022 走看看