o
    b6                    @   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,dJddZ-dJddZ.dJddZ/dJd d!Z0dJd"d#Z1e/Z2d$d% Z3d&d' Z4d(d) Z5d*d+ Z6d,d- Z7d.d/ Z8dKd0d1Z9dLd2d3Z:dLd4d5Z;d6d7 Z<d8d9 Z=d:d; Z>d<d= Z?d>d? Z@d@dA ZAdBdC ZBdDdE ZCdFdG ZDdHdI ZEdS )M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-| || qd| _.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   )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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_   I/var/www/secure340b-portal/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)r+   cell_xf_indexCellr6   r5   r\   rowxcolxxfxr_   r_   r`   cell  s   z
Sheet.cellc                 C      | 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   ri   )z
        Type of the cell in the given row and column.

        Refer to the documentation of the :class:`Cell` class.
        r6   rk   r_   r_   r`   	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_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                       g | ]}  |qS r_   rh   .0rf   re   r\   r_   r`   
<listcomp>      
zSheet.row.<locals>.<listcomp>)xrangeru   r5   rv   r_   r|   r`   row  s   z	Sheet.rowc                 C   s6   z|\}}W n t y   | | Y S w | ||S )z
        Takes either rowindex or (rowindex, colindex) as an index,
        and returns either row or cell respectively.
        )	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   )r{   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   ,   |du r| j | |d S | j | || S )zM
        Returns a slice of the types of the cells in the given row.
        Nrm   r\   re   
start_colxend_colxr_   r_   r`   	row_types     zSheet.row_typesc                 C   r   )zN
        Returns a slice of the values of the cells in the given row.
        Nrj   r   r_   r_   r`   
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                    rx   r_   ry   rz   r|   r_   r`   r}     r~   z#Sheet.row_slice.<locals>.<listcomp>)ru   r5   r   )r\   re   r   r   ncr_   r|   r`   	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 r_   ry   r{   re   rf   r\   r_   r`   r}   $  r~   z#Sheet.col_slice.<locals>.<listcomp>r1   r   r\   rf   Z
start_rowxZend_rowxnrr_   r   r`   	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 r_   rj   r   r   r_   r`   r}   6      z$Sheet.col_values.<locals>.<listcomp>r   r   r_   r   r`   
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   r_   rm   r   r   r_   r`   r}   H  r   z#Sheet.col_types.<locals>.<listcomp>r   r   r_   r   r`   	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rt| 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rtdg| || |d < | j| ||d < |r| j| || |d < qd S d S )
Nrq   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   ru   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  sz   

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   r.   file)r0   rZ   rY   r+   r1   r6   appendr5   r7   r&   r'   r   ru   r2   r   printr$   )r\   re   rf   ctypevaluers   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   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   r.   r   )r0   r6   r5   r+   r7   
IndexErrorrZ   rY   r2   r1   r[   ru   extendr&   r'   r   r   r   r   r$   )r\   re   rf   r   r   rs   r   r   r   r   r   r   r   r   r&   r'   r   r_   r_   r`   r/     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 rt|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|sq<|
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|(||}|rt4| j'd$|| |
d|d%d& d })t9||d&d  |)t:||d|d' |&d	d( d)krt|&d }*|*dkrd}+	 |
 \},}-}.|,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rt>d0|, | ?|.}| ||t|| 
n|*dkrt|&d }7|	||t@|7| 	n|*dkrt|&d }7|	||tA|7| 	n|*d1kr|	||td2| 	nt>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|rt4| j'd<| j5|;|<|:jE|:j0|' |:j6| j'd=d 	n|tHkr|
d|d d \| _I	 	n|tJkr|dkrt&d?|tK|| j'd |
d|d d \| _L	 n|tMkr|sq<|dAksJ |dd dBksJ t	dC|ddA }=g }>|=D ]}?tdDD ]}@|>|?d@  |?dL }?qqtN|>| _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]`  |rt4| j'dQ| j5| ja| j\| j[ n|tbkr| c| n|tdkr| e| n|tfkrd}|rt&dR| j'd d}n|tgkr| h|}G|Gr|Gji}Hnd }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|rt&dT| j'd n|tskr|t| n|tukrd}tv| jw|||d(dU}tv| jx|||d(dU}||ksJ n|tkr|
d*|d d \}/}0}1}2}3}4|rt&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rt4| j'd`|T|U|V|W|'|X|Y|Z
 dN}|Xrt	da|||db  \	}[}\}]}^}_}`}a}b}c|adkd@ }d|\dkd@ }e|adkd@ }f|\dkd@ }g| j dkrt4| 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rt	d|\| _~d}?t4| j'dg n	d}?t4| j'dh| |?d@ | _|?d? d@ | _|?d? d@ | _|?d1? d@ | _n|tkr|sq<tv| j|d|d(dU}|rt4| j'di|d d(  ||ksJ dj||f n|tk	r;|dKkr|dkrt	dk|d d \}j| _| _| _| _| _n*|d"k	sJ t	d|d d	 \}j| _| _t	dl|d	dm | _t| j]j| jddn| _tD ]\}k}lt| |k|jd@  |jdL }j	q'nh|tk	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'|tk	rt	dr|d dm \| _| _| _| _| _d| _n
|tk
r|	sq<|
d|d d \}o|odd|dKk   d |k	sJ 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|tk
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|tk
s|tk
r||| n|tk
s|tk
r|| n|tk
r| j]j_
s| j]`  || n|tk
r|| n|tk
r|| n|tk
s|tk
s|tk
r|| n|tk
r|| n|tk
r|| n|tkr|| n|tkr|| n|tkr |
d|d | _n|tkr=|
du|\}}}(}|	||d || 8|(|| nf|tkr\|
dv|\}}}(}|	||d t|| 8|(|| nG|tkr|
dw|dd \}}}(t|d|jpw| dd
}|	||t|| 8|(|| n|tkr|
dx|\}}}(}7}8t@tAf|8 }9|	|||9|7| 8|(|| n|tkr|sq<|
dw|d d \}}}(|	||tUd2| 8|(|| n|tkr|| n|tkr|sq<|
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|< 	 |rt&d||"| j'd |%j6| j'd| j5|f d n|tkr|sq<|
d|d d \};}<}q|;|<kst&d|;|<f | j'd q<t|;|<d D ]}|| jGv r| jG| }:ntD }:|:| jG|< |q|:_Eq|rt4| j'd| j5|;|<|q n|tkr]|sq<|
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|tkrd}st|s|dd D ]\}k}tt| |kt|tdk qmt	d|dd \| _| _| _t	dl|dd~ | _t| j]j| jddn| _n	 q=|st>d| j5| jaf | ǡ  | ȡ  ||_dS )Nr   rp      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  ro                 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%04xrq   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   rp   	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===ZDEFCOLWIDTHz*** ERROR *** STANDARDWIDTHZSTANDARDWIDTH"   s     z<8i    c                 S   s   d|  S )NzF r_   )xr_   r_   r`   <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)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   )r{   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   ru   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_indexrs   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joinmaprstripreplaceZ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   Z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)ur\   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   rs   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showgcwZ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_optionsweightZ
escapement	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$  


























&




























	


		












"

(



"

(















"


















&




          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   <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   unicoderu   r   r   XL_CONTINUE)r\   r(  r$  r!  r   Znchars_expectedr@  encZnchars_foundr7  flagchunkmsgr&  r2  r_   r_   r`   r     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   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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   rp   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   @  ro   )r   style)r   )r*   r"   r!   r  r   rW   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| |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   rp   z=== Faked XF %d ===z======r   footerz1ERROR *** XF[%d] unknown format key (%d, 0x%04x)
ZGeneral)r*   r!   ru   r  fake_XF_from_BIFF20_cell_attrrs   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   rM  r"  r   r!   rg   xfrK  fmtcellty_from_fmttyr3  r_   r_   r`   rN  S  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@ rd|_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   rL     r   ))r   r   Zcell_locked)r      Zformula_hiddenr   ))r   left)r   right)r   top)r   bottom)r   r   r   Z_colour_indexZ_line_stylerf     r   r   )r   r   rp   )formatfont	alignmentborder
background
protection__flag)
formattingr`  ra  rb  rc  rd  rn  indent_levelZshrink_to_fitZtext_directionro  Zdiag_upZ	diag_downZdiag_colour_indexZdiag_line_stylerp  rq  r   rR  Z
font_indexr  Z	hor_alignrJ   Zfill_patternZbackground_colour_indexZpattern_colour_indexZparent_style_index
vert_alignZrotation)r\   r   rM  r`  ra  rb  rc  rd  r]  Z	prot_bitsZfont_and_formatZ
halign_etcmaskZsideZcolour_indexZ
line_stylebgZ
attr_stemsZ	attr_stemr^   r_   r_   r`   rQ  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))r+   r   r   r_   r_   r`   rr     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   )rr   r"   r?   r   r  r9   r  r8   )r\   rf   Zcolinfor_   r_   r`   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@ std|||d  \}	t rxt| jd|	 |d7 }|	dkrtd|_td|||d  d }
|d7 }t||||
  d|_t rt| jd|jt|j |jd}t rtd| | jd |jd | |_d|d  }||7 }|
| }||||  }||7 }t rt| jd|j||
|| |dv sJ n|	dkrt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rtd)|_|||\|_}n|d*@ d+krt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   rp   UTF-16ler   )r   rF  )bufZofsnbZucr_   r_   r`   get_nul_terminated_unicode  s
   z6Sheet.handle_hlink.<locals>.get_nul_terminated_unicoder   rf  r   r    z<16sr   z	clsid=%r
s   y  Kurlrz  r   r   r{  zinitial url=%r len=%d
 z	endpos=%drp   z9url=%r
extra=%r
nbytes=%d true_nbytes=%d extra_nbytes=%d
)   r   s               Fz
local filez<Hir   s   ..\zuplevels=%d shortpath=%r
r  <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$   ru   	Hyperlinkr   frowxlrowxfcolxlcolxdesctargetr   r   r\  rF  url_or_pathfindtextmarkr   ZREPRr   rO   r   r   rP   )r\   r(  Zrecord_sizer   Zguid0dummyr>  r@  r~  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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     rE  )	r   r  rO   r  r  r  r  rF  quicktip)r\   r(  Zrcxr  r  r  r  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 rt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sJ n	 ||d 7 }||k s||ksJ |r|j| jddd d S d S )Nr   r   r   z<HHIr   ro   r   r   baseZfoutz.fbt:0x%04X  inst:%d  ver:0x%X  cb:%d (0x%04X)
i  r   z<Hiiiii  z=== MSODrawing ===r   rO  )OBJ_MSO_DEBUGr"   
MSODrawingr   hex_char_dumpr$   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  sH   


zSheet.handle_msodrawingetcc                 C   s  | j dk rd S t }t|}d}trt| jd| ||k rt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rn`d}t| jd|  t|||| d| jd t||dkrtd||d |d	  }	t|	dD ]\}
}t|d| |
 qn|dkrtrt| jd n
|dkr|jrn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      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   rO  )r"   MSObjru   r  r   r$   r   r  r*   r\  r  r  r   r  rJ   r  r   )r\   r(  r  r'  r+  ftr  option_flagsrK  valuesr   tagr_   r_   r`   r  s  s\   
$+zSheet.handle_objc                 C   s2  t rt| jd t|dt|d| jd t }t|}| jdk rt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sJ | 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 sJ 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   rp   r   )r   r   z=== Note ===r   rO  )r  r   r$   r  ru   Noter"   r   re   rf   r!   r   r  r   r   r   rF  r  textrich_text_runlistshow
row_hidden
col_hiddenr   authorZ
_object_idrQ   r   r   r   )r\   r(  r%  r  r'  Zexpected_bytesr}  piecesr/  r0  r1  Z
dummy_rowxrH  r  r  r8  r_   r_   r`   r    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sJ |d
 dksJ 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str|j| jddd t|j| jd |S )Nr   z<HH6sHHH))rq   r   Z
horz_align)r   p   rv  )r   r  Z	lock_text)r   r   Z	just_last)ro   i   Zsecret_editr   r   r  r   rp   )Z	known_lenr   z<HH4xr   z=== MSTxo ===r   rO  r   )r"   MSTxor   r   ZrotZ	ifntEmptyZfmlar  r   r  r!   r   rG  r  r  r$   r   r   r  r   r   r   r   )r\   r(  r  r^  Zfmtsizer  ZcontrolInfoZcchTextZcbRunsZtotcharsr/  r0  r1  r}  ZncharsZutextr  ZtotrunsZrc3Z	data3_lenZdata3r+  runr_   r_   r`   r    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<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(  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    s,   &


zSheet.handle_feat11c                 C   s   d | j| jS )NzSheet {:>2}:<{}>)rl  r)   r(   r   r_   r_   r`   __repr__@  s   zSheet.__repr__)r   Nr   )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   rl   rn   rb   rw   r   r   r   __iter__r   r   r   r   r   r   colr   r-   r/   rB  r   r   r   rN  rQ  rr   ry  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                   @      e Zd ZdS )r  Nr  r  r  r_   r_   r_   r`   r  D      r  c                   @   r  )r  Nr  r_   r_   r_   r`   r  H  r  r  c                   @   r  )r  Nr  r_   r_   r_   r`   r  L  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  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 )r  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  r  r  r  r  r\  r  r  r  r  r  r_   r_   r_   r`   r  s  s    	r  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   rp   r  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errorblankc                   @   s*   e Zd ZdZg d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   rs   Nc                 C   s   || _ || _|| _d S r   r  )r\   r   r   rs   r_   r_   r`   ra   	  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))rs   
ctype_textr   r   r   r_   r_   r`   r  	  s   
zCell.__repr__r   )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  rs   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   rs   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biffhrt  r   r	   Zformular
   r   r   r   r   Ztimemachiner"  r  rI   Z
BaseObjectr   r  r  r  r  r  r   rV  rW  rT  rX  rY  rZ  r[  r_  r%   r   r   r   r
  r  rc   r   Z
empty_cellr   r  r   r_   r_   r_   r`   <module>   sh                   "#8	O;