o
    q¨Êh¢ž ã                   @   sV  d dl mZ d dlmZ d dlmZmZ ddlT ddlmZm	Z	 ddl
mZmZmZmZmZ ddlT d Zd ZdZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zeeeeeee e!e"eiZ#e$de%dede!de&de'de(diZ)G dd„ deƒZ*e*e$e+d ƒƒZ,G d!d"„ d"eƒZ-dZ.G d#d$„ d$eƒZ/d%S )&é    )Úprint_function)Úarray)ÚcalcsizeÚunpacké   )Ú*)ÚFormatÚnearest_colour_index)ÚFMLA_TYPE_CELLÚFMLA_TYPE_SHAREDÚdecompile_formulaÚdump_formulaÚrangename2d))Úshow_formulasr   )Úshow_grid_linesr   )Úshow_sheet_headersr   )Úpanes_are_frozenr   )Úshow_zero_valuesr   )Úautomatic_grid_line_colourr   )Úcolumns_from_right_to_leftr   )Úshow_outline_symbolsr   )Ú'remove_splits_if_pane_freeze_is_removedr   )Úsheet_selectedr   )Úsheet_visibler   )Úshow_in_page_break_previewr   c                   @   sž  e Zd ZdZdZdZdZdZi Zi Z	g Z
g Zg Zi ZdZdZdZdZdZdZdZdZdZg Zi Zi ZdZdZdZdZdZdZg Z g 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)dFdd„Z*dFdd„Z+dFdd„Z,dFdd„Z-dFdd„Z.dFd d!„Z/e-Z0d"d#„ Z1d$d%„ Z2d&d'„ Z3d(d)„ Z4d*d+„ Z5d,d-„ Z6dGd.d/„Z7dHd0d1„Z8dHd2d3„Z9d4d5„ Z:d6d7„ Z;d8d9„ Z<d:d;„ Z=d<d=„ Z>d>d?„ Z?d@dA„ Z@dBdC„ ZAdDdE„ ZBdS )IÚSheetaj  
    Contains the data for one worksheet.

    In the cell access functions, ``rowx`` is a row index, counting from
    zero, and ``colx`` is a column index, counting from zero.
    Negative values for row/column indexes and slice positions are supported in
    the expected fashion.

    For information about cell types and cell values, refer to the documentation
    of the :class:`Cell` class.

    .. warning::

      You don't instantiate this class yourself. You access :class:`Sheet`
      objects via the :class:`~xlrd.book.Book` object that
      was returned when you called :func:`xlrd.open_workbook`.
    Ú Nr   (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 C   s¸  || _ |j| _|| _|j| _tdtgƒ| _tddgƒ| _|| _|| _	|j
| _
|j| _|j| _| jr6| j| _n| j| _|j| _d| _d| _d| _d| _d| _d| _g | _g | _g | _d | _d | _d | _d| _d| _d| _d| _ i | _!i | _"g | _#g | _$g | _%i | _&g | _'g | _(g d¢| _)|j*| | _+t,D ]
\}}t-| ||ƒ q“d| _.d| _/d| _0d | _1g | _2i | _3i | _4d| _5d| _6d| _7d| _8d | _9d | _:i | _;| jd	krÑd
| _<nd| _<d| _=d| _>d S )NÚBÚhéÿÿÿÿr   )r   r   r   r   é@   é<   éd   éP   i   é @  é   )?ÚbookÚbiff_versionÚ	_positionÚlogfiler   ÚXL_CELL_EMPTYÚbtÚbfÚnameÚnumberÚ	verbosityÚformatting_infoÚragged_rowsÚput_cell_raggedÚput_cellÚput_cell_unraggedÚ_xf_index_to_xl_type_mapÚnrowsÚncolsÚ_maxdatarowxÚ_maxdatacolxÚ	_dimnrowsÚ	_dimncolsÚ_cell_valuesÚ_cell_typesÚ_cell_xf_indexesÚdefcolwidthÚstandardwidthÚdefault_row_heightÚdefault_row_height_mismatchÚdefault_row_hiddenÚdefault_additional_space_aboveÚdefault_additional_space_belowÚcolinfo_mapÚrowinfo_mapÚcol_label_rangesÚrow_label_rangesÚmerged_cellsÚrich_text_runlist_mapÚhorizontal_page_breaksÚvertical_page_breaksÚ_xf_index_statsÚ_sheet_visibilityÚ
visibilityÚ_WINDOW2_optionsÚsetattrÚfirst_visible_rowxÚfirst_visible_colxÚgridline_colour_indexÚgridline_colour_rgbÚhyperlink_listÚhyperlink_mapÚcell_note_mapÚ$cooked_page_break_preview_mag_factorÚcooked_normal_view_mag_factorÚ$cached_page_break_preview_mag_factorÚcached_normal_view_mag_factorÚscl_mag_factorÚ_ixfeÚ_cell_attr_to_xfxÚutter_max_rowsÚutter_max_colsÚ_first_full_rowx)Úselfr&   Úpositionr-   r.   ÚattrÚdefval© rh   ú</var/www/html/env/lib/python3.10/site-packages/xlrd/sheet.pyÚ__init__?  s|   

	

zSheet.__init__c                 C   s8   | j r
|  ||¡}nd}t| j| | | j| | |ƒS )zC
        :class:`Cell` object in the given row and column.
        N)r0   Úcell_xf_indexÚCellr=   r<   ©rd   ÚrowxÚcolxÚxfxrh   rh   ri   Úcell“  s   ýz
Sheet.cellc                 C   ó   | j | | S )z.Value of the cell in the given row and column.©r<   ©rd   rn   ro   rh   rh   ri   Ú
cell_value¡  s   zSheet.cell_valuec                 C   rr   )z
        Type of the cell in the given row and column.

        Refer to the documentation of the :class:`Cell` class.
        ©r=   rt   rh   rh   ri   Ú	cell_type¥  s   zSheet.cell_typec                 C   sÐ   |   ¡  | j| | }|dkr| jd  d7  < |S z| j| j}|dkr1| jd  d7  < |W S W n	 ty;   Y nw z| j| j}|dkrId}| jd  d7  < |W S  tyg   | jd  d7  < Y dS w )z£
        XF index of the cell in the given row and column.
        This is an index into :attr:`~xlrd.book.Book.xf_list`.

        .. versionadded:: 0.6.1
        r   r   r   é   é   é   )Úreq_fmt_infor>   rN   rG   Úxf_indexÚKeyErrorrF   rm   rh   rh   ri   rk   ­  s.   þÿýzSheet.cell_xf_indexc                 C   s   t | j| ƒS )z÷
        Returns the effective number of cells in the given row. For use with
        ``open_workbook(ragged_rows=True)`` which is likely to produce rows
        with fewer than :attr:`~Sheet.ncols` cells.

        .. versionadded:: 0.7.2
        )Úlenr<   ©rd   rn   rh   rh   ri   Úrow_lenÌ  s   zSheet.row_lenc                    s"   ‡ ‡fdd„t tˆjˆ  ƒƒD ƒS )zS
        Returns a sequence of the :class:`Cell` objects in the given row.
        c                    ó   g | ]}ˆ  ˆ |¡‘qS rh   ©rq   ©Ú.0ro   ©rn   rd   rh   ri   Ú
<listcomp>Ú  ó    
ÿÿzSheet.row.<locals>.<listcomp>)Úxranger~   r<   r   rh   r…   ri   ÚrowÖ  s   þz	Sheet.rowc                    s   ‡ fdd„t ˆ jƒD ƒS )z3Returns a generator for iterating through each row.c                 3   s   � | ]}ˆ   |¡V  qd S ©N)r‰   )r„   Úindex©rd   rh   ri   Ú	<genexpr>á  s   € z!Sheet.get_rows.<locals>.<genexpr>)Úranger6   rŒ   rh   rŒ   ri   Úget_rowsß  s   zSheet.get_rowsc                 C   ó,   |du r| j | |d… S | j | ||… S )zM
        Returns a slice of the types of the cells in the given row.
        Nrv   ©rd   rn   Ú
start_colxÚend_colxrh   rh   ri   Ú	row_typesã  ó   zSheet.row_typesc                 C   r�   )zN
        Returns a slice of the values of the cells in the given row.
        Nrs   r‘   rh   rh   ri   Ú
row_valuesë  r•   zSheet.row_valuesc                    sj   t ˆjˆ  ƒ}|dk r||7 }|dk rd}|du s||kr |}n|dk r(||7 }‡ ‡fdd„t||ƒD ƒS )zP
        Returns a slice of the :class:`Cell` objects in the given row.
        r   Nc                    r�   rh   r‚   rƒ   r…   rh   ri   r†      r‡   z#Sheet.row_slice.<locals>.<listcomp>)r~   r<   rˆ   )rd   rn   r’   r“   Úncrh   r…   ri   Ú	row_sliceó  s   þzSheet.row_slicec                    ób   ˆj }|dk r||7 }|dk rd}|du s||kr|}n|dk r$||7 }‡ ‡fdd„t||ƒD ƒS )zS
        Returns a slice of the :class:`Cell` objects in the given column.
        r   Nc                    s   g | ]}ˆ  |ˆ ¡‘qS rh   r‚   ©r„   rn   ©ro   rd   rh   ri   r†     r‡   z#Sheet.col_slice.<locals>.<listcomp>©r6   rˆ   ©rd   ro   Ú
start_rowxÚend_rowxÚnrrh   r›   ri   Ú	col_slice  ó   þzSheet.col_slicec                    r™   )zQ
        Returns a slice of the values of the cells in the given column.
        r   Nc                    ó   g | ]	}ˆj | ˆ  ‘qS rh   rs   rš   r›   rh   ri   r†   $  ó    ÿÿz$Sheet.col_values.<locals>.<listcomp>rœ   r�   rh   r›   ri   Ú
col_values  r¢   zSheet.col_valuesc                    r™   )zP
        Returns a slice of the types of the cells in the given column.
        r   Nc                    r£   rh   rv   rš   r›   rh   ri   r†   6  r¤   z#Sheet.col_types.<locals>.<listcomp>rœ   r�   rh   r›   ri   Ú	col_types)  r¢   zSheet.col_typesc              	   C   sø  | j dkrt| jd| j| jƒ | jr}d }}| j}| j}| jD ]@}|\}}}}	d|  kr6|  k r6|krHn nd|  krG|	  k rG|ksSn t| jd| j| j	|ƒ ||krY|}|	|kr_|	}q|| jkrk|| _d| _
|| jkr}|  |d dttdƒd¡ | j dkr | j| jksŽ| j| jkr t| jd	| j| j	| j| j| j| jƒ | jsø| j}
| j}| j}| j}| j}| j
dkr»| j}n| j
}t|ƒD ]7}|| }t|ƒ}|
| }|dkr÷tdƒg| || |d …< | j| ||d …< |r÷| j| || |d …< qÂd S d S )
Nrz   z$tidy_dimensions: nrows=%d ncols=%d 
r   r   z6*** WARNING: sheet #%d (%r), MERGEDCELLS bad range %r
éþÿÿÿr   r   z?NOTE *** sheet %d (%r): DIMENSIONS R,C = %d,%d should be %d,%d
)r/   Úfprintfr)   r6   r7   rJ   ra   rb   r.   r-   rc   r3   r*   ÚUNICODE_LITERALr:   r;   r1   r=   r<   r>   r0   rˆ   r~   r+   r,   )rd   r    r—   ÚumaxrowsÚumaxcolsÚcrangeÚrloÚrhiÚcloÚchir7   Ús_cell_typesÚs_cell_valuesÚs_cell_xf_indexesÚ
s_fmt_infoÚuboundrn   ÚtrowÚrlenÚnextrarh   rh   ri   Útidy_dimensions@  st   
ý
B
þ€


ø

€ìzSheet.tidy_dimensionsc              	   C   sÊ  |d u r	| j | }d|  kr| jk sJ ‚ J ‚d|  kr$| jk s'J ‚ J ‚| j}z­|d }| j|k rd| jj}| jj}	| jj}
| j	}| j
}t| j|ƒD ]}||d ƒ |	g ƒ |r`|
|d ƒ qL|| _| j| }| j| }|ru| j| }t|ƒ}|| jkrƒ|d | _|| }|s�| |¡ | |¡ |rš| |¡ W d S |dkrÄ|d7 }| j	| ||d …< tdƒg| ||d …< |rÄ| j
| ||d …< |||< |||< |rÕ|||< W d S W d S    td||| jd� ‚ )Nr   r   r   r3   ©Úfile)r5   rb   ra   r0   r6   r=   Úappendr<   r>   r+   r,   rˆ   r~   r7   r©   Úprintr)   )rd   rn   ro   ÚctypeÚvaluer|   Úfmt_infor    ÚsctaÚscvaÚscxar+   r,   Ú_unusedÚ	types_rowÚ
values_rowÚfmt_rowÚltrÚ	num_emptyrh   rh   ri   r2   }  s`   

€







ÿzSheet.put_cell_raggedc                 C   sL  |d u r	| j | }z|| j| |< || j| |< | jr%|| j| |< W d S W d S  t�y   |d }|d }d|  krC| jksFJ ‚ J ‚d|  krR| jksUJ ‚ J ‚|| jkrv|| _|| j	k rfd| _
n|| j
  krqdkrvn n|| _
|| j	kr¯| j| }| jt|ƒ }	|	dkr®| | j|	 ¡ | jr¡| j|  | j|	 ¡ | j|  tdƒg|	 ¡ n;| jj}
| jj}| jj}| j}| j}| j}| j}t| j	|ƒD ]}|
|| ƒ |tdƒg| ƒ |ræ||| ƒ qÍ|| _	z!|| j| |< || j| |< | j�r|| j| |< W Y d S W Y d S    td||| jd� ‚    td||| jd� ‚ )Nr   r§   r   r   r3   rº   )r5   r=   r<   r0   r>   Ú
IndexErrorrb   ra   r7   r6   rc   r~   Úextendr+   r,   r©   r¼   rˆ   r½   r)   )rd   rn   ro   r¾   r¿   r|   r    r—   r¶   r¸   rÁ   rÂ   rÃ   rÀ   r+   r,   rÄ   rh   rh   ri   r4   ¸  sl   
ÿ



€€ÿzSheet.put_cell_unraggedc           u      C   s|  d}|p| j dk}|p| j dk}d}d}|j}| j|_ttttttf}| j}	t	}
|j
}| j}| j}|o5|j}i }i }d}	 |ƒ \}}}|tkr^|
d|d d… ƒ\}}}}|	||d ||ƒ �nE|tkr‰|
d|ƒ\}}}}|	||t|j| |ƒ |r‡|j |¡}|r‡|| j||f< �n|tkr¼|
d|dd	… ƒ\}}}|tk r«t|d	|jp¦| ¡ dd
�}nt|d	dd
�}|	||t||ƒ �nç|tk�r`|
d|dd	… ƒ\}}}|tk �rt|d	|jpÛ| ¡ dd
�\}}t|| ƒ}|d7 }g }t|ƒD ]}| t	d|||d … ƒ¡ |d7 }qñ|t|ƒk�sJ ‚n?t |d	dd
�\}}t	d|||d … ƒd }|d7 }g }t|ƒD ]}| t	d|||d … ƒ¡ |d7 }�q0|t|ƒk�sOJ ‚|	||t||ƒ || j||f< �nC|t!k�rƒ|
d|d d	… ƒ\}}}t"|d	d… ƒ}|	||d ||ƒ �n |t#k�rÐ|
d|dd… ƒ\}} |
d|dd … ƒ\}!d}t| |!d ƒD ]'}|
d|||d … ƒ\}t"||d |d	 … ƒ}|d	7 }|	||d ||ƒ �q¦�nÓ|t$k�r€|�sÙq<|
d|dd… ƒ\}}"}#d|  k�rò| j%k �s n t&d|| j%f | j'd� q<|"|#f}$| |$¡}%|%d u �r^t(ƒ  ||$< }%|"d@ |%_)|"d? d@ |%_*|#d@ |%_+|#d? d@ |%_,|#d? d@ |%_-|#d	? d@ |%_.|#d? d@ |%_/|#d? d@ |%_0|#d? d@ |%_1|#d? d@ |%_2|%j/�s^d|%_0|%| j3|< 	 |�r~t&d||"|#| j'd� |%j6| j'd| j5|f d� �n#|t7v �rë|d k�r™|
d!|dd… ƒ\}}}}&}'n)|d"k�r­|
d!|dd… ƒ\}}}}&}'n|
d#|dd… ƒ\}}}(}&}'|  8|(||¡}|�rèt4| j'd$||ƒ |
d|d%d&… ƒd })t9||d&d … |)t:||d|d'� |&d	d(… d)k�rÚt|&d ƒ}*|*dk�r›d}+	 | 
¡ \},}-}.|,t;k�s|,t<k�rd}+na|,tk�r6|
d*|.d d… ƒ\}/}0}1}2}3}4|�r5t4| j'd+|/|0|1|2|3ƒ n>|,tk�ri|
d,|.d d… ƒ\}/}0}1}2}5}4|�rht4| j'd-|/|0|1|2|5ƒ t9||.dd … |4t=d|||d.� n|,|v�rtt>d/|, ƒ‚|+�s‹| 
¡ \},}6}.|,t;t<fv�r‹t>d0|, ƒ‚|  ?|.¡}|  ||t||¡ �
n|*dk�r°t|&d ƒ}7|	||t@|7|ƒ �	nó|*dk�rÅt|&d ƒ}7|	||tA|7|ƒ �	nÞ|*d1k�rÔ|	||td2|ƒ �	nÏt>d3|* ƒ‚|
d4|&ƒd }|	||d ||ƒ �	n¸|tBk�r|
d5|d d(… ƒ\}}}}7}8t@tAf|8 }9|	|||9|7|ƒ �	n•|tCk�r„|�sq<tDƒ }:|
d6|d d… ƒ\};}<|:_E|:_0}'d|;  k�r<|<  k�r<d7k�sJn t&d8|;|<f | j'd� ~:q<tF|:|'d9ƒ t|;|<d ƒD ]}|d:k�r` n|:| jG|< 	 �qW|�r‚t4| j'd<| j5|;|<|:jE|:j0|'ƒ |:j6| j'd=d� �	n|tHk�r—|
d|d d… ƒ\| _I	 �	n|tJk�rº|dk�r¬t&d?|tK|ƒ| j'd� |
d|d d… ƒ\| _L	 �né|tMk�r|�sÃq<|dAk�sÊJ ‚|dd… dBk�sÕJ ‚t	dC|ddA… ƒ}=g }>|=D ]}?tdDƒD ]}@|> |?d@ ¡ |?dL }?�qè�qâtN|>ƒ| _O	 �n¢|tTk�r |�s
q<|
d|d d	… ƒ\}}}|	||tUd2|ƒ �nƒ|tVk�rh|�s)q<|d? }B|
dJ|B |ƒ}C|Cd d… \}}D|Cd }E|B|Ed |D k�sKJ ‚d}t|D|Ed ƒD ]}|	||tUd2|C| ƒ |d7 }�qT�n;|tWk�sr|tXk�rÃ|dk�rxq<|dKk �r‡|
dL|dd(… ƒ}Fn	|
dM|ddN… ƒ}FdO\| _Y| _Z|F\| _[| _\|dPv �r°| j]j^�r°| j]j_�s°| j] `¡  |�rÁt4| j'dQ| j5| ja| j\| j[ƒ �nà|tbk�rÏ|  c|¡ �nÔ|tdk�rÛ|  e|¡ �nÈ|tfk�rðd}|�rìt&dR| j'd� d}�n´|tgk�r|  h|¡}G|G�r|Gji}H�n¡d }H�n�|tjk�r|  k|||¡ �n�|tlk�r,|  m|¡}I|I�r*|H�r*|I||H< d }H�nw|tnk�r9|  o||¡ �nj|tpk�rE|  q|¡ �n^|trv �rˆ|
d|dd… ƒ\}J}K|KdDk�rlt&dS||j| d |J|Kf | j'd� 	 | 
¡ \}L}}|Ltfk�rzn�qm|�r†t&dT| j'd� �n|tsk�r”| t|¡ �n|tuk�r¸d}tv| jw|||d(dU�}tv| jx|||d(dU�}||k�s¶J ‚�në|tk�rÝ|
d*|d d… ƒ\}/}0}1}2}3}4|�rÛt&dV|/|0|1|2|3| j'd� �nÆ|tk�r|
d,|d d… ƒ\}/}0}1}2}5}4|�rt&dW|/|0|1|2|5| j'd� t9||dd … |4t=d|||d.� �n‘|tyk�rr|�sq<|dKk�s"J ‚t	dX|ddN… ƒ\}M}N}O}P}Q}R| j dk�rMt4| j'dY| j5| ja|M|Ntz|O|Pd |Q|Rd ƒƒ g }Stv|S|dN|d(dU�}| j dk�rpt4| j'dZt|Sƒd[ Pd\d]„ |SD ƒ¡ƒ �n1|t{k�rV|�s{q<t	d^|dd… ƒ\}T}U}V}W}'|'d_? d@ }X|'d? d@ }Y|'d? d@ }Z| j dk�r¯t4| j'd`|T|U|V|W|'|X|Y|Zƒ
 dN}|X�rût	da|||db … ƒ\	}[}\}]}^}_}`}a}b}c|adkd@ }d|\dkd@ }e|adkd@ }f|\dkd@ }g| j dk�r÷t4| j'dc|[|]|^|_|`|b|c|d|e|f|gƒ |db7 }|Y�r|d(7 }|Z�r	|d7 }||||V … }h||V7 }|�r+|V�r+t4| j'ddƒ t|||h|V|ddde� ||||W … }i||W7 }||k�s>J ‚|�rT|W�rTt4| j'dfƒ t|||i|W|ddde� �nM|t}k�r§|dk�rmt	d|d d… ƒ\}?| _~n|dk�r‚t	d|ƒ\| _~d}?t4| j'dgƒ n	d}?t4| j'dh|ƒ |?d@ | _|?d? d@ | _€|?d? d@ | _�|?d1? d@ | _‚�nü|tƒk�r×|�s°q<tv| j„|d|d(dU�}|�rÈt4| j'di|d d( ƒ ||k�sÕJ dj||f ƒ‚�nÌ|t…k�	r;|dKk�rû|dk�rût	dk|d d… ƒ\}j| _†| _‡| _ˆ| _‰| _Šn*|d"k�	sJ ‚t	d|d d	… ƒ\}j| _†| _‡t	dl|d	dm… ƒ| _‹tŒ| j]j�| j‹ddn�| _ˆtŽD ]\}k}lt�| |k|jd@ ƒ |jdL }j�	q'�nh|t�k�	r|t	d|ƒ\}m}nd}C|n�	rR|mdo |n }Cd|C  k�	r^dpk�	swn |�	sh| j dk�	rut&dq| j5|m|nf | j'd� do}C|C| _‘�n'|t’k�	r™t	dr|d dm… ƒ\| _“| _”| _•| _–| _—d| _˜�n
|t™k�
r|�	s¢q<|
d|d d… ƒ\}o|odd|dKk   d |k�	s½J ‚d}|dKk �	rè||k �	ræ| jš |
d|||d … ƒd dd:f¡ |d7 }||k �	sÉ�n»||k �
r| jš |
d|||d	 … ƒ¡ |d	7 }||k �	sí�nœ|t›k�
ru|�
sq<|
d|d d… ƒ\}o|odd|dKk   d |k�
s+J ‚d}|dKk �
rV||k �
rT| jœ |
d|||d … ƒd ddsf¡ |d7 }||k �
s7�nM||k �
rs| jœ |
d|||d	 … ƒ¡ |d	7 }||k �
s[�n.|dtk�r¢|t�k�
s„|tžk�
rŒ| Ÿ||¡ �n|t k�
s–|t¡k�
r�| ¢|¡ �n|t£k�
r³| j]j_�
s¬| j] `¡  | ¤|¡ �nð|t¥k�
r¿| ¦|¡ �nä|t§k�
rË| ¨|¡ �nØ|t©k�
sÚ|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 |
d|ƒd | _¶�nƒ|t·k�r=|
du|ƒ\}}}(}|	||d ||  8|(||¡ƒ �nf|t¸k�r\|
dv|ƒ\}}}(}|	||d t¹|ƒ|  8|(||¡ƒ �nG|tºk�rŠ|
dw|dd… ƒ\}}}(t|d|j�pw| ¡ dd
�}|	||t||  8|(||¡ƒ �n|t»k�r®|
dx|ƒ\}}}(}7}8t@tAf|8 }9|	|||9|7|  8|(||¡ƒ �nõ|t¼k�rÒ|�s·q<|
dw|d d… ƒ\}}}(|	||tUd2|  8|(||¡ƒ �nÑ|t½k�rÞ| ¾|¡ �nÅ|t¿k�r‰|�sçq<|
dy|ddz… ƒ\}}"}#d|  k�r | j%k �sn t&d{|| j%f | j'd� q<|#d@ �sd}n(|d|k�r0|
d|dd|… ƒd }p| j8d |d|pd}�}n|d~d… }(| j8|(|dd�}|"|#|f}$| |$¡}%|%d u �rht(ƒ  ||$< }%|"d@ |%_)|"d? d@ |%_*|#d@ |%_/||%_0|%| j3|< 	 |�r‡t&d€||"| j'd� |%j6| j'd| j5|f d� �n|tÀk�rà|�s’q<|
d�|d d… ƒ\};}<}q|;|<k�s¯t&d‚|;|<f | j'd� q<t|;|<d ƒD ]}|| jGv �rÄ| jG| }:ntDƒ }:|:| jG|< |q|:_E�q¶|�rßt4| j'dƒ| j5|;|<|qƒ nÃ|tÁk�r]|�séq<|
d|d d… ƒ\};}<|�rt4| j'd„| j5|;|<ƒ d|;  k�r|<  k �rd7k�s$n t&d…|;|<f | j'd� tÂ|<d7ƒ}<t|;|<ƒD ]2}dd1||;   }r||r|rd1 … }(| j8|(d|d†�}|| jGv �rO| jG| }:ntDƒ }:|:| jG|< ||:_0�q)nF|tÃk�r¡d‡}stÄ|s|dd… ƒD ]\}k}tt�| |ktÅ|tdˆkƒƒ �qmt	d‰|dd… ƒ\| _†| _‡| _Æt	dl|dd~… ƒ| _‹tŒ| j]j�| j‹ddn�| _ˆn	 q=|�s±t>dŠ| j5| jaf ƒ‚|  Ç¡  |  È¡  ||_dS )‹Nr   ry   é   r   z<HHHdé   z<HHHiú<HHHé   ©Úlenlenz<BBz<Hú<HHé
   r§   z<H4xH4xié   zT*** NOTE: ROW record has row index %d; should have 0 <= rowx < %d -- record ignored!rº   iÿ  rx   é   é   éÿ  é   é   r   z**ROW %d %d %d
ÚROWz--- sh #%d, rowx=%d ---©Úheaderé2   z<HHH8sHé   z<HH3s8sBzFORMULA: rowx=%d colx=%d
é   é   )ÚbrowxÚbcolxÚblahÚr1c1é   s   ÿÿz<HHBBBxxxxxHzARRAY: %d %d %d %d %d
z<HHBBxBHzSHRFMLA (sub): %d %d %d %d %d
)rã   rá   râ   rä   z@Expected SHRFMLA, ARRAY, TABLEOP* or STRING record; found 0x%04xz$Expected STRING record; found 0x%04xrz   r   z+unexpected special case (0x%02x) in FORMULAú<dz<HHHBBz<HHHHHr%   zr*** NOTE: COLINFO record has first col index %d, last %d; should have 0 <= first <= last <= 255 -- record ignored!))r   r   Úhidden)r   ry   Ú	bit1_flag)rå   i   Úoutline_level)é   i   Ú	collapsedéÿ   z**COL %d %d %d
z>COLINFO sheet #%d cols %d-%d: wid=%d xf_index=%d flags=0x%04x
z===ÚDEFCOLWIDTHz*** ERROR *** STANDARDWIDTHÚSTANDARDWIDTHé"   s     z<8ié    c                 S   s   d|  S )NzF rh   )Úxrh   rh   ri   Ú<lambda>  s    zSheet.read.<locals>.<lambda>ú Ú.zGCW:z<%dHr#   z<HxxHz<ixxHrê   ©r   r   )é   rÞ   é(   z+sheet %d(%r) DIMENSIONS: ncols=%d nrows=%d
zSHEET.READ: EOFzM*** Unexpected embedded BOF (0x%04x) at offset %d: version=0x%04x type=0x%04xz---> found EOF)Ú	addr_sizezARRAY:zSHRFMLA (main):z<6Hz�
*** WARNING: Ignoring CONDFMT (conditional formatting) record
*** in Sheet %d (%r).
*** %d CF record(s); needs_recalc_or_redraw = %d
*** Bounding box is %s
z#*** %d individual range(s):
*** %s
z, c                 s   s   � | ]}t |Ž V  qd S rŠ   )r   )r„   Úcoordsrh   rh   ri   r�   “  s   € zSheet.read.<locals>.<genexpr>z<BBHHié   z°
*** WARNING: Ignoring CF (conditional formatting) sub-record.
*** cf_type=%d, cmp_op=%d, sz1=%d, sz2=%d, flags=0x%08x
*** optional data blocks: font=%d, border=%d, pattern=%d
z <64x i i H H B 3x i 4x i i i 18xév   z�*** Font info: height=%d, weight=%d, escapement=%d,
*** underline=%d, colour_index=%d, esc=%d, underl=%d,
*** style=%d, posture=%d, canc=%d, cancellation=%d
z*** formula 1:
)Úreldeltarã   z*** formula 2:
zR*** WARNING: DEFAULTROWHEIGHT record len is 2, should be 4; assuming BIFF2 format
zR*** WARNING: DEFAULTROWHEIGHT record len is %d, should be 4; ignoring this record
zMERGEDCELLS: %d ranges
zMERGEDCELLS: pos=%d data_len=%dz	<HHHHxxHHú<BBBé	   )Údebugr"   é�  zHWARNING *** SCL rcd sheet %d: should have 0.1 <= num/den <= 4; got %d/%dz<HHHHBéÿÿ  é-   z<HH3sdz<HH3sHz<HH3sz<HH3sBBz<H4xH2xBé   zW*** NOTE: ROW_B2 record has row index %d; should have 0 <= rowx < %d -- record ignored!é   )Ú	cell_attrrn   ro   Útrue_xfxé   )ro   ÚROW_B2z<BBHzg*** NOTE: COLWIDTH record has first col index %d, last %d; should have first <= last -- record ignored!z&COLWIDTH sheet #%d cols %d-%d: wid=%d
z.COLUMNDEFAULT sheet #%d cols in range(%d, %d)
zd*** NOTE: COLUMNDEFAULT record has first col index %d, last %d; should have 0 <= first < last <= 256)rn   ro   )r   r   r   r   r   ó    z<HHBz Sheet %d (%r) missing EOF record)Ér/   r(   Ú
XL_SHRFMLAÚXL_ARRAYÚ
XL_TABLEOPÚXL_TABLEOP2Ú	XL_ARRAY2ÚXL_TABLEOP_B2r3   r   Úget_record_partsr'   r0   Ú_rich_text_runlist_mapÚ	XL_NUMBERÚXL_LABELSSTÚXL_CELL_TEXTÚ_sharedstringsÚgetrK   ÚXL_LABELÚBIFF_FIRST_UNICODEÚunpack_stringÚencodingÚderive_encodingÚunpack_unicodeÚ
XL_RSTRINGÚunpack_string_update_posÚ	BYTES_ORDrˆ   r¼   r~   Úunpack_unicode_update_posÚXL_RKÚ	unpack_RKÚXL_MULRKÚXL_ROWra   r½   r)   ÚRowinfoÚheightÚhas_default_heightré   Úoutline_group_starts_endsrç   Úheight_mismatchÚhas_default_xf_indexr|   Úadditional_space_aboveÚadditional_space_belowrG   r¨   r.   ÚdumpÚXL_FORMULA_OPCODESÚfixed_BIFF2_xfindexr   r
   Ú	XL_STRINGÚXL_STRING_B2r   Ú	XLRDErrorÚstring_record_contentsÚXL_CELL_BOOLEANÚXL_CELL_ERRORÚ
XL_BOOLERRÚ
XL_COLINFOÚColinfoÚwidthÚupkbitsrF   ÚXL_DEFCOLWIDTHr?   ÚXL_STANDARDWIDTHÚreprr@   ÚXL_GCWÚtupleÚgcwÚjoinÚmapÚrstripÚreplaceÚXL_BLANKÚXL_CELL_BLANKÚXL_MULBLANKÚXL_DIMENSIONÚXL_DIMENSION2r6   r7   r:   r;   r&   Úxf_listÚ_xf_epilogue_doneÚxf_epiloguer-   ÚXL_HLINKÚhandle_hlinkÚXL_QUICKTIPÚhandle_quicktipÚXL_EOFÚXL_OBJÚ
handle_objÚidÚXL_MSO_DRAWINGÚhandle_msodrawingetcÚXL_TXOÚ
handle_txoÚXL_NOTEÚhandle_noteÚ	XL_FEAT11Úhandle_feat11ÚbofcodesÚ
XL_COUNTRYÚhandle_countryÚXL_LABELRANGESÚ)unpack_cell_range_address_list_update_posrI   rH   Ú
XL_CONDFMTr   ÚXL_CFr   ÚXL_DEFAULTROWHEIGHTrA   rB   rC   rD   rE   ÚXL_MERGEDCELLSrJ   Ú
XL_WINDOW2rS   rT   rU   r\   r]   rV   r	   Ú
colour_maprQ   rR   ÚXL_SCLr^   ÚXL_PANEÚvert_split_posÚhorz_split_posÚhorz_split_first_visibleÚvert_split_first_visibleÚsplit_active_paneÚhas_pane_recordÚXL_HORIZONTALPAGEBREAKSrL   ÚXL_VERTICALPAGEBREAKSrM   Ú	XL_FORMATÚ
XL_FORMAT2Úhandle_formatÚXL_FONTÚXL_FONT_B3B4Úhandle_fontÚXL_STYLEÚhandle_styleÚ
XL_PALETTEÚhandle_paletteÚXL_BUILTINFMTCOUNTÚhandle_builtinfmtcountÚXL_XF4ÚXL_XF3ÚXL_XF2Ú	handle_xfÚXL_DATEMODEÚhandle_datemodeÚXL_CODEPAGEÚhandle_codepageÚXL_FILEPASSÚhandle_filepassÚXL_WRITEACCESSÚhandle_writeaccessÚXL_IXFEr_   ÚXL_NUMBER_B2Ú
XL_INTEGERÚfloatÚXL_LABEL_B2ÚXL_BOOLERR_B2ÚXL_BLANK_B2ÚXL_EFONTÚhandle_efontÚ	XL_ROW_B2ÚXL_COLWIDTHÚXL_COLUMNDEFAULTÚminÚXL_WINDOW2_B2ÚzipÚintr   r¹   Úupdate_cooked_mag_factors)urd   ÚbkÚDEBUGrã   Ú	blah_rowsÚblah_formulasrä   ÚoldposÚXL_SHRFMLA_ETC_ETCÚself_put_cellÚlocal_unpackÚbk_get_record_partsÚbvrÀ   Údo_sst_rich_textÚrowinfo_sharing_dictÚtxosÚ	eof_foundÚrcÚdata_lenÚdatarn   ro   r|   ÚdÚsstindexÚrunlistÚstrgÚposÚnrtrÄ   Ú	mulrk_rowÚmulrk_firstÚ
mulrk_lastÚbits1Úbits2ÚkeyÚrÚ
result_strÚflagsr  ÚfmlalenÚ
first_byteÚ	gotstringÚrc2Ú	data2_lenÚdata2Úrow1xÚrownxÚcol1xÚcolnxÚarray_flagsÚtokslenÚnfmlasÚ_unused_lenr¿   Úis_errÚcelltyÚcÚ
first_colxÚ	last_colxÚiguffr@  ÚbitsÚjÚshowgcwÚnitemsÚresultÚ	mul_firstÚmul_lastÚ	dim_tupleÚ	saved_objÚsaved_obj_idÚtxoÚversionÚboftypeÚcodeÚnum_CFsÚneeds_recalcÚbrowx1Úbrowx2Úbcolx1Úbcolx2ÚolistÚcf_typeÚcmp_opÚsz1Úsz2Ú
font_blockÚ
bord_blockÚ
patt_blockÚfont_heightÚfont_optionsÚweightÚ
escapementÚ	underlineÚfont_colour_indexÚtwo_bitsÚfont_escÚfont_underlÚ
font_styleÚpostureÚ	font_cancÚcancellationÚfmla1Úfmla2Úoptionsrf   Ú_unused_defvalÚnumÚdenÚ
num_breaksrp   r9  ÚoffsetÚ
attr_namesÚcharrh   rh   ri   Úread  s$  þ
€




ü
þþ




ÿ€


ÿ

ÿ
ÿ€
ÿ
ÿÿ€
ÿ





ÿ&þþ
ý€



þ


þ


ý€







€



ÿÿ
ý€

ÿÿ
ÿ€
ÿÿ€
ÿù	
ÿû€

ú	ÿù	€


ÿý

ÿÿ
ÿ
úýÿþ

ÿý

ú

"

(
þ€

þ€
"

(
þ€

þ€












"




þþ







ÿ€
ÿ
þþ


ý€
ý&þþ


÷

ýÿ€ � � � � �É     8
ÿz
Sheet.readc                 C   s   | j }| j}|dkd }tdd|d   |d |… ƒd }|}|dk r*|jp)| ¡ }d}tdƒ}		 |dkrEt|| ƒd@ }
d|
 }|d7 }t||d … |ƒ}|	|7 }	|t|ƒ7 }||kr^|	S ||krld	||f }t	|ƒ‚| 
¡ \}}}|tkr}t	d
| ƒ‚d}q1)NrÞ   r   ú<ÚBHr   r#   r   )Úlatin_1Ú	utf_16_lez,STRING/CONTINUE: expected %d chars, found %dz2Expected CONTINUE record; found record-type 0x%04X)r'   r&   r   r  r  r©   r  Úunicoder~   r2  r  ÚXL_CONTINUE)rd   r«  r¤  r›  rÑ   Únchars_expectedrÿ  ÚencÚnchars_foundrÓ  ÚflagÚchunkÚmsgr©  rÈ  rh   rh   ri   r3  Ô  s>   "ÿÿîzSheet.string_record_contentsc                 C   sæ   t p| jdk}| jr<| jd u rd| _n| j| _| j}d|  kr$dks7n |r4td| j| jf | jd� | j}|| _	d S | jd u rEd| _	n| j| _	| j
}|sQd}nd|  kr[dksnn |rktd| j| j
f | jd� | j	}|| _d S )	Nr   r"   rÓ   r   zGWARNING *** WINDOW2 rcd sheet %d: Bad cached_normal_view_mag_factor: %drº   r!   zNWARNING *** WINDOW2 rcd sheet %r: Bad cached_page_break_preview_mag_factor: %r)rœ  r/   r   r^   rZ   r]   r½   r.   r)   r[   r\   )rd   rã   Úzoomrh   rh   ri   rš  ò  s@   	

ÿý


ÿý
zSheet.update_cooked_mag_factorsc           	      C   sö   d}|p| j dk}| jdkr:| jjr3|d ur|}nt|d ƒd@ }|dkr1| jd u r.tdƒ‚| j}|S d | _| j_t|d ƒd@ }|dksHJ ‚| j |¡}|d urT|S |r_t	| j
d|||ƒ | jjsstdƒD ]}| jd	|d
k d� qg| j|d�}|S )Nr   ry   rö   é?   z?BIFF2 cell record has XF index 63 but no preceding IXFE record.rß   zNew cell_attr %r at (%r, %r)
rÔ   s   @  rx   )r  Ústyle)r  )r/   r'   r&   rJ  r  r_   r2  r`   r  r¨   r)   rˆ   Úinsert_new_BIFF20_xf)	rd   r  rn   ro   r  rœ  rã   rp   Úxfx_slotrh   rh   ri   r/    s2   

zSheet.fixed_BIFF2_xfindexc              
   C   sú   d}|p| j dk}| j}t|jƒ}|  ||¡}||_|j |¡ |r-|j| jd| dd� |j	|j
vrY|j	rDd}t| j||j|j	|j	ƒ t|j	ttdƒƒ}	|	|j
|j	< |j |	¡ tttttttttti}
|j
|j	 }	|
|	j }|| j|j< || j|< |S )Nr   ry   z=== Faked XF %d ===z======©rÜ   Úfooterz1ERROR *** XF[%d] unknown format key (%d, 0x%04x)
ÚGeneral)r/   r&   r~   rJ  Úfake_XF_from_BIFF20_cell_attrr|   r¼   r-  r)   Ú
format_keyÚ
format_mapr¨   r   ÚFUNr©   Úformat_listÚFNUÚXL_CELL_NUMBERÚFGEÚFDTÚXL_CELL_DATEÚFTXÚtyper5   r`   )rd   r  r  rœ  rã   r&   rp   Úxfr  ÚfmtÚcellty_from_fmttyrÊ  rh   rh   ri   r  A  s:   
ÿû

zSheet.insert_new_BIFF20_xfc                 C   sx  ddl m}m}m}m}m} |ƒ }|ƒ |_d|j_d|j_d|j_	|ƒ |_
d|j
_d|j
_d|j
_d|j
_|ƒ |_|ƒ |_td|ƒ\}	}
}|
d@ |_|
d@ d? |_t|j|	dƒ |d	@ |j_d
D ]#\}}||@ rmd\}}nd\}}t|j
|d |ƒ t|j
|d |ƒ q`|j}|d@ r�d|_nd|_d|_d|_d| |_d|j_d|j_g d¢}|D ]}d| d }t||dƒ q«|S )Nr   )ÚXFÚXFAlignmentÚXFBorderÚXFBackgroundÚXFProtectionr   rý   r  éÀ   rÏ   ))rÏ   r    Úcell_locked)rÕ   é€   Úformula_hiddenrÕ   ))rå   Úleft)rÔ   Úright)rð   Útop)r    Úbottom)rå   r   rõ   Ú_colour_indexÚ_line_styler-  é   rþ   rå   )r×   r   ry   )ÚformatÚfontÚ	alignmentÚborderÚ
backgroundÚ
protectionÚ_Ú_flag)Ú
formattingr&  r'  r(  r)  r*  r8  Úindent_levelÚshrink_to_fitÚtext_directionr9  Údiag_upÚ	diag_downÚdiag_colour_indexÚdiag_line_styler:  r;  r   r  Ú
font_indexr:  Ú	hor_alignrR   Úfill_patternÚbackground_colour_indexÚpattern_colour_indexÚparent_style_indexÚ
vert_alignÚrotation)rd   r  r  r&  r'  r(  r)  r*  r#  Ú	prot_bitsÚfont_and_formatÚ
halign_etcÚmaskÚsideÚcolour_indexÚ
line_styleÚbgÚ
attr_stemsÚ	attr_stemrf   rh   rh   ri   r  `  sL   


z#Sheet.fake_XF_from_BIFF20_cell_attrc                 C   s   | j stdƒ‚d S )Nz9Feature requires open_workbook(..., formatting_info=True))r0   r2  rŒ   rh   rh   ri   r{   ”  s   ÿzSheet.req_fmt_infoc                 C   sÂ   |   ¡  | jdkr | j |d¡}|dur|jS | jdur| jS n5| jdkrB| j| r3| jdur2| jS n"| j |d¡}|durA|jS n| jdkrU| j |d¡}|durU|jS | jdur_| jd S dS )a  
        Determine column display width.

        :param colx:
          Index of the queried column, range 0 to 255.
          Note that it is possible to find out the width that will be used to
          display columns with no cell information e.g. column IV (colx=255).

        :return:
          The column width that will be used for displaying
          the given column by Excel, in units of 1/256th of the width of a
          standard character (the digit zero in the first font).

        .. versionadded:: 0.6.1
        r#   Nr÷   rÞ   r%   i   )r{   r'   rF   r  r9  r@   r@  r?   )rd   ro   Úcolinforh   rh   ri   Úcomputed_column_width˜  s0   

ÿ


ÿÿ


zSheet.computed_column_widthc              
   C   s@  t r	td| jd� t|ƒ}tƒ }td|d d… ƒ\|_|_|_|_	}}}|dks*J ‚|dks0J ‚t r;td| | jd� d}dd	„ }|d
@ rM|||ƒ\|_
}|d@ rY|||ƒ\|_}|d@ �rˆ|d@ �sˆtd|||d … ƒ\}	t rxt| jd|	ƒ |d7 }|	dkrøtdƒ|_td|||d … ƒd }
|d7 }t||||
 … dƒ|_t r°t| jd|jt|jƒƒ |j d¡}t rÁtd| | jd� |jd |… |_d|d  }||7 }|
| }|||| … }||7 }t rñt| jd|j||
||ƒ |dv s÷J ‚n·|	dk�r€tdƒ|_td|||d  … ƒ\}}
|d 7 }d!| ||||
 d …  }t �r,t| jd"||ƒ ||
7 }|d#7 }td$|||d … ƒd }t �rMtd%| | jd� |d7 }|�r|td$|||d … ƒd }|d7 }|d7 }t|||| … dƒ}||7 }||_n3||_n/t| jd&|	ƒ n'|d'@ d(k�r�td)ƒ|_|||ƒ\|_}n|d*@ d+k�rªtd,ƒ|_ntd-ƒ|_|d+@ �r¼|||ƒ\|_}t �rÍ|jd.d/� td0||f ƒ || }|dk�rît| jd1|jd |jd |t|| d … ƒƒ n	|dk �r÷td2ƒ‚| j |¡ t|j|jd ƒD ]}t|j|j	d ƒD ]
}|| j||f< �q�qd S )3Nz
=== hyperlink ===rº   z<HHHH16s4sirð   s   ÐÉêyùºÎŒ‚ ª K©s      zoptions: %08Xc                 S   sT   t d| ||d … ƒd d }|d7 }t| ||| … dƒd d… }||7 }||fS )Nú<LrÌ   r   ry   úUTF-16ler   )r   r  )ÚbufÚofsÚnbÚucrh   rh   ri   Úget_nul_terminated_unicodeË  s
   z6Sheet.handle_hlink.<locals>.get_nul_terminated_unicoderß   r-  r   r%   z<16srÔ   z	clsid=%r
s   àÉêyùºÎŒ‚ ª K©ÚurlrZ  rÌ   r   r[  zinitial url=%r len=%d
ú z	endpos=%dry   z9url=%r
extra=%r
nbytes=%d true_nbytes=%d extra_nbytes=%d
)é   r   s         À      Fz
local filez<HirÏ   s   ..\zuplevels=%d shortpath=%r
rc  ú<izsz=%dz*** unknown clsid %r
ic  i  Úuncik  rå   ÚworkbookÚunknownz... object dump ...rÛ   zoffset=%d record_size=%dz=*** WARNING: hyperlink at R%dC%d has %d extra data bytes: %s
z:Bug or corrupt file, send copy of input file for debugging)rœ  r½   r)   r~   Ú	Hyperlinkr   ÚfrowxÚlrowxÚfcolxÚlcolxÚdescÚtargetr¨   r©   r"  r  Úurl_or_pathÚfindÚtextmarkr-  ÚREPRr2  rW   r¼   rˆ   rX   )rd   r«  Úrecord_sizer   Úguid0Údummyrú  rÿ  r`  ÚclsidÚnbytesÚendposÚtrue_nbytesÚextra_nbytesÚ
extra_dataÚuplevelsÚ	shortpathÚszÚxlÚextended_pathrn   ro   rh   rh   ri   rN  À  s®   (
ý





ú
	ÿÿzSheet.handle_hlinkc                 C   sŒ   t d|d d… ƒ\}}}}}|tksJ ‚| jsJ ‚| jd }||||f|j|j|j|jfks0J ‚|dd … dks:J ‚t|dd… dƒ|_d S )Nú<5HrÓ   r   r§   s     r  )	r   rO  rW   ri  rj  rk  rl  r  Úquicktip)rd   r«  Úrcxri  rj  rk  rl  r   rh   rh   ri   rP  0  s   

$zSheet.handle_quicktipc                 C   sN  t sd S d}| jdk rd S tƒ }d}||k r’td|||d … ƒ\}}}	|d@ }
|d? d@ }|
dkr5d}n|	}|rPt|||d d| jd	� t| jd
|||
|	|	ƒ |dkrt|dksZJ ‚td||d |d | … ƒ\|_|_|_	|_
|_n|dkr‡|	dks~J ‚|d |ks†J ‚n	 ||d 7 }||k s||ks˜J ‚|r¥|j| jddd� d S d S )Nr   r#   r   z<HHIrå   rx   rÌ   r×   ©ÚbaseÚfoutz.fbt:0x%04X  inst:%d  ver:0x%X  cb:%d (0x%04X)
ið  r  z<Hiiiiið  z=== MSODrawing ===ró   r  )ÚOBJ_MSO_DEBUGr'   Ú
MSODrawingr   Úhex_char_dumpr)   r¨   Ú
anchor_unkÚanchor_colx_loÚanchor_rowx_loÚanchor_colx_hiÚanchor_rowx_hir-  )rd   Úrecidrª  r«  rœ  Úor°  ÚtmpÚfbtÚcbÚverÚinstÚndbrh   rh   ri   rV  9  sH   

þþ
èÿzSheet.handle_msodrawingetcc                 C   sò  | j dk rd S tƒ }t|ƒ}d}trt| jd|ƒ ||k rëtd|||d … ƒ\}}trAt| jd|||ƒ t|||d d| jd� |dkrX|dkrM|d	ksX| jrVt| jd
ƒ d S |dkr{|dksbJ ‚td||d |d … ƒ\|_	|_
}t||dƒ nf|dkr¦|||… d||  krŒn`d}t| jd| ƒ t|||| d| jd� t|ƒ‚|dkrÊtd||d |d	 … ƒ}	t|	dƒD ]\}
}t|d| |
ƒ q¼n|dkr×trÖt| jdƒ n
|dkrà|jrßnn	 ||d 7 }||k s	 tr÷|j| jddd� |S )Nr#   r   z... OBJ record len=%d...
rÒ   rÌ   zpos=%d ft=0x%04X cb=%d
r„  rö   r  z6*** WARNING Ignoring antique or corrupt OBJECT record
rÎ   rÓ   ))r   r   Úlocked)rÌ   rÔ   Ú	printable)rå   r%   Ú
autofilter)rþ   é   Úscrollbar_flag)r  i    Úautofill)rÍ   r$   Úautoliner	  z'Unexpected data at end of OBJECT recordz*** ERROR %s
rê   r�  rå   )r¿   r–  ÚmaxÚincÚpageÚ
scrollbar_r  z.*** OBJ record has ft==0x0D 'notes' structure
é   z=== MSOBj ===ró   r  )r'   ÚMSObjr~   r‡  r¨   r)   r   r‰  r/   r"  rT  r:  r2  r˜  rR   r™  r-  )rd   r«  r�  rª  r°  Úftr“  Úoption_flagsr  Úvaluesr¿   Útagrh   rh   ri   rS  a  s\   
$ÿ€ÿØ+zSheet.handle_objc                 C   s2  t rt| jdƒ t|dt|ƒd| jd� tƒ }t|ƒ}| jdk r¹td|d d… ƒ\|_|_	}t|ƒd }||ks:J ‚|dd … g}||8 }|dkr�| j
 ¡ \}}	}
|tksWJ ‚td|
d d… ƒ\}}|dkshJ ‚||	d kspJ ‚| |
dd … ¡ ||8 }|dksI|dks‡J ‚| j
jp�| j
 ¡ }td	 |¡|ƒ|_d
g|_d|_d|_d|_tdƒ|_d |_|| j|j|j	f< d S td|d d… ƒ\|_|_	}|_|d? d@ |_|d? d@ |_|d? d@ |_t|ddd�\|_}|| dv sðJ ‚t rû|j| jddd� | |j¡}|�r|j|_|j|_|| j|j|j	f< d S d S )Nz... NOTE record ...
r   r„  r#   rÎ   rÏ   z<H2xHr  ó    rõ   r   z<4Hrå   r   rÕ   ry   rÐ   )r   r   z=== Note ===ró   r  )r‡  r¨   r)   r‰  r~   ÚNoter'   r   rn   ro   r&   r  rY  r¼   r  r  r  rA  ÚtextÚrich_text_runlistÚshowÚ
row_hiddenÚ
col_hiddenr©   ÚauthorÚ
_object_idrY   r   r-  r  )rd   r«  r§  r�  rª  Úexpected_bytesr^  Úpiecesr¾  r¿  rÀ  Ú
dummy_rowxr
  r¥  rx  rÙ  rh   rh   ri   rZ  ™  sZ   
ù
 ýzSheet.handle_notec                 C   sö  | j dk rd S tƒ }d}t|ƒ}t||d |… ƒ\}|_}}}|_||d … |_t||dƒ d}	tdƒ|_	|	|k r‰| j
 ¡ \}
}}|
tksGJ ‚trSt|d|d| jd� t|d ƒ}|d }|rk|d dksgJ ‚|d }t|d|d	�\}}||kszJ ‚| j	|7  _	|	|7 }	|	|k s9g |_d}||k rÊ| j
 ¡ \}}}|tks J ‚|d
 dks¨J ‚td|d
ƒD ]}td|||d
 … ƒ}|j |¡ |d
7 }q®||k s’|jræ|jd d |kræ|jd= |jræ|jd d |ksÖtrù|j| jddd� t|j| jd� |S )Nr#   z<HH6sHHH))rz   rÍ   Ú
horz_align)rÏ   ép   rL  )rþ   rš  Ú	lock_text)rÍ   r$   Ú	just_last)rx   i €  Úsecret_editr   r   r„  r   ry   )Ú	known_lenrå   z<HH4xr   z=== MSTxo ===ró   r  rº   )r'   ÚMSTxor   r   ÚrotÚ	ifntEmptyÚfmlar:  r©   rª  r&   r  r  r‡  r‰  r)   r  r   r«  rˆ   r¼   r-  r½   )rd   r«  r�  r$  Úfmtsizer¥  ÚcontrolInfoÚcchTextÚcbRunsÚtotcharsr¾  r¿  rÀ  r^  ÚncharsÚutextrx  ÚtotrunsÚrc3Ú	data3_lenÚdata3r°  Úrunrh   rh   ri   rX  Ì  sV   
"
ó
ø
ÿzSheet.handle_txoc                 C   sî   t sd S td|dd… ƒ\
}}}}}}}}	}
}|dksJ ‚|
dks#J ‚|dks)J ‚|dks/J ‚|dks5J ‚||ks;J ‚t| jd||||	ƒ td|dd… ƒ\}}}}}}}}}}}}}}}td	|||||||||||||||f | jd
� d S )Nz<HH8sHBiHiH8sr   é#   rÖ   ir  z3FEAT11: grbitFrt=%d  Ref0=%r cref=%d cbFeatData=%d
z<iiiiiiHHiiiii16sHée   zÆlt=%d  idList=%d crwHeader=%d  crwTotals=%d  idFieldNext=%d cbFSData=%d
rupBuild=%d  unusedShort=%d listFlags=%04X  lPosStmCache=%d  cbStmCache=%d
cchStmCache=%d  lem=%d  rgbHashParam=%r  cchName=%drº   )r‡  r   r½   r)   )rd   r«  ÚrtÚgrbitFrtÚRef0ÚisfÚfHdrÚ	reserved0ÚcrefÚ
cbFeatDataÚ	reserved1ÚRef1ÚltÚidListÚ	crwHeaderÚ	crwTotalsÚidFieldNextÚcbFSDataÚrupBuildÚunusedShortÚ	listFlagsÚlPosStmCacheÚ
cbStmCacheÚcchStmCacheÚlemÚrgbHashParamÚcchNamerh   rh   ri   r\  þ  s,   &þ

ýþ
ûzSheet.handle_feat11)r   NrŠ   )r   )CÚ__name__Ú
__module__Ú__qualname__Ú__doc__r-   r&   r6   r7   rF   rG   rH   rI   rJ   rK   r?   r@   rA   rB   rC   rD   rE   rP   r@  rW   rX   rY   rj  rk  rl  rm  rn  ro  rL   rM   rj   rq   ru   rw   rk   r€   r‰   r�   r”   r–   r˜   r¡   r¥   r¦   Úcolr¹   r2   r4   r  r3  rš  r/  r  r  r{   rY  rN  rP  rV  rS  rZ  rX  r\  rh   rh   rh   ri   r   2   sŒ    		T
	





=;K     V
-
"
4(p	(832r   c                   @   ó   e Zd ZdS )rˆ  N©rå  ræ  rç  rh   rh   rh   ri   rˆ  /  ó    rˆ  c                   @   rê  )r£  Nrë  rh   rh   rh   ri   r£  3  rì  r£  c                   @   rê  )rº  Nrë  rh   rh   rh   ri   rº  7  rì  rº  c                   @   s8   e Zd ZdZedƒZdZdZdZdZ	dZ
dZedƒZdS )r©  z’
    Represents a user "comment" or "note".
    Note objects are accessible through :attr:`Sheet.cell_note_map`.

    .. versionadded:: 0.7.2
    r   r   N)rå  ræ  rç  rè  r©   r¯  r®  ro   r«  r­  rn   r¬  rª  rh   rh   rh   ri   r©  ;  s    r©  c                   @   s8   e 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S )rh  z½
    Contains the attributes of a hyperlink.
    Hyperlink objects are accessible through :attr:`Sheet.hyperlink_list`
    and :attr:`Sheet.hyperlink_map`.

    .. versionadded:: 0.7.2
    N)rå  ræ  rç  rè  ri  rj  rk  rl  r"  ro  rm  rn  rq  r‚  rh   rh   rh   ri   rh  ^  s    	rh  c                 C   s|   t | d ƒ}|d@ r td| ƒ\}|dL }|d@ r|d S t|ƒS tddtt|d@ ƒƒ | dd	…  ƒ\}|d@ r<|d S |S )
Nr   ry   rd  r   g      Y@ræ   s       éü   rÌ   )r  r   r�  ÚBYTES_LITERALÚchr)Úrk_strrº  Úir¬  rh   rh   ri   r"  –  s   (r"  Úemptyrª  r.   ÚxldateÚboolÚerrorÚblankc                   @   s*   e Zd ZdZg d¢Zddd„Zdd„ ZdS )	rl   a…  
    Contains the data for one cell.

    .. warning::
      You don't call this class yourself. You access :class:`Cell` objects
      via methods of the :class:`Sheet` object(s) that you found in the
      :class:`~xlrd.book.Book` object that was returned when you called
      :func:`~xlrd.open_workbook`

    Cell objects have three attributes: ``ctype`` is an int, ``value``
    (which depends on ``ctype``) and ``xf_index``.
    If ``formatting_info`` is not enabled when the workbook is opened,
    ``xf_index`` will be ``None``.

    The following table describes the types of cells and how their values
    are represented in Python.

    .. raw:: html

        <table border="1" cellpadding="7">
        <tr>
        <th>Type symbol</th>
        <th>Type number</th>
        <th>Python value</th>
        </tr>
        <tr>
        <td>XL_CELL_EMPTY</td>
        <td align="center">0</td>
        <td>empty string ''</td>
        </tr>
        <tr>
        <td>XL_CELL_TEXT</td>
        <td align="center">1</td>
        <td>a Unicode string</td>
        </tr>
        <tr>
        <td>XL_CELL_NUMBER</td>
        <td align="center">2</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_DATE</td>
        <td align="center">3</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_BOOLEAN</td>
        <td align="center">4</td>
        <td>int; 1 means TRUE, 0 means FALSE</td>
        </tr>
        <tr>
        <td>XL_CELL_ERROR</td>
        <td align="center">5</td>
        <td>int representing internal Excel codes; for a text representation,
        refer to the supplied dictionary error_text_from_code</td>
        </tr>
        <tr>
        <td>XL_CELL_BLANK</td>
        <td align="center">6</td>
        <td>empty string ''. Note: this type will appear only when
        open_workbook(..., formatting_info=True) is used.</td>
        </tr>
        </table>
    ©r¾   r¿   r|   Nc                 C   s   || _ || _|| _d S rŠ   r÷  )rd   r¾   r¿   r|   rh   rh   ri   rj   ÿ  s   
zCell.__init__c                 C   s6   | j d u rdt| j | jf S dt| j | j| j f S )Nz%s:%rz%s:%r (XF:%r))r|   Ú
ctype_textr¾   r¿   rŒ   rh   rh   ri   Ú__repr__	  s   
zCell.__repr__rŠ   )rå  ræ  rç  rè  Ú	__slots__rj   rù  rh   rh   rh   ri   rl   »  s
    A
rl   r   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )r8  aR  
    Width and default formatting information that applies to one or
    more columns in a sheet. Derived from ``COLINFO`` records.

    Here is the default hierarchy for width, according to the OOo docs:

      In BIFF3, if a ``COLINFO`` record is missing for a column,
      the width specified in the record ``DEFCOLWIDTH`` is used instead.

      In BIFF4-BIFF7, the width set in this ``COLINFO`` record is only used,
      if the corresponding bit for this column is cleared in the ``GCW``
      record, otherwise the column width set in the ``DEFCOLWIDTH`` record
      is used (the ``STANDARDWIDTH`` record is always ignored in this case [#f1]_).

      In BIFF8, if a ``COLINFO`` record is missing for a column,
      the width specified in the record ``STANDARDWIDTH`` is used.
      If this ``STANDARDWIDTH`` record is also missing,
      the column width of the record ``DEFCOLWIDTH`` is used instead.

    .. [#f1] The docs on the ``GCW`` record say this:

      If a bit is set, the corresponding column uses the width set in the
      ``STANDARDWIDTH`` record. If a bit is cleared, the corresponding column
      uses the width set in the ``COLINFO`` record for this column.

      If a bit is set, and the worksheet does not contain the ``STANDARDWIDTH``
      record, or if the bit is cleared, and the worksheet does not contain the
      ``COLINFO`` record, the ``DEFCOLWIDTH`` record of the worksheet will be
      used instead.

    xlrd goes with the GCW version of the story.
    Reference to the source may be useful: see
    :meth:`Sheet.computed_column_width`.

    .. versionadded:: 0.6.1
    r   r   N)
rå  ræ  rç  rè  r9  r|   rç   rè   ré   rë   rh   rh   rh   ri   r8  	  s    'r8  c                   @   s0   e Zd ZdZer
dZdd„ Zdd„ Zdd„ Zd	S )
r%  z”
    Height and default formatting information that applies to a row in a sheet.
    Derived from ``ROW`` records.

    .. versionadded:: 0.6.1
    ©
r&  r'  ré   r(  rç   r)  r*  r|   r+  r,  c                 C   s@   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d S rŠ   rû  rŒ   rh   rh   ri   rj   c	  s   
zRowinfo.__init__c              
   C   s,   | j | j| j| j| j| j| j| j| j| j	f
S rŠ   rû  rŒ   rh   rh   ri   Ú__getstate__‹	  s   özRowinfo.__getstate__c                 C   s0   |\
| _ | _| _| _| _| _| _| _| _| _	d S rŠ   rû  )rd   Ústaterh   rh   ri   Ú__setstate__™	  s   õzRowinfo.__setstate__N)	rå  ræ  rç  rè  Ú
_USE_SLOTSrú  rj   rü  rþ  rh   rh   rh   ri   r%  M	  s    (r%  N)0Ú
__future__r   r   Ústructr   r   Úbiffhr>  r   r	   Úformular
   r   r   r   r   Útimemachinerœ  r‡  rQ   Ú
BaseObjectr   rˆ  r£  rº  r©  rh  r"  r  r  r  r  r  r   r!  r%  r*   r  r4  r5  rF  rø  rl   r©   Ú
empty_cellr8  rÿ  r%  rh   rh   rh   ri   Ú<module>   sh                   #8û	ùO;