SheetJS 入门案例___及自己的后续研究_一定要看官方材料

来源于 https://www.cnblogs.com/caer/p/7067313.html

 

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

  

 

根据上面的代码我自己调试,中间发现一些自己认为要记录的东西:

SHEETJS自己解析数据后的 SHEET 对象格式如最下面的

F7: {t: 'n', v: 222, w: '222'}

还有一种

B24: {t: 's', v: '2.16教育', r: '<t>2.16教育</t>', h: '2.16教育', w: '2.16教育'}

B25: {t: 's', v: '2.17卫生和社会工作', r: '<r><rPr><sz val="10"/><rFont val="宋体"/><charset va…="宋体"/><charset val="134"/></rPr><t>和社会工作</t></r>', h: '<span style="font-size:10pt;">2.17卫生</span><span style="font-size:10pt;">和社会工作</span>', w: '2.17卫生和社会工作'}

B26: {t: 's', v: '2.18文化、体育和娱乐业', r: '<t>2.18文化、体育和娱乐业</t>', h: '2.18文化、体育和娱乐业', w: '2.18文化、体育和娱乐业'}B27: {t: 's', v: '2.19公共管理、社会保障和社会组织', r: '<t>2.19公共管理、社会保障和社会组织</t>', h: '2.19公共管理、社会保障和社会组织', w: '2.19公共管理、社会保障和社会组织'}

 

估摸着

t 表示类型,其中 s 表示是字符串 n 表示数字

v表示值 value 

w: 表示 word ??

于是我把内容粘贴下来了

    

 Sheet[k].w
'第VII部分: 贷款分行业情况表'
sheet[k].w
VM181:1 Uncaught TypeError: Cannot read properties of undefined (reading 'w')
    at eval (eval at getEXCEL (demo5.html:89:25), <anonymous>:1:10)
    at getEXCEL (demo5.html:113:25)
    at FileReader.read.onload (demo5.html:58:29)
eval @ VM181:1
getEXCEL @ demo5.html:113
read.onload @ demo5.html:58
load (async)
readFile @ demo5.html:43
onchange @ demo5.html:18
Sheet
{!ref: 'A1:F44', A1: {…}, A2: {…}, C2: {…}, A3: {…}, …}!margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, …}!merges: (80) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]!ref: "A1:F44"A1: {t: 's', v: '第VII部分: 贷款分行业情况表', r: '<t>第VII部分: 贷款分行业情况表</t>', h: '第VII部分: 贷款分行业情况表', w: '第VII部分: 贷款分行业情况表'}A2: {t: 's', v: '填报机构:', r: '<t>填报机构:</t>', h: '填报机构:', w: '填报机构:'}A3: {t: 's', v: '               项目  \n\n                \n行业名称                                        ', r: '<t xml:space="preserve">               项目  
&#…;行业名称                                        </t>', h: '               项目  <br/><br/>                <br/>行业名称                                        ', w: '               项目  \n\n                \n行业名称                                        '}A7: {t: 'n', v: 1, w: '1'}A8: {t: 'n', v: 2, w: '2'}t: "n"v: 2w: "2"[[Prototype]]: ObjectA9: {t: 'n', v: 3, w: '3'}A10: {t: 'n', v: 4, w: '4'}A11: {t: 'n', v: 5, w: '5'}A12: {t: 'n', v: 6, w: '6'}A13: {t: 'n', v: 7, w: '7'}A14: {t: 'n', v: 8, w: '8'}A15: {t: 'n', v: 9, w: '9'}A16: {t: 'n', v: 10, w: '10'}A17: {t: 'n', v: 11, w: '11'}A18: {t: 'n', v: 12, w: '12'}A19: {t: 'n', v: 13, w: '13'}A20: {t: 'n', v: 14, w: '14'}A21: {t: 'n', v: 15, w: '15'}A22: {t: 'n', v: 16, w: '16'}A23: {t: 'n', v: 17, w: '17'}A24: {t: 'n', v: 18, w: '18'}A25: {t: 'n', v: 19, w: '19'}A26: {t: 'n', v: 20, w: '20'}A27: {t: 'n', v: 21, w: '21'}A28: {t: 'n', v: 22, w: '22'}A29: {t: 'n', v: 23, w: '23'}A30: {t: 'n', v: 24, w: '24'}A31: {t: 'n', v: 25, w: '25'}A32: {t: 'n', v: 26, w: '26'}A33: {t: 'n', v: 27, w: '27'}A34: {t: 'n', v: 28, w: '28'}A35: {t: 'n', v: 29, w: '29'}A36: {t: 'n', v: 30, w: '30'}A37: {t: 's', v: '附注项目', r: '<t>附注项目</t>', h: '附注项目', w: '附注项目'}A38: {t: 'n', v: 31, w: '31'}A39: {t: 'n', v: 34, w: '34'}A40: {t: 'n', v: 35, w: '35'}A41: {t: 'n', v: 36, w: '36'}A42: {t: 'n', v: 37, w: '37'}A43: {t: 'n', v: 38, w: '38'}A44: {t: 'n', v: 39, w: '39'}B7: {t: 's', v: '1.各项贷款', r: '<t>1.各项贷款</t>', h: '1.各项贷款', w: '1.各项贷款'}B8: {t: 's', v: '2.对境内贷款', r: '<t>2.对境内贷款</t>', h: '2.对境内贷款', w: '2.对境内贷款'}B9: {t: 's', v: '2.1农、林、牧、渔业', r: '<t>2.1农、林、牧、渔业</t>', h: '2.1农、林、牧、渔业', w: '2.1农、林、牧、渔业'}B10: {t: 's', v: '2.2采矿业', r: '<t>2.2采矿业</t>', h: '2.2采矿业', w: '2.2采矿业'}B11: {t: 's', v: '2.3制造业', r: '<t>2.3制造业</t>', h: '2.3制造业', w: '2.3制造业'}B12: {t: 's', v: '2.4电力、热力、燃气及水的生产和供应业', r: '<t>2.4电力、热力、燃气及水的生产和供应业</t>', h: '2.4电力、热力、燃气及水的生产和供应业', w: '2.4电力、热力、燃气及水的生产和供应业'}B13: {t: 's', v: '2.5建筑业', r: '<t>2.5建筑业</t>', h: '2.5建筑业', w: '2.5建筑业'}B14: {t: 's', v: '2.6批发和零售业', r: '<r><rPr><sz val="10"/><rFont val="宋体"/><charset va…宋体"/><charset val="134"/></rPr><t>6批发和零售业</t></r>', h: '<span style="font-size:10pt;">2.</span><span style="font-size:10pt;">6批发和零售业</span>', w: '2.6批发和零售业'}B15: {t: 's', v: '2.7交通运输、仓储和邮政业', r: '<r><rPr><sz val="10"/><rFont val="宋体"/><charset va…<charset val="134"/></rPr><t>7交通运输、仓储和邮政业</t></r>', h: '<span style="font-size:10pt;">2.</span><span style="font-size:10pt;">7交通运输、仓储和邮政业</span>', w: '2.7交通运输、仓储和邮政业'}B16: {t: 's', v: '2.8住宿和餐饮业', r: '<r><rPr><sz val="10"/><rFont val="宋体"/><charset va…宋体"/><charset val="134"/></rPr><t>8住宿和餐饮业</t></r>', h: '<span style="font-size:10pt;">2.</span><span style="font-size:10pt;">8住宿和餐饮业</span>', w: '2.8住宿和餐饮业'}B17: {t: 's', v: '2.9信息传输、软件和信息技术服务业', r: '<t>2.9信息传输、软件和信息技术服务业</t>', h: '2.9信息传输、软件和信息技术服务业', w: '2.9信息传输、软件和信息技术服务业'}B18: {t: 's', v: '2.10金融业', r: '<t>2.10金融业</t>', h: '2.10金融业', w: '2.10金融业'}B19: {t: 's', v: '2.11房地产业', r: '<t>2.11房地产业</t>', h: '2.11房地产业', w: '2.11房地产业'}B20: {t: 's', v: '2.12租赁和商务服务业', r: '<t>2.12租赁和商务服务业</t>', h: '2.12租赁和商务服务业', w: '2.12租赁和商务服务业'}B21: {t: 's', v: '2.13科学研究和技术服务业', r: '<t>2.13科学研究和技术服务业</t>', h: '2.13科学研究和技术服务业', w: '2.13科学研究和技术服务业'}B22: {t: 's', v: '2.14水利、环境和公共设施管理业', r: '<t>2.14水利、环境和公共设施管理业</t>', h: '2.14水利、环境和公共设施管理业', w: '2.14水利、环境和公共设施管理业'}B23: {t: 's', v: '2.15居民服务、修理和其他服务业', r: '<t>2.15居民服务、修理和其他服务业</t>', h: '2.15居民服务、修理和其他服务业', w: '2.15居民服务、修理和其他服务业'}B24: {t: 's', v: '2.16教育', r: '<t>2.16教育</t>', h: '2.16教育', w: '2.16教育'}B25: {t: 's', v: '2.17卫生和社会工作', r: '<r><rPr><sz val="10"/><rFont val="宋体"/><charset va…="宋体"/><charset val="134"/></rPr><t>和社会工作</t></r>', h: '<span style="font-size:10pt;">2.17卫生</span><span style="font-size:10pt;">和社会工作</span>', w: '2.17卫生和社会工作'}B26: {t: 's', v: '2.18文化、体育和娱乐业', r: '<t>2.18文化、体育和娱乐业</t>', h: '2.18文化、体育和娱乐业', w: '2.18文化、体育和娱乐业'}B27: {t: 's', v: '2.19公共管理、社会保障和社会组织', r: '<t>2.19公共管理、社会保障和社会组织</t>', h: '2.19公共管理、社会保障和社会组织', w: '2.19公共管理、社会保障和社会组织'}B28: {t: 's', v: '2.20国际组织', r: '<t>2.20国际组织</t>', h: '2.20国际组织', w: '2.20国际组织'}B29: {t: 's', v: '2.21 个人贷款(不含个人经营性贷款)', r: '<t>2.21 个人贷款(不含个人经营性贷款)</t>', h: '2.21 个人贷款(不含个人经营性贷款)', w: '2.21 个人贷款(不含个人经营性贷款)'}B30: {t: 's', v: '        2.21.1信用卡', r: '<t xml:space="preserve">        2.21.1信用卡</t>', h: '        2.21.1信用卡', w: '        2.21.1信用卡'}B31: {t: 's', v: '        2.21.2汽车', r: '<t xml:space="preserve">        2.21.2汽车</t>', h: '        2.21.2汽车', w: '        2.21.2汽车'}B32: {t: 's', v: '        2.21.3住房按揭贷款', r: '<t xml:space="preserve">        2.21.3住房按揭贷款</t>', h: '        2.21.3住房按揭贷款', w: '        2.21.3住房按揭贷款'}B33: {t: 's', v: '        2.21.4其他', r: '<t xml:space="preserve">        2.21.4其他</t>', h: '        2.21.4其他', w: '        2.21.4其他'}B34: {t: 's', v: '2.22买断式转贴现', r: '<t>2.22买断式转贴现</t>', h: '2.22买断式转贴现', w: '2.22买断式转贴现'}B35: {t: 's', v: '2.23买断其他票据类资产', r: '<t>2.23买断其他票据类资产</t>', h: '2.23买断其他票据类资产', w: '2.23买断其他票据类资产'}B36: {t: 's', v: '3.对境外贷款', r: '<t>3.对境外贷款</t>', h: '3.对境外贷款', w: '3.对境外贷款'}B38: {t: 's', v: '4.高技术产业', r: '<t>4.高技术产业</t>', h: '4.高技术产业', w: '4.高技术产业'}B39: {t: 's', v: '5.数字经济核心产业', r: '<t>5.数字经济核心产业</t>', h: '5.数字经济核心产业', w: '5.数字经济核心产业'}B40: {t: 's', v: '5.1数字产品制造业', r: '<t>5.1数字产品制造业</t>', h: '5.1数字产品制造业', w: '5.1数字产品制造业'}B41: {t: 's', v: '5.2数字产品服务业', r: '<t>5.2数字产品服务业</t>', h: '5.2数字产品服务业', w: '5.2数字产品服务业'}B42: {t: 's', v: '5.3数字技术应用业', r: '<t>5.3数字技术应用业</t>', h: '5.3数字技术应用业', w: '5.3数字技术应用业'}B43: {t: 's', v: '5.4数字要素驱动业', r: '<t>5.4数字要素驱动业</t>', h: '5.4数字要素驱动业', w: '5.4数字要素驱动业'}B44: {t: 's', v: '6.知识产权密集型产业', r: '<t>6.知识产权密集型产业</t>', h: '6.知识产权密集型产业', w: '6.知识产权密集型产业'}C2: {t: 's', v: '报表日期:   年    月    日               单位:万元', r: '<t>报表日期:   年    月    日               单位:万元</t>', h: '报表日期:   年    月    日               单位:万元', w: '报表日期:   年    月    日               单位:万元'}D3: {t: 's', v: 'A', r: '<t>A</t>', h: 'A', w: 'A'}D4: {t: 's', v: '各项贷款', r: '<t>各项贷款</t>', h: '各项贷款', w: '各项贷款'}h: "各项贷款"r: "<t>各项贷款</t>"t: "s"v: "各项贷款"w: "各项贷款"[[Prototype]]: ObjectD7: {t: 'n', v: 111, w: '111'}F3: {t: 's', v: 'B', r: '<t>B</t>', h: 'B', w: 'B'}F4: {t: 's', v: '其中:中长期贷款', r: '<t>其中:中长期贷款</t>', h: '其中:中长期贷款', w: '其中:中长期贷款'}F7: {t: 'n', v: 222, w: '222'}[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (...)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
demo5.html:64 {sheetSize: '3', excelName: 'G01_VII.xlsx', sheets: Array(3)}

  

 查看官方资料发现:后面一列是我蹩脚的英文理解

 

KeyDescription我自己的理解
v raw value (see Data Types section for more info)
w formatted text (if applicable) 文本格式的值
t type: b Boolean, e Error, n Number, d Date, s Text, z Stub

类型

boolean 布尔型

e  错误

n 数值型

d 日期型

s Text文本型

z 残存??

f cell formula encoded as an A1-style string (if applicable) 自定义公式??
F range of enclosing array if formula is array formula (if applicable) 下拉数据组
r rich text encoding (if applicable) 富文本型
h HTML rendering of the rich text (if applicable) HTML 类型的文本
c comments associated with the cell 备注
z number format string associated with the cell (if requested) 与单元格关联的数字格式字符串 百度翻译的
l cell hyperlink object (.Target holds link, .Tooltip is tooltip) 单元格链接
s the style/theme of the cell (if applicable) 样式

 

其实人家早就写好了啊。唉~~~

还是人家牛批啊~~~

官方的链接:

https://docs.sheetjs.com/#json

还有一个网址也非常值得参考

https://www.cnblogs.com/liuxianan/p/js-excel.html

 

posted @ 2022-01-25 18:39  苦行者的刀  阅读(853)  评论(0)    收藏  举报