U
    d6                    @   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   )Zcolumns_from_right_to_leftr   )Zshow_outline_symbolsr   )Z'remove_splits_if_pane_freeze_is_removedr   )Zsheet_selectedr   )Z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)dd Z*e*Z+dJddZ,dKddZ-dLddZ.dMddZ/dNd d!Z0dOd"d#Z1e/Z2d$d% Z3d&d' Z4d(d) Z5d*d+ Z6d,d- Z7d.d/ Z8dPd0d1Z9dQd2d3Z:dRd4d5Z;d6d7 Z<d8d9 Z=d:d; Z>d<d= Z?d>d? Z@d@dA ZAdBdC ZBdDdE ZCdFdG ZDdHdI ZEdS )S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rl| 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 | _(ddddg| _)|j*| | _+t,D ]\}}t-| || q*d| _.d| _/d| _0d | _1g | _2i | _3i | _4d| _5d| _6d| _7d| _8d | _9d | _:i | _;| jdkrd	| _<nd
| _<d| _=d| _>d S )NBhr   @   <   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ncolsZ_maxdatarowxZ_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_statsZ_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)   attrZdefval r_   ./tmp/pip-unpacked-wheel-zwq1az3t/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)r+   cell_xf_indexCellr6   r5   r\   rowxcolxxfxr_   r_   r`   cell  s    z
Sheet.cellc                 C   s   | j | | S )z.Value of the cell in the given row and column.r5   r\   re   rf   r_   r_   r`   
cell_value  s    zSheet.cell_valuec                 C   s   | j | | S )z
        Type of the cell in the given row and column.

        Refer to the documentation of the :class:`Cell` class.
        r6   rj   r_   r_   r`   	cell_type  s    zSheet.cell_typec                 C   s   |    | j| | }|dkr4| jd  d7  < |S z0| j| j}|dkrb| jd  d7  < |W S W n tk
rx   Y nX z0| j| j}|dkrd}| jd  d7  < |W S  tk
r   | jd  d7  < Y dS X dS )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            N)req_fmt_infor7   rG   r@   xf_indexKeyErrorr?   rd   r_   r_   r`   rb     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
        )lenr5   r\   re   r_   r_   r`   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                    s   g | ]}  |qS r_   rh   .0rf   re   r\   r_   r`   
<listcomp>  s   zSheet.row.<locals>.<listcomp>)xrangert   r5   ru   r_   rz   r`   row  s    z	Sheet.rowc                 C   s<   z|\}}W n t k
r*   | | Y S X | ||S dS )z
        Takes either rowindex or (rowindex, colindex) as an index,
        and returns either row or cell respectively.
        N)	TypeErrorr}   rh   )r\   itemZrowixZcolixr_   r_   r`   __getitem__  s
    zSheet.__getitem__c                    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}   )ry   indexr\   r_   r`   	<genexpr>  s     z!Sheet.get_rows.<locals>.<genexpr>)ranger1   r   r_   r   r`   get_rows  s    zSheet.get_rowsc                 C   s,   |dkr| j | |d S | j | || S )zM
        Returns a slice of the types of the cells in the given row.
        Nrl   r\   re   
start_colxend_colxr_   r_   r`   	row_types  s    zSheet.row_typesc                 C   s,   |dkr| j | |d S | j | || S )zN
        Returns a slice of the values of the cells in the given row.
        Nri   r   r_   r_   r`   
row_values  s    zSheet.row_valuesc                    sj   t j  }|dk r*||7 }|dk r*d}|dks:||kr@|}n|dk rP||7 } fddt||D S )zP
        Returns a slice of the :class:`Cell` objects in the given row.
        r   Nc                    s   g | ]}  |qS r_   rw   rx   rz   r_   r`   r{     s   z#Sheet.row_slice.<locals>.<listcomp>)rt   r5   r|   )r\   re   r   r   ncr_   rz   r`   	row_slice  s    zSheet.row_slicec                    sb   j }|dk r"||7 }|dk r"d}|dks2||kr8|}n|dk rH||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 r_   rw   ry   re   rf   r\   r_   r`   r{   $  s   z#Sheet.col_slice.<locals>.<listcomp>r1   r|   r\   rf   Z
start_rowxZend_rowxnrr_   r   r`   	col_slice  s    zSheet.col_slicec                    sb   j }|dk r"||7 }|dk r"d}|dks2||kr8|}n|dk rH||7 } fddt||D S )zQ
        Returns a slice of the values of the cells in the given column.
        r   Nc                    s   g | ]}j |   qS r_   ri   r   r   r_   r`   r{   6  s   z$Sheet.col_values.<locals>.<listcomp>r   r   r_   r   r`   
col_values)  s    zSheet.col_valuesc                    sb   j }|dk r"||7 }|dk r"d}|dks2||kr8|}n|dk rH||7 } fddt||D S )zP
        Returns a slice of the types of the cells in the given column.
        r   Nc                    s   g | ]}j |   qS r_   rl   r   r   r_   r`   r{   H  s   z#Sheet.col_types.<locals>.<listcomp>r   r   r_   r   r`   	col_types;  s    zSheet.col_typesc              	   C   s  | j dkrt| jd| j| j | jrd }}| j}| j}| jD ]}|\}}}}	d|  krl|  k rl|krn n d|  kr|	  k r|ksn t| jd| j| j	| ||kr|}|	|kr>|	}q>|| jkr|| _d| _
|| jkr| |d dttdd | j dkrF| j| jks"| j| jkrFt| jd	| j| j	| j| j| j| j | js | j}
| j}| j}| j}| j}| j
dkr| j}n| j
}t|D ]p}|| }t|}|
| }|dkrtdg| || |d < | j| ||d < |r| j| || |d < qd S )
Nrp   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$   r1   r2   rC   rY   rZ   r)   r(   r[   r.   r%   UNICODE_LITERALr3   r4   r,   r6   r5   r7   r+   r|   rt   r&   r'   )r\   r   r   ZumaxrowsZumaxcolsZcrangeZrloZrhiZclochir2   Zs_cell_typesZs_cell_valuesZs_cell_xf_indexesZ
s_fmt_infoZuboundre   trowZrlennextrar_   r_   r`   tidy_dimensionsR  s|    
 
B    





zSheet.tidy_dimensionsc              	   C   s  |d kr| j | }d|  kr(| jk s.n td|  krD| jk sJn t| j}z^|d }| j|k r| jj}| jj}	| j	j}
| j
}| j}t| j|D ](}||d  |	g  |r|
|d  q|| _| j| }| j| }|r| j	| }t|}|| jkr|d | _|| }|s>|| || |r8|| W d S |dkr|d7 }| j
| ||d < tdg| ||d < |r| j| ||d < |||< |||< |r|||< W n    td||| jd  Y nX d S )Nr   r   r   r.   file)r0   rZ   AssertionErrorrY   r+   r1   r6   appendr5   r7   r&   r'   r|   rt   r2   r   printr$   )r\   re   rf   ctypevaluerr   fmt_infor   sctascvascxar&   r'   _unusedZ	types_rowZ
values_rowZfmt_rowZltrZ	num_emptyr_   r_   r`   r-     s\    









zSheet.put_cell_raggedc                 C   sV  |d kr| j | }z6|| j| |< || j| |< | jrD|| j| |< W n tk
r2   |d }|d }d|  kr| jksn td|  kr| jksn t|| j	kr|| _	|| j
k rd| _n || j  krdkrn n|| _|| j
kr\| j| }| j	t| }	|	dkr|| j|	  | jr@| j| | j|	  | j| tdg|	  nz| jj}
| jj}| jj}| j}| j	}| j}| j}t| j
|D ]6}|
||  |tdg|  |r|||  q|| _
z6|| j| |< || j| |< | jr
|| j| |< W n    td||| jd  Y nX Y n    td||| jd  Y nX d S )Nr   r   r   r   r.   r   )r0   r6   r5   r+   r7   
IndexErrorrZ   r   rY   r2   r1   r[   rt   extendr&   r'   r   r   r|   r   r$   )r\   re   rf   r   r   rr   r   r   r   r   r   r   r   r   r&   r'   r   r_   r_   r`   r/     sd    




zSheet.put_cell_unraggedc           t      C   sd  d}|p| j dk}|p| j dk}do&|}d}|j}| j|_ttttttf}| j}	t	}
|j
}| j}| j}|on|j}i }i }d}| \}}}|tkr|
d|d d \}}}}|	||d || q||tkr|
d|\}}}}|	||t|j| | |r.|j|}|r.|| j||f< q||tkr|
d|dd \}}}|tk r`t|d|jpV| dd	}nt|ddd	}|	||t|| q||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st n~t!|ddd	\}}t	d|||d  d }|d7 }g }t|D ]*}|t	d|||d   |d7 }ql|t|kst |	||t|| || j||f< q||t"kr|
d|d d \}}}t#|dd }|	||d || q||t$kr|
d|dd \}} |
d|dd  \}!d}t| |!d
 D ]N}|
d|||d  \}t#||d |d  }|d7 }|	||d || qTq||t%kr*|sq||
d|dd \}}"}#d|  kr| j&k sn t'd|| j&f | j(d q||"|#f}$||$}%|%d krt)  ||$< }%|"d@ |%_*|"d? d
@ |%_+|#d@ |%_,|#d? d
@ |%_-|#d? d
@ |%_.|#d? d
@ |%_/|#d? d
@ |%_0|#d? d@ |%_1|#d? d
@ |%_2|#d? d
@ |%_3|%j0sd|%_1|%| j4|< dr|%j1dkrt5| j(d| j6||%j1 |r.t'd||"|#| j(d |%j7| j(d| j6|f d q||t8kr|d kr\|
d!|dd \}}}}&}'nR|d"kr|
d!|dd \}}}}&}'n*|
d#|dd \}}}(}&}'| 9|(||}|rt5| j(d$|| |
d|d%d& d })t:||d&d  |)t;||d
|d' |&dd( d)krt|&d }*|*dkr\d}+|
 \},}-}.|,t<ksH|,t=krNd
}+n|,tkr|
d*|.d d \}/}0}1}2}3}4|rt5| j(d+|/|0|1|2|3 n||,tkr|
d,|.d d \}/}0}1}2}5}4|rt5| j(d-|/|0|1|2|5 t:||.dd  |4t>d
|||d. n|,|krt?d/|, |+s>|
 \},}6}.|,t<t=fkr>t?d0|, | @|.}| ||t|| nx|*d
krt|&d }7|	||tA|7| nP|*dkrt|&d }7|	||tB|7| n(|*d1kr|	||td2| nt?d3|* n|
d4|&d }|	||d || q||tCkr:|
d5|d d( \}}}}7}8tAtBf|8 }9|	|||9|7| q||tDk	r$|sLq|tE }:|
d6|d d \};}<|:_F|:_1}'d|;  kr|<  krd7ksn t'd8|;|<f | j(d ~:q|tG|:|'d9 t|;|<d
 D ] }|d:kr q|:| jH|< q|r.t5| j(d;| j6|;|<|:jF|:j1|' |:j7| j(d<d q||tIk	rF|
d|d d \| _Jq||tKk	r|dk	rpt'd=|tL|| j(d |
d|d d \| _Mq||tNk
r|	sq||d>k	st |dd d?k	st t	d@|dd> }=g }>|=D ],}?tdAD ]}@|>|?d
@  |?d
L }?	q	qtO|>| _Pq||tRk
rN|
s$q||
d|d d \}}}|	||tSd2| q||tTk
r|
s`q||d
? }A|
dB|A |}B|Bd d \}}C|Bd }D|A|Dd |C k
st d}t|C|Dd
 D ]"}|	||tSd2|B|  |d
7 }
qq||tUk
s|tVkr|dk
rq||dCk r|
dD|dd( }En|
dE|ddF }EdG\| _W| _X|E\| _Y| _Z|dHkrl| j[j\rl| j[j]sl| j[^  |r.t5| j(dI| j6| j_| jZ| jY q||t`kr| a| q||tbkr| c| q||tdkrd}|rt'dJ| j(d d
}q0q||tekr| f|}F|Fr
|Fjg}Gnd }Gq||thkr*| i||| q||tjkrX| k|}H|Hr.|Gr.|H||G< d }Gq||tlkrp| m|| q||tnkr| o| q||tpkr
|
d|dd \}I}J|JdAkrt'dK||j| d |I|Jf | j(d |
 \}K}}|KtdkrԐqq|r.t'dL| j(d q||tqkr |r| q||tskrfd}tt| ju|||d(dM}tt| jv|||d(dM}||ks.t q||tkr|
d*|d d \}/}0}1}2}3}4|r.t'dN|/|0|1|2|3| j(d q||tkr|
d,|d d \}/}0}1}2}5}4|r.t'dO|/|0|1|2|5| j(d t:||dd  |4t>d
|||d. q||twkr|s(q||dCks6t t	dP|ddF \}L}M}N}O}P}Q| j d
krt5| j(dQ| j6| j_|L|Mtx|N|Od
 |P|Qd
  g }Rtt|R|dF|d(dM}| j d
kr.t5| j(dRt|RdSydTdU |RD  q||tzkr|sq|t	dV|dd \}S}T}U}V}'|'dW? d
@ }W|'d? d
@ }X|'d? d
@ }Y| j d
krNt5| j(dX|S|T|U|V|'|W|X|Y
 dF}|Wrt	dY|||dZ  \	}Z}[}\}]}^}_}`}a}b|`d
kd
@ }c|[d
kd
@ }d|`dkd
@ }e|[dkd
@ }f| j d
krt5| j(d[|Z|\|]|^|_|a|b|c|d|e|f |dZ7 }|Xr|d(7 }|Yr|d7 }||||U  }g||U7 }|rF|UrFt5| j(d\ t{||g|U|dd
d] ||||V  }h||V7 }||kslt |r.|Vr.t5| j(d^ t{||h|V|dd
d] q||t|kr:|dkrt	d|d d \}?| _}n<|dkrt	d|\| _}d}?t5| j(d_ nd}?t5| j(d`| |?d
@ | _~|?d
? d
@ | _|?d? d
@ | _|?d1? d
@ | _q||tkr|sLq|tt| j|d|d(dM}|r|t5| j(da|d d(  ||ks.t db||f q||tkr^|dCkr|dkrt	dc|d d \}i| _| _| _| _| _nT|d"kst t	d|d d \}i| _| _t	dd|dde | _t| j[j| jddf| _tD ]"\}j}kt| |j|id
@  |id
L }iq8q||tkrt	d|\}l}md}B|mr|ldg |m }Bd|B  krdhksn |s| j dkrt'di| j6|l|mf | j(d dg}B|B| _q||tkrt	dj|d de \| _| _| _| _| _d
| _q||tkr|s(q||
d|d d \}n|ndd|dCk   d |ks^t d}|dCk r||k r| j|
d|||d  d dd:f |d7 }qln4||k r.| j|
d|||d   |d7 }qq||tkr|sq||
d|d d \}n|ndd|dCk   d |ks*t d}|dCk rx||k r| j|
d|||d  d ddkf |d7 }q8n4||k r.| j|
d|||d   |d7 }qxq||dlkr||tks|tkr||| q.|tks|tkr|| q.|tkr(| j[j]s| j[^  || q.|tkr@|| q.|tkrX|| q.|tksv|tksv|tkr|| q.|tkr|| q.|tkr|| q.|tkr|| q.|tkr|| q.|tkr|
d|d | _q.|tkr<|
dm|\}}}(}|	||d || 9|(|| q.|tkrz|
dn|\}}}(}|	||d t|| 9|(|| q.|tkr|
do|dd \}}}(t|d|jp| d
d	}|	||t|| 9|(|| q.|tkr|
dp|\}}}(}7}8tAtBf|8 }9|	|||9|7| 9|(|| q.|tkrf|s0q||
do|d d \}}}(|	||tSd2| 9|(|| q.|tkr~|| q.|tkr|sq||
dq|ddr \}}"}#d|  kr| j&k sn t'ds|| j&f | j(d q||#d
@ sd}nP|dtkr"|
d|ddt d }o| j9d |d|odu}n|dvd }(| j9|(|ddw}|"|#|f}$||$}%|%d krt)  ||$< }%|"d@ |%_*|"d? d
@ |%_+|#d
@ |%_0||%_1|%| j4|< dr|%j1dkrt5| j(d| j6||%j1 |r,t'dx||"| j(d |%j7| j(d| j6|f d q.|tkr|sq||
dy|d d \};}<}p|;|<ksFt'dz|;|<f | j(d q|t|;|<d
 D ]4}|| jHkrp| jH| }:ntE }:|:| jH|< |p|:_FqT|r,t5| j(d{| j6|;|<|p q.|tkr|sq||
d|d d \};}<|rt5| j(d|| j6|;|< d|;  kr|<  k rd7ks2n t'd}|;|<f | j(d t|<d7}<t|;|<D ]d}dd1||;   }q||q|qd1  }(| j9|(d|d~}|| jHkr| jH| }:ntE }:|:| jH|< ||:_1q<n|tkr.d}rt|r|dd D ]\}j}st| |jt|sdk qt	d|dd \| _| _| _t	dd|ddv | _t| j[j| jddf| _q|q||sJt?d| j6| j_f | ơ  | ǡ  ||_d
S )Nr   ro      z<HHHd   z<HHHi<HHH   lenlenr   z<BBz<H<HH
   r   z<H4xH4xi   zT*** NOTE: ROW record has row index %d; should have 0 <= rowx < %d -- record ignored!r   i  rn                 r   z**ROW %d %d %d
ZROWz--- sh #%d, rowx=%d ---header2   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%04xrp   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   ro   	bit1_flag)r   i   outline_level)   i   	collapsed   z>COLINFO sheet #%d cols %d-%d: wid=%d xf_index=%d flags=0x%04x
z===z*** ERROR *** STANDARDWIDTH"   s     z<8i    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)Z	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   )ry   Zcoordsr_   r_   r`   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 18xv   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:
)Z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_attrre   rf   true_xfx   )rf   Z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)re   rf   )r   r   r   r   r       z<HHBz Sheet %d (%r) missing EOF record)r*   r#   Z
XL_SHRFMLAZXL_ARRAYZ
XL_TABLEOPZXL_TABLEOP2Z	XL_ARRAY2ZXL_TABLEOP_B2r.   r   get_record_partsr"   r+   Z_rich_text_runlist_mapZ	XL_NUMBERZXL_LABELSSTXL_CELL_TEXTZ_sharedstringsgetrD   ZXL_LABELZBIFF_FIRST_UNICODEZunpack_stringencodingderive_encodingZunpack_unicodeZ
XL_RSTRINGZunpack_string_update_pos	BYTES_ORDr|   r   rt   r   unpack_unicode_update_posZXL_RK	unpack_RKZXL_MULRKZXL_ROWrY   r   r$   Rowinfoheighthas_default_heightr   outline_group_starts_endsr   height_mismatchhas_default_xf_indexrr   additional_space_aboveadditional_space_belowr@   r   r)   dumpZXL_FORMULA_OPCODESfixed_BIFF2_xfindexr   r
   Z	XL_STRINGZXL_STRING_B2r   	XLRDErrorstring_record_contentsXL_CELL_BOOLEANXL_CELL_ERRORZ
XL_BOOLERRZ
XL_COLINFOColinfowidthupkbitsr?   ZXL_DEFCOLWIDTHr8   ZXL_STANDARDWIDTHreprr9   ZXL_GCWtuplegcwmapZXL_BLANKXL_CELL_BLANKZXL_MULBLANKZXL_DIMENSIONZXL_DIMENSION2r1   r2   r3   r4   r!   xf_listZ_xf_epilogue_doneZxf_epiloguer(   ZXL_HLINKhandle_hlinkXL_QUICKTIPhandle_quicktipZXL_EOFZXL_OBJ
handle_objidZXL_MSO_DRAWINGhandle_msodrawingetcZXL_TXO
handle_txoXL_NOTEhandle_noteZ	XL_FEAT11handle_feat11ZbofcodesZ
XL_COUNTRYZhandle_countryZXL_LABELRANGESZ)unpack_cell_range_address_list_update_posrB   rA   Z
XL_CONDFMTr   joinZXL_CFr   ZXL_DEFAULTROWHEIGHTr:   r;   r<   r=   r>   ZXL_MERGEDCELLSrC   Z
XL_WINDOW2rK   rL   rM   rT   rU   rN   r	   Z
colour_maprI   rJ   ZXL_SCLrV   ZXL_PANEvert_split_poshorz_split_poshorz_split_first_visiblevert_split_first_visiblesplit_active_panehas_pane_recordZXL_HORIZONTALPAGEBREAKSrE   ZXL_VERTICALPAGEBREAKSrF   Z	XL_FORMATZ
XL_FORMAT2Zhandle_formatZXL_FONTZXL_FONT_B3B4Zhandle_fontZXL_STYLEZhandle_styleZ
XL_PALETTEZhandle_paletteZXL_BUILTINFMTCOUNTZhandle_builtinfmtcountZXL_XF4ZXL_XF3ZXL_XF2Z	handle_xfZXL_DATEMODEZhandle_datemodeZXL_CODEPAGEZhandle_codepageZXL_FILEPASSZhandle_filepassZXL_WRITEACCESSZhandle_writeaccessZXL_IXFErW   ZXL_NUMBER_B2Z
XL_INTEGERfloatZXL_LABEL_B2ZXL_BOOLERR_B2ZXL_BLANK_B2ZXL_EFONTZhandle_efontZ	XL_ROW_B2ZXL_COLWIDTHZXL_COLUMNDEFAULTminZXL_WINDOW2_B2zipintr   r   update_cooked_mag_factors)tr\   bkDEBUGr   Z	blah_rowsZblah_formulasr   oldposZXL_SHRFMLA_ETC_ETCZself_put_cellZlocal_unpackZbk_get_record_partsbvr   Zdo_sst_rich_textZrowinfo_sharing_dicttxosZ	eof_foundrcdata_lendatare   rf   rr   dZsstindexZrunliststrgposZnrtr   Z	mulrk_rowZmulrk_firstZ
mulrk_lastZbits1Zbits2keyrZ
result_strflagsr   ZfmlalenZ
first_byteZ	gotstringrc2	data2_lendata2Zrow1xZrownxZcol1xZcolnxZarray_flagsZtokslenZnfmlas_unused_lenr   Zis_errcelltycZ
first_colxZ	last_colxZiguffr   bitsjZnitemsresultZ	mul_firstZmul_lastZ	dim_tupleZ	saved_objZsaved_obj_idtxoversionZboftypecodeZnum_CFsZneeds_recalcZbrowx1Zbrowx2Zbcolx1Zbcolx2ZolistZcf_typecmp_opZsz1Zsz2Z
font_blockZ
bord_blockZ
patt_blockZfont_heightZfont_optionsZweightZ
escapementZ	underlineZfont_colour_indexZtwo_bitsZfont_escZfont_underlZ
font_styleZpostureZ	font_cancZcancellationZfmla1Zfmla2optionsr^   Z_unused_defvalnumZdenZ
num_breaksrg   r   offsetZ
attr_namescharr_   r_   r`   read  s       





 


 




  


   

    
       






 &
 
     



 

 
 


   


 

 







 

        

   
    	    
       	           	




      


    



 "

(

 "

(












"


 

 







  

 


   
   &


   

z
Sheet.readc                 C   s  | j }| j}|dkd }tdd|d   |d | d }|}|dk rT|jpR| }d}td}	|dkrt|| d@ }
d|
 }|d7 }t||d  |}|	|7 }	|t|7 }||kr|	S ||krd	||f }t	||
 \}}}|tkrt	d
| d}q`d S )Nr   r   <Z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   unicodert   r   r   XL_CONTINUE)r\   r  r  r  r   Znchars_expectedr0  encZnchars_foundr)  flagchunkmsgr  r$  r_   r_   r`   r     s:    "zSheet.string_record_contentsc                 C   s   t p| jdk}| jrv| jd kr&d| _n| j| _| j}d|  krHdksnn |rhtd| j| jf | jd | j}|| _	nj| jd krd| _	n| j| _	| j
}|sd}n:d|  krdksn |rt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   rV   rR   rU   r   r)   r$   rS   rT   )r\   r   Zzoomr_   r_   r`   r    s@    	



zSheet.update_cooked_mag_factorsc           	      C   s   d}|p| j dk}| jdkrt| jjrf|d k	r2|}nt|d d@ }|dkrb| jd kr\td| j}|S d | _| j_t|d d@ }|dkst| j	|}|d k	r|S |rt
| jd||| | jjstdD ]}| jd	|d
k d q| j|d}|S )Nr   ro   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   @  rn   )r   style)r   )r*   r"   r!   r   r   rW   r   r   rX   r   r   r$   r|   insert_new_BIFF20_xf)	r\   r   re   rf   r   r  r   rg   Zxfx_slotr_   r_   r`   r   1  s2    

zSheet.fixed_BIFF2_xfindexc              
   C   s   d}|p| j dk}| j}t|j}| ||}||_|j| |rZ|j| jd| dd |j	|j
kr|j	rd}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   ro   z=== Faked XF %d ===z======r   footerz1ERROR *** XF[%d] unknown format key (%d, 0x%04x)
ZGeneral)r*   r!   rt   r   fake_XF_from_BIFF20_cell_attrrr   r   r   r$   
format_key
format_mapr   r   FUNr   format_listFNUXL_CELL_NUMBERFGEFDTXL_CELL_DATEFTXtyper0   rX   )r\   r   r=  r  r   r!   rg   xfr;  fmtcellty_from_fmttyr%  r_   r_   r`   r>  S  sH    
       

zSheet.insert_new_BIFF20_xfc                 C   s  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 ]F\}}||@ rd\}}nd\}}t|j
|d | t|j
|d | q|j}|d@ r d|_nd|_d|_d|_d| |_d|j_d|j_ddddddg}|D ]}d| d }t||d q`|S )Nr   )XFXFAlignmentXFBorderXFBackgroundXFProtectionr   r   r<     r   ))r   r   Zcell_locked)r      Zformula_hiddenr   ))r   left)r   right)r   top)r   Zbottom)r   r   r   Z_colour_indexZ_line_stylerV     r   r   )r   r   ro   formatfont	alignmentborder
background
protection__flag)
formattingrP  rQ  rR  rS  rT  r]  indent_levelZshrink_to_fitZtext_directionr^  Zdiag_upZ	diag_downZdiag_colour_indexZdiag_line_styler_  r`  r   rB  Z
font_indexr   Z	hor_alignrJ   Zfill_patternZbackground_colour_indexZpattern_colour_indexZparent_style_index
vert_alignZrotation)r\   r   r=  rP  rQ  rR  rS  rT  rM  Z	prot_bitsZfont_and_formatZ
halign_etcmaskZsideZcolour_indexZ
line_stylebgZ
attr_stemsZ	attr_stemr^   r_   r_   r`   rA  r  sX    



z#Sheet.fake_XF_from_BIFF20_cell_attrc                 C   s   | j stdd S )Nz9Feature requires open_workbook(..., formatting_info=True))r+   r   r   r_   r_   r`   rq     s    zSheet.req_fmt_infoc                 C   s   |    | jdkr@| j|d}|dk	r.|jS | jdk	r| jS nj| jdkr| j| rf| jdk	r| jS q| j|d}|dk	r|jS n&| jdkr| j|d}|dk	r|jS | jdk	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   )rq   r"   r?   r   r   r9   r   r8   )r\   rf   Zcolinfor_   r_   r`   computed_column_width  s*    







zSheet.computed_column_widthc              
   C   sL  t rtd| jd t|}t }td|d d \|_|_|_|_	}}}|dksTt
|dks`t
t rvtd| | jd d}dd	 }|d
@ r|||\|_}|d@ r|||\|_}|d@ r|d@ std|||d  \}	t rt| jd|	 |d7 }|	dkrtd|_td|||d  d }
|d7 }t||||
  d|_t rdt| jd|jt|j |jd}t rtd| | jd |jd | |_d|d  }||7 }|
| }||||  }||7 }t rt| jd|j||
|| |dkst
qj|	dkrtd|_td|||d   \}}
|d 7 }d!| ||||
 d   }t rdt| jd"|| ||
7 }|d#7 }td$|||d  d }t rtd%| | jd |d7 }|rtd$|||d  d }|d7 }|d7 }t||||  d}||7 }||_n||_nt| jd&|	 nN|d'@ d(krFtd)|_|||\|_}n$|d*@ d+kr`td,|_n
td-|_|d+@ r|||\|_}t r|jd.d/ td0||f  || }|dkrt| jd1|jd |jd |t|| d   n|dk rt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   ro   UTF-16ler   )r   r6  )bufZofsnbZucr_   r_   r`   get_nul_terminated_unicode  s
    z6Sheet.handle_hlink.<locals>.get_nul_terminated_unicoder   rV  r   r    z<16sr   z	clsid=%r
s   y  Kurlri  r   r   rj  zinitial url=%r len=%d
 z	endpos=%dro   z9url=%r
extra=%r
nbytes=%d true_nbytes=%d extra_nbytes=%d
)   r   s               Fz
local filez<Hir   s   ..\zuplevels=%d shortpath=%r
rp  <izsz=%dz*** unknown clsid %r
ic  i  Zuncik  r   Z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$   rt   	Hyperlinkr   frowxlrowxfcolxlcolxr   desctargetr   r   rL  r6  url_or_pathfindtextmarkr   ZREPRr   rO   r   r|   rP   )r\   r  Zrecord_sizer   Zguid0dummyr.  r0  rm  ZclsidnbytesendposZtrue_nbytesZextra_nbytes
extra_dataZuplevels	shortpathszZxlZextended_pathre   rf   r_   r_   r`   r     s     (  

      

  



	
zSheet.handle_hlinkc                 C   s   t d|d d \}}}}}|tks(t| js2t| jd }||||f|j|j|j|jfks`t|dd  dksttt|dd d|_	d S )N<5Hr   r   r   s     r5  )
r   r   r   rO   rt  ru  rv  rw  r6  quicktip)r\   r  Zrcxrt  ru  rv  rw  r   r_   r_   r`   r   B  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rld}n|	}|rt|||d d| jd	 t| jd
|||
|	|	 |dkr|dksttd||d |d |  \|_|_	|_
|_|_n,|dkr|	dkst|d |kstn ||d 7 }q$||ks2t|rJ|j| jddd d S )Nr   r   r   z<HHIr   rn   r   r   baseZfoutz.fbt:0x%04X  inst:%d  ver:0x%X  cb:%d (0x%04X)
i  r   z<Hiiiii  z=== MSODrawing === r?  )OBJ_MSO_DEBUGr"   
MSODrawingr   hex_char_dumpr$   r   r   Z
anchor_unkZanchor_colx_loZanchor_rowx_loZanchor_colx_hiZanchor_rowx_hir   )r\   Zrecidr  r  r  or  tmpZfbtcbverinstZndbr_   r_   r`   r  K  sP    

      
zSheet.handle_msodrawingetcc                 C   s  | j dk rd S t }t|}d}tr2t| jd| ||k rtd|||d  \}}trt| jd||| t|||d d| jd |dkr|dkr|d	ks| jrt| jd
 d S |dkr|dkst	td||d |d  \|_
|_}t||d n|dkrV||| d||  kr qd}t| jd|  t|||| d| jd t|n|dkrtd||d |d	  }	t|	dD ]\}
}t|d| |
 qn6|dkrtrt| jd n|dkr|jrؐqn ||d 7 }q2t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      Zscrollbar_flag)r   i    Zautofill)r   r   Zautoliner   z'Unexpected data at end of OBJECT recordz*** ERROR %s
r   r  r   )r   r  maxincpageZ
scrollbar_r   z.*** OBJ record has ft==0x0D 'notes' structure
   z=== MSOBj ===r  r?  )r"   MSObjrt   r  r   r$   r   r  r*   r   rL  r  r   r   r  rJ   r  r   )r\   r  r  r  r  ftr  option_flagsr;  valuesr   tagr_   r_   r`   r   s  sR    

$



 
zSheet.handle_objc                 C   s2  t r(t| jd t|dt|d| jd t }t|}| jdk rrtd|d d \|_|_	}t|d }||ksvt
|dd  g}||8 }|dkr| j \}}	}
|tkst
td|
d d \}}|dkst
||	d kst
||
dd   ||8 }q|dkst
| 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kst
t r|j| jddd ||j}|r.|j|_|j|_|| j|j|j	f< d S )Nz... NOTE record ...
r   r  r   r   r   z<H2xHr       r   r   z<4Hr   r   r   ro   r   )r   r   z=== Note ===r  r?  )r  r   r$   r  rt   Noter"   r   re   rf   r   r!   r   r  r   r   r   r6  r  textrich_text_runlistshow
row_hidden
col_hiddenr   authorZ
_object_idrQ   r   r   r   )r\   r  r  r  r  Zexpected_bytesrl  piecesr!  r"  r#  Z
dummy_rowxr8  r  r  r*  r_   r_   r`   r    sV    

 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sttrt|d|d| jd t|d }|d }|r|d dkst|d }t|d|d	\}}||kst| j	|7  _	|	|7 }	qjg |_d}||k r| j
 \}}}|tks@t|d
 dksRttd|d
D ]0}td|||d
  }|j| |d
7 }q^q|jr|jd d |kr|jd= qtr|j| jddd t|j| jd |S )Nr   z<HH6sHHH))rp   r   Z
horz_align)r   p   re  )r   r  Z	lock_text)r   r   Z	just_last)rn   i   Zsecret_editr   r   r  r   ro   )Z	known_lenr   z<HH4xr   z=== MSTxo ===r  r?  r   )r"   MSTxor   r   ZrotZ	ifntEmptyZfmlar   r   r  r!   r   r7  r   r  r  r$   r   r   r  r|   r   r   r   )r\   r  r  rN  Zfmtsizer  ZcontrolInfoZcchTextZcbRunsZtotcharsr!  r"  r#  rl  ZncharsZutextr  ZtotrunsZrc3Z	data3_lenZdata3r  runr_   r_   r`   r    sP    
"



zSheet.handle_txoc                 C   s   t sd S td|dd \
}}}}}}}}	}
}|dks:t|
dksFt|dksRt|dks^t|dksjt||ksvt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<iiiiiiHHiiiii16sHe   zlt=%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   r$   )r\   r  rtZgrbitFrtZRef0ZisfZfHdrZ	reserved0ZcrefZ
cbFeatDataZ	reserved1ZRef1ltZidListZ	crwHeaderZ	crwTotalsZidFieldNextZcbFSDataZrupBuildZunusedShortZ	listFlagsZlPosStmCacheZ
cbStmCacheZcchStmCacheZlemZrgbHashParamZcchNamer_   r_   r`   r    sR    &                   zSheet.handle_feat11c                 C   s   d | j| jS )NzSheet {:>2}:<{}>)r[  r)   r(   r   r_   r_   r`   __repr__@  s    zSheet.__repr__)r   N)r   N)r   N)r   N)r   N)r   N)N)r   )r   )F__name__
__module____qualname____doc__r(   r!   r1   r2   r?   r@   rA   rB   rC   rD   r8   r9   r:   r;   r<   r=   r>   rH   r   rO   rP   rQ   r  r	  r
  r  r  r  rE   rF   ra   rh   rk   rm   rb   rv   r}   r   r   __iter__r   r   r   r   r   r   colr   r-   r/   r2  r   r  r   r>  rA  rq   rh  r   r   r  r   r  r  r  r  r_   r_   r_   r`   r   2   s   		T
	





=;K     V-
"

4(p	(8320r   c                   @   s   e Zd ZdS )r  Nr  r  r  r_   r_   r_   r`   r  D  s   r  c                   @   s   e Zd ZdS )r  Nr  r_   r_   r_   r`   r  H  s   r  c                   @   s   e Zd ZdS )r  Nr  r_   r_   r_   r`   r  L  s   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  rf   r  r  re   r  r  r_   r_   r_   r`   r  P  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 )rs  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  rt  ru  rv  rw  rL  rz  rx  ry  r|  r  r_   r_   r_   r`   rs  s  s   	rs  c                 C   s   t | d }|d@ r@td| \}|dL }|d@ r8|d S t|S tddtt|d@  | dd	  \}|d@ rx|d S |S d S )
Nr   ro   rq  r   g      Y@r   s          r   )r   r   r  ZBYTES_LITERALchr)Zrk_strr   ir  r_   r_   r`   r     s    (r   emptyr  r)   ZxldateboolerrorZblankc                   @   s,   e Zd ZdZdddgZd
ddZdd	 ZdS )rc   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   rr   Nc                 C   s   || _ || _|| _d S r   )r   r   rr   )r\   r   r   rr   r_   r_   r`   ra   	  s    zCell.__init__c                 C   s:   | j d krdt| j | jf S dt| j | j| j f S d S )Nz%s:%rz%s:%r (XF:%r))rr   
ctype_textr   r   r   r_   r_   r`   r  	  s    
zCell.__repr__)N)r  r  r  r  	__slots__ra   r  r_   r_   r_   r`   rc     s   A

rc   r   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )r   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  r   rr   r   r   r   r   r_   r_   r_   r`   r   $	  s   'r   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   rr   r   r   c                 C   s@   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d S r   r  r   r_   r_   r`   ra   x	  s    zRowinfo.__init__c              
   C   s,   | j | j| j| j| j| j| j| j| j| j	f
S r   r  r   r_   r_   r`   __getstate__	  s    zRowinfo.__getstate__c                 C   s0   |\
| _ | _| _| _| _| _| _| _| _| _	d S r   r  )r\   stater_   r_   r`   __setstate__	  s    zRowinfo.__setstate__N)	r  r  r  r  
_USE_SLOTSr  ra   r  r  r_   r_   r_   r`   r   b	  s   (r   N)0
__future__r   r   structr   r   Zbiffhrc  r   r	   Zformular
   r   r   r   r   Ztimemachiner  r  rI   Z
BaseObjectr   r  r  r  r  rs  r   rF  rG  rD  rH  rI  rJ  rK  rO  r%   r   r   r   r   r  rc   r   Z
empty_cellr   r  r   r_   r_   r_   r`   <module>   s~                   "#8     	       O;