o
    q¨ÊhñÞ  ã                   @   s¤  d dl mZ d dl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 zd dlmZ W n ey;   d dlmZ Y nw d dlZejZejZd ZdZd Zzd dlZdZW n ey_   d ZY nw e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%< qˆ[$[%[ dej'd edddddf	dd„Z(G dd„ de)ƒZ*G dd „ d e)ƒZ+d!d"„ Z,d*d$d%„Z-d&d'„ Z.d(d)„ Z/dS )+é    )Úprint_functionNé   )ÚcompdocÚ
formattingÚsheet)Ú*)Úperf_counter)Úclockiªº é   )é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Ú_FilterDatabaseFc	                 C   sv  t ƒ }	trt ¡ }
|
rt ¡  tƒ }z˜|j| ||||||||d�	 t ƒ }||	 |_| t	¡}|s4t
dƒ‚|tvr@t
dt|  ƒ‚||_|dkrY|rTt|jdƒ d |_}| ¡  n)|dkro| ¡  |rnt|jdƒ d |_}n| ¡  dd	„ |jD ƒ|_|s‚| ¡  t|jƒ|_|dkr™|jd
kr™t|jd|jƒ tr¡|
r¡t ¡  t ƒ }|| |_W n   | ¡  ‚ |s¹| ¡  |S )N)	ÚfilenameÚfile_contentsÚlogfileÚ	verbosityÚuse_mmapÚencoding_overrideÚformatting_infoÚ	on_demandÚragged_rowsz#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                 S   s   g | ]}d ‘qS ©N© )Ú.0Úshr9   r9   ú;/var/www/html/env/lib/python3.10/site-packages/xlrd/book.pyÚ
<listcomp>v   s    z%open_workbook_xls.<locals>.<listcomp>r   z|*** WARNING: Excel 4.0 workbook (.XLW) file contains %d worksheets.
*** Book-level data will be that of the last worksheet.
)r   Ú	TOGGLE_GCÚgcÚ	isenabledÚdisableÚBookÚbiff2_8_loadÚload_time_stage_1ÚgetbofÚXL_WORKBOOK_GLOBALSÚ	XLRDErrorÚSUPPORTED_VERSIONSÚbiff_text_from_numÚbiff_versionÚfprintfr1   r6   Úfake_globals_get_sheetÚparse_globalsÚ_sheet_namesÚ_sheet_listÚ
get_sheetsÚlenÚnsheetsÚenableÚload_time_stage_2Úrelease_resources)r/   r1   r2   r3   r0   r4   r5   r6   r7   Út0Úorig_gc_enabledÚbkÚt1rJ   Út2r9   r9   r<   Úopen_workbook_xlsF   s|   ú

ÿÿÿ


€ür[   c                   @   sd   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d	„ Zd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   Ú ó    éÿÿÿÿc                 C   s¬   | j }|rH|j}|j}|tkrHt|ƒdkrH|d }d|j  kr'|jd krHn n|j|jd krH|j	|j
d krH| j |j¡}| |j|j	¡S | j| jjd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ÚoREFrQ   ÚshtxloÚshtxhiÚrowxloÚrowxhiÚcolxloÚcolxhiÚbookÚsheet_by_indexÚcellÚdumpr1   rG   )ÚselfÚresrg   rh   Úref3dr;   r9   r9   r<   rr   Ô   s"    ýz	Name.cellTc                 C   s8  | j }|rŽ|j}|j}|tkrŽt|ƒdkrŽ|d }d|j  kr'|jd krŽn ne| j |j¡}|s=||j	|j
|j|jfS t|j	|jƒ}t|t|j
|jƒƒ}t|j|jƒ}	t|	t|j|jƒƒ}
d|  krp|  krp|jkssJ ‚ J ‚d|	  kr„|
  kr„|jks‡J ‚ J ‚||||	|
fS | j| jjd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   ra   rb   rc   zDNot a constant absolute reference to a single area in a single sheet)rf   rg   rh   ri   rQ   rj   rk   rp   rq   rl   rm   rn   ro   ÚminÚnrowsÚmaxÚncolsrs   r1   rG   )rt   Úclippedru   rg   rh   rv   r;   rl   rm   rn   ro   r9   r9   r<   Úarea2dò   s.    ((ýzName.area2d©T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_repr_theserp   ÚhiddenÚfuncÚvbasicÚmacroÚcomplexÚbuiltinÚ	funcgroupÚbinaryÚ
name_indexÚUNICODE_LITERALÚnameÚraw_formulaÚscoperf   rr   r|   r9   r9   r9   r<   r\   �   s&    
r\   c                	   @   s¨  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d„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zi Zi Z dd„ Z!dde"j#de$ddddf	dd„Z%dd„ Z&d d!„ Z'd"d#„ Z(d$d%„ Z)dUd'd(„Z*d)d*„ Z+d+d,„ Z,d-d.„ Z-d/d0„ Z.d1d2„ Z/d3d4„ Z0d5d6„ Z1d7d8„ Z2d9d:„ Z3d;d<„ Z4d=d>„ Z5d?d@„ Z6dAdB„ Z7dCdD„ Z8dEdF„ Z9dGdH„ Z:dIdJ„ Z;dKdL„ Z<dMdN„ Z=dOdP„ Z>dQdR„ Z?dSdT„ Z@dS )VrB   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                 C   s2   t | jƒD ]}| j| s|  |¡ q| jdd… S )zt
        :returns: A list of all sheets in the book.

        All sheets not already loaded will be loaded.
        N)ÚxrangerR   rO   Ú	get_sheet©rt   Úsheetxr9   r9   r<   ÚsheetsÂ  s
   

€zBook.sheetsc                 C   s   | j | p	|  |¡S )zr
        :param sheetx: Sheet index in ``range(nsheets)``
        :returns: A :class:`~xlrd.sheet.Sheet`.
        )rO   r’   r“   r9   r9   r<   rq   Í  s   zBook.sheet_by_indexc                 C   s6   z| j  |¡}W n ty   td| ƒ‚w |  |¡S )zp
        :param sheet_name: Name of the sheet required.
        :returns: A :class:`~xlrd.sheet.Sheet`.
        úNo sheet named <%r>)rN   ÚindexÚ
ValueErrorrG   rq   )rt   Ú
sheet_namer”   r9   r9   r<   Úsheet_by_nameÔ  s   ÿ
zBook.sheet_by_namec                 C   s   | 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)rN   ©rt   r9   r9   r<   Úsheet_namesß  s   zBook.sheet_namesc                 C   sJ   t |tƒr|}nz| j |¡}W n ty   td| ƒ‚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–   )Ú
isinstanceÚintrN   r—   r˜   rG   ÚboolrO   ©rt   Úsheet_name_or_indexr”   r9   r9   r<   Úsheet_loadedè  s   
ÿzBook.sheet_loadedc                 C   sJ   t |tƒr|}nz| j |¡}W n ty   td| ƒ‚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ž   rN   r—   r˜   rG   rO   r    r9   r9   r<   Úunload_sheetø  s   
ÿzBook.unload_sheetc                 C   sN   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›   r9   r9   r<   rU     s   


zBook.release_resourcesc                 C   s   | S r8   r9   r›   r9   r9   r<   Ú	__enter__  s   zBook.__enter__c                 C   s   |   ¡  d S r8   )rU   )rt   Úexc_typeÚ	exc_valueÚexc_tbr9   r9   r<   Ú__exit__!  ó   zBook.__exit__c                 C   sÀ   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   Fr`   r_   )rO   rN   Ú_sheet_visibilityrR   Ú_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›   r9   r9   r<   Ú__init__2  s>   
zBook.__init__Fc
                 C   sä  || _ || _|o	t| _|| _|| _|| _|	| _|set|dƒ�>}
|
 	dd¡ |
 
¡ }|
 	dd¡ |dkr7tdƒ‚| jrJtj|
 ¡ |tjd�| _|| _n|
 ¡ | _t| jƒ| _W d   ƒ n1 s_w   Y  n|| _t|ƒ| _d| _| jd d… tjkr| j| _nXtj| j| j d�}tr¦dD ]}| t|ƒ¡\| _| _| _| jr  nqŒtd	ƒ‚ndD ]}| t|ƒ¡| _| jr· nq¨td	ƒ‚t| jƒ| _~| j| jur×t| jd
ƒrÔ| j ¡  d| _| j| _trðt dt!| jƒ| j| jf | j d� d S d S )NÚrbr   é   zFile size is 0 bytes)Úaccessé   )r1   )ÚWorkbookrB   z-Can't find workbook in OLE2 compound documentr¤   r_   zmem: %s, base: %d, len: %d©Úfile)"r1   r2   ÚMMAP_AVAILABLEr3   r4   r5   r6   r7   ÚopenÚseekÚtellrG   ÚmmapÚfilenoÚACCESS_READr¨   Ú
stream_lenÚreadrQ   Úbaser   Ú	SIGNATUREr§   ÚCompDocÚUSE_FANCY_CDÚlocate_named_streamrŒ   Úget_named_streamr¦   r¤   Ú	_positionÚDEBUGÚprintÚtype)rt   r/   r0   r1   r2   r3   r4   r5   r6   r7   ÚfÚsizeÚcdÚqnamer9   r9   r<   rC   S  sb   

€õ€

ÿþ
&ÿzBook.biff2_8_loadc                 C   s8   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›   r9   r9   r<   r¶   �  s   

zBook.initialise_format_infoc                 C   sV   | j }| j||d … }t|ƒ}|  j |7  _ |dk rtS |\}}t|ƒd> t|ƒB S )NrÊ   rÌ   )rß   r§   rQ   ÚMY_EOFÚ	BYTES_ORD)rt   ÚposÚbuff_twoÚlenbuffÚloÚhir9   r9   r<   Ú	get2bytes›  s   zBook.get2bytesc                 C   sR   | j }| j}td|||d … ƒ\}}|d7 }|||| … }|| | _ |||fS )Nú<HHé   ©rß   r§   Úunpack)rt   rñ   r§   ÚcodeÚlengthÚdatar9   r9   r<   Úget_record_parts¥  s   

zBook.get_record_partsc                 C   s^   | j }| j}td|||d … ƒ\}}||krdS |d7 }|||| … }|| | _ |||fS )Nr÷   rø   )Nr   r_   rù   )rt   Úreqd_recordrñ   r§   rû   rü   rý   r9   r9   r<   Úget_record_parts_conditional®  s   

z!Book.get_record_parts_conditionalTc                 C   sX   | j rtdƒ‚|r| j| | _|  t¡ t | | j| j| |¡}| 	| ¡ || j
|< |S )Nz,Can't load sheets after releasing resources.)r¥   rG   r²   rß   rE   ÚXL_WORKSHEETr   ÚSheetrN   rØ   rO   )rt   Ú	sh_numberÚ
update_posr;   r9   r9   r<   r’   ¹  s   
ü

zBook.get_sheetc                 C   sX   t rtd| j| j| jd� tt| jƒƒD ]}t r$td|| j| j| jd� |  |¡ qd S )NzGET_SHEETS:rÎ   zGET_SHEETS: sheetno =)rà   rá   rN   r²   r1   r‘   rQ   r’   )rt   Úsheetnor9   r9   r<   rP   Î  s
   þzBook.get_sheetsc                 C   sB   t  | ¡ tdƒ}|g| _dg| _dg| _| j d ¡ |  ¡  d S )NzSheet 1r   )	r   Úinitialise_bookrŒ   rN   r²   r±   rO   ÚappendrP   )rt   Úfake_sheet_namer9   r9   r<   rL   Õ  s   
zBook.fake_globals_get_sheetc           
      C   s~  | j }|  ¡  trt| jd||ƒ |dkr3t|d| jdd�}d}t}t| j	ƒdkr0| j
| j }n)d}n&td|dd… ƒ\}}}|| j }|tk rRt|d| jdd�}nt|ddd�}ts`| jd	krlt| jd
| j||||ƒ |  jd7  _|tkr›| 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   ©Úlenlenr`   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)
)rJ   Úderive_encodingrà   rK   r1   Úunpack_stringÚencodingÚXL_BOUNDSHEET_WORKSHEETrQ   r²   Ú_sheetsoffsetrÙ   rú   ÚBIFF_FIRST_UNICODEÚunpack_unicoder2   r·   r»   r  ÚgetrN   r±   r¿   )
rt   rý   Úbvr™   Ú
visibilityÚ
sheet_typeÚabs_posnÚoffsetÚdescrÚsnumr9   r9   r<   Úhandle_boundsheetÞ  sT   
þýüþÿ
zBook.handle_boundsheetc                 C   s2   t d|dd… ƒd }trt| jd|ƒ || _d S )Nú<Hr   rÊ   zBUILTINFMTCOUNT: %r
)rú   rà   rK   r1   rµ   )rt   rý   rµ   r9   r9   r<   Úhandle_builtinfmtcount  s   
zBook.handle_builtinfmtcountc                 C   s\  | j r| j | _n]| jd u r+| jdk rt| jdƒ d| _nId| _| jdkr*t| jdƒ n:| j}|tv r7t| }nd|  krAdkrJn nd	t|ƒ }nd
t|ƒ }t	sZ| jrb|| jkrbt| jd||ƒ || _| jdkr”zt
d| jƒ W n! ty“ } zt| jd| j| jt|ƒj d¡d |ƒ ‚ d }~ww | jr«t| jd| jdd�}| ¡ }|| _d| _| jS )Nr   z?*** No CODEPAGE record, no encoding_override: will use 'ascii'
Úasciii°  rÊ   z2*** No CODEPAGE record; assuming 1200 (utf_16_le)
i,  iÏ  ÚcpÚunknown_codepage_z%CODEPAGE: codepage %r -> encoding %r
s   trialz/ERROR *** codepage %r -> encoding %r -> %s: %s
Ú.r`   r   r   r	  F)r4   r  ÚcodepagerJ   rK   r1   r2   Úencoding_from_codepageÚstrrà   ÚunicodeÚBaseExceptionrâ   r~   Úsplitr³   r  Ú	user_nameÚrstrip)rt   r$  r  ÚeÚstrgr9   r9   r<   r    sL   


ÿ
€

þ€üzBook.derive_encodingc                 C   s(   t d|dd… ƒd }|| _|  ¡  d S )Nr  r   rÊ   )rú   r$  r  )rt   rý   r$  r9   r9   r<   Úhandle_codepageC  s   zBook.handle_codepagec                 C   sJ   t d|dd… ƒ}| jrtd|| jd� | jdks | j|ks J ‚|| _d S )Nr÷   r   rø   z
Countries:rÎ   r�   )rú   r2   rá   r1   Ú	countries)rt   rý   r/  r9   r9   r<   Úhandle_countryI  s   
zBook.handle_countryc                 C   sD   t d|dd… ƒd }ts| jrt| jd|ƒ |dv sJ ‚|| _d S )Nr  r   rÊ   zDATEMODE: datemode %r
)r   r   )rú   rà   r2   rK   r1   Údatemode)rt   rý   r1  r9   r9   r<   Úhandle_datemodeP  s
   

zBook.handle_datemodec                 C   s–   t p| jdk}| jdkrGtd|d d… ƒ\}}d}t||dd�\}}||d … }| jd tkr5| j |¡ |rIt	| j
d| jd ||||ƒ d S d S d S )	NrÊ   r   ú<HIr  r   r	  r`   zCEXTERNNAME: sbktype=%d oflags=0x%04x oinfo=0x%08x name=%r extra=%r
)rà   r2   rJ   rú   Úunpack_unicode_update_posrÁ   ÚSUPBOOK_ADDINrÂ   r  rK   r1   )rt   rý   ÚblahÚoption_flagsÚ
other_inforñ   r�   Úextrar9   r9   r<   Úhandle_externnameW  s   
þøzBook.handle_externnamec                 C   sì  |   ¡  |  jd7  _tp| jdk}tp| jdk}| jdkr‹td|dd… ƒd }|d d }t|ƒ|k rZ|rAt| jd|t|ƒƒ |  	¡ \}}}|t
krPtdƒ‚||7 }t|ƒ|k s5d}	t|ƒD ](}
td	||	|	d … ƒ}|\}}}| j |¡ |	d7 }	|rˆt| jd
|
|||ƒ q`d S td|d d… ƒ\}}|rÁtd| jd� t|dt|ƒ| jd� dddddœ |d¡}td|||f | jd� |dkrát|d|d … | jƒ}|| j| j< |rát| j| jd� d|  krëdksîn d}| j |¡ d S )Nr   rÊ   r   r  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à   r2   rJ   rú   rQ   rK   r1   rþ   ÚXL_CONTINUErG   r‘   r¼   r  rá   Úhex_char_dumpr  r'  r  r¾   r½   )rt   rý   Úblah1Úblah2Únum_refsÚ
bytes_reqdÚcode2Úlength2Údata2rñ   ÚkÚinfoÚref_recordxÚref_first_sheetxÚref_last_sheetxÚncÚtyÚmsgr™   r9   r9   r<   Úhandle_externsheete  sh   
ýö
ý€úüûzBook.handle_externsheetc                 C   sÒ   | j dkre| j}t|dƒ t|dt|ƒd|d� | jdkretd|d d… ƒ\}|dkrAtd|dd … ƒ\}}t|d||ƒ tdƒ‚|d	kretd|d
d… ƒ\}|d	krVd}n	|dkr]d}nd}t|d|ƒ tdƒ‚)NrÊ   z
FILEPASS:
r   )rÙ   r<  r   r  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)r2   r1   rK   r?  rQ   rJ   rú   rG   )rt   rý   ÚlogfÚkind1ÚkeyÚ
hash_valueÚkind2Úcaptionr9   r9   r<   Úhandle_filepass˜  s,   


þ÷zBook.handle_filepassc                 C   s„  t p| jdk}| j}|dk rd S |  ¡  td|dd… ƒ\
}}}}}}	}
}}}tƒ }| |_t| jƒ}||_	| j 
|¡ ||_g d¢}|D ]\}}}t||||@ |? ƒ qDd|j }|dk rit|d| j|d	�\}}n	t|d|d	�\}}||_|	|_d |_|r‹t| jd
|||||||	|ƒ
 |}|jr¡t |d¡}|r¡td| | jd� ||_||d … |_||_d|_|rÀ|j| jd| d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-------------------rc   )rà   r2   rJ   r  rú   r\   rp   rQ   rÃ   r‹   r  r7  Úsetattrr†   Úunpack_string_update_posr  r4  Úextn_sheet_numÚexcel_sheet_indexr�   rK   r1   rˆ   Úbuiltin_name_from_coder  rá   r�   rŽ   Úbasic_formula_lenÚ	evaluatedrs   )rt   rý   r6  r  r7  Ú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�   r9   r9   r<   Úhandle_name¯  s^   ý


ü
ýÿzBook.handle_namec                 C   sz  | j dk}| j}|r.td|d� tdt| jƒ|d� tdt| jƒ|d� tdt| jƒ|d� t| jƒ}t	|ƒD ]\}| j| }| j
dkrm|j}|dkrMd	}nCd
|  krZt| jƒkrjn n| j|d
  }|d	krid}n&d}n#d| j
  krxdkr�n n|j}|dkr„d	}n| j| }| j |d¡}||_q7t	|ƒD ]}| j| }|js¥|jr¦q˜|jrªq˜t| |||d� q˜| j dkrÙtd|d� t	|ƒD ]}| j| }|j|d| d� qÂtd|d� i }	i }
t	|ƒD ]:}| j| }|j ¡ }||jf}||	v rÿ| j rÿt|d|ƒ ||	|< |j||f}||
v �r|
|  |¡ qá|g|
|< qá|
 ¡ D ]}|
| }| ¡  dd„ |D ƒ|
|< �q |	| _|
| _d S )NrÊ   z+++++ names_epilogue +++++rÎ   r»   r¾   r¿   r   r   r`   r   éþÿÿÿéýÿÿÿr   r   )r6  z&---------- name object dump ----------z--- name[%d] ---)rd   z&--------------------------------------z)Duplicate entry %r in name_and_scope_map
c                 S   s   g | ]}|d  ‘qS )rÊ   r9   )r:   Úxr9   r9   r<   r=   1  s    z'Book.names_epilogue.<locals>.<listcomp>)r2   r1   rá   ÚREPRr»   r¾   r¿   rQ   rÃ   ÚrangerJ   r_  r^  r  r�   r†   rŠ   rb  Úevaluate_name_formulars   r�   ÚlowerrK   r  ÚkeysÚsortÚname_and_scope_mapÚname_map)rt   r6  rã   Ú	num_namesÚnamexrl  rg  Úintl_sheet_indexr™   r}  r~  Ú
name_lcaserR  Ú	sort_dataÚalistr9   r9   r<   Únames_epilogueë  sr   



€








zBook.names_epiloguec                 C   s   t d|dd… ƒ\}}d S )Nr3  rø   é
   )rú   )rt   rý   Úobj_typeÚobj_idr9   r9   r<   Ú
handle_obj5  s   zBook.handle_objc           
   	   C   sü  | j  d ¡ tp| jdk}|r!td| jd� t|dt|ƒ| jd� td|dd… ƒd }|r7td| | jd� | j	}|  j	d7  _	|dd	… d
krlt
| j d< | j	d | _|rjtd||f | jd� td| j| jd� d S |dd	… dkrŒt| j d< | j	d | _|rŠtd| | jd� d S t|ddd�\}}|dkrªt| j d< |r¨t| jd||ƒ d S t| j d< |r¹t| jd||ƒ g }t|ƒD ]<}zt||dd�\}	}W n tjyç   | jrãtd|||f | jd� Y  d S w | |	¡ |rût| jd|t|	ƒ|	|ƒ q¿d S )NrÊ   zSUPBOOK:rÎ   r   r;  r  znum_sheets = %dr   rø   s   r`   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à   r2   rá   r1   r?  rQ   rú   r¸   ÚSUPBOOK_INTERNALr¹   r»   r5  rº   r4  ÚSUPBOOK_DDEOLErK   ÚSUPBOOK_EXTERNALrx  ÚstructÚerror)
rt   rý   r6  Ú
num_sheetsÚsbnÚurlrñ   rœ   rv  Úshnamer9   r9   r<   Úhandle_supbook<  s\   



ÿý÷

€òzBook.handle_supbookc                 C   sâ   |   ¡  td|d d… ƒd }t|d| jdd�}| j}|| j| ks$J ‚|  jd7  _| j}|d t|ƒ }trBt	| j
d||||ƒ |  ¡  trRtd| j | j
d� | j d ¡ | j|d	d
� trjtd| j| j
d� || | _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´   rN   rß   rQ   rà   rK   r1   r¶   rá   rí   rO   r  r’   )rt   rý   Ú	sheet_lenr™   r  ÚBOF_posnÚposnr9   r9   r<   Úhandle_sheethdrk  s   zBook.handle_sheethdrc                 C   s,   t d|ƒd }trtd|| jd� || _d S )Nr”  r   zSHEETSOFFSET:rÎ   )rú   rà   rá   r1   r  )rt   rý   r—  r9   r9   r<   Úhandle_sheetsoffset€  s   
zBook.handle_sheetsoffsetc           
      C   sæ   t rtd| jd� tƒ }t|ƒ}|g}td|dd… ƒd }t s%| jdkr,t| jd|ƒ 	 |  t	¡\}}}|d u r:n||7 }t dkrJt| jd
||ƒ | 
|¡ q-t||ƒ\| _}| jr^|| _t rqtƒ }	td|	| f | jd� 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á   r1   r   rQ   rú   r2   rK   r   r>  r  Úunpack_SST_tabler©   r5   rª   )
rt   rý   rV   ÚnbtÚstrlistÚuniquestringsrû   ÚnbÚ
rt_runlistrY   r9   r9   r<   Ú
handle_sst†  s0   
ùþzBook.handle_sstc                 C   st   d}| j dk r| jsd| _|| _d S t|d| jdd�}nt|ddd�}|r1t| jdt|ƒ| j|ƒ | 	¡ }|| _d S )Nr   r   Tr   r	  rÊ   z!WRITEACCESS: %d bytes; raw=%s %r
)
rJ   r  r³   r*  r  r  rK   r1   rQ   r+  )rt   rý   rà   r-  r9   r9   r<   Úhandle_writeaccessŸ  s   

zBook.handle_writeaccessc                 C   s0  t  | ¡ 	 |  ¡ \}}}trtd| | jd� |tkr"|  |¡ nõ|tks*|t	kr0|  
|¡ nç|tkr:|  |¡ nÝ|tkrD|  |¡ nÓ|tkrN|  |¡ nÉ|tkrX|  |¡ n¿|tkrb|  |¡ nµ|tkrl|  |¡ n«|tkrv|  |¡ n¡|tkr€|  |¡ n—|tkrŠ|  |¡ n�|tkr”|  |¡ nƒ|tkrž|   |¡ ny|t!kr¨|  "|¡ no|t#kr²|  $|¡ ne|t%kr¼|  &|¡ n[|t'krÆ|  (|¡ nQ|t)krÐ|  *|¡ nG|d@ dkré| j+rét,| jd| j-| d |||ƒ n.|t.k�r|  /¡  |  0¡  |  1¡  | j2�s|  3¡  | j4dk�rt�rtd	| j-| jd� d S 	 q)
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á   r1   ÚXL_SSTr   ÚXL_FONTÚXL_FONT_B3B4Úhandle_fontÚ	XL_FORMATÚhandle_formatÚXL_XFÚ	handle_xfÚXL_BOUNDSHEETr  ÚXL_DATEMODEr2  ÚXL_CODEPAGEr.  Ú
XL_COUNTRYr0  ÚXL_EXTERNNAMEr:  ÚXL_EXTERNSHEETrO  ÚXL_FILEPASSrV  ÚXL_WRITEACCESSr¡  ÚXL_SHEETSOFFSETr™  ÚXL_SHEETHDRr˜  Ú
XL_SUPBOOKr“  ÚXL_NAMErs  Ú
XL_PALETTEÚhandle_paletteÚXL_STYLEÚhandle_styler2   rK   rß   ÚXL_EOFÚxf_epiloguer…  Úpalette_epiloguer  r  rJ   )rt   Úrcrü   rý   r9   r9   r<   rM   ­  sn   
ÿ
ÆzBook.parse_globalsc                 C   s$   | j ||| … }|t|ƒ | _|S r8   )r§   rQ   rß   )rt   rñ   rü   rý   r9   r9   r<   rØ   í  s   z	Book.readc                 C   s¬  t rtd| | jd� dd„ }| j}|  ¡ }|tkr|dƒ |tvr/|d| j||d …  ƒ |  ¡ }|tkr;|dƒ d	|  krEd
ksNn |d||f ƒ dtdt	| | ƒ }|  
| j|¡}t rit| jd|ƒ t|ƒ|k rs|dƒ ||7 }|d? }td|dd	… ƒ\}	}
t r”td||	|
f | jd� | jd	 | }t r¨td||f | jd� d } }}|dkrãtd|d	d… ƒ\}}|	dkrÄd}n+|	dkrÖ|dk sÐ|dv rÓd}nd}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 | jd� |
tk�p|dk�o|
tk}|tk�r'|�s,|
|k�r.|S |dk �r:|
tk�r:|S |dk�rH|
d"k�rH|d#ƒ |d$||	|
|||f ƒ d S )%Nzreqd: 0x%04xrÎ   c                 S   s   t d|  ƒ‚)Nz%Unsupported format, or corrupt file: )rG   )rN  r9   r9   r<   Ú	bof_error÷  r°   zBook.getbof.<locals>.bof_errorz$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á   r1   rß   rö   rï   Úbofcodesr§   ry   ÚboflenrØ   rK   rQ   rú   r  ÚXL_WORKBOOK_GLOBALS_4Wr2   rF   r  )rt   Ú
rqd_streamrÀ  ÚsavposÚopcoderü   Úpaddingrý   Úversion1Úversion2Ú
streamtypeÚ
bof_offsetÚversionÚbuildÚyearÚgot_globalsr9   r9   r<   rE   ò  sž   ÿÿÿÿÿÿûúÿÿ
ÿÿÿzBook.getbofr}   )Ar~   r   r€   r�   rR   r1  rJ   rÃ   r$  r  r/  rŒ   r*  rî   rÆ   rè   rç   rÇ   rÄ   rÅ   rD   rT   r•   rq   rš   rœ   r¢   r£   rU   r«   r¯   r}  r~  rÈ   ÚsysÚstdoutÚUSE_MMAPrC   r¶   rö   rþ   r   r’   rP   rL   r  r  r  r.  r0  r2  r:  rO  rV  rs  r…  r‰  r“  r˜  r™  r   r¡  rM   rØ   rE   r9   r9   r9   r<   rB     s‚    	!
û=
	
	4*3<J/@rB   c                 C   s\   | }|d@ r|dkr|d8 }d}nd}|d@ }|d@ r&|dkr#|d8 }d}nd}||||fS )	Ni €  i   r   r   r¢  i @  é€   rÃ  r9   )ÚinrowÚincolÚoutrowÚrelrowÚoutcolÚrelcolr9   r9   r<   Úexpand_cell_address@  s   rÝ  ÚABCDEFGHIJKLMNOPQRSTUVWXYZc                 C   sB   | dksJ ‚t dƒ}	 t| dƒ\}}|| | }|s|S |d } q)Nr   r^   r   é   )rŒ   Údivmod)ÚcolxÚ_A2Zr�   ÚquotÚremr9   r9   r<   ÚcolnameR  s   ûrå  c                 C   sd   |rdd| dk  t | ƒf }nd| d f }|r(dd|dk  t |ƒf }|| S dt|ƒ }|| S )Nz(*%s%d)z+-r   z$%dr   ú$)Úabsrå  )Úrowxrá  rÚ  rÜ  ÚrowpartÚcolpartr9   r9   r<   Údisplay_cell_address\  s   ÿrë  c              
   C   sŠ  d}t | ƒ}| d }t |ƒ}d}g }|j}i }	t}
t}t}d}t|ƒD �]}|
d|||d … ƒd }|d7 }||| ƒ}|d7 }d}d}|d@ rZ|
d|||d … ƒd }|d7 }|d@ ro|
d|||d … ƒd }|d7 }td	ƒ}d}	 || }|d@ r¦||| d? |ƒ}|||d|  … }z	|t|d
ƒ7 }W n   ‚ |d| 7 }n||| |ƒ}|||| … }|t||ƒ7 }||7 }||7 }||krÉn|d7 }| | }t |ƒ}||d ƒ}d}qv|�rg }t|ƒD ]&}||krûd}|d7 }| | }t |ƒ}| |
d|||d … ƒ¡ |d7 }qç||	t |ƒ< ||7 }||k�r<|| }|d7 }||k �r3| | }t |ƒ}n	||d k�s<J ‚||ƒ q#||	fS )zReturn list of stringsr   rÌ   Úlatin_1r  rÊ   r   rø   r”  r^   Ú	utf_16_ler÷   )rQ   r  rú   rw   rð   r‘   rŒ   r'  )Ú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Úrunindexr9   r9   r<   rš  g  sŽ   á!




rš  )rÞ  )0Ú
__future__r   r?   rÓ  r^   r   r   r   ÚbiffhÚformulaÚtimemachineÚtimer   ÚImportErrorr	   r�  rú   Ú
empty_cellrà   rÜ   r>   rÔ   rÐ   rÕ  rï   rx  ÚSUPBOOK_UNKrŠ  rŒ  r5  r‹  rH   Ú_code_from_builtin_namer`  Úcode_from_builtin_nameÚitemsÚ_binÚ_bicrŒ   rÔ  r[   Ú
BaseObjectr\   rB   rÝ  rå  rë  rš  r9   r9   r9   r<   Ú<module>   sŽ   þÿò

üI         *

