
mR\                @   sW  d  d l  m Z d  d l m Z d  d l m Z m Z d d l Td d l Td d l m	 Z	 m
 Z
 m Z m Z m Z d d l m Z m Z d  Z d  Z d d  f d	 d f d
 d f d d  f d d f d d f d d  f d d f d d  f d d  f d d  f d d  f f Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z d  d!   Z i e e 6e e 6e e 6e  e! 6e e" 6Z# i d" e$ 6d# e% 6d$ e 6d% e  6d& e& 6d' e' 6d( e( 6Z) Gd) d*   d* e  Z* e* e$ e+ d+   Z, Gd, d-   d- e  Z- d Z. Gd. d/   d/ e  Z/ d0 S)1    )print_function)array)unpackcalcsize   )*)dump_formuladecompile_formularangename2dFMLA_TYPE_CELLFMLA_TYPE_SHARED)nearest_colour_indexFormatshow_formulasshow_grid_linesshow_sheet_headerspanes_are_frozenshow_zero_valuesautomatic_grid_line_colourZcolumns_from_right_to_leftZshow_outline_symbolsZ'remove_splits_if_pane_freeze_is_removedZsheet_selectedZsheet_visibleshow_in_page_break_previewc               @   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 f 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 d d  Z* d d d d  Z+ d d d d  Z, d d d d  Z- d d d d  Z. d d d  d!  Z/ e- Z0 d" d#   Z1 d$ d%   Z2 d& d'   Z3 d( d)   Z4 d* d+   Z5 d, d-   Z6 d d. d/  Z7 d d0 d1  Z8 d d2 d3  Z9 d4 d5   Z: d6 d7   Z; d8 d9   Z< d: d;   Z= d< d=   Z> d> d?   Z? d@ dA   Z@ dB dC   ZA dD dE   ZB d S)F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      c             C   s  | |  _  | j |  _ | |  _ | j |  _ t d t g  |  _ t d d g  |  _ | |  _ | |  _	 | j
 |  _
 | j |  _ | j |  _ |  j r |  j |  _ n |  j |  _ | j |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ g  |  _ g  |  _ g  |  _ d  |  _ d  |  _ d  |  _ d |  _ d |  _ d |  _ d |  _  i  |  _! i  |  _" g  |  _# g  |  _$ g  |  _% i  |  _& g  |  _' g  |  _( d d d d g |  _) | j* | |  _+ x$ t, D] \ } } t- |  | |  qWd |  _. d |  _/ d |  _0 d  |  _1 g  |  _2 i  |  _3 i  |  _4 d |  _5 d |  _6 d |  _7 d |  _8 d  |  _9 d  |  _: i  |  _; |  j d k rwd	 |  _< n	 d
 |  _< d |  _= d |  _> d  S)NBhr   r   @   <   d   P   i   i @  r   r   r   r   )?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^   ./var/www/dbchiro/venv/build/xlrd/xlrd/sheet.py__init__;  s|    																																														zSheet.__init__c             C   sJ   |  j  r |  j | |  } n d } t |  j | | |  j | | |  S)zC
        :class:`Cell` object in the given row and column.
        N)r*   cell_xf_indexCellr5   r4   )r[   rowxcolxxfxr^   r^   r_   cell  s    	z
Sheet.cellc             C   s   |  j  | | S)z.Value of the cell in the given row and column.)r4   )r[   rc   rd   r^   r^   r_   
cell_value  s    zSheet.cell_valuec             C   s   |  j  | | S)z
        Type of the cell in the given row and column.

        Refer to the documentation of the :class:`Cell` class.
        )r5   )r[   rc   rd   r^   r^   r_   	cell_type  s    zSheet.cell_typec             C   s   |  j    |  j | | } | d k r< |  j d d 7<| Sy5 |  j | j } | d k rp |  j d d 7<| SWn t k
 r Yn Xy> |  j | j } | d	 k r d } n  |  j d d 7<| SWn' t k
 r |  j d d 7<d SYn Xd S)
z
        XF index of the cell in the given row and column.
        This is an index into :attr:`~xlrd.book.Book.xf_list`.

        .. versionadded:: 0.6.1
        r   r            Nr   r   r   )req_fmt_infor6   rF   r?   xf_indexKeyErrorr>   )r[   rc   rd   re   r^   r^   r_   ra     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
        )lenr4   )r[   rc   r^   r^   r_   row_len  s    zSheet.row_lenc                s-      f d d   t  t  j     D S)zS
        Returns a sequence of the :class:`Cell` objects in the given row.
        c                s"   g  |  ] }  j    |   q Sr^   )rf   ).0rd   )rc   r[   r^   r_   
<listcomp>  s   	zSheet.row.<locals>.<listcomp>)xrangero   r4   )r[   rc   r^   )rc   r[   r_   row  s    z	Sheet.rowc                s      f d d   t    j  D S)z3Returns a generator for iterating through each row.c             3   s   |  ] }   j  |  Vq d  S)N)rt   )rq   index)r[   r^   r_   	<genexpr>  s    z!Sheet.get_rows.<locals>.<genexpr>)ranger0   )r[   r^   )r[   r_   get_rows  s    zSheet.get_rowsc             C   s6   | d k r! |  j  | | d  S|  j  | | |  S)zM
        Returns a slice of the types of the cells in the given row.
        N)r5   )r[   rc   
start_colxend_colxr^   r^   r_   	row_types  s    zSheet.row_typesc             C   s6   | d k r! |  j  | | d  S|  j  | | |  S)zN
        Returns a slice of the values of the cells in the given row.
        N)r4   )r[   rc   ry   rz   r^   r^   r_   
row_values  s    zSheet.row_valuesc                s   t   j    } | d k  rA | | 7} | d k  rA d } qA n  | d k sY | | k rb | } n | d k  r{ | | 7} n     f d d   t | |  D S)zP
        Returns a slice of the :class:`Cell` objects in the given row.
        r   Nc                s"   g  |  ] }  j    |   q Sr^   )rf   )rq   rd   )rc   r[   r^   r_   rr     s   	z#Sheet.row_slice.<locals>.<listcomp>)ro   r4   rs   )r[   rc   ry   rz   ncr^   )rc   r[   r_   	row_slice  s    
	zSheet.row_slicec                s    j  } | d k  r7 | | 7} | d k  r7 d } q7 n  | d k sO | | k rX | } n | d k  rq | | 7} n     f d d   t | |  D S)zS
        Returns a slice of the :class:`Cell` objects in the given column.
        r   Nc                s"   g  |  ] }  j  |     q Sr^   )rf   )rq   rc   )rd   r[   r^   r_   rr     s   	z#Sheet.col_slice.<locals>.<listcomp>)r0   rs   )r[   rd   
start_rowxend_rowxnrr^   )rd   r[   r_   	col_slice  s    	
	zSheet.col_slicec                s    j  } | d k  r7 | | 7} | d k  r7 d } q7 n  | d k sO | | k rX | } n | d k  rq | | 7} n     f d d   t | |  D S)zQ
        Returns a slice of the values of the cells in the given column.
        r   Nc                s!   g  |  ] }  j  |    q Sr^   )r4   )rq   rc   )rd   r[   r^   r_   rr   !  s   	z$Sheet.col_values.<locals>.<listcomp>)r0   rs   )r[   rd   r   r   r   r^   )rd   r[   r_   
col_values  s    	
	zSheet.col_valuesc                s    j  } | d k  r7 | | 7} | d k  r7 d } q7 n  | d k sO | | k rX | } n | d k  rq | | 7} n     f d d   t | |  D S)zP
        Returns a slice of the types of the cells in the given column.
        r   Nc                s!   g  |  ] }  j  |    q Sr^   )r5   )rq   rc   )rd   r[   r^   r_   rr   3  s   	z#Sheet.col_types.<locals>.<listcomp>)r0   rs   )r[   rd   r   r   r   r^   )rd   r[   r_   	col_types%  s    	
	zSheet.col_typesc          	   C   s  |  j  d k r. t |  j d |  j |  j  n  d rw|  j rwd } } |  j } |  j } x |  j D] } | \ } } } }	 d | k o | k  o | k n s d | k o |	 k  o | k n r t |  j d |  j |  j	 |  n  | | k r| } n  |	 | k rc |	 } qc qc W| |  j k r?| |  _ d	 |  _
 n  | |  j k rw|  j | d d t t d  d
  qwn  |  j  d k r|  j |  j k s|  j |  j k rt |  j d |  j |  j	 |  j |  j |  j |  j  n  |  j s|  j }
 |  j } |  j } |  j } |  j } |  j
 d k r2|  j } n	 |  j
 } x t |  D] } | | } t |  } |
 | } | d k rHt d  g | | | | d   <|  j | | | d   <| r|  j | | | | d   <qqHqHWn  d  S)Nrk   z$tidy_dimensions: nrows=%d ncols=%d 
r   r   z6*** WARNING: sheet #%d (%r), MERGEDCELLS bad range %r
rj   r   z?NOTE *** sheet %d (%r): DIMENSIONS R,C = %d,%d should be %d,%d
r   r   )r)   fprintfr#   r0   r1   rB   rX   rY   r(   r'   rZ   r-   r$   UNICODE_LITERALr2   r3   r+   r5   r4   r6   r*   rs   ro   r%   r&   )r[   r   r}   ZumaxrowsZumaxcolsZcrangeZrloZrhiZclochir1   Zs_cell_typesZs_cell_valuesZs_cell_xf_indexesZ
s_fmt_infoZuboundrc   trowZrlennextrar^   r^   r_   tidy_dimensions<  sh    	
		((	 	 	)$								

!zSheet.tidy_dimensionsc             C   sx  | d  k r |  j  | } n  d | k o6 |  j k  n sA t  d | k o[ |  j k  n sf t  |  j } y| d } |  j | k  r|  j j } |  j j }	 |  j	 j }
 |  j
 } |  j } xI t |  j |  D]5 } | | d  |	 g   | r |
 | d  q q W| |  _ n  |  j | } |  j | } | rI|  j	 | } n  t |  } | |  j k rt| d |  _ n  | | } | s| j |  | j |  | r| j |  n  d  S| d k r%| d 7} |  j
 | | | d   <t d  g | | | d   <| r%|  j | | | d   <q%n  | | | <| | | <| rL| | | <n  Wn$ t d | | d |  j   Yn Xd  S)Nr   r   r   r-   file)r/   rY   AssertionErrorrX   r*   r0   r5   appendr4   r6   r%   r&   rs   ro   r1   r   printr#   )r[   rc   rd   ctypevaluerm   fmt_infor   sctascvascxar%   r&   _unusedZ	types_rowZ
values_rowZfmt_rowZltrZ	num_emptyr^   r^   r_   r,   x  s\    %%	
		




zSheet.put_cell_raggedc             C   s  | d  k r |  j  | } n  yC | |  j | | <| |  j | | <|  j r^ | |  j | | <n  Wnt k
 r| d } | d } d | k o |  j k n s t  d | k o |  j k n s t  | |  j	 k r.| |  _	 | |  j
 k  r d |  _ q.| |  j k od k n r.| |  _ q.n  | |  j
 k r|  j | } |  j	 t |  }	 |	 d k ru| j |  j |	  |  j r|  j | j |  j |	  n  |  j | j t d  g |	  qun |  j j }
 |  j j } |  j j } |  j } |  j	 } |  j } |  j } xV t |  j
 |  D]B } |
 | |  | t d  g |  | r&| | |  q&q&W| |  _
 yC | |  j | | <| |  j | | <|  j r| |  j | | <n  Wn$ t d | | d |  j   Yn XYn$ t d | | d |  j   Yn Xd  S)	Nr   rj   r   r   r-   r   r   r   )r/   r5   r4   r*   r6   
IndexErrorrY   r   rX   r1   r0   rZ   ro   extendr%   r&   r   r   rs   r   r#   )r[   rc   rd   r   r   rm   r   r}   r   r   r   r   r   r   r%   r&   r   r^   r^   r_   r.     sd    	

%%		'						zSheet.put_cell_unraggedc       v      C   s9%  d } | p |  j  d k } | p- |  j  d k } d o9 | } d } | j } |  j | _ t t t t t t f } |  j }	 t	 }
 | j
 } |  j } |  j } | o | j } i  } i  } d } x6$|   \ } } } | t k r|
 d | d  d   \ } } } } |	 | | d  | |  q | t k r|
 d |  \ } } } } |	 | | t | j | |  | r$| j j |  } | r| |  j | | f <qq$q | t k r)|
 d | d d   \ } } } | t k  rt | d | j p| j   d	 d } n t | d d	 d } |	 | | t | |  q | t k r|
 d | d d   \ } } } | t k  rt | d | j p~| j   d	 d \ } } t | |  } | d
 7} g  } xB t |  D]4 } | j t	 d | | | d    | d 7} qW| t |  k st   n t! | d d	 d \ } } t	 d | | | d   d } | d 7} g  } xB t |  D]4 } | j t	 d | | | d    | d 7} qiW| t |  k st   |	 | | t | |  | |  j | | f <q | t" k rB|
 d | d  d   \ } } } t# | d d   } |	 | | d  | |  q | t$ k r|
 d | d d   \ } }  |
 d | d d    \ }! d } x] t |  |! d
  D]d } |
 d | | | d   \ } t# | | d | d   } | d 7} |	 | | d  | |  qWq | t% k r| s&q n  |
 d | d d   \ } }" }# d | k ob|  j& k  n st' d | |  j& f d |  j( q n  |" |# f }$ | j |$  }% |% d  k rt)   | |$ <}% |" d @|% _* |" d ?d
 @|% _+ |# d @|% _, |# d ?d
 @|% _- |# d ?d
 @|% _. |# d ?d
 @|% _/ |# d ?d
 @|% _0 |# d ?d @|% _1 |# d ?d
 @|% _2 |# d ?d
 @|% _3 |% j0 sd |% _1 qn  |% |  j4 | <d r|% j1 d k rt5 |  j( d |  j6 | |% j1  n  | r$t' d | |" |# d |  j( |% j7 |  j( d d |  j6 | f q$q | t8 k r| d k r]|
 d | d d   \ } } } }& }' d }( d  }) n | d! k r|
 d | d d   \ } } } }& }' d }( d }) nI |
 d" | d d   \ } } }* }& }' |  j9 |* | |  } d
 }( d }) | rZt5 |  j( d# | |  |
 d | d  d$   d }+ t: | | d$ d   |+ t; d% | d& | d' d
 d( | n  |& d d)  d* k r
t |& d  }, |, d k rN
d }- | j
   \ }. }/ }0 |. t< k s|. t= k rd
 }- n|. t k r*	|
 d+ |0 d  d   \ }1 }2 }3 }4 }5 }6 | r	t5 |  j( d, |1 |2 |3 |4 |5  q	n |. t k r	|
 d- |0 d  d   \ }1 }2 }3 }4 }7 }6 | r	t5 |  j( d. |1 |2 |3 |4 |7  t: | |0 d d   |6 t> d' d
 d% | d& | d( | q	n |. | k r	t? d/ |.   n  |- s#
| j
   \ }. }8 }0 |. t< t= f k r#
t? d0 |.   q#
n  |  j@ |0  } |  j | | t | |  q|, d
 k r
t |& d  }9 |	 | | tA |9 |  q|, d k r
t |& d  }9 |	 | | tB |9 |  q|, d1 k r
|	 | | t d2 |  qt? d3 |,   q$|
 d4 |&  d } |	 | | d  | |  q | tC k ry|
 d5 | d  d)   \ } } } }9 }: tA tB f |: }; |	 | | |; |9 |  q | tD k r| sq n  tE   }< |
 d6 | d  d   \ }= }> |< _F |< _1 }' d |= k o|> k od7 k n st' d8 |= |> f d |  j( ~< q n  tG |< |' d  x8 t |= |> d
  D]# } | d@ k rOPn  |< |  jH | <q9W| r$t5 |  j( dA |  j6 |= |> |< jF |< j1 |'  |< j7 |  j( d dB q$q | tI k r|
 d | d  d   \ |  _J q | tK k r7| d k rt' dC | tL |  d |  j( n  |
 d | d  d   \ |  _M q | tN k r| sOq n  | dD k sat   | d d  dE k s}t   t	 dF | d dD   }? g  }@ x@ |? D]8 }A x/ t dG  D]! }B |@ j |A d
 @ |A d
 L}A qWqWtO |@  |  _P q | tQ k rD| s	q n  |
 d | d  d   \ } } } |	 | | tR d2 |  q | tS k r| s\q n  | d
 ?}C |
 dH |C |  }D |D d  d  \ } }E |D d }F |C |F d |E k st   d } x3t |E |F d
  D]* } |	 | | tR d2 |D |  | d
 7} qWq | tT k s| tU k r| d k r(q n  | dI k  rP|
 dJ | d d)   }G n |
 dK | d d=   }G d \ |  _V |  _W |G \ |  _X |  _Y | d k r|  jZ j[ r|  jZ j\ r|  jZ j]   n  | r$t5 |  j( dN |  j6 |  j^ |  jY |  jX  q$q | t_ k r|  j` |  q | ta k r.|  jb |  q | tc k rfd } | r\t' dO d |  j( n  d
 } Pq | td k r|  je |  }H |H r|H jf }I q$d  }I q | tg k r|  jh | | |  q | ti k r|  jj |  }J |J r$|I r$|J | |I <d  }I q$q | tk k r|  jl | |  q | tm k r6|  jn |  q | to k r|
 d | d d   \ }K }L |L dG k rt' dP | | j | d |K |L f d |  j( n  x) | j
   \ }M } } |M tc k rPqqW| r$t' dQ d |  j( q$q | tp k r| jq |  q | tr k rhd } ts |  jt | | | dR d) } ts |  ju | | | dR d) } | | k s$t   q | t k r|
 d+ | d  d   \ }1 }2 }3 }4 }5 }6 | r$t' dS |1 |2 |3 |4 |5 d |  j( q$q | t k rg|
 d- | d  d   \ }1 }2 }3 }4 }7 }6 | r$t' dT |1 |2 |3 |4 |7 d |  j( t: | | d d   |6 t> d' d
 d% | d& | d( | q$q | tv k rr| sq n  | dI k st   t	 dU | d d=   \ }N }O }P }Q }R }S |  j  d
 k r
t5 |  j( dV |  j6 |  j^ |N |O tw |P |Q d
 |R |S d
   n  g  }T ts |T | d= | dR d) } |  j  d
 k r$t5 |  j( dW t |T  dX jx dY dZ   |T D   q$q | ty k r| sq n  t	 d[ | d d   \ }U }V }W }X }' |' d\ ?d
 @}Y |' d ?d
 @}Z |' d ?d
 @}[ |  j  d
 k rt5 |  j( d] |U |V |W |X |' |Y |Z |[ 
 n  d= } |Y rt	 d^ | | | d_   \	 }\ }] }^ }_ }` }a }b }c }d |b d
 k d
 @}e |] d
 k d
 @}f |b d k d
 @}g |] d k d
 @}h |  j  d
 k rt5 |  j( d` |\ |^ |_ |` |a |c |d |e |f |g |h  n  | d_ 7} n  |Z r| d) 7} n  |[ r| d 7} n  | | | |W  }i | |W 7} | rl|W rlt5 |  j( da  tz | |i |W | db d d' d
 n  | | | |X  }j | |X 7} | | k st   | r$|X r$t5 |  j( dc  tz | |j |X | db d d' d
 q$q | t{ k r| d k rt	 d | d  d   \ }A |  _| nS | d k rTt	 d |  \ |  _| d }A t5 |  j( dd  n d }A t5 |  j( de |  |A d
 @|  _} |A d
 ?d
 @|  _~ |A d ?d
 @|  _ |A d1 ?d
 @|  _ q | t k r/| sq n  ts |  j | d | dR d) } | r
t5 |  j( df | d d)  n  | | k s$t  dg | | f   q | t k r?| dI k r| d k rt	 dh | d  d   \ }k |  _ |  _ |  _ |  _ |  _ nw | d! k st   t	 d | d  d   \ }k |  _ |  _ t	 di | d dj   |  _ t |  jZ j |  j dk d |  _ xt D]* \ }l }m t |  |l |k d
 @ |k d
 L}k qWq | t k rt	 d |  \ }n }o d }D |o r}|n dl |o }D n  d |D k odm k n s| s|  j  d k rt' dn |  j6 |n |o f d |  j( n  dl }D n  |D |  _ q | t k r8t	 do | d  dj   \ |  _ |  _ |  _ |  _ |  _ d
 |  _ q | t k rA| sPq n  |
 d | d  d   \ }p |p d d | dI k d | k st   d } | dI k  rx | | k  r|  j j |
 d | | | d   d d d@ f  | d 7} qWq$x	| | k  r=|  j j |
 d | | | d    | d 7} qWq | t k rJ| sYq n  |
 d | d  d   \ }p |p d d | dI k d | k st   d } | dI k  rx | | k  r|  j j |
 d | | | d   d d dp f  | d 7} qWq$x| | k  rF|  j j |
 d | | | d    | d 7} qWq | dq k r | t k sn| t k r| j | |  q$| t k s| t k r| j |  q$| t k r|  jZ j\ s|  jZ j]   n  | j |  q$| t k r| j |  q$| t k r| j |  q$| t k s=| t k s=| t k rM| j |  q$| t k ri| j |  q$| t k r| j |  q$| t k r| j |  q$| t k r| j |  q$| t k r|
 d |  d |  _ q$| t k r1|
 dr |  \ } } }* } |	 | | d  | |  j9 |* | |   q$| t k r|
 ds |  \ } } }* } |	 | | d  t |  |  j9 |* | |   q$| t k r|
 dt | d d   \ } } }* t | d | j p| j   d	 d
 } |	 | | t | |  j9 |* | |   q$| t k re|
 du |  \ } } }* }9 }: tA tB f |: }; |	 | | |; |9 |  j9 |* | |   q$| t k r| s}q n  |
 dt | d  d   \ } } }* |	 | | tR d2 |  j9 |* | |   q$| t k r| j |  q$| t k r!| sq n  |
 dv | d dw   \ } }" }# d | k o7 |  j& k  n sb t' dx | |  j& f d |  j( q n  |# d
 @su d } nx | dy k r |
 d | d dy   d }q |  j9 dz d  d{ | d| d d} |q  } n( | d~ d  }* |  j9 |* | d| d } |" |# | f }$ | j |$  }% |% d  k r_!t)   | |$ <}% |" d @|% _* |" d ?d
 @|% _+ |# d
 @|% _0 | |% _1 n  |% |  j4 | <d r!|% j1 d k r!t5 |  j( d |  j6 | |% j1  n  | r$t' d | |" d |  j( |% j7 |  j( d d |  j6 | f q$q$| t k r"| s"q n  |
 d | d  d   \ }= }> }r |= |> k sT"t' d |= |> f d |  j( q n  xY t |= |> d
  D]D } | |  jH k r"|  jH | }< n tE   }< |< |  jH | <|r |< _F qh"W| r$t5 |  j( d |  j6 |= |> |r  q$q$| t k r)$| s"q n  |
 d | d  d   \ }= }> | r7#t5 |  j( d |  j6 |= |>  n  d |= k oY#|> k  oY#d7 k n s#t' d |= |> f d |  j( t |> d7  }> n  x\t |= |>  D] } d d1 | |= }s | |s |s d1  }* |  j9 |* d{ d d| | } | |  jH k r$|  jH | }< n tE   }< |< |  jH | <| |< _1 q#Wq$| t k r$d }t xC t |t | d d   D]( \ }l }u t |  |l t |u d k   qU$Wt	 d | d d   \ |  _ |  _ |  _ t	 di | d d~   |  _ t |  jZ j |  j dk d |  _ q$q q W| s%t? d |  j6 |  j^ f   n  |  j   |  j   | | _ d
 S)Nr   rj      z<HHHd   z<HHHiz<HHH   lenlenr   z<BBz<Hz<HH
   z<H4xH4xi   zT*** NOTE: ROW record has row index %d; should have 0 <= rowx < %d -- record ignored!r   i  ri         i        z**ROW %d %d %d
ZROWheaderz--- sh #%d, rowx=%d ---2   z<HHH8sH      z<HH3s8sBzFORMULA: rowx=%d colx=%d
   ZbrowxZbcolxblahr1c1   s   z<HHBBBxxxxxHzARRAY: %d %d %d %d %d
z<HHBBxBHzSHRFMLA (sub): %d %d %d %d %d
z@Expected SHRFMLA, ARRAY, TABLEOP* or STRING record; found 0x%04xz$Expected STRING record; found 0x%04xrk   r   z+unexpected special case (0x%02x) in FORMULAz<dz<HHHBBz<HHHHHr   zr*** NOTE: COLINFO record has first col index %d, last %d; should have 0 <= first <= last <= 255 -- record ignored!hidden	bit1_flag   outline_level      	collapsed   z>COLINFO sheet #%d cols %d-%d: wid=%d xf_index=%d flags=0x%04x
z===z*** ERROR *** STANDARDWIDTH"   s     z<8i    z<%dHr   z<HxxHz<ixxH   (   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 EOFZ	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)N)r
   )rq   Zcoordsr^   r^   r_   rv     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reldeltaz*** 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	<HHHHxxHHz<BBB	   debugr   i  zHWARNING *** SCL rcd sheet %d: should have 0.1 <= num/den <= 4; got %d/%dz<HHHHBi  -   z<HH3sdz<HH3sHz<HH3sz<HH3sBBz<H4xH2xB   zW*** NOTE: ROW_B2 record has row index %d; should have 0 <= rowx < %d -- record ignored!   	cell_attrrc   rd   true_xfx   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 <= 256r   r   r   r   r   s    z<HHBz Sheet %d (%r) missing EOF recordr   r   r   r   r   zhiddenr   rj   z	bit1_flagr   r   zoutline_levelr   r   z	collapsed)r   r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   )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getrC   ZXL_LABELZBIFF_FIRST_UNICODEZunpack_stringencodingderive_encodingZunpack_unicodeZ
XL_RSTRINGZunpack_string_update_pos	BYTES_ORDrs   r   ro   r   unpack_unicode_update_posZXL_RK	unpack_RKZXL_MULRKZXL_ROWrX   r   r#   Rowinfoheighthas_default_heightr   outline_group_starts_endsr   height_mismatchhas_default_xf_indexrm   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_DEFCOLWIDTHr7   ZXL_STANDARDWIDTHreprr8   ZXL_GCWtuplegcwZXL_BLANKXL_CELL_BLANKZXL_MULBLANKZXL_DIMENSIONZXL_DIMENSION2r0   r1   r2   r3   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_posrA   r@   Z
XL_CONDFMTr
   joinZXL_CFr   ZXL_DEFAULTROWHEIGHTr9   r:   r;   r<   r=   ZXL_MERGEDCELLSrB   Z
XL_WINDOW2rJ   rK   rL   rS   rT   rM   r   Z
colour_maprH   rI   ZXL_SCLrU   ZXL_PANEvert_split_poshorz_split_poshorz_split_first_visiblevert_split_first_visiblesplit_active_panehas_pane_recordZXL_HORIZONTALPAGEBREAKSrD   ZXL_VERTICALPAGEBREAKSrE   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_IXFErV   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)vr[   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datarc   rd   rm   dZsstindexZrunlistZstrgposZnrtr   Z	mulrk_rowZmulrk_firstZ
mulrk_lastZbits1Zbits2keyrZ
result_strflagsr   Ztkarr_offsetr   ZfmlalenZ
first_byteZ	gotstringrc2	data2_lendata2Zrow1xZrownxZcol1xZcolnxZarray_flagsZtokslenZnfmlas_unused_lenr   Zis_errcelltycZ
first_colxZ	last_colxZiguffr   bitsjZnitemsresultZ	mul_firstZmul_lastZ	dim_tupleZ	saved_objZsaved_obj_idtxoversionZboftypecodeZnum_CFsZneeds_recalcZbrowx1Zbrowx2Zbcolx1Zbcolx2ZolistZcf_typecmp_opZsz1Zsz2Z
font_blockZ
bord_blockZ
patt_blockZfont_heightZfont_optionsZweightZ
escapementZ	underlineZfont_colour_indexZtwo_bitsZfont_escZfont_underlZ
font_styleZpostureZ	font_cancZcancellationZfmla1Zfmla2optionsr]   Z_unused_defvalnumZdenZ
num_breaksre   r   offsetZ
attr_namescharr^   r^   r_   read  s|   					%"*"-
$!
$" 
 "		(	(	(	++( 	.'	    "  " 

%	"  	
+ +(+" +	!		# (	8		
	"
	%%	
	 	=(	7 (4' (4'$(."'(( "( "
	'	 "	 '	 & +$

	z
Sheet.readc             C   sq  |  j  } |  j } | d k d } t d d | d | d  |   d } | } | d k  ru | j po | j   } n  d } t d  }	 x | d k r t | |  d @}
 d |
 } | d 7} n  t | | d   |  } |	 | 7}	 | t |  7} | | k r|	 S| | k r/d
 | | f } t	 |   n  | j
   \ } } } | t k rct	 d |   n  d } q Wd  S)Nr   r   <ZBHr   r   r   latin_1	utf_16_lez,STRING/CONTINUE: expected %d chars, found %dz2Expected CONTINUE record; found record-type 0x%04X)zlatin_1z	utf_16_le)r!   r    r   r   r   r   r   unicodero   r   r   XL_CONTINUE)r[   r   r   r   r   Znchars_expectedr  encZnchars_foundr  flagchunkmsgr   r	  r^   r^   r_   r     s8    		)

zSheet.string_record_contentsc             C   sN  t  p |  j d k } |  j r |  j d  k r9 d |  _ n |  j |  _ |  j } d | k oe d k n s | r t d |  j |  j f d |  j n  |  j } n  | |  _	 n |  j d  k r d |  _	 n |  j |  _	 |  j
 } | s d } nT d | k od k n sA| r5t d |  j |  j
 f d |  j n  |  j	 } n  | |  _ d  S)	Nr   r   r   i  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   rU   rQ   rT   r   r(   r#   rR   rS   )r[   r   Zzoomr^   r^   r_   r     s8    					zSheet.update_cooked_mag_factorsc       	      C   sq  d } | p |  j  d k } |  j d k r |  j j r | d  k	 rK | } n t | d  d @} | d k r |  j d  k r t d   n  |  j } n  | Sd |  _ |  j _ n  t | d  d @} | d k s t  |  j j	 |  } | d  k	 r | S| rt
 |  j d | | |  n  |  j j s[x3 t d  D]" } |  j d	 d
 d | d k   q2Wn  |  j d	 |  } | S)Nr   rj   r   ?   z?BIFF2 cell record has XF index 63 but no preceding IXFE record.r   zNew cell_attr %r at (%r, %r)
r   r   s   @  styleri   )r)   r!   r    r   r   rV   r   r   rW   r   r   r#   rs   insert_new_BIFF20_xf)	r[   r   rc   rd   r   r   r   re   Zxfx_slotr^   r^   r_   r     s2    	#zSheet.fixed_BIFF2_xfindexc             C   sr  d } | p |  j  d k } |  j } t | j  } |  j | |  } | | _ | j j |  | r | j |  j d d | d d n  | j	 | j
 k r| j	 r d } t |  j | | j | j	 | j	  n  t | j	 t t d   }	 |	 | j
 | j	 <| j j |	  n  i t t 6t t 6t t 6t t 6t t 6}
 | j
 | j	 }	 |
 |	 j } | |  j | j <| |  j | <| S)	Nr   rj   r   z=== Faked XF %d ===footerz======z1ERROR *** XF[%d] unknown format key (%d, 0x%04x)
ZGeneral)r)   r    ro   r   fake_XF_from_BIFF20_cell_attrrm   r   r   r#   
format_key
format_mapr   r   FUNr   format_listXL_CELL_NUMBERFNUFGEXL_CELL_DATEFDTFTXtyper/   rW   )r[   r   r"  r   r   r    re   xfr   fmtcellty_from_fmttyr
  r^   r^   r_   r#  <  s8    		#	
zSheet.insert_new_BIFF20_xfc             C   s  d d l  m } m } m } m } m } |   } |   | _ d | j _ d | j _ d | j _	 |   | _
 d | j
 _ d | j
 _ d | j
 _ d | j
 _ |   | _ |   | _ t d |  \ }	 }
 } |
 d @| _ |
 d @d ?| _ t | j |	 d  | d
 @| j _ xg d$ D]_ \ } } | | @r:d% \ } } n d& \ } } t | j
 | d |  t | j
 | d |  qW| j } | d @rd | _ n	 d | _ d | _ d | _ d' | | _ d | j _ d | j _ x2 d j   D]$ } d | d } t | | d  qW| S)(Nr   )XFXFAlignmentXFBorderXFBackgroundXFProtectionr   z<BBBr!     r   r   cell_lockedr      formula_hiddenr   leftr   rightr   topbottomZ_colour_indexZ_line_style   r     rj   z2format font alignment border background protection__flagr   r   r:  r   r;  r<  )rE  rF  r   zleftr   zrightr   ztopr   r@  )rG  rH  rI  rJ  )r   r   )r   r   )rB  r   )
formattingr4  r5  r6  r7  r8  	alignmentindent_levelZshrink_to_fitZtext_directionZborderZdiag_upZ	diag_downZdiag_colour_indexZdiag_line_styleZ
backgroundZ
protectionr   r&  Z
font_indexr   Z	hor_alignrI   Zfill_patternZbackground_colour_indexZpattern_colour_indexZparent_style_index
vert_alignZrotationsplit)r[   r   r"  r4  r5  r6  r7  r8  r1  Z	prot_bitsZfont_and_formatZ
halign_etcmaskZsideZcolour_indexZ
line_stylebgZ	attr_stemr]   r^   r^   r_   r%  [  sP    (	 
	
			z#Sheet.fake_XF_from_BIFF20_cell_attrc             C   s   |  j  s t d   n  d  S)Nz9Feature requires open_workbook(..., formatting_info=True))r*   r   )r[   r^   r^   r_   rl     s    	zSheet.req_fmt_infoc             C   s  |  j    |  j d k rZ |  j j | d  } | d k	 rA | j S|  j d k	 r |  j Sn |  j d k r |  j | r |  j d k	 r |  j Sq |  j j | d  } | d k	 r | j Sn: |  j d k r |  j j | d  } | d k	 r | j Sn  |  j d k	 r|  j d Sd 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   r   i   )rl   r!   r>   r   r   r8   r   r7   )r[   rd   Zcolinfor^   r^   r_   computed_column_width  s*    




zSheet.computed_column_widthc          
   C   s  t  r t d d |  j n  t |  } t   } t d | d  d   \ | _ | _ | _ | _	 } } } | d k s} t
  | d k s t
  t  r t d | d |  j n  d } d d	   } | d
 @r | | |  \ | _ } n  | d @r| | |  \ | _ } n  | d @r5| d @r5t d | | | d   \ }	 t  r\t |  j d |	  n  | d 7} |	 d k rt d  | _ t d | | | d   d }
 | d 7} t | | | |
  d  | _ t  rt |  j d | j t | j   n  | j j d  } t  r)t d | d |  j n  | j d  |  | _ d | d } | | 7} |
 | } | | | |  } | | 7} t  rt |  j d | j | |
 | |  n  | d2 k s2t
  q|	 d k rt d  | _ t d | | | d    \ } }
 | d  7} d! | | | | |
 d  } t  rFt |  j d" | |  n  | |
 7} | d 7} t d# | | | d   d } t  rt d$ | d |  j n  | d 7} | rt d# | | | d   d } | d 7} | d 7} t | | | |  d  } | | 7} | | _ q2| | _ qt |  j d% |	  nk | d& @d' k rot d(  | _ | | |  \ | _ } n1 | d) @d* k rt d+  | _ n t d,  | _ | d* @r| | |  \ | _ } n  t  r| j d- d.  t d/ | | f  n  | | } | d k rFt |  j d0 | j d | j d | t | | d     n | d k  rat d1   n  |  j j |  xX t | j | j d  D]= } x4 t | j | j	 d  D] } | |  j | | f <qWqWd  S)3Nz
=== hyperlink ===r   z<HHHH16s4sir   s   y  Ks      zoptions: %08Xc             S   sj   t  d |  | | d   d d } | d 7} t |  | | |  d  d  d  } | | 7} | | f S)Nz<Lr   r   rj   zUTF-16ler   r   )r   r  )bufZofsnbZucr^   r^   r_   get_nul_terminated_unicode  s
    %
'
z6Sheet.handle_hlink.<locals>.get_nul_terminated_unicoder   r;  r   r   z<16sr   z	clsid=%r
s   y  Kurlz<Lr   r   zUTF-16lezinitial url=%r len=%d
 z	endpos=%drj   z9url=%r
extra=%r
nbytes=%d true_nbytes=%d extra_nbytes=%d
   s               Fz
local filez<Hir   s   ..\zuplevels=%d shortpath=%r
z<izsz=%dz*** unknown clsid %r
ic  i  Zuncik  r   Zworkbookunknownr   z... object dump ...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)rX  r   )r   r   r#   ro   	Hyperlinkr   frowxlrowxfcolxlcolxr   desctargetr   r   r0  r  url_or_pathfindtextmarkr   ZREPRr   rN   r   rs   rO   )r[   r   Zrecord_sizer   Zguid0dummyr  r  rU  ZclsidnbytesendposZtrue_nbytesZextra_nbytes
extra_dataZuplevels	shortpathszZxlZextended_pathrc   rd   r^   r^   r_   r     s     	: 

  
!
  % 


#
  

! 
!






  zSheet.handle_hlinkc             C   s   t  d | d  d   \ } } } } } | t k s: t  |  j sI t  |  j d } | | | | f | j | j | j | j f k s t  | d d   d k s t  t | d d	  d  | _	 d  S)
Nz<5Hr   r   rj   s     r  r   r   r   )
r   r   r   rN   r[  r\  r]  r^  r  quicktip)r[   r   Zrcxr[  r\  r]  r^  r   r^   r^   r_   r   $  s    (6zSheet.handle_quicktipc             C   s  t  s
 d  Sd } |  j d k  r# d  St   } d } xo| | k  rt d | | | d   \ } } }	 | d @}
 | d ?d @} |
 d k r d } n |	 } | r t | | | d d	 d d
 |  j t |  j d | | |
 |	 |	  n  | d k rI| d k st  t d | | d | d |   \ | _ | _	 | _
 | _ | _ n7 | d k r|	 d k sgt  | d | k st  n  | | d 7} q5 W| | k st  | r| j |  j d d d d n  d  S)Nr   r   r   z<HHIr   ri   r   i  basefoutz.fbt:0x%04X  inst:%d  ver:0x%X  cb:%d (0x%04X)
i  r   z<Hiiiii  r   z=== MSODrawing ===r$   )OBJ_MSO_DEBUGr!   
MSODrawingr   hex_char_dumpr#   r   r   Z
anchor_unkZanchor_colx_loZanchor_rowx_loZanchor_colx_hiZanchor_rowx_hir   )r[   Zrecidr   r   r   or  tmpZfbtcbverinstZndbr^   r^   r_   r   -  s:    	&
	#	FzSheet.handle_msodrawingetcc             C   s  |  j  d k  r d  St   } t |  } d } t rJ t |  j d |  n  xN| | k  rt d | | | d   \ } } t r t |  j d | | |  t | | | d d d d |  j n  | d k r| d	 k o | d
 k r|  j rt |  j d  n  d  S| d	 k rg| d k s$t	  t d | | d | d   \ | _
 | _ } t | | d5  n"| d k r| | |  d | | k rPn  d } t |  j d  |  t | | | | d d d |  j t |   n | d! k rEt d" | | d | d
   }	 xx t |	 d6  D]  \ }
 } t | d( | |
  qWnD | d k rmt rt |  j d)  qn | d* k r| j rPqn  | | d 7} qM Wt r| j |  j d+ d, d- d. n  | S)7Nr   r   z... OBJ record len=%d...
z<HHr   zpos=%d ft=0x%04X cb=%d
rk  rl  r   r   z6*** WARNING Ignoring antique or corrupt OBJECT record
z<HHHr   r   lockedr   	printabler   r   
autofilterr      scrollbar_flagr       autofillr    @  autolines    z'Unexpected data at end of OBJECT recordz*** ERROR %s
r   z<5Hr   r   maxincpageZ
scrollbar_z.*** OBJ record has ft==0x0D 'notes' structure
   r   z=== MSOBj ===r$  rm  r   r   zlockedr   r   z	printabler   r   z
autofilterr   ry  rz  r   r{  r|  r   r}  r~  )r  r  r  r  r  r  )zvaluezminzmaxzinczpage)r!   MSObjro   rn  r   r#   r   rp  r)   r   r0  r   r   r   r   rI   rx  r   )r[   r   rq  r   r  ftrs  option_flagsr   valuesr   tagr^   r^   r_   r   U  s^    	#&%	0	     
#! 	zSheet.handle_objc             C   s  t  r> t |  j d  t | d t |  d d d |  j n  t   } t |  } |  j d k  rt d | d  d   \ | _ | _	 } t |  d } | | k s t
  | d d   g } | | 8} x | d k rm|  j j   \ } }	 }
 | t k st
  t d |
 d  d   \ } } | d	 k s3t
  | |	 d k sIt
  | j |
 d d    | | 8} q W| d k st
  |  j j p|  j j   } t d
 j |  |  | _ d g | _ d | _ d | _ d | _ t d  | _ d  | _ | |  j | j | j	 f <d  St d | d  d   \ | _ | _	 } | _ | d ?d @| _ | d ?d @| _ | d ?d @| _ t | d d d \ | _ } | | d k st
  t  r| j |  j d d d d n  | j | j  } | r| j | _ | j | _ | |  j | j | j	 f <n  d  S)Nz... NOTE record ...
r   rk  rl  r   z<HHHr   z<H2xHi      r   z<4Hr   r   r   r   rj   r   z=== Note ===r$  rm  )r   r   )r   r   )rn  r   r#   rp  ro   Noter!   r   rc   rd   r   r    r   r   r   r   r   r  r   textrich_text_runlistshow
row_hidden
col_hiddenr   authorZ
_object_idrP   r   r   r   )r[   r   r   rq  r   Zexpected_bytesrT  piecesr  r  r  Z
dummy_rowxr  r  rf  r  r^   r^   r_   r     sV    (	(
				.zSheet.handle_notec          
   C   s  |  j  d k  r d  St   } t |  } d } t |  } t | | d  |   \ } | _ } } }	 | _ | | d   | _ t | | d$  d }
 t	 d  | _
 x |
 | k  r|  j j   \ } } } | t k s t  t rt | d | d d d |  j n  t | d  } | d } | rG| d d k s:t  | d } n  t | d d | \ } } | | k stt  | j
 | 7_
 |
 | 7}
 q Wg  | _ d } x | |	 k  rF|  j j   \ } } } | t k st  | d d k st  xQ t d | d  D]= } t d | | | d   } | j j |  | d 7} qWqWx. | j rw| j d% d | k rw| j d& =qJWt r| j |  j d d d d t | j d |  j n  | S)'Nr   z<HH6sHHHrk   r   
horz_alignr   p   rN  r      	lock_text @  	just_lastri      secret_editr   r   rk  rl  r   rj   Z	known_lenr   z<HH4xr   z=== MSTxo ===r$  rm  r   rk   r   r  r   r  z
vert_alignr   r  r  r   r  r  ri   r  r  )r  r  r  r  r  r   r   )r!   MSTxoro   r   r   ZrotZ	ifntEmptyZfmlar   r   r  r    r   r  r   rn  rp  r#   r   r   r  rs   r   r   r   )r[   r   rq  r   r2  Zfmtsizer  ZcontrolInfoZcchTextZcbRunsZtotcharsr  r  r  rT  ZncharsZutextrf  ZtotrunsZrc3Z	data3_lenZdata3r  runr^   r^   r_   r     s\    	1	    "
	#zSheet.handle_txoc             C   sW  t  s
 d  St d | d d   \
 } } } } } } } }	 }
 } | d k sS t  |
 d k se t  | d k sw t  | d k s t  | d k s t  | | k s t  t |  j d | | | |	  t d | d d   \ } } } } } } } } } } } } } } } t d	 | | | | | | | | | | | | | | | f d
 |  j d  S)Nz<HH8sHBiHiH8sr   #   r   ir  z3FEAT11: grbitFrt=%d  Ref0=%r cref=%d cbFeatData=%d
z<iiiiiiHHiiiii16sHB   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   e   )rn  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    7FzSheet.handle_feat11)C__name__
__module____qualname____doc__r'   r    r0   r1   r>   r?   r@   rA   rB   rC   r7   r8   r9   r:   r;   r<   r=   rG   r   rN   rO   rP   r   r   r   r   r   r   rD   rE   r`   rf   rg   rh   ra   rp   rt   rx   r{   r|   r~   r   r   r   colr   r,   r.   r  r   r   r   r#  r%  rl   rR  r   r   r   r   r   r   r   r^   r^   r^   r_   r   .   s   		T
	<;K  +"-(p	(833r   c               @   s   e  Z d  Z d S)ro  N)r  r  r  r^   r^   r^   r_   ro  $  s   ro  c               @   s   e  Z d  Z d S)r  N)r  r  r  r^   r^   r^   r_   r  (  s   r  c               @   s   e  Z d  Z d S)r  N)r  r  r  r^   r^   r^   r_   r  ,  s   r  c               @   sR   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  rd   r  r  rc   r  r  r^   r^   r^   r_   r  0  s   r  c               @   sR   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)rZ  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^  r0  ra  r_  r`  rc  rj  r^   r^   r^   r_   rZ  S  s   rZ  c             C   s   t  |  d  } | d @rR t d |   \ } | d L} | d @rH | d St |  St d d t t | d @  |  d d	   \ } | d @r | d S| Sd  S)
Nr   rj   z<ir   g      Y@z<ds          r   )r   r   r   ZBYTES_LITERALchr)Zrk_strr  ir  r^   r^   r_   r     s    



4
r   emptyr  r(   ZxldateboolerrorZblankc               @   s@   e  Z d  Z d Z d d d g Z d d d  Z d d	   Z d S)
rb   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 u''</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 u''. Note: this type will appear only when
        open_workbook(..., formatting_info=True) is used.</td>
        </tr>
        </table>
    r   r   rm   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r   r   rm   )r[   r   r   rm   r^   r^   r_   r`     s    		zCell.__init__c             C   sI   |  j  d  k r' d t |  j |  j f Sd t |  j |  j |  j  f Sd  S)Nz%s:%rz%s:%r (XF:%r))rm   
ctype_textr   r   )r[   r^   r^   r_   __repr__  s    zCell.__repr__)r  r  r  r  	__slots__r`   r  r^   r^   r^   r_   rb     s   @rb   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   Nr   )
r  r  r  r  r   rm   r   r   r   r   r^   r^   r^   r_   r   	  s   $r   c            
   @   sI   e  Z d  Z d Z e r! d Z n  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   rm   r   r   c             C   s^   d  |  _  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _	 d  S)N)
r   r   r   r   r   r   r   rm   r   r   )r[   r^   r^   r_   r`   X	  s    									zRowinfo.__init__c          
   C   s@   |  j  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 f
 S)N)
r   r   r   r   r   r   r   rm   r   r   )r[   r^   r^   r_   __getstate__	  s    zRowinfo.__getstate__c             C   sF   | \
 |  _  |  _ |  _ |  _ |  _ |  _ |  _ |  _ |  _ |  _	 d  S)N)
r   r   r   r   r   r   r   rm   r   r   )r[   stater^   r^   r_   __setstate__	  s    zRowinfo.__setstate__N)
zheightzhas_default_heightzoutline_levelzoutline_group_starts_endszhiddenzheight_mismatchzhas_default_xf_indexzxf_indexzadditional_space_abovezadditional_space_below)	r  r  r  r  
_USE_SLOTSr  r`   r  r  r^   r^   r^   r_   r   B	  s            	(r   N)0
__future__r   r   structr   r   ZbiffhZtimemachineZformular   r	   r
   r   r   rK  r   r   r   rn  rH   Z
BaseObjectr   ro  r  r  r  rZ  r   r*  r+  r(  r,  r-  r.  r/  r3  r$   r   r   r   r   r  rb   r   Z
empty_cellr   r  r   r^   r^   r^   r_   <module>   sj   

(											       #8

O;