2016-12-31 08:20:45 +00:00
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
2017-03-25 22:18:50 +00:00
var XLSX = { } ; ( function make _xlsx ( XLSX ) { XLSX . version = "0.9.6" ; var current _codepage = 1200 , current _cptable ; if ( typeof module !== "undefined" && typeof require !== "undefined" ) { if ( typeof cptable === "undefined" ) cptable = require ( "./dist/cpexcel.js" ) ; current _cptable = cptable [ current _codepage ] } function reset _cp ( ) { set _cp ( 1200 ) } var set _cp = function ( cp ) { current _codepage = cp } ; function char _codes ( data ) { var o = [ ] ; for ( var i = 0 , len = data . length ; i < len ; ++ i ) o [ i ] = data . charCodeAt ( i ) ; return o } var debom = function ( data ) { var c1 = data . charCodeAt ( 0 ) , c2 = data . charCodeAt ( 1 ) ; if ( c1 == 255 && c2 == 254 ) return data . substr ( 2 ) ; if ( c1 == 254 && c2 == 255 ) return data . substr ( 2 ) ; if ( c1 == 65279 ) return data . substr ( 1 ) ; return data } ; var _getchar = function _gc1 ( x ) { return String . fromCharCode ( x ) } ; if ( typeof cptable !== "undefined" ) { set _cp = function ( cp ) { current _codepage = cp ; current _cptable = cptable [ cp ] } ; debom = function ( data ) { if ( data . charCodeAt ( 0 ) === 255 && data . charCodeAt ( 1 ) === 254 ) { return cptable . utils . decode ( 1200 , char _codes ( data . substr ( 2 ) ) ) } return data } ; _getchar = function _gc2 ( x ) { if ( current _codepage === 1200 ) return String . fromCharCode ( x ) ; return cptable . utils . decode ( current _codepage , [ x & 255 , x >> 8 ] ) [ 0 ] } } var Base64 = function make _b64 ( ) { var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ; return { encode : function ( input , utf8 ) { var o = "" ; var c1 , c2 , c3 , e1 , e2 , e3 , e4 ; for ( var i = 0 ; i < input . length ; ) { c1 = input . charCodeAt ( i ++ ) ; c2 = input . charCodeAt ( i ++ ) ; c3 = input . charCodeAt ( i ++ ) ; e1 = c1 >> 2 ; e2 = ( c1 & 3 ) << 4 | c2 >> 4 ; e3 = ( c2 & 15 ) << 2 | c3 >> 6 ; e4 = c3 & 63 ; if ( isNaN ( c2 ) ) { e3 = e4 = 64 } else if ( isNaN ( c3 ) ) { e4 = 64 } o += map . charAt ( e1 ) + map . charAt ( e2 ) + map . charAt ( e3 ) + map . charAt ( e4 ) } return o } , decode : function b64 _decode ( input , utf8 ) { var o = "" ; var c1 , c2 , c3 ; var e1 , e2 , e3 , e4 ; input = input . replace ( /[^A-Za-z0-9\+\/\=]/g , "" ) ; for ( var i = 0 ; i < input . length ; ) { e1 = map . indexOf ( input . charAt ( i ++ ) ) ; e2 = map . indexOf ( input . charAt ( i ++ ) ) ; e3 = map . indexOf ( input . charAt ( i ++ ) ) ; e4 = map . indexOf ( input . charAt ( i ++ ) ) ; c1 = e1 << 2 | e2 >> 4 ; c2 = ( e2 & 15 ) << 4 | e3 >> 2 ; c3 = ( e3 & 3 ) << 6 | e4 ; o += String . fromCharCode ( c1 ) ; if ( e3 != 64 ) { o += String . fromCharCode ( c2 ) } if ( e4 != 64 ) { o += String . fromCharCode ( c3 ) } } return o } } } ( ) ; var has _buf = typeof Buffer !== "undefined" ; function new _raw _buf ( len ) { return new ( has _buf ? Buffer : Array ) ( len ) } function s2a ( s ) { if ( has _buf ) return new Buffer ( s , "binary" ) ; return s . split ( "" ) . map ( function ( x ) { return x . charCodeAt ( 0 ) & 255 } ) } var bconcat = function ( bufs ) { return [ ] . concat . apply ( [ ] , bufs ) } ; var chr0 = /\u0000/g , chr1 = /[\u0001-\u0006]/ ; var SSF = { } ; var make _ssf = function make _ssf ( SSF ) { SSF . version = "0.9.0" ; function _strrev ( x ) { var o = "" , i = x . length - 1 ; while ( i >= 0 ) o += x . charAt ( i -- ) ; return o } function fill ( c , l ) { var o = "" ; while ( o . length < l ) o += c ; return o } function pad0 ( v , d ) { var t = "" + v ; return t . length >= d ? t : fill ( "0" , d - t . length ) + t } function pad _ ( v , d ) { var t = "" + v ; return t . length >= d ? t : fill ( " " , d - t . length ) + t } function rpad _ ( v , d ) { var t = "" + v ; return t . length >= d ? t : t + fill ( " " , d - t . length ) } function pad0r1 ( v , d ) { var t = "" + Math . round ( v ) ; return t . length >= d ? t : fill ( "0" , d - t . length ) + t } function pad0r2 ( v , d ) { var t = "" + v ; return t . length >= d ? t : fill ( "0" , d - t . length ) + t } var p2 _32 = Math . pow ( 2 , 32 ) ; function pad0r ( v , d ) { if ( v > p2 _32 || v < - p2 _32 ) return pad0r1 ( v , d ) ; var i = Math . round ( v ) ; return pad0r2 ( i , d ) } function isgeneral ( s , i ) { i = i || 0 ; return s . length >= 7 + i && ( s . charCodeAt ( i ) | 32 ) === 103 && ( s . charCodeAt ( i + 1 ) | 32 ) === 101 && ( s . charCodeAt ( i + 2 ) | 32 ) === 110 && ( s . charCodeAt ( i + 3 ) | 32 ) === 101 && ( s . charCodeAt ( i + 4 ) | 32 ) === 114 && ( s . charCodeAt ( i + 5 ) | 32 ) === 97 && ( s . charCodeAt ( i + 6 ) | 32 ) === 108 } var opts _fmt = [ [ "date1904" , 0 ] , [ "output" , "" ] , [ "WTF" , false ] ] ; function fixopts ( o ) { for ( var y = 0 ; y != opts _fmt . length ; ++ y ) if ( o [ opts _fmt [ y ] [ 0 ] ] === undefined ) o [ opts _fmt [ y ] [ 0 ] ] = opts _fmt [ y ] [ 1 ] } SSF . opts = opts _fmt ; var table _fmt = { 0 : "General" , 1 : "0" , 2 : "0.00" , 3 : "#,##0" , 4 : "#,##0.00" , 9 : "0%" , 10 : "0.00%" , 11 : "0.00E+00" , 12 : "# ?/?" , 13 : "# ??/??" , 14 : "m/d/yy" , 15 : "d-mmm-yy" , 16 : "d-mmm" , 17 : "mmm-yy" , 18 : "h:mm AM/PM" , 19 : "h:mm:ss AM/PM" , 20 : "h:mm" , 21 : "h:mm:ss" , 22 : "m/d/yy h:mm" , 37 : "#,##0 ;(#,##0)" , 38 : "#,##0 ;[Red](#,##0)" , 39 : "#,##0.00;(#,##0.00)" , 40 : "#,##0.00;[Red](#,##0.00)" , 45 : "mm:ss" , 46 : "[h]:mm:ss" , 47 : "mmss.0" , 48 : "##0.0E+0" , 49 : "@" , 56 : '"上午/下午 "hh"時"mm"分"ss"秒 "' , 65535 : "General" } ; var days = [ [ "Sun" , "Sunday" ] , [ "Mon" , "Monday" ] , [ "Tue" , "Tuesday" ] , [ "Wed" , "Wednesday" ] , [ "Thu" , " Thurs
if ( R !== - 1 && dad [ R ] !== R ) dad [ i ] = dad [ R ] ; else if ( L !== - 1 && dad [ L ] !== L ) dad [ i ] = dad [ L ] } for ( i = 1 ; i < pl ; ++ i ) { if ( FI [ i ] . type === 0 ) continue ; j = dad [ i ] ; if ( j === 0 ) FP [ i ] = FP [ 0 ] + "/" + FP [ i ] ; else while ( j !== 0 ) { FP [ i ] = FP [ j ] + "/" + FP [ i ] ; j = dad [ j ] } dad [ i ] = 0 } FP [ 0 ] += "/" ; for ( i = 1 ; i < pl ; ++ i ) { if ( FI [ i ] . type !== 2 ) FP [ i ] += "/" ; FPD [ FP [ i ] ] = FI [ i ] } } function make _find _path ( FullPaths , Paths , FileIndex , files , root _name ) { var UCFullPaths = new Array ( FullPaths . length ) ; var UCPaths = new Array ( Paths . length ) , i ; for ( i = 0 ; i < FullPaths . length ; ++ i ) UCFullPaths [ i ] = FullPaths [ i ] . toUpperCase ( ) . replace ( chr0 , "" ) . replace ( chr1 , "!" ) ; for ( i = 0 ; i < Paths . length ; ++ i ) UCPaths [ i ] = Paths [ i ] . toUpperCase ( ) . replace ( chr0 , "" ) . replace ( chr1 , "!" ) ; return function find _path ( path ) { var k ; if ( path . charCodeAt ( 0 ) === 47 ) { k = true ; path = root _name + path } else k = path . indexOf ( "/" ) !== - 1 ; var UCPath = path . toUpperCase ( ) . replace ( chr0 , "" ) . replace ( chr1 , "!" ) ; var w = k === true ? UCFullPaths . indexOf ( UCPath ) : UCPaths . indexOf ( UCPath ) ; if ( w === - 1 ) return null ; return k === true ? FileIndex [ w ] : files [ Paths [ w ] ] } } function sleuth _fat ( idx , cnt , sectors , ssz , fat _addrs ) { var q ; if ( idx === ENDOFCHAIN ) { if ( cnt !== 0 ) throw "DIFAT chain shorter than expected" } else if ( idx !== - 1 ) { var sector = sectors [ idx ] , m = ( ssz >>> 2 ) - 1 ; if ( ! sector ) return ; for ( var i = 0 ; i < m ; ++ i ) { if ( ( q = _ _readInt32LE ( sector , i * 4 ) ) === ENDOFCHAIN ) break ; fat _addrs . push ( q ) } sleuth _fat ( _ _readInt32LE ( sector , ssz - 4 ) , cnt - 1 , sectors , ssz , fat _addrs ) } } function get _sector _list ( sectors , start , fat _addrs , ssz , chkd ) { var sl = sectors . length ; var buf , buf _chain ; if ( ! chkd ) chkd = new Array ( sl ) ; var modulus = ssz - 1 , j , jj ; buf = [ ] ; buf _chain = [ ] ; for ( j = start ; j >= 0 ; ) { chkd [ j ] = true ; buf [ buf . length ] = j ; buf _chain . push ( sectors [ j ] ) ; var addr = fat _addrs [ Math . floor ( j * 4 / ssz ) ] ; jj = j * 4 & modulus ; if ( ssz < 4 + jj ) throw "FAT boundary crossed: " + j + " 4 " + ssz ; if ( ! sectors [ addr ] ) break ; j = _ _readInt32LE ( sectors [ addr ] , jj ) } return { nodes : buf , data : _ _toBuffer ( [ buf _chain ] ) } } function make _sector _list ( sectors , dir _start , fat _addrs , ssz ) { var sl = sectors . length , sector _list = new Array ( sl ) ; var chkd = new Array ( sl ) , buf , buf _chain ; var modulus = ssz - 1 , i , j , k , jj ; for ( i = 0 ; i < sl ; ++ i ) { buf = [ ] ; k = i + dir _start ; if ( k >= sl ) k -= sl ; if ( chkd [ k ] === true ) continue ; buf _chain = [ ] ; for ( j = k ; j >= 0 ; ) { chkd [ j ] = true ; buf [ buf . length ] = j ; buf _chain . push ( sectors [ j ] ) ; var addr = fat _addrs [ Math . floor ( j * 4 / ssz ) ] ; jj = j * 4 & modulus ; if ( ssz < 4 + jj ) throw "FAT boundary crossed: " + j + " 4 " + ssz ; if ( ! sectors [ addr ] ) break ; j = _ _readInt32LE ( sectors [ addr ] , jj ) } sector _list [ k ] = { nodes : buf , data : _ _toBuffer ( [ buf _chain ] ) } } return sector _list } function read _directory ( dir _start , sector _list , sectors , Paths , nmfs , files , FileIndex ) { var blob ; var minifat _store = 0 , pl = Paths . length ? 2 : 0 ; var sector = sector _list [ dir _start ] . data ; var i = 0 , namelen = 0 , name , o , ctime , mtime ; for ( ; i < sector . length ; i += 128 ) { blob = sector . slice ( i , i + 128 ) ; prep _blob ( blob , 64 ) ; namelen = blob . read _shift ( 2 ) ; if ( namelen === 0 ) continue ; name = _ _utf16le ( blob , 0 , namelen - pl ) ; Paths . push ( name ) ; o = { name : name , type : blob . read _shift ( 1 ) , color : blob . read _shift ( 1 ) , L : blob . read _shift ( 4 , "i" ) , R : blob . read _shift ( 4 , "i" ) , C : blob . read _shift ( 4 , "i" ) , clsid : blob . read _shift ( 16 ) , state : blob . read _shift ( 4 , "i" ) } ; ctime = blob . read _shift ( 2 ) + blob . read _shift ( 2 ) + blob . read _shift ( 2 ) + blob . read _shift ( 2 ) ; if ( ctime !== 0 ) { o . ctime = ctime ; o . ct = read _date ( blob , blob . l - 8 ) } mtime = blob . read _shift ( 2 ) + blob . read _shift ( 2 ) + blob . read _shift ( 2 ) + blob . read _shift ( 2 ) ; if ( mtime !== 0 ) { o . mtime = mtime ; o . mt = read _date ( blob , blob . l - 8 ) } o . start = blob . read _shift ( 4 , "i" ) ; o . size = blob . read _shift ( 4 , "i" ) ; if ( o . type === 5 ) { minifat _store = o . start ; if ( nmfs > 0 && minifat _store !== ENDOFCHAIN ) sector _list [ minifat _store ] . name = "!StreamData" } else if ( o . size >= 4096 ) { o . storage = "fat" ; if ( sector _list [ o . start ] === undefined ) sector _list [ o . start ] = get _sector _list ( sectors , o . start , sector _list . fat _addrs , sector _list . ssz ) ; sector _list [ o . start ] . name = o . name ; o . content = sector _list [ o . start ] . data . slice ( 0 , o . size ) ; prep _blob ( o . content , 0 ) } else { o . storage = "minifat" ; if ( minifat _store !== ENDOFCHAIN && o . start !== ENDOFCHAIN ) { o . content = sector _list [ minifat _store ] . data . slice ( o . start * MSSZ , o . start * MSSZ + o . size ) ; prep _blob ( o . content , 0 ) } } files [ name ] = o ; FileIndex . push ( o ) } } function read _date ( blob , offset ) { return new Date ( ( _ _readUInt32LE ( blob , offset + 4 ) / 1e7 * Math . pow ( 2 , 32 ) + _ _readUInt32LE ( blob , offset ) / 1e7 - 11644473600 ) * 1e3 ) } var fs ; function readFileSync ( filename , op
} ) ( ) ; var CountryEnum = { 1 : "US" , 2 : "CA" , 3 : "" , 7 : "RU" , 20 : "EG" , 30 : "GR" , 31 : "NL" , 32 : "BE" , 33 : "FR" , 34 : "ES" , 36 : "HU" , 39 : "IT" , 41 : "CH" , 43 : "AT" , 44 : "GB" , 45 : "DK" , 46 : "SE" , 47 : "NO" , 48 : "PL" , 49 : "DE" , 52 : "MX" , 55 : "BR" , 61 : "AU" , 64 : "NZ" , 66 : "TH" , 81 : "JP" , 82 : "KR" , 84 : "VN" , 86 : "CN" , 90 : "TR" , 105 : "JS" , 213 : "DZ" , 216 : "MA" , 218 : "LY" , 351 : "PT" , 354 : "IS" , 358 : "FI" , 420 : "CZ" , 886 : "TW" , 961 : "LB" , 962 : "JO" , 963 : "SY" , 964 : "IQ" , 965 : "KW" , 966 : "SA" , 971 : "AE" , 972 : "IL" , 974 : "QA" , 981 : "IR" , 65535 : "US" } ; var XLSFillPattern = [ null , "solid" , "mediumGray" , "darkGray" , "lightGray" , "darkHorizontal" , "darkVertical" , "darkDown" , "darkUp" , "darkGrid" , "darkTrellis" , "lightHorizontal" , "lightVertical" , "lightDown" , "lightUp" , "lightGrid" , "lightTrellis" , "gray125" , "gray0625" ] ; function rgbify ( arr ) { return arr . map ( function ( x ) { return [ x >> 16 & 255 , x >> 8 & 255 , x & 255 ] } ) } var XLSIcv = rgbify ( [ 0 , 16777215 , 16711680 , 65280 , 255 , 16776960 , 16711935 , 65535 , 0 , 16777215 , 16711680 , 65280 , 255 , 16776960 , 16711935 , 65535 , 8388608 , 32768 , 128 , 8421376 , 8388736 , 32896 , 12632256 , 8421504 , 10066431 , 10040166 , 16777164 , 13434879 , 6684774 , 16744576 , 26316 , 13421823 , 128 , 16711935 , 16776960 , 65535 , 8388736 , 8388608 , 32896 , 255 , 52479 , 13434879 , 13434828 , 16777113 , 10079487 , 16751052 , 13408767 , 16764057 , 3368703 , 3394764 , 10079232 , 16763904 , 16750848 , 16737792 , 6710937 , 9868950 , 13158 , 3381606 , 13056 , 3355392 , 10040064 , 10040166 , 3355545 , 3355443 , 16777215 , 0 ] ) ; var ct2type = { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" : "workbooks" , "application/vnd.ms-excel.binIndexWs" : "TODO" , "application/vnd.ms-excel.chartsheet" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml" : "TODO" , "application/vnd.ms-excel.dialogsheet" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml" : "TODO" , "application/vnd.ms-excel.macrosheet" : "TODO" , "application/vnd.ms-excel.macrosheet+xml" : "TODO" , "application/vnd.ms-excel.intlmacrosheet" : "TODO" , "application/vnd.ms-excel.binIndexMs" : "TODO" , "application/vnd.openxmlformats-package.core-properties+xml" : "coreprops" , "application/vnd.openxmlformats-officedocument.custom-properties+xml" : "custprops" , "application/vnd.openxmlformats-officedocument.extended-properties+xml" : "extprops" , "application/vnd.openxmlformats-officedocument.customXmlProperties+xml" : "TODO" , "application/vnd.ms-excel.comments" : "comments" , "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml" : "comments" , "application/vnd.ms-excel.pivotTable" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml" : "TODO" , "application/vnd.ms-office.chartcolorstyle+xml" : "TODO" , "application/vnd.ms-office.chartstyle+xml" : "TODO" , "application/vnd.ms-excel.calcChain" : "calcchains" , "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml" : "calcchains" , "application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings" : "TODO" , "application/vnd.ms-office.activeX" : "TODO" , "application/vnd.ms-office.activeX+xml" : "TODO" , "application/vnd.ms-excel.attachedToolbars" : "TODO" , "application/vnd.ms-excel.connections" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml" : "TODO" , "application/vnd.ms-excel.externalLink" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml" : "TODO" , "application/vnd.ms-excel.sheetMetadata" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml" : "TODO" , "application/vnd.ms-excel.pivotCacheDefinition" : "TODO" , "application/vnd.ms-excel.pivotCacheRecords" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml" : "TODO" , "application/vnd.ms-excel.queryTable" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml" : "TODO" , "application/vnd.ms-excel.userNames" : "TODO" , "application/vnd.ms-excel.revisionHeaders" : "TODO" , "application/vnd.ms-excel.revisionLog" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml" : "TODO" , "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml" : "TODO" , " application / vnd . openxmlfo
var cb = blob . read _shift ( 2 ) ; l -= blob . l ; if ( cb !== l ) throw "Malformed AddinUdf: padding = " + l + " != " + cb ; blob . l += cb ; return udfName } function parse _Ref8U ( blob , length ) { var rwFirst = blob . read _shift ( 2 ) ; var rwLast = blob . read _shift ( 2 ) ; var colFirst = blob . read _shift ( 2 ) ; var colLast = blob . read _shift ( 2 ) ; return { s : { c : colFirst , r : rwFirst } , e : { c : colLast , r : rwLast } } } function parse _RefU ( blob , length ) { var rwFirst = blob . read _shift ( 2 ) ; var rwLast = blob . read _shift ( 2 ) ; var colFirst = blob . read _shift ( 1 ) ; var colLast = blob . read _shift ( 1 ) ; return { s : { c : colFirst , r : rwFirst } , e : { c : colLast , r : rwLast } } } var parse _Ref = parse _RefU ; function parse _FtCmo ( blob , length ) { blob . l += 4 ; var ot = blob . read _shift ( 2 ) ; var id = blob . read _shift ( 2 ) ; var flags = blob . read _shift ( 2 ) ; blob . l += 12 ; return [ id , ot , flags ] } function parse _FtNts ( blob , length ) { var out = { } ; blob . l += 4 ; blob . l += 16 ; out . fSharedNote = blob . read _shift ( 2 ) ; blob . l += 4 ; return out } function parse _FtCf ( blob , length ) { var out = { } ; blob . l += 4 ; blob . cf = blob . read _shift ( 2 ) ; return out } var FtTab = { 21 : parse _FtCmo , 19 : parsenoop , 18 : function ( blob , length ) { blob . l += 12 } , 17 : function ( blob , length ) { blob . l += 8 } , 16 : parsenoop , 15 : parsenoop , 13 : parse _FtNts , 12 : function ( blob , length ) { blob . l += 24 } , 11 : function ( blob , length ) { blob . l += 10 } , 10 : function ( blob , length ) { blob . l += 16 } , 9 : parsenoop , 8 : function ( blob , length ) { blob . l += 6 } , 7 : parse _FtCf , 6 : function ( blob , length ) { blob . l += 6 } , 4 : parsenoop , 0 : function ( blob , length ) { blob . l += 4 } } ; function parse _FtArray ( blob , length , ot ) { var s = blob . l ; var fts = [ ] ; while ( blob . l < s + length ) { var ft = blob . read _shift ( 2 ) ; blob . l -= 2 ; try { fts . push ( FtTab [ ft ] ( blob , s + length - blob . l ) ) } catch ( e ) { blob . l = s + length ; return fts } } if ( blob . l != s + length ) blob . l = s + length ; return fts } var parse _FontIndex = parseuint16 ; function parse _BOF ( blob , length ) { var o = { } ; o . BIFFVer = blob . read _shift ( 2 ) ; length -= 2 ; switch ( o . BIFFVer ) { case 1536 : case 1280 : case 2 : case 7 : break ; default : if ( length > 6 ) throw new Error ( "Unexpected BIFF Ver " + o . BIFFVer ) } blob . read _shift ( length ) ; return o } function parse _InterfaceHdr ( blob , length ) { if ( length === 0 ) return 1200 ; var q ; if ( ( q = blob . read _shift ( 2 ) ) !== 1200 ) throw "InterfaceHdr codePage " + q ; return 1200 } function parse _WriteAccess ( blob , length , opts ) { if ( opts . enc ) { blob . l += length ; return "" } var l = blob . l ; var UserName = parse _XLUnicodeString ( blob , 0 , opts ) ; blob . read _shift ( length + l - blob . l ) ; return UserName } function parse _BoundSheet8 ( blob , length , opts ) { var pos = blob . read _shift ( 4 ) ; var hidden = blob . read _shift ( 1 ) & 3 ; var dt = blob . read _shift ( 1 ) ; switch ( dt ) { case 0 : dt = "Worksheet" ; break ; case 1 : dt = "Macrosheet" ; break ; case 2 : dt = "Chartsheet" ; break ; case 6 : dt = "VBAModule" ; break } var name = parse _ShortXLUnicodeString ( blob , 0 , opts ) ; if ( name . length === 0 ) name = "Sheet1" ; return { pos : pos , hs : hidden , dt : dt , name : name } } function parse _SST ( blob , length ) { var cnt = blob . read _shift ( 4 ) ; var ucnt = blob . read _shift ( 4 ) ; var strs = [ ] ; for ( var i = 0 ; i != ucnt ; ++ i ) { strs . push ( parse _XLUnicodeRichExtendedString ( blob ) ) } strs . Count = cnt ; strs . Unique = ucnt ; return strs } function parse _ExtSST ( blob , length ) { var extsst = { } ; extsst . dsst = blob . read _shift ( 2 ) ; blob . l += length - 2 ; return extsst } function parse _Row ( blob , length ) { var rw = blob . read _shift ( 2 ) , col = blob . read _shift ( 2 ) , Col = blob . read _shift ( 2 ) , rht = blob . read _shift ( 2 ) ; blob . read _shift ( 4 ) ; var flags = blob . read _shift ( 1 ) ; blob . read _shift ( 1 ) ; blob . read _shift ( 2 ) ; return { r : rw , c : col , cnt : Col - col } } function parse _ForceFullCalculation ( blob , length ) { var header = parse _frtHeader ( blob ) ; if ( header . type != 2211 ) throw "Invalid Future Record " + header . type ; var fullcalc = blob . read _shift ( 4 ) ; return fullcalc !== 0 } var parse _CompressPictures = parsenoop2 ; function parse _RecalcId ( blob , length ) { blob . read _shift ( 2 ) ; return blob . read _shift ( 4 ) } function parse _DefaultRowHeight ( blob , length ) { var f = blob . read _shift ( 2 ) ; var fl = { Unsynced : f & 1 , DyZero : ( f & 2 ) >> 1 , ExAsc : ( f & 4 ) >> 2 , ExDsc : ( f & 8 ) >> 3 } ; var miyRw = blob . read _shift ( 2 ) ; return [ fl , miyRw ] } function parse _Window1 ( blob , length ) { var xWn = blob . read _shift ( 2 ) , yWn = blob . read _shift ( 2 ) , dxWn = blob . read _shift ( 2 ) , dyWn = blob . read _shift ( 2 ) ; var flags = blob . read _shift ( 2 ) , iTabCur = blob . read _shift ( 2 ) , iTabFirst = blob . read _shift ( 2 ) ; var ctabSel = blob . read _shift ( 2 ) , wTabRatio = blob . read _shift ( 2 ) ; return { Pos : [ xWn , yWn ] , Dim : [ dxWn , dyWn ] , Flags : flags , CurTab : iTabCur , FirstTab : iTabFirst , Selected : ctabSel , TabRatio : wTabRatio } } function parse _Font ( blob
return o } function hex2RGB ( h ) { var o = h . substr ( h [ 0 ] === "#" ? 1 : 0 , 6 ) ; return [ parseInt ( o . substr ( 0 , 2 ) , 16 ) , parseInt ( o . substr ( 2 , 2 ) , 16 ) , parseInt ( o . substr ( 4 , 2 ) , 16 ) ] } function rgb2Hex ( rgb ) { for ( var i = 0 , o = 1 ; i != 3 ; ++ i ) o = o * 256 + ( rgb [ i ] > 255 ? 255 : rgb [ i ] < 0 ? 0 : rgb [ i ] ) ; return o . toString ( 16 ) . toUpperCase ( ) . substr ( 1 ) } function rgb2HSL ( rgb ) { var R = rgb [ 0 ] / 255 , G = rgb [ 1 ] / 255 , B = rgb [ 2 ] / 255 ; var M = Math . max ( R , G , B ) , m = Math . min ( R , G , B ) , C = M - m ; if ( C === 0 ) return [ 0 , 0 , R ] ; var H6 = 0 , S = 0 , L2 = M + m ; S = C / ( L2 > 1 ? 2 - L2 : L2 ) ; switch ( M ) { case R : H6 = ( ( G - B ) / C + 6 ) % 6 ; break ; case G : H6 = ( B - R ) / C + 2 ; break ; case B : H6 = ( R - G ) / C + 4 ; break } return [ H6 / 6 , S , L2 / 2 ] } function hsl2RGB ( hsl ) { var H = hsl [ 0 ] , S = hsl [ 1 ] , L = hsl [ 2 ] ; var C = S * 2 * ( L < . 5 ? L : 1 - L ) , m = L - C / 2 ; var rgb = [ m , m , m ] , h6 = 6 * H ; var X ; if ( S !== 0 ) switch ( h6 | 0 ) { case 0 : case 6 : X = C * h6 ; rgb [ 0 ] += C ; rgb [ 1 ] += X ; break ; case 1 : X = C * ( 2 - h6 ) ; rgb [ 0 ] += X ; rgb [ 1 ] += C ; break ; case 2 : X = C * ( h6 - 2 ) ; rgb [ 1 ] += C ; rgb [ 2 ] += X ; break ; case 3 : X = C * ( 4 - h6 ) ; rgb [ 1 ] += X ; rgb [ 2 ] += C ; break ; case 4 : X = C * ( h6 - 4 ) ; rgb [ 2 ] += C ; rgb [ 0 ] += X ; break ; case 5 : X = C * ( 6 - h6 ) ; rgb [ 2 ] += X ; rgb [ 0 ] += C ; break } for ( var i = 0 ; i != 3 ; ++ i ) rgb [ i ] = Math . round ( rgb [ i ] * 255 ) ; return rgb } function rgb _tint ( hex , tint ) { if ( tint === 0 ) return hex ; var hsl = rgb2HSL ( hex2RGB ( hex ) ) ; if ( tint < 0 ) hsl [ 2 ] = hsl [ 2 ] * ( 1 + tint ) ; else hsl [ 2 ] = 1 - ( 1 - hsl [ 2 ] ) * ( 1 - tint ) ; return rgb2Hex ( hsl2RGB ( hsl ) ) } var DEF _MDW = 7 , MAX _MDW = 15 , MIN _MDW = 1 , MDW = DEF _MDW ; function width2px ( width ) { return Math . floor ( ( width + Math . round ( 128 / MDW ) / 256 ) * MDW ) } function px2char ( px ) { return Math . floor ( ( px - 5 ) / MDW * 100 + . 5 ) / 100 } function char2width ( chr ) { return Math . round ( ( chr * MDW + 5 ) / MDW * 256 ) / 256 } function px2char _ ( px ) { return ( ( px - 5 ) / MDW * 100 + . 5 ) / 100 } function char2width _ ( chr ) { return ( chr * MDW + 5 ) / MDW * 256 / 256 } function cycle _width ( collw ) { return char2width ( px2char ( width2px ( collw ) ) ) } function find _mdw _colw ( collw ) { var delta = Infinity , _MDW = MIN _MDW ; for ( MDW = MIN _MDW ; MDW < MAX _MDW ; ++ MDW ) if ( Math . abs ( collw - cycle _width ( collw ) ) < delta ) { delta = Math . abs ( collw - cycle _width ( collw ) ) ; _MDW = MDW } MDW = _MDW } function find _mdw _wpx ( wpx ) { var delta = Infinity , guess = 0 , _MDW = MIN _MDW ; for ( MDW = MIN _MDW ; MDW < MAX _MDW ; ++ MDW ) { guess = char2width _ ( px2char _ ( wpx ) ) * 256 ; guess = guess % 1 ; if ( guess > . 5 ) guess -- ; if ( Math . abs ( guess ) < delta ) { delta = Math . abs ( guess ) ; _MDW = MDW } } MDW = _MDW } function process _col ( coll ) { if ( coll . width ) { coll . wpx = width2px ( coll . width ) ; coll . wch = px2char ( coll . wpx ) ; coll . MDW = MDW } else if ( coll . wpx ) { coll . wch = px2char ( coll . wpx ) ; coll . width = char2width ( coll . wch ) ; coll . MDW = MDW } if ( coll . customWidth ) delete coll . customWidth } var XLMLPatternTypeMap = { None : "none" , Solid : "solid" , Gray50 : "mediumGray" , Gray75 : "darkGray" , Gray25 : "lightGray" , HorzStripe : "darkHorizontal" , VertStripe : "darkVertical" , ReverseDiagStripe : "darkDown" , DiagStripe : "darkUp" , DiagCross : "darkGrid" , ThickDiagCross : "darkTrellis" , ThinHorzStripe : "lightHorizontal" , ThinVertStripe : "lightVertical" , ThinReverseDiagStripe : "lightDown" , ThinHorzCross : "lightGrid" } ; function parse _borders ( t , styles , themes , opts ) { styles . Borders = [ ] ; var border = { } , sub _border = { } ; t [ 0 ] . match ( tagregex ) . forEach ( function ( x ) { var y = parsexmltag ( x ) ; switch ( y [ 0 ] ) { case "<borders" : case "<borders>" : case "</borders>" : break ; case "<border" : case "<border>" : border = { } ; if ( y . diagonalUp ) { border . diagonalUp = y . diagonalUp } if ( y . diagonalDown ) { border . diagonalDown = y . diagonalDown } styles . Borders . push ( border ) ; break ; case "</border>" : break ; case "<left" : case "<left/>" : break ; case "</left>" : break ; case "<right" : case "<right/>" : break ; case "</right>" : break ; case "<top" : case "<top/>" : break ; case "</top>" : break ; case "<bottom" : case "<bottom/>" : break ; case "</bottom>" : break ; case "<diagonal" : case "<diagonal/>" : break ; case "</diagonal>" : break ; case "<horizontal" : case "<horizontal/>" : break ; case "</horizontal>" : break ; case "<vertical" : case "<vertical/>" : break ; case "</vertical>" : break ; case "<start" : case "<start/>" : break ; case "</start>" : break ; case "<end" : case "<end/>" : break ; case "</end>" : break ; case "<color" : case "<color/>" : break ; case "</color>" : break ; default : if ( opts && opts . WTF ) throw new Error ( "unrecognized " + y [ 0 ] + " in borders" ) } } ) } function parse _fills ( t , styles , themes , opts ) { styles . Fills = [ ] ; var fill = { } ; t [ 0 ] . match ( tagregex ) . forEach ( function ( x ) { var y = parsexmltag ( x ) ; switch ( y [ 0 ] ) { case "<fills" : case "<fills>" : case "</fills>" : break ; case "<fill>" : break ; case "</fill>" : styles . Fills . push ( fill ) ; fill = { } ; break ; case "<fill>" : break ; case "</fill>" : styles .
} } ( ) ; var crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)([1-9]\d{0,5}|10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6])(?![_.\(A-Za-z0-9])/g ; var a1 _to _rc = function ( ) { return function a1 _to _rc ( fstr , base ) { return fstr . replace ( crefregex , function ( $0 , $1 , $2 , $3 , $4 , $5 , off , str ) { var c = decode _col ( $3 ) - base . c ; var r = decode _row ( $5 ) - base . r ; return $1 + "R" + ( r == 0 ? "" : "[" + r + "]" ) + "C" + ( c == 0 ? "" : "[" + c + "]" ) } ) } } ( ) ; function shift _formula _str ( f , delta ) { return f . replace ( crefregex , function ( $0 , $1 , $2 , $3 , $4 , $5 , off , str ) { return $1 + ( $2 == "$" ? $2 + $3 : encode _col ( decode _col ( $3 ) + delta . c ) ) + ( $4 == "$" ? $4 + $5 : encode _row ( decode _row ( $5 ) + delta . r ) ) } ) } function shift _formula _xlsx ( f , range , cell ) { var r = decode _range ( range ) , s = r . s , c = decode _cell ( cell ) ; var delta = { r : c . r - s . r , c : c . c - s . c } ; return shift _formula _str ( f , delta ) } function parseread ( l ) { return function ( blob , length ) { blob . l += l ; return } } function parseread1 ( blob , length ) { blob . l += 1 ; return } function parse _ColRelU ( blob , length ) { var c = blob . read _shift ( length == 1 ? 1 : 2 ) ; return [ c & 16383 , c >> 14 & 1 , c >> 15 & 1 ] } function parse _RgceArea ( blob , length , opts ) { var w = 2 ; if ( opts ) { if ( opts . biff >= 2 && opts . biff <= 5 ) return parse _RgceArea _BIFF2 ( blob , length , opts ) ; else if ( opts . biff == 12 ) w = 4 } var r = blob . read _shift ( w ) , R = blob . read _shift ( w ) ; var c = parse _ColRelU ( blob , 2 ) ; var C = parse _ColRelU ( blob , 2 ) ; return { s : { r : r , c : c [ 0 ] , cRel : c [ 1 ] , rRel : c [ 2 ] } , e : { r : R , c : C [ 0 ] , cRel : C [ 1 ] , rRel : C [ 2 ] } } } function parse _RgceArea _BIFF2 ( blob , length , opts ) { var r = parse _ColRelU ( blob , 2 ) , R = parse _ColRelU ( blob , 2 ) ; var c = blob . read _shift ( 1 ) ; var C = blob . read _shift ( 1 ) ; return { s : { r : r [ 0 ] , c : c , cRel : r [ 1 ] , rRel : r [ 2 ] } , e : { r : R [ 0 ] , c : C , cRel : R [ 1 ] , rRel : R [ 2 ] } } } function parse _RgceAreaRel ( blob , length , opts ) { var r = blob . read _shift ( length == 12 ? 4 : 2 ) , R = blob . read _shift ( length == 12 ? 4 : 2 ) ; var c = parse _ColRelU ( blob , 2 ) ; var C = parse _ColRelU ( blob , 2 ) ; return { s : { r : r , c : c [ 0 ] , cRel : c [ 1 ] , rRel : c [ 2 ] } , e : { r : R , c : C [ 0 ] , cRel : C [ 1 ] , rRel : C [ 2 ] } } } function parse _RgceLoc ( blob , length , opts ) { if ( opts && opts . biff >= 2 && opts . biff <= 5 ) return parse _RgceLoc _BIFF2 ( blob , length , opts ) ; var r = blob . read _shift ( opts && opts . biff == 12 ? 4 : 2 ) ; var c = parse _ColRelU ( blob , 2 ) ; return { r : r , c : c [ 0 ] , cRel : c [ 1 ] , rRel : c [ 2 ] } } function parse _RgceLoc _BIFF2 ( blob , length , opts ) { var r = parse _ColRelU ( blob , 2 ) ; var c = blob . read _shift ( 1 ) ; return { r : r [ 0 ] , c : c , cRel : r [ 1 ] , rRel : r [ 2 ] } } function parse _RgceLocRel ( blob , length , opts ) { var biff = opts && opts . biff ? opts . biff : 8 ; if ( biff >= 2 && biff <= 5 ) return parse _RgceLocRel _BIFF2 ( blob , length , opts ) ; var r = blob . read _shift ( biff >= 12 ? 4 : 2 ) ; var cl = blob . read _shift ( 2 ) ; var cRel = ( cl & 32768 ) >> 15 , rRel = ( cl & 16384 ) >> 14 ; cl &= 16383 ; if ( rRel == 1 ) while ( r > 524287 ) r -= 1048576 ; if ( cRel == 1 ) while ( cl > 8191 ) cl = cl - 16384 ; return { r : r , c : cl , cRel : cRel , rRel : rRel } } function parse _RgceLocRel _BIFF2 ( blob , length ) { var rl = blob . read _shift ( 2 ) ; var c = blob . read _shift ( 1 ) ; var rRel = ( rl & 32768 ) >> 15 , cRel = ( rl & 16384 ) >> 14 ; rl &= 16383 ; if ( rRel == 1 && rl >= 8192 ) rl = rl - 16384 ; if ( cRel == 1 && c >= 128 ) c = c - 256 ; return { r : rl , c : c , cRel : cRel , rRel : rRel } } function parse _PtgArea ( blob , length , opts ) { var type = ( blob [ blob . l ++ ] & 96 ) >> 5 ; var area = parse _RgceArea ( blob , opts . biff >= 2 && opts . biff <= 5 ? 6 : 8 , opts ) ; return [ type , area ] } function parse _PtgArea3d ( blob , length , opts ) { var type = ( blob [ blob . l ++ ] & 96 ) >> 5 ; var ixti = blob . read _shift ( 2 , "i" ) ; var w = 8 ; if ( opts ) switch ( opts . biff ) { case 5 : blob . l += 12 ; w = 6 ; break ; case 12 : w = 12 ; break } var area = parse _RgceArea ( blob , w , opts ) ; return [ type , ixti , area ] } function parse _PtgAreaErr ( blob , length , opts ) { var type = ( blob [ blob . l ++ ] & 96 ) >> 5 ; blob . l += opts && opts . biff > 8 ? 12 : 8 ; return [ type ] } function parse _PtgAreaErr3d ( blob , length , opts ) { var type = ( blob [ blob . l ++ ] & 96 ) >> 5 ; var ixti = blob . read _shift ( 2 ) ; var w = 8 ; if ( opts ) switch ( opts . biff ) { case 5 : blob . l += 12 ; w = 6 ; break ; case 12 : w = 12 ; break } blob . l += w ; return [ type , ixti ] } function parse _PtgAreaN ( blob , length , opts ) { var type = ( blob [ blob . l ++ ] & 96 ) >> 5 ; var area = parse _RgceAreaRel ( blob , opts && opts . biff > 8 ? 12 : 8 , opts ) ; return [ type , area ] } function parse _PtgArray ( blob , length , opts ) { var type = ( blob [ blob . l ++ ] & 96 ) >> 5 ; blob . l += opts . biff == 2 ? 6 : opts . biff == 12 ? 14 : 7 ; return [ type ] } function parse _PtgAttrBaxcel ( blob , length ) { var bitSemi = blob [ blob . l + 1 ] & 1 ; var bitBaxcel = 1 ; blob . l += 4 ; return [ bitSemi , bitBaxcel ] } function parse _PtgAttrChoose ( blob , length , opts ) { blob . l += 2 ; var offset = blob . read _shift ( opts && opt
320 : "HARMEAN" , 321 : "SUMSQ" , 322 : "KURT" , 323 : "SKEW" , 324 : "ZTEST" , 325 : "LARGE" , 326 : "SMALL" , 327 : "QUARTILE" , 328 : "PERCENTILE" , 329 : "PERCENTRANK" , 330 : "MODE" , 331 : "TRIMMEAN" , 332 : "TINV" , 334 : "MOVIE.COMMAND" , 335 : "GET.MOVIE" , 336 : "CONCATENATE" , 337 : "POWER" , 338 : "PIVOT.ADD.DATA" , 339 : "GET.PIVOT.TABLE" , 340 : "GET.PIVOT.FIELD" , 341 : "GET.PIVOT.ITEM" , 342 : "RADIANS" , 343 : "DEGREES" , 344 : "SUBTOTAL" , 345 : "SUMIF" , 346 : "COUNTIF" , 347 : "COUNTBLANK" , 348 : "SCENARIO.GET" , 349 : "OPTIONS.LISTS.GET" , 350 : "ISPMT" , 351 : "DATEDIF" , 352 : "DATESTRING" , 353 : "NUMBERSTRING" , 354 : "ROMAN" , 355 : "OPEN.DIALOG" , 356 : "SAVE.DIALOG" , 357 : "VIEW.GET" , 358 : "GETPIVOTDATA" , 359 : "HYPERLINK" , 360 : "PHONETIC" , 361 : "AVERAGEA" , 362 : "MAXA" , 363 : "MINA" , 364 : "STDEVPA" , 365 : "VARPA" , 366 : "STDEVA" , 367 : "VARA" , 368 : "BAHTTEXT" , 369 : "THAIDAYOFWEEK" , 370 : "THAIDIGIT" , 371 : "THAIMONTHOFYEAR" , 372 : "THAINUMSOUND" , 373 : "THAINUMSTRING" , 374 : "THAISTRINGLENGTH" , 375 : "ISTHAIDIGIT" , 376 : "ROUNDBAHTDOWN" , 377 : "ROUNDBAHTUP" , 378 : "THAIYEAR" , 379 : "RTD" , 380 : "CUBEVALUE" , 381 : "CUBEMEMBER" , 382 : "CUBEMEMBERPROPERTY" , 383 : "CUBERANKEDMEMBER" , 384 : "HEX2BIN" , 385 : "HEX2DEC" , 386 : "HEX2OCT" , 387 : "DEC2BIN" , 388 : "DEC2HEX" , 389 : "DEC2OCT" , 390 : "OCT2BIN" , 391 : "OCT2HEX" , 392 : "OCT2DEC" , 393 : "BIN2DEC" , 394 : "BIN2OCT" , 395 : "BIN2HEX" , 396 : "IMSUB" , 397 : "IMDIV" , 398 : "IMPOWER" , 399 : "IMABS" , 400 : "IMSQRT" , 401 : "IMLN" , 402 : "IMLOG2" , 403 : "IMLOG10" , 404 : "IMSIN" , 405 : "IMCOS" , 406 : "IMEXP" , 407 : "IMARGUMENT" , 408 : "IMCONJUGATE" , 409 : "IMAGINARY" , 410 : "IMREAL" , 411 : "COMPLEX" , 412 : "IMSUM" , 413 : "IMPRODUCT" , 414 : "SERIESSUM" , 415 : "FACTDOUBLE" , 416 : "SQRTPI" , 417 : "QUOTIENT" , 418 : "DELTA" , 419 : "GESTEP" , 420 : "ISEVEN" , 421 : "ISODD" , 422 : "MROUND" , 423 : "ERF" , 424 : "ERFC" , 425 : "BESSELJ" , 426 : "BESSELK" , 427 : "BESSELY" , 428 : "BESSELI" , 429 : "XIRR" , 430 : "XNPV" , 431 : "PRICEMAT" , 432 : "YIELDMAT" , 433 : "INTRATE" , 434 : "RECEIVED" , 435 : "DISC" , 436 : "PRICEDISC" , 437 : "YIELDDISC" , 438 : "TBILLEQ" , 439 : "TBILLPRICE" , 440 : "TBILLYIELD" , 441 : "PRICE" , 442 : "YIELD" , 443 : "DOLLARDE" , 444 : "DOLLARFR" , 445 : "NOMINAL" , 446 : "EFFECT" , 447 : "CUMPRINC" , 448 : "CUMIPMT" , 449 : "EDATE" , 450 : "EOMONTH" , 451 : "YEARFRAC" , 452 : "COUPDAYBS" , 453 : "COUPDAYS" , 454 : "COUPDAYSNC" , 455 : "COUPNCD" , 456 : "COUPNUM" , 457 : "COUPPCD" , 458 : "DURATION" , 459 : "MDURATION" , 460 : "ODDLPRICE" , 461 : "ODDLYIELD" , 462 : "ODDFPRICE" , 463 : "ODDFYIELD" , 464 : "RANDBETWEEN" , 465 : "WEEKNUM" , 466 : "AMORDEGRC" , 467 : "AMORLINC" , 468 : "CONVERT" , 724 : "SHEETJS" , 469 : "ACCRINT" , 470 : "ACCRINTM" , 471 : "WORKDAY" , 472 : "NETWORKDAYS" , 473 : "GCD" , 474 : "MULTINOMIAL" , 475 : "LCM" , 476 : "FVSCHEDULE" , 477 : "CUBEKPIMEMBER" , 478 : "CUBESET" , 479 : "CUBESETCOUNT" , 480 : "IFERROR" , 481 : "COUNTIFS" , 482 : "SUMIFS" , 483 : "AVERAGEIF" , 484 : "AVERAGEIFS" } ; var FtabArgc = { 2 : 1 , 3 : 1 , 15 : 1 , 16 : 1 , 17 : 1 , 18 : 1 , 19 : 0 , 20 : 1 , 21 : 1 , 22 : 1 , 23 : 1 , 24 : 1 , 25 : 1 , 26 : 1 , 27 : 2 , 30 : 2 , 31 : 3 , 32 : 1 , 33 : 1 , 38 : 1 , 39 : 2 , 40 : 3 , 41 : 3 , 42 : 3 , 43 : 3 , 44 : 3 , 45 : 3 , 47 : 3 , 48 : 2 , 53 : 1 , 61 : 3 , 65 : 3 , 66 : 3 , 67 : 1 , 68 : 1 , 69 : 1 , 70 : 1 , 71 : 1 , 72 : 1 , 73 : 1 , 75 : 1 , 76 : 1 , 77 : 1 , 79 : 2 , 80 : 2 , 83 : 1 , 85 : 0 , 86 : 1 , 90 : 1 , 97 : 2 , 98 : 1 , 99 : 1 , 101 : 3 , 102 : 3 , 105 : 1 , 111 : 1 , 112 : 1 , 113 : 1 , 114 : 1 , 117 : 2 , 118 : 1 , 119 : 4 , 121 : 1 , 126 : 1 , 127 : 1 , 128 : 1 , 129 : 1 , 130 : 1 , 131 : 1 , 133 : 1 , 134 : 1 , 135 : 1 , 136 : 2 , 137 : 2 , 138 : 2 , 140 : 1 , 141 : 1 , 142 : 3 , 143 : 4 , 144 : 4 , 162 : 1 , 163 : 1 , 164 : 1 , 165 : 2 , 172 : 1 , 175 : 2 , 176 : 2 , 177 : 3 , 178 : 2 , 179 : 1 , 184 : 1 , 189 : 3 , 190 : 1 , 195 : 3 , 196 : 3 , 197 : 1 , 198 : 1 , 199 : 3 , 201 : 1 , 207 : 4 , 210 : 3 , 211 : 1 , 212 : 2 , 213 : 2 , 214 : 1 , 215 : 1 , 229 : 1 , 230 : 1 , 231 : 1 , 232 : 1 , 233 : 1 , 234 : 1 , 235 : 3 , 244 : 1 , 247 : 4 , 252 : 2 , 257 : 1 , 261 : 1 , 271 : 1 , 273 : 4 , 274 : 2 , 275 : 2 , 276 : 2 , 277 : 3 , 278 : 3 , 279 : 1 , 280 : 3 , 281 : 3 , 282 : 3 , 283 : 1 , 284 : 1 , 285 : 2 , 286 : 4 , 287 : 3 , 288 : 2 , 289 : 4 , 290 : 3 , 291 : 3 , 292 : 3 , 293 : 4 , 294 : 1 , 295 : 3 , 296 : 1 , 297 : 3 , 298 : 1 , 299 : 2 , 300 : 3 , 301 : 3 , 302 : 4 , 303 : 2 , 304 : 2 , 305 : 2 , 306 : 2 , 307 : 2 , 308 : 2 , 309 : 3 , 310 : 2 , 311 : 2 , 312 : 2 , 313 : 2 , 314 : 2 , 315 : 2 , 316 : 4 , 325 : 2 , 326 : 2 , 327 : 2 , 328 : 2 , 331 : 2 , 332 : 2 , 337 : 2 , 342 : 1 , 343 : 1 , 346 : 2 , 347 : 1 , 350 : 4 , 351 : 3 , 352 : 1 , 353 : 2 , 360 : 1 , 368 : 1 , 369 : 1 , 370 : 1 , 371 : 1 , 372 : 1 , 373 : 1 , 374 : 1 , 375 : 1 , 376 : 1 , 377 : 1 , 378 : 1 , 382 : 3 , 385 : 1 , 392 : 1 , 393 : 1 , 396 : 2 , 397 : 2 , 398 : 2 , 399 : 1 , 400 : 1 , 401 : 1 , 402 : 1 , 403 : 1 , 404 : 1 , 405 : 1 , 406 : 1 , 407 : 1 , 408 : 1 , 409 : 1 , 410 : 1 , 414 : 4 , 415 : 1 , 416 : 1 , 417 : 2 , 420 : 1 , 421 : 1 , 422 : 2 , 424 : 1 , 425 : 2 , 426 : 2 , 427 : 2 , 428 : 2 , 430 : 3 , 438 : 3 , 439 : 3 , 440 : 3 , 443 : 2 , 444 : 2 , 445 : 2 , 446 : 2 , 447 : 6 , 448 : 6 , 449 : 2 , 450 : 2 , 464 : 2 , 468 : 3 , 476 : 2 , 479 : 1 , 480 : 2 , 65535 : 0 } ; var XLSXFutureFunctions = { "_xlfn.ACOT" : "ACOT" , "_xlfn.ACOTH" : "ACOTH" , "_xlfn.AGGREGATE" : "AGGREGATE" , "_xlfn.ARABIC" : "ARABIC" , "_xlfn.AVERAGEIF" : "AVERAGEIF" , "_xlfn.AVERAGEIFS" : "AVERAGEIFS" , "_xlfn.BASE" : "BASE" , "_xlfn.BETA.DIST" : " BETA . DIST
var WBViewDef = [ [ "activeTab" , "0" ] , [ "autoFilterDateGrouping" , "1" ] , [ "firstSheet" , "0" ] , [ "minimized" , "0" ] , [ "showHorizontalScroll" , "1" ] , [ "showSheetTabs" , "1" ] , [ "showVerticalScroll" , "1" ] , [ "tabRatio" , "600" ] , [ "visibility" , "visible" ] ] ; var SheetDef = [ [ "state" , "visible" ] ] ; var CalcPrDef = [ [ "calcCompleted" , "true" ] , [ "calcMode" , "auto" ] , [ "calcOnSave" , "true" ] , [ "concurrentCalc" , "true" ] , [ "fullCalcOnLoad" , "false" ] , [ "fullPrecision" , "true" ] , [ "iterate" , "false" ] , [ "iterateCount" , "100" ] , [ "iterateDelta" , "0.001" ] , [ "refMode" , "A1" ] ] ; var CustomWBViewDef = [ [ "autoUpdate" , "false" ] , [ "changesSavedWin" , "false" ] , [ "includeHiddenRowCol" , "true" ] , [ "includePrintSettings" , "true" ] , [ "maximized" , "false" ] , [ "minimized" , "false" ] , [ "onlySync" , "false" ] , [ "personalView" , "false" ] , [ "showComments" , "commIndicator" ] , [ "showFormulaBar" , "true" ] , [ "showHorizontalScroll" , "true" ] , [ "showObjects" , "all" ] , [ "showSheetTabs" , "true" ] , [ "showStatusbar" , "true" ] , [ "showVerticalScroll" , "true" ] , [ "tabRatio" , "600" ] , [ "xWindow" , "0" ] , [ "yWindow" , "0" ] ] ; function push _defaults _array ( target , defaults ) { for ( var j = 0 ; j != target . length ; ++ j ) { var w = target [ j ] ; for ( var i = 0 ; i != defaults . length ; ++ i ) { var z = defaults [ i ] ; if ( w [ z [ 0 ] ] == null ) w [ z [ 0 ] ] = z [ 1 ] } } } function push _defaults ( target , defaults ) { for ( var i = 0 ; i != defaults . length ; ++ i ) { var z = defaults [ i ] ; if ( target [ z [ 0 ] ] == null ) target [ z [ 0 ] ] = z [ 1 ] } } function parse _wb _defaults ( wb ) { push _defaults ( wb . WBProps , WBPropsDef ) ; push _defaults ( wb . CalcPr , CalcPrDef ) ; push _defaults _array ( wb . WBView , WBViewDef ) ; push _defaults _array ( wb . Sheets , SheetDef ) ; _ssfopts . date1904 = parsexmlbool ( wb . WBProps . date1904 , "date1904" ) } function check _wb ( wb ) { if ( ! wb || ! wb . SheetNames || ! wb . Sheets ) throw new Error ( "Invalid Workbook" ) ; for ( var i = 0 ; i < wb . SheetNames . length ; ++ i ) for ( var j = 0 ; j < i ; ++ j ) if ( wb . SheetNames [ i ] == wb . SheetNames [ j ] ) throw new Error ( "Duplicate Sheet Name: " + wb . SheetNames [ i ] ) } var wbnsregex = /<\w+:workbook/ ; function parse _wb _xml ( data , opts ) { if ( ! data ) throw new Error ( "Could not find file" ) ; var wb = { AppVersion : { } , WBProps : { } , WBView : [ ] , Sheets : [ ] , CalcPr : { } , Names : { "!names" : [ ] } , xmlns : "" } ; var pass = false , xmlns = "xmlns" ; var dname = { } , dnstart = 0 ; data . replace ( tagregex , function xml _wb ( x , idx ) { var y = parsexmltag ( x ) ; switch ( strip _ns ( y [ 0 ] ) ) { case "<?xml" : break ; case "<workbook" : if ( x . match ( wbnsregex ) ) xmlns = "xmlns" + x . match ( /<(\w+):/ ) [ 1 ] ; wb . xmlns = y [ xmlns ] ; break ; case "</workbook>" : break ; case "<fileVersion" : delete y [ 0 ] ; wb . AppVersion = y ; break ; case "<fileVersion/>" : case "</fileVersion>" : break ; case "<fileSharing" : case "<fileSharing/>" : break ; case "<workbookPr" : delete y [ 0 ] ; wb . WBProps = y ; break ; case "<workbookPr/>" : delete y [ 0 ] ; wb . WBProps = y ; break ; case "</workbookPr>" : break ; case "<workbookProtection" : break ; case "<workbookProtection/>" : break ; case "<bookViews>" : case "</bookViews>" : break ; case "<workbookView" : delete y [ 0 ] ; wb . WBView . push ( y ) ; break ; case "</workbookView>" : break ; case "<sheets>" : case "</sheets>" : break ; case "<sheet" : delete y [ 0 ] ; y . name = unescapexml ( utf8read ( y . name ) ) ; wb . Sheets . push ( y ) ; break ; case "</sheet>" : break ; case "<functionGroups" : case "<functionGroups/>" : break ; case "<functionGroup" : break ; case "<externalReferences" : case "</externalReferences>" : case "<externalReferences>" : break ; case "<externalReference" : break ; case "<definedNames/>" : break ; case "<definedNames>" : case "<definedNames" : pass = true ; break ; case "</definedNames>" : pass = false ; break ; case "<definedName" : { dname = { } ; dname . Name = y . name ; if ( y . comment ) dname . Comment = y . comment ; dnstart = idx + x . length } break ; case "</definedName>" : { dname . Ref = data . slice ( dnstart , idx ) ; wb . Names [ dname . Name ] = dname ; wb . Names [ "!names" ] . push ( dname . Name ) } break ; case "<definedName/>" : break ; case "<calcPr" : delete y [ 0 ] ; wb . CalcPr = y ; break ; case "<calcPr/>" : delete y [ 0 ] ; wb . CalcPr = y ; break ; case "</calcPr>" : break ; case "<oleSize" : break ; case "<customWorkbookViews>" : case "</customWorkbookViews>" : case "<customWorkbookViews" : break ; case "<customWorkbookView" : case "</customWorkbookView>" : break ; case "<pivotCaches>" : case "</pivotCaches>" : case "<pivotCaches" : break ; case "<pivotCache" : break ; case "<smartTagPr" : case "<smartTagPr/>" : break ; case "<smartTagTypes" : case "<smartTagTypes>" : case "</smartTagTypes>" : break ; case "<smartTagType" : break ; case "<webPublishing" : case "<webPublishing/>" : break ; case "<fileRecoveryPr" : case "<fileRecoveryPr/>" : break ; case " < webPu
l += m } m = _ _lpstr ( o , l ) ; l += m . length === 0 ? 0 : 5 + m . length ; v . Reserved1 = m ; if ( ( m = _ _readUInt32LE ( o , l ) ) !== 1907550708 ) return v ; throw new Error ( "Unsupported Unicode Extension" ) } function slurp ( R , blob , length , opts ) { var l = length ; var bufs = [ ] ; var d = blob . slice ( blob . l , blob . l + l ) ; if ( opts && opts . enc && opts . enc . insitu _decrypt ) switch ( R . n ) { case "BOF" : case "FilePass" : case "FileLock" : case "InterfaceHdr" : case "RRDInfo" : case "RRDHead" : case "UsrExcl" : break ; default : if ( d . length === 0 ) break ; opts . enc . insitu _decrypt ( d ) } bufs . push ( d ) ; blob . l += l ; var next = XLSRecordEnum [ _ _readUInt16LE ( blob , blob . l ) ] ; while ( next != null && next . n === "Continue" ) { l = _ _readUInt16LE ( blob , blob . l + 2 ) ; bufs . push ( blob . slice ( blob . l + 4 , blob . l + 4 + l ) ) ; blob . l += 4 + l ; next = XLSRecordEnum [ _ _readUInt16LE ( blob , blob . l ) ] } var b = bconcat ( bufs ) ; prep _blob ( b , 0 ) ; var ll = 0 ; b . lens = [ ] ; for ( var j = 0 ; j < bufs . length ; ++ j ) { b . lens . push ( ll ) ; ll += bufs [ j ] . length } return R . f ( b , b . length , opts ) } function safe _format _xf ( p , opts , date1904 ) { if ( p . t === "z" ) return ; if ( p . t === "e" ) { p . w = p . w || BErr [ p . v ] } if ( ! p . XF ) return ; try { var fmtid = p . XF . ifmt || 0 ; if ( p . t === "e" ) ; else if ( fmtid === 0 ) { if ( p . t === "n" ) { if ( ( p . v | 0 ) === p . v ) p . w = SSF . _general _int ( p . v ) ; else p . w = SSF . _general _num ( p . v ) } else p . w = SSF . _general ( p . v ) } else p . w = SSF . format ( fmtid , p . v , { date1904 : ! ! date1904 } ) ; if ( opts . cellDates && fmtid && p . t == "n" && SSF . is _date ( SSF . _table [ fmtid ] ) ) { var _d = SSF . parse _date _code ( p . v ) ; if ( _d ) { p . t = "d" ; p . v = new Date ( Date . UTC ( _d . y , _d . m - 1 , _d . d , _d . H , _d . M , _d . S , _d . u ) ) } } if ( opts . cellNF ) p . z = SSF . _table [ fmtid ] } catch ( e ) { if ( opts . WTF ) throw e } } function make _cell ( val , ixfe , t ) { return { v : val , ixfe : ixfe , t : t } } function parse _workbook ( blob , options ) { var wb = { opts : { } } ; var Sheets = { } ; var out = { } ; var Directory = { } ; var found _sheet = false ; var range = { } ; var last _formula = null ; var sst = [ ] ; var cur _sheet = "" ; var Preamble = { } ; var lastcell , last _cell = "" , cc , cmnt , rng , rngC , rngR ; var shared _formulae = { } ; var array _formulae = [ ] ; var temp _val ; var country ; var cell _valid = true ; var XFs = [ ] ; var palette = [ ] ; var get _rgb = function getrgb ( icv ) { if ( icv < 8 ) return XLSIcv [ icv ] ; if ( icv < 64 ) return palette [ icv - 8 ] || XLSIcv [ icv ] ; return XLSIcv [ icv ] } ; var process _cell _style = function pcs ( cell , line , options ) { var xfd = line . XF . data ; if ( ! xfd || ! xfd . patternType || ! options || ! options . cellStyles ) return ; line . s = { } ; line . s . patternType = xfd . patternType ; var t ; if ( t = rgb2Hex ( get _rgb ( xfd . icvFore ) ) ) { line . s . fgColor = { rgb : t } } if ( t = rgb2Hex ( get _rgb ( xfd . icvBack ) ) ) { line . s . bgColor = { rgb : t } } } ; var addcell = function addcell ( cell , line , options ) { if ( file _depth > 1 ) return ; if ( ! cell _valid ) return ; if ( options . cellStyles && line . XF && line . XF . data ) process _cell _style ( cell , line , options ) ; lastcell = cell ; last _cell = encode _cell ( cell ) ; if ( range . s ) { if ( cell . r < range . s . r ) range . s . r = cell . r ; if ( cell . c < range . s . c ) range . s . c = cell . c } if ( range . e ) { if ( cell . r + 1 > range . e . r ) range . e . r = cell . r + 1 ; if ( cell . c + 1 > range . e . c ) range . e . c = cell . c + 1 } if ( options . cellFormula && line . f ) { for ( var afi = 0 ; afi < array _formulae . length ; ++ afi ) { if ( array _formulae [ afi ] [ 0 ] . s . c > cell . c ) continue ; if ( array _formulae [ afi ] [ 0 ] . s . r > cell . r ) continue ; if ( array _formulae [ afi ] [ 0 ] . e . c < cell . c ) continue ; if ( array _formulae [ afi ] [ 0 ] . e . r < cell . r ) continue ; line . F = encode _range ( array _formulae [ afi ] [ 0 ] ) ; if ( array _formulae [ afi ] [ 0 ] . s . c != cell . c ) delete line . f ; if ( array _formulae [ afi ] [ 0 ] . s . r != cell . r ) delete line . f ; if ( line . f ) line . f = "" + stringify _formula ( array _formulae [ afi ] [ 1 ] , range , cell , supbooks , opts ) ; break } } if ( options . sheetRows && lastcell . r >= options . sheetRows ) cell _valid = false ; else out [ last _cell ] = line } ; var opts = { enc : false , sbcch : 0 , snames : [ ] , sharedf : shared _formulae , arrayf : array _formulae , rrtabid : [ ] , lastuser : "" , biff : 8 , codepage : 0 , winlocked : 0 , cellStyles : ! ! options && ! ! options . cellStyles , WTF : ! ! options && ! ! options . wtf } ; if ( options . password ) opts . password = options . password ; var mergecells = [ ] ; var objects = [ ] ; var colinfo = [ ] , rowinfo = [ ] ; var defwidth = 0 , defheight = 0 ; var seencol = false ; var supbooks = [ [ ] ] ; var sbc = 0 , sbci = 0 , sbcli = 0 ; supbooks . SheetNames = opts . snames ; supbooks . sharedf = opts . sharedf ; supbooks . arrayf = opts . arrayf ; var last _Rn = "" ; var file _depth = 0 ; var BIFF2Fmt = 0 ; opts . codepage = 1200 ; set _cp ( 1200 ) ; while ( blob . l < blob . length - 1 ) { var s = blob . l ; var RecordType = blob . read _shift ( 2 ) ; if ( RecordType === 0 && last _Rn === "EOF" ) break ; var length = blob . l === blob . length ? 0 : blob . read _shift ( 2 ) , y ; var R = XLSRecordEnum [ RecordType ] ; if ( R &&
n : "BrtEndPCDHGLGMembers" , f : parsenoop } , 445 : { n : "BrtBeginPCDHGLGMember" , f : parsenoop } , 446 : { n : "BrtEndPCDHGLGMember" , f : parsenoop } , 447 : { n : "BrtBeginQSI" , f : parsenoop } , 448 : { n : "BrtEndQSI" , f : parsenoop } , 449 : { n : "BrtBeginQSIR" , f : parsenoop } , 450 : { n : "BrtEndQSIR" , f : parsenoop } , 451 : { n : "BrtBeginDeletedNames" , f : parsenoop } , 452 : { n : "BrtEndDeletedNames" , f : parsenoop } , 453 : { n : "BrtBeginDeletedName" , f : parsenoop } , 454 : { n : "BrtEndDeletedName" , f : parsenoop } , 455 : { n : "BrtBeginQSIFs" , f : parsenoop } , 456 : { n : "BrtEndQSIFs" , f : parsenoop } , 457 : { n : "BrtBeginQSIF" , f : parsenoop } , 458 : { n : "BrtEndQSIF" , f : parsenoop } , 459 : { n : "BrtBeginAutoSortScope" , f : parsenoop } , 460 : { n : "BrtEndAutoSortScope" , f : parsenoop } , 461 : { n : "BrtBeginConditionalFormatting" , f : parsenoop } , 462 : { n : "BrtEndConditionalFormatting" , f : parsenoop } , 463 : { n : "BrtBeginCFRule" , f : parsenoop } , 464 : { n : "BrtEndCFRule" , f : parsenoop } , 465 : { n : "BrtBeginIconSet" , f : parsenoop } , 466 : { n : "BrtEndIconSet" , f : parsenoop } , 467 : { n : "BrtBeginDatabar" , f : parsenoop } , 468 : { n : "BrtEndDatabar" , f : parsenoop } , 469 : { n : "BrtBeginColorScale" , f : parsenoop } , 470 : { n : "BrtEndColorScale" , f : parsenoop } , 471 : { n : "BrtCFVO" , f : parsenoop } , 472 : { n : "BrtExternValueMeta" , f : parsenoop } , 473 : { n : "BrtBeginColorPalette" , f : parsenoop } , 474 : { n : "BrtEndColorPalette" , f : parsenoop } , 475 : { n : "BrtIndexedColor" , f : parsenoop } , 476 : { n : "BrtMargins" , f : parsenoop } , 477 : { n : "BrtPrintOptions" , f : parsenoop } , 478 : { n : "BrtPageSetup" , f : parsenoop } , 479 : { n : "BrtBeginHeaderFooter" , f : parsenoop } , 480 : { n : "BrtEndHeaderFooter" , f : parsenoop } , 481 : { n : "BrtBeginSXCrtFormat" , f : parsenoop } , 482 : { n : "BrtEndSXCrtFormat" , f : parsenoop } , 483 : { n : "BrtBeginSXCrtFormats" , f : parsenoop } , 484 : { n : "BrtEndSXCrtFormats" , f : parsenoop } , 485 : { n : "BrtWsFmtInfo" , f : parsenoop } , 486 : { n : "BrtBeginMgs" , f : parsenoop } , 487 : { n : "BrtEndMGs" , f : parsenoop } , 488 : { n : "BrtBeginMGMaps" , f : parsenoop } , 489 : { n : "BrtEndMGMaps" , f : parsenoop } , 490 : { n : "BrtBeginMG" , f : parsenoop } , 491 : { n : "BrtEndMG" , f : parsenoop } , 492 : { n : "BrtBeginMap" , f : parsenoop } , 493 : { n : "BrtEndMap" , f : parsenoop } , 494 : { n : "BrtHLink" , f : parse _BrtHLink } , 495 : { n : "BrtBeginDCon" , f : parsenoop } , 496 : { n : "BrtEndDCon" , f : parsenoop } , 497 : { n : "BrtBeginDRefs" , f : parsenoop } , 498 : { n : "BrtEndDRefs" , f : parsenoop } , 499 : { n : "BrtDRef" , f : parsenoop } , 500 : { n : "BrtBeginScenMan" , f : parsenoop } , 501 : { n : "BrtEndScenMan" , f : parsenoop } , 502 : { n : "BrtBeginSct" , f : parsenoop } , 503 : { n : "BrtEndSct" , f : parsenoop } , 504 : { n : "BrtSlc" , f : parsenoop } , 505 : { n : "BrtBeginDXFs" , f : parsenoop } , 506 : { n : "BrtEndDXFs" , f : parsenoop } , 507 : { n : "BrtDXF" , f : parsenoop } , 508 : { n : "BrtBeginTableStyles" , f : parsenoop } , 509 : { n : "BrtEndTableStyles" , f : parsenoop } , 510 : { n : "BrtBeginTableStyle" , f : parsenoop } , 511 : { n : "BrtEndTableStyle" , f : parsenoop } , 512 : { n : "BrtTableStyleElement" , f : parsenoop } , 513 : { n : "BrtTableStyleClient" , f : parsenoop } , 514 : { n : "BrtBeginVolDeps" , f : parsenoop } , 515 : { n : "BrtEndVolDeps" , f : parsenoop } , 516 : { n : "BrtBeginVolType" , f : parsenoop } , 517 : { n : "BrtEndVolType" , f : parsenoop } , 518 : { n : "BrtBeginVolMain" , f : parsenoop } , 519 : { n : "BrtEndVolMain" , f : parsenoop } , 520 : { n : "BrtBeginVolTopic" , f : parsenoop } , 521 : { n : "BrtEndVolTopic" , f : parsenoop } , 522 : { n : "BrtVolSubtopic" , f : parsenoop } , 523 : { n : "BrtVolRef" , f : parsenoop } , 524 : { n : "BrtVolNum" , f : parsenoop } , 525 : { n : "BrtVolErr" , f : parsenoop } , 526 : { n : "BrtVolStr" , f : parsenoop } , 527 : { n : "BrtVolBool" , f : parsenoop } , 528 : { n : "BrtBeginCalcChain$" , f : parsenoop } , 529 : { n : "BrtEndCalcChain$" , f : parsenoop } , 530 : { n : "BrtBeginSortState" , f : parsenoop } , 531 : { n : "BrtEndSortState" , f : parsenoop } , 532 : { n : "BrtBeginSortCond" , f : parsenoop } , 533 : { n : "BrtEndSortCond" , f : parsenoop } , 534 : { n : "BrtBookProtection" , f : parsenoop } , 535 : { n : "BrtSheetProtection" , f : parsenoop } , 536 : { n : "BrtRangeProtection" , f : parsenoop } , 537 : { n : "BrtPhoneticInfo" , f : parsenoop } , 538 : { n : "BrtBeginECTxtWiz" , f : parsenoop } , 539 : { n : "BrtEndECTxtWiz" , f : parsenoop } , 540 : { n : "BrtBeginECTWFldInfoLst" , f : parsenoop } , 541 : { n : "BrtEndECTWFldInfoLst" , f : parsenoop } , 542 : { n : "BrtBeginECTwFldInfo" , f : parsenoop } , 548 : { n : "BrtFileSharing" , f : parsenoop } , 549 : { n : "BrtOleSize" , f : parsenoop } , 550 : { n : "BrtDrawing" , f : parsenoop } , 551 : { n : "BrtLegacyDrawing" , f : parsenoop } , 552 : { n : "BrtLegacyDrawingHF" , f : parsenoop } , 553 : { n : "BrtWebOpt" , f : parsenoop } , 554 : { n : "BrtBeginWebPubItems" , f : parsenoop } , 555 : { n : "BrtEndWebPubItems" , f : parsenoop } , 556 : { n : "BrtBeginWebPubItem" , f : parsenoop } , 557 : { n : "BrtEndWebPubItem" , f : parsenoop } , 558
f : parsenoop } , 214 : { n : "RString" , f : parse _RString } , 223 : { n : "UDDesc" , f : parsenoop } , 234 : { n : "TabIdConf" , f : parsenoop } , 354 : { n : "XL5Modify" , f : parsenoop } , 421 : { n : "FileSharing2" , f : parsenoop } , 521 : { n : "BOF" , f : parse _BOF } , 536 : { n : "Lbl" , f : parse _Lbl } , 547 : { n : "ExternName" , f : parse _ExternName } , 561 : { n : "Font" , f : parsenoop } , 1033 : { n : "BOF" , f : parse _BOF } , 2157 : { n : "FeatInfo" , f : parsenoop } , 2163 : { n : "FeatInfo11" , f : parsenoop } , 2177 : { n : "SXAddl12" , f : parsenoop } , 2240 : { n : "AutoWebPub" , f : parsenoop } , 2241 : { n : "ListObj" , f : parsenoop } , 2242 : { n : "ListField" , f : parsenoop } , 2243 : { n : "ListDV" , f : parsenoop } , 2244 : { n : "ListCondFmt" , f : parsenoop } , 2245 : { n : "ListCF" , f : parsenoop } , 2246 : { n : "FMQry" , f : parsenoop } , 2247 : { n : "FMSQry" , f : parsenoop } , 2248 : { n : "PLV" , f : parsenoop } , 2249 : { n : "LnExt" , f : parsenoop } , 2250 : { n : "MkrExt" , f : parsenoop } , 2251 : { n : "CrtCoopt" , f : parsenoop } , 67 : { n : "BIFF2XF" , f : parsenoop } , 579 : { n : "BIFF3XF" , f : parsenoop } , 1091 : { n : "BIFF4XF" , f : parsenoop } , 29282 : { } } ; function write _biff _rec ( ba , t , payload , length ) { var len = length || ( payload || [ ] ) . length ; var o = ba . next ( 4 + len ) ; o . write _shift ( 2 , t ) ; o . write _shift ( 2 , len ) ; if ( len > 0 && is _buf ( payload ) ) ba . push ( payload ) } function write _BOF ( wb , o ) { if ( o . bookType != "biff2" ) throw "unsupported BIFF version" ; var out = new _buf ( 4 ) ; out . write _shift ( 2 , 2 ) ; out . write _shift ( 2 , 16 ) ; return out } function write _BIFF2Cell ( out , r , c ) { if ( ! out ) out = new _buf ( 7 ) ; out . write _shift ( 2 , r ) ; out . write _shift ( 2 , c ) ; out . write _shift ( 1 , 0 ) ; out . write _shift ( 1 , 0 ) ; out . write _shift ( 1 , 0 ) ; return out } function write _BIFF2INT ( r , c , val ) { var out = new _buf ( 9 ) ; write _BIFF2Cell ( out , r , c ) ; out . write _shift ( 2 , val ) ; return out } function write _BIFF2NUMBER ( r , c , val ) { var out = new _buf ( 15 ) ; write _BIFF2Cell ( out , r , c ) ; out . write _shift ( 8 , val , "f" ) ; return out } function write _BIFF2BERR ( r , c , val , t ) { var out = new _buf ( 9 ) ; write _BIFF2Cell ( out , r , c ) ; if ( t == "e" ) { out . write _shift ( 1 , val ) ; out . write _shift ( 1 , 1 ) } else { out . write _shift ( 1 , val ? 1 : 0 ) ; out . write _shift ( 1 , 0 ) } return out } function write _BIFF2LABEL ( r , c , val ) { var out = new _buf ( 8 + 2 * val . length ) ; write _BIFF2Cell ( out , r , c ) ; out . write _shift ( 1 , val . length ) ; out . write _shift ( val . length , val , "sbcs" ) ; return out . l < out . length ? out . slice ( 0 , out . l ) : out } function write _ws _biff _cell ( ba , cell , R , C , opts ) { if ( cell . v != null ) switch ( cell . t ) { case "n" : if ( cell . v == ( cell . v | 0 ) && cell . v >= 0 && cell . v < 65536 ) write _biff _rec ( ba , 2 , write _BIFF2INT ( R , C , cell . v ) ) ; else write _biff _rec ( ba , 3 , write _BIFF2NUMBER ( R , C , cell . v ) ) ; return ; case "b" : case "e" : write _biff _rec ( ba , 5 , write _BIFF2BERR ( R , C , cell . v , cell . t ) ) ; return ; case "s" : case "str" : write _biff _rec ( ba , 4 , write _BIFF2LABEL ( R , C , cell . v ) ) ; return } write _biff _rec ( ba , 1 , write _BIFF2Cell ( null , R , C ) ) } function write _biff _ws ( ba , ws , idx , opts , wb ) { var range = safe _decode _range ( ws [ "!ref" ] || "A1" ) , ref , rr = "" , cols = [ ] ; for ( var R = range . s . r ; R <= range . e . r ; ++ R ) { rr = encode _row ( R ) ; for ( var C = range . s . c ; C <= range . e . c ; ++ C ) { if ( R === range . s . r ) cols [ C ] = encode _col ( C ) ; ref = cols [ C ] + rr ; if ( ! ws [ ref ] ) continue ; write _ws _biff _cell ( ba , ws [ ref ] , R , C , opts ) } } } function write _biff _buf ( wb , o ) { var ba = buf _array ( ) ; var idx = 0 ; for ( var i = 0 ; i < wb . SheetNames . length ; ++ i ) if ( wb . SheetNames [ i ] == o . sheet ) idx = i ; if ( idx == 0 && ! ! o . sheet && wb . SheetNames [ 0 ] != o . sheet ) throw new Error ( "Sheet not found: " + o . sheet ) ; write _biff _rec ( ba , 9 , write _BOF ( wb , o ) ) ; write _biff _ws ( ba , wb . Sheets [ wb . SheetNames [ idx ] ] , idx , o , wb ) ; write _biff _rec ( ba , 10 ) ; return ba . end ( ) } function parse _html ( str , opts ) { var ws = { } ; var o = { SheetNames : [ "Sheet1" ] , Sheets : { Sheet1 : ws } } ; var i = str . indexOf ( "<table" ) , j = str . indexOf ( "</table" ) ; if ( i == - 1 || j == - 1 ) throw new Error ( "Invalid HTML: missing <table> / </table> pair" ) ; var rows = str . slice ( i , j ) . split ( /<tr[^>]*>/ ) ; var R = 0 , C = 0 ; var range = { s : { r : 1e7 , c : 1e7 } , e : { r : 0 , c : 0 } } ; for ( i = 0 ; i < rows . length ; ++ i ) { if ( rows [ i ] . substr ( 0 , 3 ) != "<td" ) continue ; var cells = rows [ i ] . split ( "</td>" ) ; for ( j = 0 ; j < cells . length ; ++ j ) { if ( cells [ j ] . substr ( 0 , 3 ) != "<td" ) continue ; ++ C ; var m = cells [ j ] , cc = 0 ; while ( m . charAt ( 0 ) == "<" && ( cc = m . indexOf ( ">" ) ) > - 1 ) m = m . slice ( cc + 1 ) ; while ( m . indexOf ( ">" ) > - 1 ) m = m . slice ( 0 , m . lastIndexOf ( "<" ) ) ; if ( ! m . length ) continue ; if ( range . s . r > R ) range . s . r = R ; if ( range . e . r < R ) range . e . r = R ; if ( range . s . c > C ) range . s . c = C ; if ( range . e . c < C ) range . e . c = C ; var coord = encode _cell ( { r : R , c : C } ) ; if ( Number ( m ) == Number ( m ) ) ws [ coord ] = { t : "n" , v : + m } ; else ws [ coord ] = { t : "s" , v : m } } ++ R ; C = 0 } ws [ "!ref" ] = encode _range ( range ) ; return o } var parse _content _xml = func
if ( cell . z != null ) try { return cell . w = SSF . format ( cell . z , q ? datenum ( v ) : v ) } catch ( e ) { } try { return cell . w = SSF . format ( ( cell . XF || { } ) . ifmt || ( q ? 14 : 0 ) , q ? datenum ( v ) : v ) } catch ( e ) { return "" + v } } function format _cell ( cell , v , o ) { if ( cell == null || cell . t == null || cell . t == "z" ) return "" ; if ( cell . w !== undefined ) return cell . w ; if ( cell . t == "d" && ! cell . z && o && o . dateNF ) cell . z = o . dateNF ; if ( v == undefined ) return safe _format _cell ( cell , cell . v , o ) ; return safe _format _cell ( cell , v , o ) } function sheet _to _json ( sheet , opts ) { var val , row , range , header = 0 , offset = 1 , r , hdr = [ ] , isempty , R , C , v , vv ; var o = opts != null ? opts : { } ; var raw = o . raw ; var defval = o . defval ; if ( sheet == null || sheet [ "!ref" ] == null ) return [ ] ; range = o . range != null ? o . range : sheet [ "!ref" ] ; if ( o . header === 1 ) header = 1 ; else if ( o . header === "A" ) header = 2 ; else if ( Array . isArray ( o . header ) ) header = 3 ; switch ( typeof range ) { case "string" : r = safe _decode _range ( range ) ; break ; case "number" : r = safe _decode _range ( sheet [ "!ref" ] ) ; r . s . r = range ; break ; default : r = range } if ( header > 0 ) offset = 0 ; var rr = encode _row ( r . s . r ) ; var cols = new Array ( r . e . c - r . s . c + 1 ) ; var out = new Array ( r . e . r - r . s . r - offset + 1 ) ; var outi = 0 ; for ( C = r . s . c ; C <= r . e . c ; ++ C ) { cols [ C ] = encode _col ( C ) ; val = sheet [ cols [ C ] + rr ] ; switch ( header ) { case 1 : hdr [ C ] = C ; break ; case 2 : hdr [ C ] = cols [ C ] ; break ; case 3 : hdr [ C ] = o . header [ C - r . s . c ] ; break ; default : if ( val == null ) continue ; vv = v = format _cell ( val , null , o ) ; var counter = 0 ; for ( var CC = 0 ; CC < hdr . length ; ++ CC ) if ( hdr [ CC ] == vv ) vv = v + "_" + ++ counter ; hdr [ C ] = vv } } for ( R = r . s . r + offset ; R <= r . e . r ; ++ R ) { rr = encode _row ( R ) ; isempty = true ; if ( header === 1 ) row = [ ] ; else { row = { } ; if ( Object . defineProperty ) try { Object . defineProperty ( row , "__rowNum__" , { value : R , enumerable : false } ) } catch ( e ) { row . _ _rowNum _ _ = R } else row . _ _rowNum _ _ = R } for ( C = r . s . c ; C <= r . e . c ; ++ C ) { val = sheet [ cols [ C ] + rr ] ; if ( val === undefined || val . t === undefined ) { if ( defval === undefined ) continue ; if ( hdr [ C ] != null ) { row [ hdr [ C ] ] = defval ; isempty = false } continue } v = val . v ; switch ( val . t ) { case "z" : if ( v == null ) break ; continue ; case "e" : continue ; case "s" : case "d" : case "b" : case "n" : break ; default : throw new Error ( "unrecognized type " + val . t ) } if ( hdr [ C ] != null ) { if ( v == null ) { if ( defval !== undefined ) row [ hdr [ C ] ] = defval ; else if ( raw && v === null ) row [ hdr [ C ] ] = null ; else continue } else { row [ hdr [ C ] ] = raw ? v : format _cell ( val , v , o ) } isempty = false } } if ( isempty === false || ( header === 1 ? o . blankrows !== false : ! ! o . blankrows ) ) out [ outi ++ ] = row } out . length = outi ; return out } function sheet _to _csv ( sheet , opts ) { var out = "" , txt = "" , qreg = /"/g ; var o = opts == null ? { } : opts ; if ( sheet == null || sheet [ "!ref" ] == null ) return "" ; var r = safe _decode _range ( sheet [ "!ref" ] ) ; var FS = o . FS !== undefined ? o . FS : "," , fs = FS . charCodeAt ( 0 ) ; var RS = o . RS !== undefined ? o . RS : "\n" , rs = RS . charCodeAt ( 0 ) ; var endregex = new RegExp ( ( FS == "|" ? "\\|" : FS ) + "+$" ) ; var row = "" , rr = "" , cols = [ ] ; var i = 0 , cc = 0 , val ; var R = 0 , C = 0 ; for ( C = r . s . c ; C <= r . e . c ; ++ C ) cols [ C ] = encode _col ( C ) ; for ( R = r . s . r ; R <= r . e . r ; ++ R ) { var isempty = true ; row = "" ; rr = encode _row ( R ) ; for ( C = r . s . c ; C <= r . e . c ; ++ C ) { val = sheet [ cols [ C ] + rr ] ; if ( val == null ) txt = "" ; else if ( val . v != null ) { isempty = false ; txt = "" + format _cell ( val , null , o ) ; for ( i = 0 , cc = 0 ; i !== txt . length ; ++ i ) if ( ( cc = txt . charCodeAt ( i ) ) === fs || cc === rs || cc === 34 ) { txt = '"' + txt . replace ( qreg , '""' ) + '"' ; break } } else if ( val . f != null && ! val . F ) { isempty = false ; txt = "=" + val . f ; if ( txt . indexOf ( "," ) >= 0 ) txt = '"' + txt . replace ( qreg , '""' ) + '"' } else txt = "" ; row += ( C === r . s . c ? "" : FS ) + txt } if ( o . blankrows === false && isempty ) continue ; if ( o . strip ) row = row . replace ( endregex , "" ) ; out += row + RS } return out } var make _csv = sheet _to _csv ; function sheet _to _formulae ( sheet ) { var y = "" , x , val = "" ; if ( sheet == null || sheet [ "!ref" ] == null ) return [ ] ; var r = safe _decode _range ( sheet [ "!ref" ] ) , rr = "" , cols = [ ] , C ; var cmds = new Array ( ( r . e . r - r . s . r + 1 ) * ( r . e . c - r . s . c + 1 ) ) ; var i = 0 ; for ( C = r . s . c ; C <= r . e . c ; ++ C ) cols [ C ] = encode _col ( C ) ; for ( var R = r . s . r ; R <= r . e . r ; ++ R ) { rr = encode _row ( R ) ; for ( C = r . s . c ; C <= r . e . c ; ++ C ) { y = cols [ C ] + rr ; x = sheet [ y ] ; val = "" ; if ( x === undefined ) continue ; else if ( x . F != null ) { y = x . F ; if ( ! x . f ) continue ; val = x . f ; if ( y . indexOf ( ":" ) == - 1 ) y = y + ":" + y } if ( x . f != null ) val = x . f ; else if ( x . t == "z" ) continue ; else if ( x . t == "n" && x . v != null ) val = "" + x . v ; else if ( x . t == "b" ) val = x . v ? "TRUE" : "FALSE" ; else if ( x . w !== undefined ) val = "'" + x . w ; else if ( x . v === undefined ) continue ; else if ( x . t == "s" ) val = "'" + x . v ; else val = "" + x . v ; cmds [ i ++ ] = y + "=" + val } } cmds . length = i ; return cmds } var utils = { encode _col : encode _col , encode _row : encode _