
    Xi                        d dl mZ d dlZddlmZmZmZ ddlT ddlT ddl	T 	 d dl
mZ n# e$ r	 d dl
mZ Y nw xY wd dlmZ ej        Zd Zd dlZd	Z ed
          \  ZZZZZdZdddddddddddddddZi Zi Ze                                D ]%\  ZZ e e          Z e e          Zeee<   eee<   &[[[de!j"        d dddddddf
dZ# G d de$          Z% G d  d!e$          Z&d" Z'd'd$Z(d% Z)d& Z*dS )(    )print_functionN   )compdoc
formattingsheet)*)perf_counter)clockunpacki    )P   F   2   -   (             	
)Consolidate_Area	Auto_Open
Auto_CloseExtractDatabaseCriteria
Print_AreaPrint_TitlesRecorder	Data_FormAuto_ActivateAuto_DeactivateSheet_Title_FilterDatabaseTFc
                    t                      }
t                      }	 |                    | |||||||||	
  
         t                      }||
z
  |_        |                    t
                    }|st          d          |t          vrt          dt          |         z            ||_	        |dk    r5|rt          |j        d           dx|_        }|                                 n{|dk    r5|                                 |rt          |j        d           dx|_        }n@|                                 d |j        D             |_        |s|                                 t%          |j                  |_        |dk    r&|j        d	k    rt          |j        d
|j                   t                      }||z
  |_        n#  |                                  xY w|s|                                 |S )N)
filenamefile_contentslogfile	verbosityuse_mmapencoding_overrideformatting_info	on_demandragged_rowsignore_workbook_corruptionz#Can't determine file's BIFF versionz BIFF version %s is not supportedr   z`*** WARNING: on_demand is not supported for this Excel version.
*** Setting on_demand to False.
Fr   c                     g | ]}d S N ).0shs     4/usr/local/lib/python3.11/dist-packages/xlrd/book.py
<listcomp>z%open_workbook_xls.<locals>.<listcomp>i   s    ===rd===    r   z|*** WARNING: Excel 4.0 workbook (.XLW) file contains %d worksheets.
*** Book-level data will be that of the last worksheet.
)r	   Bookbiff2_8_loadload_time_stage_1getbofXL_WORKBOOK_GLOBALS	XLRDErrorSUPPORTED_VERSIONSbiff_text_from_numbiff_versionfprintfr5   r:   fake_globals_get_sheetparse_globals_sheet_names_sheet_list
get_sheetslennsheetsload_time_stage_2release_resources)r3   r5   r6   r7   r4   r8   r9   r:   r;   r<   t0bkt1rM   t2s                  rB   open_workbook_xlsr\   ;   sH    
B	B5
]y8/+#'A 	 	
 	
 	
 ^^!Bwyy!455 	CABBB1112$\23   '2 1
89 9 9 ,10y%%''''R 1
 %H I I I+00y==R_===BN  ((
2"*q..
L
	   ^^!Bw
 
Is   F"G Gc                   p    e Zd ZdZdgZdZdZdZdZdZ	dZ
dZdZdZdZ ed          ZdZdZdZd Zdd
ZdS )Namez
    Information relating to a named reference, formula, macro, etc.

    .. note::

      Name information is **not** extracted from files older than
      Excel 5.0 (``Book.biff_version < 50``)
    stackNr    rD   c                    | j         }|r|j        }|j        }|t          k    rt	          |          dk    r|d         }d|j        cxk    r|j        dz
  k    rhn ne|j        |j        dz
  k    rR|j	        |j
        dz
  k    r?| j                            |j                  }|                    |j        |j	                  S |                     | j        j        dd           t!          d          )a:  
        This is a convenience method for the frequent use case where the name
        refers to a single cell.

        :returns: An instance of the :class:`~xlrd.sheet.Cell` class.

        :raises xlrd.biffh.XLRDError:
          The name is not a constant absolute reference
          to a single cell.
        r   r   === Dump of Name object ========== End of dump =======headerfooterz2Not a constant absolute reference to a single cell)resultkindvalueoREFrT   shtxloshtxhirowxlorowxhicolxlocolxhibooksheet_by_indexcelldumpr5   rJ   )selfresri   rj   ref3drA   s         rB   rt   z	Name.cell   s     k 
	?8DIEt||E

aa9999)999999q(888q(88811%,??B775<>>>		I00 	 	
 	
 	

 LMMMrD   Tc                 $   | j         }|rV|j        }|j        }|t          k    r<t	          |          dk    r(|d         }d|j        cxk    r|j        dz
  k    rn n| j                            |j                  }|s||j	        |j
        |j        |j        fS t          |j	        |j                  }t          |t          |j
        |j                            }t          |j        |j                  }	t          |	t          |j        |j                            }
d|cxk    r|cxk    r|j        k    sn J d|	cxk    r|
cxk    r|j        k    sn J ||||	|
fS |                     | j        j        dd           t'          d          )a  
        This is a convenience method for the use case where the name
        refers to one rectangular area in one worksheet.

        :param clipped:
          If ``True``, the default, the returned rectangle is clipped
          to fit in ``(0, sheet.nrows, 0, sheet.ncols)``.
          it is guaranteed that ``0 <= rowxlo <= rowxhi <= sheet.nrows`` and
          that the number of usable rows in the area (which may be zero) is
          ``rowxhi - rowxlo``; likewise for columns.

        :returns: a tuple ``(sheet_object, rowxlo, rowxhi, colxlo, colxhi)``.

        :raises xlrd.biffh.XLRDError:
           The name is not a constant absolute reference
           to a single area in a single sheet.
        r   r   rc   rd   re   zDNot a constant absolute reference to a single area in a single sheet)rh   ri   rj   rk   rT   rl   rm   rr   rs   rn   ro   rp   rq   minnrowsmaxncolsru   r5   rJ   )rv   clippedrw   ri   rj   rx   rA   rn   ro   rp   rq   s              rB   area2dzName.area2d   s   $ k 	>8DIEt||E

aa8888q(88888811%,??B" Z!5<u|U\YY rx88F U\28)D)DEEF rx88F U\28)D)DEEF<<<<&<<<<BH<<<<<<<<<<&<<<<BH<<<<<<vvvv==		I00 	 	
 	
 	

 ^___rD   T)__name__
__module____qualname____doc___repr_theserr   hiddenfuncvbasicmacrocomplexbuiltin	funcgroupbinary
name_indexUNICODE_LITERALnameraw_formulascoperh   rt   r   r?   rD   rB   r^   r^      s          )KD F D F E
 G G I
 F J ?2D K E FN N N<)` )` )` )` )` )`rD   r^   c            
          e Zd ZdZdZdZdZg ZdZdZ	dZ
 ed          Zg Zg Zg Zi Zi Zi Zg ZdZdZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z i Z!i Z"d Z#dde$j%        dddddddf
dZ&d Z'd Z(d Z)d Z*d1dZ+d Z,d Z-d Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:d* Z;d+ Z<d, Z=d- Z>d. Z?d/ Z@d0 ZAdS )2rE   z
    Contents of a "workbook".

    .. warning::

      You should not instantiate this class yourself. You use the :class:`Book`
      object that was returned when you called :func:`~xlrd.open_workbook`.
    r   Nr   r   r`   g      c                     t          | j                  D ]$}| j        |         s|                     |           %| j        dd         S )zt
        :returns: A list of all sheets in the book.

        All sheets not already loaded will be loaded.
        N)xrangerU   rR   	get_sheetrv   sheetxs     rB   sheetszBook.sheets  sR     T\** 	' 	'F#F+ 'v&&&""rD   c                 F    | j         |         p|                     |          S )zr
        :param sheetx: Sheet index in ``range(nsheets)``
        :returns: A :class:`~xlrd.sheet.Sheet`.
        )rR   r   r   s     rB   rs   zBook.sheet_by_index  s#    
 'A4>>&+A+AArD   c              #   f   K   t          | j                  D ]}|                     |          V  dS )z
        Makes iteration through sheets of a book a little more straightforward.
        Don't free resources after use since it can be called like `list(book)`
        N)rangerU   rs   )rv   is     rB   __iter__zBook.__iter__  sH      
 t|$$ 	) 	)A%%a((((((	) 	)rD   c                     	 | j                             |          }n # t          $ r t          d|z            w xY w|                     |          S )zp
        :param sheet_name: Name of the sheet required.
        :returns: A :class:`~xlrd.sheet.Sheet`.
        No sheet named <%r>)rQ   index
ValueErrorrJ   rs   )rv   
sheet_namer   s      rB   sheet_by_namezBook.sheet_by_name  sg    
	@&,,Z88FF 	@ 	@ 	@1J>???	@""6***s    :c                     t          |t                    r|                     |          S |                     |          S )z
        Allow indexing with sheet name or index.
        :param item: Name or index of sheet enquired upon
        :return: :class:`~xlrd.sheet.Sheet`.
        )
isinstanceintrs   r   )rv   items     rB   __getitem__zBook.__getitem__  s>     dC   	,&&t,,,%%d+++rD   c                      | j         dd         S )z
        :returns:
          A list of the names of all the worksheets in the workbook file.
          This information is available even when no sheets have yet been
          loaded.
        N)rQ   rv   s    rB   sheet_nameszBook.sheet_names  s      ##rD   c                     t          |t                    r|}n<	 | j                            |          }n # t          $ r t          d|z            w xY wt          | j        |                   S )z
        :param sheet_name_or_index: Name or index of sheet enquired upon
        :returns: ``True`` if sheet is loaded, ``False`` otherwise.

        .. versionadded:: 0.7.1
        r   )r   r   rQ   r   r   rJ   boolrR   rv   sheet_name_or_indexr   s      rB   sheet_loadedzBook.sheet_loaded  s     )3// 	M(FFM*001DEE M M M 58K KLLLMD$V,---	   5 Ac                     t          |t                    r|}n<	 | j                            |          }n # t          $ r t          d|z            w xY wd| j        |<   dS )zu
        :param sheet_name_or_index: Name or index of sheet to be unloaded.

        .. versionadded:: 0.7.1
        r   N)r   r   rQ   r   r   rJ   rR   r   s      rB   unload_sheetzBook.unload_sheet  s     )3// 	M(FFM*001DEE M M M 58K KLLLM#'   r   c                    d| _         t          | j        d          r| j                                         d| _        t          | j        d          r| j                                         d| _        d| _        d| _        dS )a_  
        This method has a dual purpose. You can call it to release
        memory-consuming objects and (possibly) a memory-mapped file
        (:class:`mmap.mmap` object) when you have finished loading sheets in
        ``on_demand`` mode, but still require the :class:`Book` object to
        examine the loaded sheets. It is also called automatically (a) when
        :func:`~xlrd.open_workbook`
        raises an exception and (b) if you are using a ``with`` statement, when
        the ``with`` block is exited. Calling this method multiple times on the
        same object has no ill effect.
        r   closeN)_resources_releasedhasattrmemr   filestr_sharedstrings_rich_text_runlist_mapr   s    rB   rW   zBook.release_resources
  s~     $% 48W%% 	HNN4<)) 	!L   "&*###rD   c                     | S r>   r?   r   s    rB   	__enter__zBook.__enter__!  s    rD   c                 .    |                                   d S r>   )rW   )rv   exc_type	exc_valueexc_tbs       rB   __exit__zBook.__exit__$  s         rD   c                    g | _         g | _        g | _        d| _        g | _        g | _        i | _        d| _        d| _        d| _	        | 
                                 d| _        d| _        d | _        d | _        g | _        g | _        g | _        i | _        i | _        d| _        g | _        d| _        g | _        g | _        i | _        g | _        g | _        i | _        d| _        d| _        d S )Nr   Fra   rD   )rR   rQ   _sheet_visibilityrU   _sh_abs_posnr   r   raw_user_name_sheethdr_countbuiltinfmtcountinitialise_format_info_all_sheets_count_supbook_count_supbook_locals_inx_supbook_addins_inx_all_sheets_map_externsheet_info_externsheet_type_b57_extnsht_name_from_num_sheet_num_from_name_extnsht_count_supbook_typesr   addin_func_namesname_obj_list
colour_mappalette_recordxf_liststyle_name_mapr   r   r   s    rB   __init__zBook.__init__5  s   !# &(#" !##%%%!"#' #' !!#%'"&(#$&! #$  "  rD   TFc                    || _         || _        || _        || _        || _        || _        |	| _        |st          |d          5 }|                    dd           |	                                }|                    dd           |dk    rt          d          | j        r@t          j        |                                |t          j                  | _        || _        n2|                                | _        t#          | j                  | _        d d d            n# 1 swxY w Y   n|| _        t#          |          | _        d| _        | j        d d         t&          j        k    r| j        | _        nt'          j        | j        | j         |
          }dD ]@}|                    t1          |                    \  | _        | _        | _        | j        r nAt          d	          ~| j        | j        ur5t3          | j        d
          r| j                                         d| _        | j        | _        t8          r:t;          dt=          | j                  | j        | j        fz  | j                    d S d S )Nrbr      zFile size is 0 bytes)access   )r5   r<   )WorkbookrE   z-Can't find workbook in OLE2 compound documentr   rD   zmem: %s, base: %d, len: %dfile)r5   r6   r7   r8   r9   r:   r;   openseektellrJ   mmapfilenoACCESS_READr   
stream_lenreadrT   baser   	SIGNATUREr   CompDoclocate_named_streamr   r   r   	_positionDEBUGprinttype)rv   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   fsizecdqnames                  rB   rF   zBook.biff2_8_loadV  s    " !2."& 	1h%% 8q!vvxxq!199#$:;;;= 8#'9QXXZZdFV#W#W#WDL&*DOO#$6688DL&)$,&7&7DO8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 )DL!-00DO	<w000|DHHt|<VX X XB- Q Q22?53I3IJJ 5$)T_8 E   OPPPxt|++4<11 )L&&(((" 	r.$tx..$)T_1]]dhdpqqqqqq	r 	rs   CDD#&D#c                     i | _         g | _        d| _        d| _        dt          i| _        d| _        g | _        g | _        d S )Nr   )	
format_mapformat_listxfcountactualfmtcountXL_CELL_NUMBER_xf_index_to_xl_type_map_xf_epilogue_doner   	font_listr   s    rB   r   zBook.initialise_format_info  sG    )*N(;%!"rD   c                     | j         }| j        ||dz            }t          |          }| xj         |z  c_         |dk     rt          S |\  }}t	          |          dz  t	          |          z  S )Nr   r   )r   r   rT   MY_EOF	BYTES_ORD)rv   posbuff_twolenbufflohis         rB   	get2byteszBook.get2bytes  sk    n8CAI&h--'!Q;;MB""imm33rD   c                     | j         }| j        }t          d|||dz                      \  }}|dz  }||||z            }||z   | _         |||fS )N<HH   r   r   r   )rv   r  r   codelengthdatas         rB   get_record_partszBook.get_record_parts  sb    nheSSU^44fq3s6z>"vfd##rD   c                     | j         }| j        }t          d|||dz                      \  }}||k    rdS |dz  }||||z            }||z   | _         |||fS )Nr  r  )Nr   rD   r  )rv   reqd_recordr  r   r  r  r  s          rB   get_record_parts_conditionalz!Book.get_record_parts_conditional  sr    nheSSU^44f;!>q3s6z>"vfd##rD   c                    | j         rt          d          |r| j        |         | _        |                     t
                     t          j        | | j        | j        |         |          }|	                    |            || j
        |<   |S )Nz,Can't load sheets after releasing resources.)r   rJ   r   r   rH   XL_WORKSHEETr   SheetrQ   r   rR   )rv   	sh_number
update_posrA   s       rB   r   zBook.get_sheet  s    # 	LJKKK 	:!.y9DNL!!! [Ni(	
 
 	&(#	rD   c                    t           r"t          d| j        | j        | j                   t          t          | j                            D ]A}t           r#t          d|| j        | j        | j                   |                     |           Bd S )NzGET_SHEETS:r   zGET_SHEETS: sheetno =)r   r   rQ   r   r5   r   rT   r   )rv   sheetnos     rB   rS   zBook.get_sheets  s    _%t'8$:KRVR^____c$"34455 	$ 	$Gve3Wd>OQUQbimiuvvvvNN7####	$ 	$rD   c                     t          j        |            t          d          }|g| _        dg| _        dg| _        | j                            d            |                                  d S )NzSheet 1r   )	r   initialise_bookr   rQ   r   r   rR   appendrS   )rv   fake_sheet_names     rB   rO   zBook.fake_globals_get_sheet  sl    "4((())44,-C"#%%%rD   c           	      <   | j         }|                                  t          rt          | j        d||           |dk    rLt          |d| j        d          }d}t          }t          | j	                  dk    r| j
        | j        z   }n_d}n\t          d|dd                   \  }}}|| j        z   }|t          k     rt          |d| j        d          }nt          |dd          }t          s| j        d	k    rt          | j        d
| j        ||||           | xj        dz  c_        |t          k    rb| j                            d           dddd                    |d          }t          s| j        dk    rt          | j        d|||           d S d S t          | j                  }	| j                            |	           | j                            |           | j	                            |           | j                            |           |	| j        |<   d S )NzBOUNDSHEET: bv=%d data %r
r   r   r   lenlenra   z<iBB   r   zFBOUNDSHEET: inx=%d vis=%r sheet_name=%r abs_posn=%d sheet_type=0x%02x
zMacro sheetChartzVisual Basic module)r   r   r%  UNKNOWNzANOTE *** Ignoring non-worksheet data named %r (type 0x%02x = %s)
)rM   derive_encodingr   rN   r5   unpack_stringencodingXL_BOUNDSHEET_WORKSHEETrT   r   _sheetsoffsetr   r   BIFF_FIRST_UNICODEunpack_unicoder6   r   r   r   getrQ   r   r   )
rv   r  bvr   
visibility
sheet_typeabs_posnoffsetdescrsnums
             rB   handle_boundsheetzBook.handle_boundsheet  sg    	KDL"?TJJJ88 'tQaHHHJJ0J4$%%**-	9
 -3FD1I-F-F*FJ
	)H&&&*4DM!LLL

+D!A>>>
 	VDNa''DLY&
J*V V V 	!#000 ''+++ (  c*i((	   3!++X
E3 3 3 3 3 ,+
 t())D ''---$$Z000$$X..."))*55548D%j111rD   c                     t          d|dd                   d         }t          rt          | j        d|           || _        d S )N<Hr   r   zBUILTINFMTCOUNT: %r
)r   r   rN   r5   r   )rv   r  r   s      rB   handle_builtinfmtcountzBook.handle_builtinfmtcount  sH     !tAaCy11!4Q'$,(?QQQ.rD   c           
         | j         r| j         | _        n| j        P| j        dk     rt	          | j        d           d| _        nd| _        | j        dk    rt	          | j        d           n| j        }|t          v rt          |         }nJd|cxk    rdk    rn nd	t          |          z   }n'| j        dk    r
d| _        d
}ndt          |          z   }t          s| j        r"|| j        k    rt	          | j        d||           || _        | j        dk    rx	 t          d| j                   na# t          $ rT}t	          | j        d| j        | j        t          |          j                            d          d         |            d }~ww xY w| j        r?t!          | j        d| j        d          }|                                }|| _        d| _        | j        S )Nr   zD*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
z
iso-8859-1i  r   z2*** No CODEPAGE record; assuming 1200 (utf_16_le)
i,  i  cp	utf_16_leunknown_codepage_z%CODEPAGE: codepage %r -> encoding %r
s   trialz/ERROR *** codepage %r -> encoding %r -> %s: %s
.ra   r   r   r#  F)r8   r*  codepagerM   rN   r5   r6   encoding_from_codepagestrr   unicodeBaseExceptionr   r   splitr   r)  	user_namerstrip)rv   r@  r*  estrgs        rB   r(  zBook.derive_encoding  s   ! 	% 2DMM]" 2%%[] ] ] , $>Q&&DL*_```}H1111(;((((D(((((#h--/"b(( $&.X> d dH,E,E&NPXZbccc$DM=D  $-0000    FM4=$q''2B2H2H2M2Mb2QSTV V V 	
  	' DM!LLLD;;==D "DN!&D}s   D- -
F7AFFc                 x    t          d|dd                   d         }|| _        |                                  d S )Nr9  r   r   )r   r@  r(  )rv   r  r@  s      rB   handle_codepagezBook.handle_codepageE  s=    $QqS	**1- rD   c                     t          d|dd                   }| j        rt          d|| j                   | j        dk    s| j        |k    sJ || _        d S )Nr  r   r  z
Countries:r   r   )r   r6   r   r5   	countries)rv   r  rM  s      rB   handle_countryzBook.handle_countryK  sa    5$qs),,	>L5yt|LLLL~''4>Y+F+F+F+F"rD   c                     t          d|dd                   d         }t          s| j        rt          | j        d|           |dv sJ || _        d S )Nr9  r   r   zDATEMODE: datemode %r
)r   r   )r   r   r6   rN   r5   datemode)rv   r  rP  s      rB   handle_datemodezBook.handle_datemodeR  sb    $QqS	**1- 	GDN 	GDL";XFFF6!!!! rD   c           	      n   t           p
| j        dk    }| j        dk    rt          d|d d                   \  }}d}t	          ||d          \  }}||d          }| j        d         t          k    r| j                            |           |r)t          | j
        d| j        d         ||||           d S d S d S )	Nr   r   <HIr%  r   r#  ra   zCEXTERNNAME: sbktype=%d oflags=0x%04x oinfo=0x%08x name=%r extra=%r
)r   r6   rM   r   unpack_unicode_update_posr   SUPBOOK_ADDINr   r   rN   r5   )rv   r  blahoption_flags
other_infor  r   extras           rB   handle_externnamezBook.handle_externnameY  s    +!+""&,UD!H&=&=$L*C1$AFFFID#JE"2&-77%,,T222 TZ'+\:tUT T T T T #"T TrD   c           	         |                                   | xj        dz  c_        t          p
| j        dk    }t          p
| j        dk    }| j        dk    rt          d|dd                   d         }|dz  dz   }t          |          |k     rp|r$t          | j        d|t          |                     | 	                                \  }}}|t          k    rt          d          ||z  }t          |          |k     pd}	t          |          D ]]}
t          d	||	|	dz                      }|\  }}}| j                            |           |	dz  }	|rt          | j        d
|
|||           ^d S t          d|d d                   \  }}|rrt          d| j                   t!          |dt          |          | j                   ddddd                    |d          }t          d|||fz  | j                   |dk    rLt%          |d|dz            | j                  }|| j        | j        <   |rt          | j        | j                   d|cxk    rdk    sn d}| j                            |           d S )Nr   r   r   r9  r   r%  z*INFO: EXTERNSHEET needs %d bytes, have %d
z)Missing CONTINUE after EXTERNSHEET recordz<HHHzLEXTERNSHEET(b8): k = %2d, record = %2d, first_sheet = %5d, last sheet = %5d
z<BBzEXTERNSHEET(b7-):r   foutzEncoded URLzCurrent sheet!!zSpecific sheet in own doc'tz Nonspecific sheet in own doc't!!)r   r      r  zNot encodedz   %3d chars, type is %d (%s)r^  r  )r(  r   r   r6   rM   r   rT   rN   r5   r  XL_CONTINUErJ   r   r   r   r   hex_char_dumpr/  rC  r*  r   r   )rv   r  blah1blah2num_refs
bytes_reqdcode2length2data2r  kinforef_recordxref_first_sheetxref_last_sheetxnctymsgr   s                      rB   handle_externsheetzBook.handle_externsheetg  s   q ,1,,1,""dD1I..q1H!A)Jd))j(( E"CII  
 )-(=(=(?(?%wK''#$OPPP d))j(( CH%% 
 
fd3s1u9o66AE>-&--d333q g;(8/  
 
 E48,,FB 	Z)====dAs4yyt|DDDD$(49	 
 #b-((  5REDLYYYYQww$T!BqD&\4=AA
CM+D,?@O% ;$,OOOOLLLLqLLLL&--b11111rD   c                    | j         dk    r| j        }t          |d           t          |dt	          |          d|           | j        dk    rt          d|d d                   \  }|dk    r.t          d|dd                    \  }}t          |d||           nE|d	k    r?t          d|d
d                   \  }|d	k    rd}n|dk    rd}nd}t          |d|           t          d          )Nr   z
FILEPASS:
r   )r   r]  r   r9  r  z!weak XOR: key=0x%04x hash=0x%04x
r   r  r%  z	BIFF8 stdzBIFF8 strongz** UNKNOWN ENCRYPTION METHOD **z%s
zWorkbook is encrypted)r6   r5   rN   r`  rT   rM   r   rJ   )rv   r  logfkind1key
hash_valuekind2captions           rB   handle_filepasszBook.handle_filepass  s   >Q<DD-((($3t9914@@@@ B&&d2A2h//A::&,UDH&=&=OCD<Z) ) ) ) aZZ#D$qs)44FEzz"-!"0"CD&'222/000rD   c                    t           p
| j        dk    }| j        }|dk     rd S |                                  t	          d|dd                   \
  }}}}}}	}
}}}t                      }| |_        t          | j                  }||_	        | j        
                    |           ||_        g d}|D ]\  }}}t          ||||z  |z	             d|j                 }|dk     rt          |d| j        |	          \  }}nt!          |d|	          \  }}||_        |	|_        d |_        |rt)          | j        d
|||||||	|
  
         |}|j        r6t.                              |d          }|rt3          d|z  | j                   ||_        ||d          |_        ||_        d|_        |r"|                    | j        d|z  d           d S d S )Nr   r   z	<HBBHHH4Br      ))r   r   r   )r   r   r   )r   r  r   )r   r   r^  )r      r  )r       r   )r   i  r%  )r   i      z Mr   )	known_lenzZNAME[%d]:%s oflags=%d, name_len=%d, fmla_len=%d, extsht_index=%d, sheet_index=%d, name=%r
z??Unknown??z    builtin: %sr   z--- handle_name: name[%d] ---z-------------------re   )r   r6   rM   r(  r   r^   rr   rT   r   r   r   rW  setattrr   unpack_string_update_posr*  rT  extn_sheet_numexcel_sheet_indexr   rN   r5   r   builtin_name_from_coder/  r   r   r   basic_formula_len	evaluatedru   )rv   r  rV  r0  rW  kb_shortcutname_lenfmla_lenextsht_indexsheet_indexmenu_text_lendescription_text_lenhelp_topic_text_lenstatus_bar_text_lennobjr   attrsattrmasknshift
macro_flaginternal_namer  r   s                           rB   handle_namezBook.handle_name  sQ   +!+77F ;QrT
++	
+x</1DFYvv	+,,
$!!$'''(	
 	
 	
 #( 	A 	AD$D$!4 ?@@@@$*%
77!9$DM]e!f!f!fM33!:4x!X!X!XM3*!,
 	DmJh,]	D D D
 < 	H)--dMBBDGU,t3$,GGGG	:!) 	II6C,      	 	rD   c                    | j         dk    }| j        }|r}t          d|           t          dt          | j                  |           t          dt          | j                  |           t          dt          | j                  |           t          | j                  }t          |          D ]}| j        |         }| j
        dk    rN|j        }|dk    rd	}nd
|cxk    rt          | j                  k    rn n| j        |d
z
           }|d	k    rd}nPd}nMd| j
        cxk    rdk    r;n n8|j        }|dk    rd	}n(| j        |         }| j                            |d          }||_        t          |          D ]9}| j        |         }|j        s|j        r|j        r&t%          | |||           :| j         dk    r[t          d|           t          |          D ])}| j        |         }|                    |d|z             *t          d|           i }	i }
t          |          D ]}| j        |         }|j                                        }||j        f}||	v r| j         rt-          |d|           ||	|<   |j        ||f}||
v r|
|                             |           ||g|
|<   |
                                D ]-}|
|         }|                                 d |D             |
|<   .|	| _        |
| _        d S )Nr   z+++++ names_epilogue +++++r   r   r   r   r   r   ra   r   r   r   )rV  z&---------- name object dump ----------z--- name[%d] ---)rf   z&--------------------------------------z)Duplicate entry %r in name_and_scope_map
c                     g | ]
}|d          S )r   r?   )r@   xs     rB   rC   z'Book.names_epilogue.<locals>.<listcomp>3  s    111aQqT111rD   )r6   r5   r   REPRr   r   r   rT   r   r   rM   r  r  r/  r   r   r   r  evaluate_name_formularu   r   lowerrN   r   keyssortname_and_scope_mapname_map)rv   rV  r   	num_namesnamexr  r  intl_sheet_indexr   r  r  
name_lcasert  	sort_dataalists                  rB   names_epiloguezBook.names_epilogue  s   ~"L 	S.Q7777#T$*>%?%?aHHHH*D1L,M,MTUVVVV($t/H*I*IPQRRRR*++	9%% 	* 	*E%e,D
  B&&"4!##')$$+BBBBT-A)B)BBBBBB'+';KM'J$'2--+-( (*$$t(....B....."1!##')$$!%!<[!IJ'+'@'D'DZQS'T'T$)DJJ9%% 	@ 	@E%e,Dz2T[2(~'x!$e$?????>Q:CCCCy)) @ @)%0		!$6$>	????:CCCC  9%% 	3 	3E%e,D**Jtz*C(((T^(GMMM&*s#UD1I X%%$++I6666(1{$$==?? 	2 	2CSMEJJLLL115111HSMM"4 rD   c                 <    t          d|dd                   \  }}d S )NrS  r  
   r   )rv   r  obj_typeobj_ids       rB   
handle_objzBook.handle_obj7  s$     "%ad44&&&rD   c           	         | j                             d            t          p
| j        dk    }|r;t	          d| j                   t          |dt          |          | j                   t          d|dd                   d         }|rt	          d|z  | j                   | j	        }| xj	        dz  c_	        |dd	         d
k    rYt          | j         d<   | j	        dz
  | _        |r7t	          d||fz  | j                   t	          d| j        | j                   d S |dd	         dk    r;t          | j         d<   | j	        dz
  | _        |rt	          d|z  | j                   d S t          |dd          \  }}|dk    r*t           | j         d<   |rt#          | j        d||           d S t$          | j         d<   |rt#          | j        d||           g }t'          |          D ]}	 t          ||d          \  }	}n:# t(          j        $ r( | j        rt	          d|||fz  | j                   Y  d S w xY w|                    |	           |r&t#          | j        d|t          |	          |	|           d S )Nr   zSUPBOOK:r   r   r\  r9  znum_sheets = %dr   r  s   ra   z(SUPBOOK[%d]: internal 3D refs; %d sheetsz    _all_sheets_maps    :zSUPBOOK[%d]: add-in functionsr#  z#SUPBOOK[%d]: DDE/OLE document = %r
zSUPBOOK[%d]: url = %r
zK*** WARNING: unpack failure in sheet %d of %d in SUPBOOK record for file %rz-  sheetx=%d namelen=%d name=%r (next pos=%d)
)r   r   r   r6   r   r5   r`  rT   r   r   SUPBOOK_INTERNALr   r   rU  r   rT  SUPBOOK_DDEOLErN   SUPBOOK_EXTERNALr   structerror)
rv   r  rV  
num_sheetssbnurlr  r   r  shnames
             rB   handle_supbookzBook.handle_supbook>  s   ""4(((+!+ 	A*4<0000$3t994<@@@@D$qs),,Q/
I(:5DLIIII!q !9##&6D#'+':Q'>D$ V@CCTT[_[ghhhh+T-AUUUUF!9+++&3D#'+':Q'>D$TU:S@t|TTTTF,T1Q???S??&4D#\WT\+QSVX[\\\F"2BK'@#sKKKz"" 	z 	zA7c!LLL< 	 	 	 > ej#./!\   
 	 v&&&yWT\+[]^`cdj`k`kmsuxyyy	z 	zs   +H2H87H8c                    |                                   t          d|d d                   d         }t          |d| j        d          }| j        }|| j        |         k    sJ | xj        dz  c_        | j        }|dz
  t          |          z
  }t          rt          | j
        d||||           |                                  t          rt          d| j        z  | j
                   | j                            d            |                     |d	
           t          rt          d| j        | j
                   ||z   | _        d S )N<ir  r   r   r#  z'SHEETHDR %d at posn %d: len=%d name=%r
z SHEETHDR: xf epilogue flag is %dr   F)r  z"SHEETHDR: posn after get_sheet() =)r(  r   r)  r*  r   rQ   r   rT   r   rN   r5   r   r   r  rR   r   r   )rv   r  	sheet_lenr   r  BOF_posnposns          rB   handle_sheethdrzBook.handle_sheethdrm  sS   
 	4bqb**1-	"4DM!DDD
&T.w77777!>!|c$ii'y'$,(RT[]aclnxyyy##%%%g%:T=SSZ^Zfgggg%%%w5111`%<dnSWS_````!I-rD   c                 |    t          d|          d         }t          rt          d|| j                   || _        d S )Nr  r   zSHEETSOFFSET:r   )r   r   r   r5   r,  )rv   r  r  s      rB   handle_sheetsoffsetzBook.handle_sheetsoffset  s@    dD!!!$A%DLAAAA!rD   c                 ~   t           r$t          d| j                   t                      }t	          |          }|g}t          d|dd                   d         }t           s| j        dk    rt          | j        d|           	 |                     t                    \  }}}|n=||z  }t           dk    rt          | j        d
||           |
                    |           ^t          ||          \  | _        }| j        r|| _        t           r-t                      }	t          d|	|z
  fz  | j                   d S d S )NzSST Processingr   r  r  r   r   r   zSST: unique strings: %d
r   z'CONTINUE: adding %d bytes to SST -> %d
z SST processing took %.2f seconds)r   r   r5   r	   rT   r   r6   rN   r  r_  r   unpack_SST_tabler   r9   r   )
rv   r  rX   nbtstrlistuniquestringsr  nb
rt_runlistrZ   s
             rB   
handle_sstzBook.handle_sst  sZ    	 "6666B$ii&tT!A#Y//2 	NT^q((DL"=}MMM	!!>>{KKND"d|2ICzz&PRTVYZZZNN4   	! +;7M*R*R'Z 	5*4D' 	WB4R{BVVVVVV	W 	WrD   c                    d}| j         dk     r0| j        sd| _        || _        d S t	          |d| j        d          }nH	 t          |dd          }n4# t          $ r' t          |                                dd          }Y nw xY w|r*t          | j	        dt          |          | j        |           |                                }|| _        d S )Nr   r   Tr   r#  r   z!WRITEACCESS: %d bytes; raw=%s %r
)rM   r*  r   rF  r)  r.  UnicodeDecodeErrorstriprN   r5   rT   rG  )rv   r  r   rI  s       rB   handle_writeaccesszBook.handle_writeaccess  s    r!!= %)"!% q$-BBBDDA%dAa888% A A A%djjllAa@@@A r'$,(LcRViiY]Ykmqrrr{{}}s   A .BBc                 
   t          j        |            	 |                                 \  }}}t          rt	          d|z  | j                   |t          k    r|                     |           n|t          k    s|t          k    r| 
                    |           n|t          k    r|                     |           n|t          k    r|                     |           n|t          k    r|                     |           n|t"          k    r|                     |           n^|t&          k    r|                     |           n<|t*          k    r|                     |           n|t.          k    r|                     |           n|t2          k    r|                     |           n|t6          k    r|                     |           n|t:          k    r|                     |           n|t>          k    r|                      |           np|tB          k    r| "                    |           nN|tF          k    r| $                    |           n,|tJ          k    r| &                    |           n
|tN          k    r| (                    |           n|tR          k    r| *                    |           n|dz  dk    r,| j+        r%tY          | j        d| j-        |z
  dz
  |||           n|t\          k    r| /                                 | 0                                 | 1                                 | j2        s| 3                                 | j4        dk    r#t          rt	          d	| j-        | j                   d S 	 o)
Nr   z$parse_globals: record code is 0x%04xr      	   z5*** Unexpected BOF at posn %d: 0x%04x len=%d data=%r
r  r   zglobal EOF: position)5r   r  r  r   r   r5   XL_SSTr  XL_FONTXL_FONT_B3B4handle_font	XL_FORMAThandle_formatXL_XF	handle_xfXL_BOUNDSHEETr7  XL_DATEMODErQ  XL_CODEPAGErK  
XL_COUNTRYrN  XL_EXTERNNAMErZ  XL_EXTERNSHEETrp  XL_FILEPASSrx  XL_WRITEACCESSr  XL_SHEETSOFFSETr  XL_SHEETHDRr  
XL_SUPBOOKr  XL_NAMEr  
XL_PALETTEhandle_paletteXL_STYLEhandle_styler6   rN   r   XL_EOFxf_epiloguer  palette_epiloguer*  r(  rM   )rv   rcr  r  s       rB   rP   zBook.parse_globals  s    	"4(((:	#4466B[eBRGdl[[[[V||%%%%w""4"4  &&&&y""4((((ut$$$$%%&&t,,,,{""$$T****{""$$T****z!!##D))))}$$&&t,,,,~%%''----{""$$T****~%%''----&&((....{""$$T****z!!##D))))w  &&&&z!!##D))))x!!$''''daDN&^NV+a/VTC C C C  """##%%%%%'''} +((***$**^e$:DNQUQ]^^^^  u:	rD   c                 X    | j         |||z            }|t          |          z   | _        |S r>   )r   rT   r   )rv   r  r  r  s       rB   r   z	Book.read  s,    xCJ's4yyrD   c           	         t           rt          d|z  | j                   d }| j        }|                                 }|t
          k    r |d           |t          vr |d| j        ||dz            z             |                                 }|t
          k    r |d           d|cxk    rd	k    sn  |d
||fz             dt          dt          |         |z
            z  }| 
                    | j        |          }t           rt          | j        d|           t          |          |k     r |d           ||z  }|dz	  }t          d|dd                   \  }	}
t           rt          d||	|
fz  | j                   | j        dz
  |z
  }t           rt          d||fz  | j                   dx}x}}|dk    rWt          d|dd                   \  }}|	dk    rd}nC|	dk    r|dk     s|dv rd}n0d}n-dddddd                    |	d          }n|dv rdddd|         }|dk    r|
t          k    rd}t           s| j        dk    rt          d ||	|
|||fz  | j                   |
t"          k    p|dk    o
|
t          k    }|t"          k    r|s|
|k    r|S |dk     r|
t$          k    r|S |dk    r|
d!k    r |d"            |d#||	|
|||fz             d S )$Nzreqd: 0x%04xr   c                 &    t          d| z             )Nz%Unsupported format, or corrupt file: )rJ   )ro  s    rB   	bof_errorzBook.getbof.<locals>.bof_error  s    CcIJJJrD   z$Expected BOF record; met end of filezExpected BOF record; found %rr   z)Incomplete BOF record[1]; met end of filer  r   z.Invalid length (%d) for BOF record type 0x%04x    r   z
getbof(): data=%r
z)Incomplete BOF record[2]; met end of filer  z5getbof(): op=0x%04x version2=0x%04x streamtype=0x%04xz+getbof(): BOF found at offset %d; savpos=%di   r   i   i  )il	  i  i  r   r   r   r   r   )r      i   i   i   )r  r   r   r   r   zHBOF: op=0x%04x vers=0x%04x stream=0x%04x buildid=%d buildyr=%d -> BIFF%d   z%Workspace file -- no spreadsheet datazXBOF not workbook/worksheet: op=0x%04x vers=0x%04x strm=0x%04x build=%d year=%d -> BIFF%d)r   r   r5   r   r  r  bofcodesr   r|   boflenr   rN   rT   r   r/  XL_WORKBOOK_GLOBALS_4Wr6   rI   r  )rv   
rqd_streamr  savposopcoder  paddingr  version1version2
streamtype
bof_offsetversionbuildyeargot_globalss                   rB   rH   zBook.getbof  s    G%3$,GGGG	K 	K 	K!!VI<===!!I5q8QQRRR!!VIABBBV!!!!r!!!!I@6"#$ $ $ #a&!8999yy00F'$,(?FFFt99vIABBBQ;%eT!A#Y77* 	EI8Z017;|E E E E^a'&0
 	;?v&'-1\; ; ; ;!"""%$t QqS	22KE46!!V##$;;%+="="= GG GG   #h""  +++r44X>Gb==Z+AAAG 	[DNa''\8ZgFGMQ\[ [ [ [ $77 DrMBj,BB 	---+-*PZBZBZNR<<J,66Nb==Z611I=>>>	fxUD'BC	
 	
 	
 	
 	
rD   r   )Br   r   r   r   rU   rP  rM   r   r@  r*  rM  r   rF  r  r   r   r   r   r   r   rG   rV   r   rs   r   r   r   r   r   r   rW   r   r   r  r  r   sysstdoutrF   r   r  r  r  r   rS   rO   r7  r:  r(  rK  rN  rQ  rZ  rp  rx  r  r  r  r  r  r  r  r  rP   r   rH   r?   rD   rB   rE   rE     sR         G H
 L M H H I  ##I I G K J: N  J N  	# 	# 	#B B B) ) )	+ 	+ 	+	, 	, 	,$ $ $. . . ( ( (+ + +.  ! ! !  H  B %) Z1t'+%*$!&057r 7r 7r 7rr	 	 	4 4 4$ $ $	$ 	$ 	$   *$ $ $  29 29 29h/ / /+ + +Z  # # #! ! !T T T12 12 12f1 1 1.: : :xH! H! H!T5 5 5-z -z -z^. . .*" " "W W W2  $> > >@  
J
 J
 J
 J
 J
rD   rE   c                 p    | }|dz  r|dk    r|dz  }d}nd}|dz  }|dz  r|dk    r|dz  }d}nd}||||fS )	Ni   i   r   r   r  i @     r  r?   )inrowincoloutrowrelrowoutcolrelcols         rB   expand_cell_addressr  F  ss    Fv~ U??eOFT\Fv~ S==cMF666))rD   ABCDEFGHIJKLMNOPQRSTUVWXYZc                     | dk    sJ t          d          }	 t          | d          \  }}||         |z   }|s|S |dz
  } ()Nr   r`   r      )r   divmod)colx_A2Zr   quotrems        rB   colnamer  X  s]    199992D4$$	cCy4 	KaxrD   c                     |rdd| dk              t          |           fz  }n	d| dz   fz  }|rdd|dk              t          |          fz  }ndt          |          z   }||z   S )Nz(*%s%d)z+-r   z$%dr   $)absr  )rowxr  r
  r  rowpartcolparts         rB   display_cell_addressr  b  s{     $tD1H~s4yy9946)# &tD1H~s4yy99%WrD   c                 
   d}t          |           }| d         }t          |          }d}g }|j        }i }	t          }
t          }t          }d}t          |          D ]#} |
d|||dz                      d         }|dz  } |||                   }|dz  }d}d}|dz  r" |
d|||dz                      d         }|dz  }|dz  r" |
d|||dz                      d         }|dz  }t          d	          }d}	 ||z
  }|dz  rF |||z
  dz	  |          }|||d|z  z            }	 |t          |d
          z  }n#   xY w|d|z  z  }n4 |||z
  |          }||||z            }|t          ||          z  }||z  }||z  }||k    rn0|dz  }| |         }t          |          } ||d                   }d}|ryg }t          |          D ]U}||k    rd}|dz  }| |         }t          |          }|                     |
d|||dz                                 |dz  }V||	t          |          <   ||z  }||k    r3||z
  }|dz  }||k     r| |         }t          |          }n||dz
  k    sJ  ||           %||	fS )zReturn list of stringsr   r   latin_1r9  r   r   r  r  r`   r=  r  )rT   r   r   rz   r  r   r   rC  )datatabnstringsdatainxndatasr  datalenr  strings	strappendrichtext_runslocal_unpack	local_minlocal_BYTES_ORDr  	_unused_incharsoptionsrtcountphoszaccstrgcharsgot	charsneed
charsavailrawstrgrunsrunindexs                             rB   r  r  m  sj   G\\F1:D$iiG
CGIMLIOGH%% F F	dDSUO44Q7q!/$s),,qT> 	"l4c#a%i99!<G1HCT> 	 LtCAI77:E1HC!"%%	)I~ "&Y#!';YGG
s3q|#334ww<<<GG q|# 'Yw}i@@
s3z>1277G444z!
"H6!!qLG7#D$iiG%od1g..GC?	B  
	/D"7OO  '>>CqLG"7+D!$iiGLLSQY@@AAAq*.M#g,,'u'>>-CqLGw'd)) HqL0000	'M!!s   (D<<D?)r  )+
__future__r   r  r`   r   r   r   biffhformulatimemachinetimer	   ImportErrorr
   r   
empty_cellr   r   r  r   SUPBOOK_UNKr  r  rU  r  rK   _code_from_builtin_namer  code_from_builtin_nameitems_bin_bicr   r  r  r\   
BaseObjectr^   rE   r  r  r  r  r?   rD   rB   <module>rE     s  
 & % % % % %  ( ( ( ( ( ( ( ( ( (            +!!!!!!! + + +********+      
	 	QVQVWXQYQY N/5        )//11 ( (JD$?4  D?4  D#'4 #'4  $'#!jA$((,&+u%16A A A AHL` L` L` L` L`: L` L` L`^t
 t
 t
 t
 t
: t
 t
 t
p!* * *$   	 	 	U" U" U" U" U"s   ) 77