o
    e6                    @   sV  d dl mZ d dlmZ d dlmZmZ ddlT ddlmZm	Z	 ddl
mZmZmZmZmZ ddlT d Zd ZdZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zeeeeeee e!e"eiZ#e$de%dede!de&de'de(diZ)G dd deZ*e*e$e+d Z,G d!d" d"eZ-dZ.G d#d$ d$eZ/d%S )&    )print_function)array)calcsizeunpack   )*)Formatnearest_colour_index)FMLA_TYPE_CELLFMLA_TYPE_SHAREDdecompile_formuladump_formularangename2d))show_formulasr   )show_grid_linesr   )show_sheet_headersr   )panes_are_frozenr   )show_zero_valuesr   )automatic_grid_line_colourr   )columns_from_right_to_leftr   )show_outline_symbolsr   )'remove_splits_if_pane_freeze_is_removedr   )sheet_selectedr   )sheet_visibler   )show_in_page_break_previewr   c                   @   s  e Zd ZdZdZdZdZdZi Zi Z	g Z
g Zg Zi ZdZdZdZdZdZdZdZdZdZg Zi Zi ZdZdZdZdZdZdZg Z g Z!dd Z"dd	 Z#d
d Z$dd Z%dd Z&dd Z'dd Z(dd Z)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ncols_maxdatarowx_maxdatacolx	_dimnrows	_dimncols_cell_values_cell_types_cell_xf_indexesdefcolwidthstandardwidthdefault_row_heightdefault_row_height_mismatchdefault_row_hiddendefault_additional_space_abovedefault_additional_space_belowcolinfo_maprowinfo_mapcol_label_rangesrow_label_rangesmerged_cellsrich_text_runlist_maphorizontal_page_breaksvertical_page_breaks_xf_index_stats_sheet_visibility
visibility_WINDOW2_optionssetattrfirst_visible_rowxfirst_visible_colxgridline_colour_indexgridline_colour_rgbhyperlink_listhyperlink_mapcell_note_map$cooked_page_break_preview_mag_factorcooked_normal_view_mag_factor$cached_page_break_preview_mag_factorcached_normal_view_mag_factorscl_mag_factor_ixfe_cell_attr_to_xfxutter_max_rowsutter_max_cols_first_full_rowx)selfr&   positionr-   r.   attrdefval rh   =/var/www/html/venv/lib/python3.10/site-packages/xlrd/sheet.py__init__@  s|   

	

zSheet.__init__c                 C   s8   | j r
| ||}nd}t| j| | | j| | |S )zC
        :class:`Cell` object in the given row and column.
        N)r0   cell_xf_indexCellr=   r<   rd   rowxcolxxfxrh   rh   ri   cell  s   z
Sheet.cellc                 C      | j | | S )z.Value of the cell in the given row and column.r<   rd   rn   ro   rh   rh   ri   
cell_value  s   zSheet.cell_valuec                 C   rr   )z
        Type of the cell in the given row and column.

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

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

        .. versionadded:: 0.7.2
        )lenr<   rd   rn   rh   rh   ri   row_len  s   zSheet.row_lenc                    s"    fddt tj  D S )zS
        Returns a sequence of the :class:`Cell` objects in the given row.
        c                       g | ]}  |qS rh   rq   .0ro   rn   rd   rh   ri   
<listcomp>      
zSheet.row.<locals>.<listcomp>)xranger~   r<   r   rh   r   ri   row  s   z	Sheet.rowc                 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   rq   )rd   itemrowixcolixrh   rh   ri   __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rd   rh   ri   	<genexpr>  s    z!Sheet.get_rows.<locals>.<genexpr>)ranger6   r   rh   r   ri   get_rows  s   zSheet.get_rowsc                 C   ,   |du r| j | |d S | j | || S )zM
        Returns a slice of the types of the cells in the given row.
        Nrv   rd   rn   
start_colxend_colxrh   rh   ri   	row_types     zSheet.row_typesc                 C   r   )zN
        Returns a slice of the values of the cells in the given row.
        Nrs   r   rh   rh   ri   
row_values  r   zSheet.row_valuesc                    sj   t j  }|dk r||7 }|dk rd}|du s||kr |}n|dk r(||7 } fddt||D S )zP
        Returns a slice of the :class:`Cell` objects in the given row.
        r   Nc                    r   rh   r   r   r   rh   ri   r     r   z#Sheet.row_slice.<locals>.<listcomp>)r~   r<   r   )rd   rn   r   r   ncrh   r   ri   	row_slice  s   zSheet.row_slicec                    b   j }|dk r||7 }|dk rd}|du s||kr|}n|dk r$||7 } fddt||D S )zS
        Returns a slice of the :class:`Cell` objects in the given column.
        r   Nc                    s   g | ]} | qS rh   r   r   rn   ro   rd   rh   ri   r   $  r   z#Sheet.col_slice.<locals>.<listcomp>r6   r   rd   ro   
start_rowxend_rowxnrrh   r   ri   	col_slice     zSheet.col_slicec                    r   )zQ
        Returns a slice of the values of the cells in the given column.
        r   Nc                       g | ]	}j |   qS rh   rs   r   r   rh   ri   r   6      z$Sheet.col_values.<locals>.<listcomp>r   r   rh   r   ri   
col_values)  r   zSheet.col_valuesc                    r   )zP
        Returns a slice of the types of the cells in the given column.
        r   Nc                    r   rh   rv   r   r   rh   ri   r   H  r   z#Sheet.col_types.<locals>.<listcomp>r   r   rh   r   ri   	col_types;  r   zSheet.col_typesc              	   C   s  | j dkrt| jd| j| j | jr}d }}| j}| j}| jD ]@}|\}}}}	d|  kr6|  k r6|krHn nd|  krG|	  k rG|ksSn t| jd| j| j	| ||krY|}|	|kr_|	}q|| jkrk|| _d| _
|| jkr}| |d dttdd | j dkr| j| jks| j| jk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 )
Nrz   z$tidy_dimensions: nrows=%d ncols=%d 
r   r   z6*** WARNING: sheet #%d (%r), MERGEDCELLS bad range %r
r   r   z?NOTE *** sheet %d (%r): DIMENSIONS R,C = %d,%d should be %d,%d
)r/   fprintfr)   r6   r7   rJ   ra   rb   r.   r-   rc   r3   r*   UNICODE_LITERALr:   r;   r1   r=   r<   r>   r0   r   r~   r+   r,   )rd   r   r   umaxrowsumaxcolscrangerlorhiclochir7   s_cell_typess_cell_valuess_cell_xf_indexes
s_fmt_infouboundrn   trowrlennextrarh   rh   ri   tidy_dimensionsR  st   

B





zSheet.tidy_dimensionsc              	   C   s  |d u r	| j | }d|  kr| jk sJ  J d|  kr$| jk s'J  J | j}z|d }| j|k rd| jj}| jj}	| jj}
| j	}| j
}t| j|D ]}||d  |	g  |r`|
|d  qL|| _| j| }| j| }|ru| j| }t|}|| jkr|d | _|| }|s|| || |r|| W d S |dkr|d7 }| j	| ||d < tdg| ||d < |r| j
| ||d < |||< |||< |r|||< W d S W d S    td||| jd  )Nr   r   r   r3   file)r5   rb   ra   r0   r6   r=   appendr<   r>   r+   r,   r   r~   r7   r   printr)   )rd   rn   ro   ctypevaluer|   fmt_infor   sctascvascxar+   r,   _unused	types_row
values_rowfmt_rowltr	num_emptyrh   rh   ri   r2     s`   









zSheet.put_cell_raggedc                 C   sL  |d u r	| j | }z|| j| |< || j| |< | jr%|| j| |< W d S W d S  ty   |d }|d }d|  krC| jksFJ  J d|  krR| jksUJ  J || jkrv|| _|| j	k rfd| _
n|| j
  krqdkrvn n|| _
|| j	kr| j| }| jt| }	|	dkr|| j|	  | jr| j| | j|	  | j| tdg|	  n;| jj}
| jj}| jj}| j}| j}| j}| j}t| j	|D ]}|
||  |tdg|  |r|||  q|| _	z!|| j| |< || j| |< | jr|| j| |< W Y d S W Y d S    td||| jd     td||| jd  )Nr   r   r   r   r3   r   )r5   r=   r<   r0   r>   
IndexErrorrb   ra   r7   r6   rc   r~   extendr+   r,   r   r   r   r   r)   )rd   rn   ro   r   r   r|   r   r   r   r   r   r   r   r   r+   r,   r   rh   rh   ri   r4     sl   




zSheet.put_cell_unraggedc           u      C   s|  d}|p| j dk}|p| j dk}d}d}|j}| j|_ttttttf}| j}	t	}
|j
}| j}| j}|o5|j}i }i }d}	 | \}}}|tkr^|
d|d d \}}}}|	||d || nE|tkr|
d|\}}}}|	||t|j| | |r|j|}|r|| j||f< n|tkr|
d|dd	 \}}}|tk 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   ry      r   z<HHHd   z<HHHi<HHH   lenlenz<BBz<H<HH
   r   z<H4xH4xi   zT*** NOTE: ROW record has row index %d; should have 0 <= rowx < %d -- record ignored!r   i  rx                 r   z**ROW %d %d %d
ROWz--- sh #%d, rowx=%d ---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%04xrz   r   z+unexpected special case (0x%02x) in FORMULA<dz<HHHBBz<HHHHHr%   zr*** NOTE: COLINFO record has first col index %d, last %d; should have 0 <= first <= last <= 255 -- record ignored!))r   r   hidden)r   ry   	bit1_flag)r   i   outline_level)   i   	collapsed   z**COL %d %d %d
z>COLINFO sheet #%d cols %d-%d: wid=%d xf_index=%d flags=0x%04x
z===DEFCOLWIDTHz*** ERROR *** STANDARDWIDTHSTANDARDWIDTH"   s     z<8i    c                 S   s   d|  S )NzF rh   )xrh   rh   ri   <lambda>)  s    zSheet.read.<locals>.<lambda> .zGCW:z<%dHr#   z<HxxHz<ixxHr   r   r   )   r   (   z+sheet %d(%r) DIMENSIONS: ncols=%d nrows=%d
zSHEET.READ: EOFzM*** Unexpected embedded BOF (0x%04x) at offset %d: version=0x%04x type=0x%04xz---> found EOF)	addr_sizezARRAY:zSHRFMLA (main):z<6Hz
*** WARNING: Ignoring CONDFMT (conditional formatting) record
*** in Sheet %d (%r).
*** %d CF record(s); needs_recalc_or_redraw = %d
*** Bounding box is %s
z#*** %d individual range(s):
*** %s
z, c                 s   s    | ]}t | V  qd S r   )r   )r   coordsrh   rh   ri   r     s    zSheet.read.<locals>.<genexpr>z<BBHHi   z
*** WARNING: Ignoring CF (conditional formatting) sub-record.
*** cf_type=%d, cmp_op=%d, sz1=%d, sz2=%d, flags=0x%08x
*** optional data blocks: font=%d, border=%d, pattern=%d
z <64x i i H H B 3x i 4x i i i 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:
)reldeltar   z*** formula 2:
zR*** WARNING: DEFAULTROWHEIGHT record len is 2, should be 4; assuming BIFF2 format
zR*** WARNING: DEFAULTROWHEIGHT record len is %d, should be 4; ignoring this record
zMERGEDCELLS: %d ranges
zMERGEDCELLS: pos=%d data_len=%dz	<HHHHxxHH<BBB	   )debugr"     zHWARNING *** SCL rcd sheet %d: should have 0.1 <= num/den <= 4; got %d/%dz<HHHHB  -   z<HH3sdz<HH3sHz<HH3sz<HH3sBBz<H4xH2xB   zW*** NOTE: ROW_B2 record has row index %d; should have 0 <= rowx < %d -- record ignored!   )	cell_attrrn   ro   true_xfx   )ro   ROW_B2z<BBHzg*** NOTE: COLWIDTH record has first col index %d, last %d; should have first <= last -- record ignored!z&COLWIDTH sheet #%d cols %d-%d: wid=%d
z.COLUMNDEFAULT sheet #%d cols in range(%d, %d)
zd*** NOTE: COLUMNDEFAULT record has first col index %d, last %d; should have 0 <= first < last <= 256)rn   ro   )r   r   r   r   r       z<HHBz Sheet %d (%r) missing EOF record)r/   r(   
XL_SHRFMLAXL_ARRAY
XL_TABLEOPXL_TABLEOP2	XL_ARRAY2XL_TABLEOP_B2r3   r   get_record_partsr'   r0   _rich_text_runlist_map	XL_NUMBERXL_LABELSSTXL_CELL_TEXT_sharedstringsgetrK   XL_LABELBIFF_FIRST_UNICODEunpack_stringencodingderive_encodingunpack_unicode
XL_RSTRINGunpack_string_update_pos	BYTES_ORDr   r   r~   unpack_unicode_update_posXL_RK	unpack_RKXL_MULRKXL_ROWra   r   r)   Rowinfoheighthas_default_heightr   outline_group_starts_endsr   height_mismatchhas_default_xf_indexr|   additional_space_aboveadditional_space_belowrG   r   r.   dumpXL_FORMULA_OPCODESfixed_BIFF2_xfindexr   r
   	XL_STRINGXL_STRING_B2r   	XLRDErrorstring_record_contentsXL_CELL_BOOLEANXL_CELL_ERROR
XL_BOOLERR
XL_COLINFOColinfowidthupkbitsrF   XL_DEFCOLWIDTHr?   XL_STANDARDWIDTHreprr@   XL_GCWtuplegcwjoinmaprstripreplaceXL_BLANKXL_CELL_BLANKXL_MULBLANKXL_DIMENSIONXL_DIMENSION2r6   r7   r:   r;   r&   xf_list_xf_epilogue_donexf_epiloguer-   XL_HLINKhandle_hlinkXL_QUICKTIPhandle_quicktipXL_EOFXL_OBJ
handle_objidXL_MSO_DRAWINGhandle_msodrawingetcXL_TXO
handle_txoXL_NOTEhandle_note	XL_FEAT11handle_feat11bofcodes
XL_COUNTRYhandle_countryXL_LABELRANGES)unpack_cell_range_address_list_update_posrI   rH   
XL_CONDFMTr   XL_CFr   XL_DEFAULTROWHEIGHTrA   rB   rC   rD   rE   XL_MERGEDCELLSrJ   
XL_WINDOW2rS   rT   rU   r\   r]   rV   r	   
colour_maprQ   rR   XL_SCLr^   XL_PANEvert_split_poshorz_split_poshorz_split_first_visiblevert_split_first_visiblesplit_active_panehas_pane_recordXL_HORIZONTALPAGEBREAKSrL   XL_VERTICALPAGEBREAKSrM   	XL_FORMAT
XL_FORMAT2handle_formatXL_FONTXL_FONT_B3B4handle_fontXL_STYLEhandle_style
XL_PALETTEhandle_paletteXL_BUILTINFMTCOUNThandle_builtinfmtcountXL_XF4XL_XF3XL_XF2	handle_xfXL_DATEMODEhandle_datemodeXL_CODEPAGEhandle_codepageXL_FILEPASShandle_filepassXL_WRITEACCESShandle_writeaccessXL_IXFEr_   XL_NUMBER_B2
XL_INTEGERfloatXL_LABEL_B2XL_BOOLERR_B2XL_BLANK_B2XL_EFONThandle_efont	XL_ROW_B2XL_COLWIDTHXL_COLUMNDEFAULTminXL_WINDOW2_B2zipintr   r   update_cooked_mag_factors)urd   bkDEBUGr   	blah_rowsblah_formulasr   oldposXL_SHRFMLA_ETC_ETCself_put_celllocal_unpackbk_get_record_partsbvr   do_sst_rich_textrowinfo_sharing_dicttxos	eof_foundrcdata_lendatarn   ro   r|   dsstindexrunliststrgposnrtr   	mulrk_rowmulrk_first
mulrk_lastbits1bits2keyr
result_strflagsr
  fmlalen
first_byte	gotstringrc2	data2_lendata2row1xrownxcol1xcolnxarray_flagstokslennfmlas_unused_lenr   is_errcelltyc
first_colx	last_colxiguffrE  bitsjshowgcwnitemsresult	mul_firstmul_last	dim_tuple	saved_objsaved_obj_idtxoversionboftypecodenum_CFsneeds_recalcbrowx1browx2bcolx1bcolx2olistcf_typecmp_opsz1sz2
font_block
bord_block
patt_blockfont_heightfont_optionsweight
escapement	underlinefont_colour_indextwo_bitsfont_escfont_underl
font_styleposture	font_canccancellationfmla1fmla2optionsrf   _unused_defvalnumden
num_breaksrp   r>  offset
attr_namescharrh   rh   ri   read  s$  


























&




























	


		












"

(



"

(















"


















&




          8
z
Sheet.readc                 C   s   | j }| j}|dkd }tdd|d   |d | d }|}|dk r*|jp)| }d}td}		 |dkrEt|| d@ }
d|
 }|d7 }t||d  |}|	|7 }	|t|7 }||kr^|	S ||krld	||f }t	||
 \}}}|tkr}t	d
| d}q1)Nr   r   <BHr   r#   r   )latin_1	utf_16_lez,STRING/CONTINUE: expected %d chars, found %dz2Expected CONTINUE record; found record-type 0x%04X)r'   r&   r   r  r   r   r$  unicoder~   r7  r  XL_CONTINUE)rd   r  r  r  r   nchars_expectedr  encnchars_foundr  flagchunkmsgr  r  rh   rh   ri   r8    s>   "zSheet.string_record_contentsc                 C   s   t p| jdk}| jr<| jd u rd| _n| j| _| j}d|  kr$dks7n |r4td| j| jf | jd | j}|| _	d S | jd u rEd| _	n| j| _	| j
}|sQd}nd|  kr[dksnn |rktd| j| j
f | jd | j	}|| _d S )	Nr   r"   r   r  zGWARNING *** WINDOW2 rcd sheet %d: Bad cached_normal_view_mag_factor: %dr   r!   zNWARNING *** WINDOW2 rcd sheet %r: Bad cached_page_break_preview_mag_factor: %r)r  r/   r   r^   rZ   r]   r   r.   r)   r[   r\   )rd   r   zoomrh   rh   ri   r    s@   	





zSheet.update_cooked_mag_factorsc           	      C   s   d}|p| j dk}| jdkr:| jjr3|d ur|}nt|d d@ }|dkr1| jd u r.td| j}|S d | _| j_t|d d@ }|dksHJ | j|}|d urT|S |r_t	| j
d||| | jjsstdD ]}| jd	|d
k d qg| j|d}|S )Nr   ry   r   ?   z?BIFF2 cell record has XF index 63 but no preceding IXFE record.r   zNew cell_attr %r at (%r, %r)
r   s   @  rx   )r
  style)r
  )r/   r'   r&   rO  r$  r_   r7  r`   r  r   r)   r   insert_new_BIFF20_xf)	rd   r
  rn   ro   r  r  r   rp   xfx_slotrh   rh   ri   r4  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   ry   z=== Faked XF %d ===z======r   footerz1ERROR *** XF[%d] unknown format key (%d, 0x%04x)
General)r/   r&   r~   rO  fake_XF_from_BIFF20_cell_attrr|   r   r2  r)   
format_key
format_mapr   r   FUNr   format_listFNUXL_CELL_NUMBERFGEFDTXL_CELL_DATEFTXtyper5   r`   )rd   r
  r  r  r   r&   rp   xfr  fmtcellty_from_fmttyr  rh   rh   ri   r  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  r     r   ))r   r    cell_locked)r      formula_hiddenr   ))r   left)r   right)r   top)r    bottom)r   r   r   _colour_index_line_styler2     r  r   )r   r   ry   )formatfont	alignmentborder
background
protection__flag)
formattingr+  r,  r-  r.  r/  r=  indent_levelshrink_to_fittext_directionr>  diag_up	diag_downdiag_colour_indexdiag_line_styler?  r@  r   r  
font_indexr?  	hor_alignrR   fill_patternbackground_colour_indexpattern_colour_indexparent_style_index
vert_alignrotation)rd   r
  r  r+  r,  r-  r.  r/  r(  	prot_bitsfont_and_format
halign_etcmasksidecolour_index
line_stylebg
attr_stems	attr_stemrf   rh   rh   ri   r  r  sL   


z#Sheet.fake_XF_from_BIFF20_cell_attrc                 C   s   | j stdd S )Nz9Feature requires open_workbook(..., formatting_info=True))r0   r7  r   rh   rh   ri   r{     s   zSheet.req_fmt_infoc                 C   s   |    | jdkr | j|d}|dur|jS | jdur| jS n5| jdkrB| j| r3| jdur2| jS n"| j|d}|durA|jS n| jdkrU| j|d}|durU|jS | jdur_| jd S dS )a  
        Determine column display width.

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

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

        .. versionadded:: 0.6.1
        r#   Nr   r   r%   i   )r{   r'   rF   r  r>  r@   rE  r?   )rd   ro   colinforh   rh   ri   computed_column_width  s0   







zSheet.computed_column_widthc              
   C   s@  t r	td| jd t|}t }td|d d \|_|_|_|_	}}}|dks*J |dks0J t r;td| | jd d}dd	 }|d
@ rM|||\|_
}|d@ rY|||\|_}|d@ r|d@ 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   ry   UTF-16ler   )r   r  )bufofsnbucrh   rh   ri   get_nul_terminated_unicode  s
   z6Sheet.handle_hlink.<locals>.get_nul_terminated_unicoder   r2  r   r%   z<16sr   z	clsid=%r
s   y  Kurlr_  r   r   r`  zinitial url=%r len=%d
 z	endpos=%dry   z9url=%r
extra=%r
nbytes=%d true_nbytes=%d extra_nbytes=%d
)   r   s               Fz
local filez<Hir   s   ..\zuplevels=%d shortpath=%r
rh  <izsz=%dz*** unknown clsid %r
ic  i  uncik  r   workbookunknownz... object dump ...r   zoffset=%d record_size=%dz=*** WARNING: hyperlink at R%dC%d has %d extra data bytes: %s
z:Bug or corrupt file, send copy of input file for debugging)r  r   r)   r~   	Hyperlinkr   frowxlrowxfcolxlcolxdesctargetr   r   r'  r  url_or_pathfindtextmarkr2  REPRr7  rW   r   r   rX   )rd   r  record_sizer   guid0dummyr  r  re  clsidnbytesendpostrue_nbytesextra_nbytes
extra_datauplevels	shortpathszxlextended_pathrn   ro   rh   rh   ri   rS    s   (







	zSheet.handle_hlinkc                 C   s   t d|d d \}}}}}|tksJ | jsJ | jd }||||f|j|j|j|jfks0J |dd  dks:J t|dd d|_d S )N<5Hr   r   r   s     r  )	r   rT  rW   rn  ro  rp  rq  r  quicktip)rd   r  rcxrn  ro  rp  rq  r   rh   rh   ri   rU  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   rx   r   r   basefoutz.fbt:0x%04X  inst:%d  ver:0x%X  cb:%d (0x%04X)
i  r	  z<Hiiiii  z=== MSODrawing ===r   r  )OBJ_MSO_DEBUGr'   
MSODrawingr   hex_char_dumpr)   r   
anchor_unkanchor_colx_loanchor_rowx_loanchor_colx_hianchor_rowx_hir2  )rd   recidr  r  r  or  tmpfbtcbverinstndbrh   rh   ri   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     scrollbar_flag)r  i    autofill)r   r$   autoliner  z'Unexpected data at end of OBJECT recordz*** ERROR %s
r   r  r   )r   r  maxincpage
scrollbar_r  z.*** OBJ record has ft==0x0D 'notes' structure
   z=== MSOBj ===r   r  )r'   MSObjr~   r  r   r)   r   r  r/   r'  rY  r?  r7  r  rR   r  r2  )rd   r  r  r  r  ftr  option_flagsr  valuesr   tagrh   rh   ri   rX  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   ry   r   )r   r   z=== Note ===r   r  )r  r   r)   r  r~   Noter'   r   rn   ro   r&   r  r^  r   r  r   r  rF  textrich_text_runlistshow
row_hidden
col_hiddenr   author
_object_idrY   r%  r2  r  )rd   r  r  r  r  expected_bytesrc  piecesr  r  r  
dummy_rowxr  r  r}  r  rh   rh   ri   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))rz   r   
horz_align)r   p   rQ  )r  r  	lock_text)r   r$   	just_last)rx   i   secret_editr   r   r  r   ry   )	known_lenr   z<HH4xr   z=== MSTxo ===r   r  r   )r'   MSTxor   r   rot	ifntEmptyfmlar?  r   r  r&   r  r  r  r  r)   r$  r%  r  r   r   r2  r   )rd   r  r  r)  fmtsizer  controlInfocchTextcbRunstotcharsr  r  r  rc  ncharsutextr}  totrunsrc3	data3_lendata3r  runrh   rh   ri   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)   )rd   r  rtgrbitFrtRef0isffHdr	reserved0cref
cbFeatData	reserved1Ref1ltidList	crwHeader	crwTotalsidFieldNextcbFSDatarupBuildunusedShort	listFlagslPosStmCache
cbStmCachecchStmCachelemrgbHashParamcchNamerh   rh   ri   ra    s,   &


zSheet.handle_feat11c                 C   s   d | j| jS )NzSheet {:>2}:<{}>)r;  r.   r-   r   rh   rh   ri   __repr__@  s   zSheet.__repr__)r   Nr   )r   )F__name__
__module____qualname____doc__r-   r&   r6   r7   rF   rG   rH   rI   rJ   rK   r?   r@   rA   rB   rC   rD   rE   rP   rE  rW   rX   rY   ro  rp  rq  rr  rs  rt  rL   rM   rj   rq   ru   rw   rk   r   r   r   r   __iter__r   r   r   r   r   r   colr   r2   r4   r  r8  r  r4  r  r  r{   r^  rS  rU  r[  rX  r_  r]  ra  r  rh   rh   rh   ri   r   2   s    		T
	





=;K     V
-
"
4(p	(8320r   c                   @      e Zd ZdS )r  Nr  r  r  rh   rh   rh   ri   r  D      r  c                   @   r  )r  Nr  rh   rh   rh   ri   r  H  r  r  c                   @   r  )r  Nr  rh   rh   rh   ri   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  ro   r  r  rn   r  r  rh   rh   rh   ri   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 )rm  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  rn  ro  rp  rq  r'  rt  rr  rs  rv  r  rh   rh   rh   ri   rm  s  s    	rm  c                 C   s|   t | d }|d@ r td| \}|dL }|d@ r|d S t|S tddtt|d@  | dd	  \}|d@ r<|d S |S )
Nr   ry   ri  r   g      Y@r   s          r   )r$  r   r  BYTES_LITERALchr)rk_strr  ir  rh   rh   ri   r'    s   (r'  emptyr  r.   xldateboolerrorblankc                   @   s*   e Zd ZdZg dZdddZdd ZdS )	rl   a  
    Contains the data for one cell.

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

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

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

    .. raw:: html

        <table border="1" cellpadding="7">
        <tr>
        <th>Type symbol</th>
        <th>Type number</th>
        <th>Python value</th>
        </tr>
        <tr>
        <td>XL_CELL_EMPTY</td>
        <td align="center">0</td>
        <td>empty string ''</td>
        </tr>
        <tr>
        <td>XL_CELL_TEXT</td>
        <td align="center">1</td>
        <td>a Unicode string</td>
        </tr>
        <tr>
        <td>XL_CELL_NUMBER</td>
        <td align="center">2</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_DATE</td>
        <td align="center">3</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_BOOLEAN</td>
        <td align="center">4</td>
        <td>int; 1 means TRUE, 0 means FALSE</td>
        </tr>
        <tr>
        <td>XL_CELL_ERROR</td>
        <td align="center">5</td>
        <td>int representing internal Excel codes; for a text representation,
        refer to the supplied dictionary error_text_from_code</td>
        </tr>
        <tr>
        <td>XL_CELL_BLANK</td>
        <td align="center">6</td>
        <td>empty string ''. Note: this type will appear only when
        open_workbook(..., formatting_info=True) is used.</td>
        </tr>
        </table>
    r   r   r|   Nc                 C   s   || _ || _|| _d S r   r  )rd   r   r   r|   rh   rh   ri   rj   	  s   
zCell.__init__c                 C   s6   | j d u rdt| j | jf S dt| j | j| j f S )Nz%s:%rz%s:%r (XF:%r))r|   
ctype_textr   r   r   rh   rh   ri   r  	  s   
zCell.__repr__r   )r  r  r  r  	__slots__rj   r  rh   rh   rh   ri   rl     s
    A
rl   r   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )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>  r|   r   r   r   r   rh   rh   rh   ri   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/  r|   r0  r1  c                 C   s@   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d S r   r  r   rh   rh   ri   rj   x	  s   
zRowinfo.__init__c              
   C   s,   | j | j| j| j| j| j| j| j| j| j	f
S r   r  r   rh   rh   ri   __getstate__	  s   zRowinfo.__getstate__c                 C   s0   |\
| _ | _| _| _| _| _| _| _| _| _	d S r   r  )rd   staterh   rh   ri   __setstate__	  s   zRowinfo.__setstate__N)	r  r  r  r  
_USE_SLOTSr   rj   r  r  rh   rh   rh   ri   r*  b	  s    (r*  N)0
__future__r   r   structr   r   biffhrC  r   r	   formular
   r   r   r   r   timemachiner  r  rQ   
BaseObjectr   r  r  r  r  rm  r'  r!  r"  r  r#  r$  r%  r&  r*  r*   r  r9  r:  rK  r  rl   r   
empty_cellr=  r  r*  rh   rh   rh   ri   <module>   sh                   "#8	O;