
    >wgc                       d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddl+m,Z, ddl+m-Z-  ej\                  d ej^                        Z0d! Z1d" Z2d# Z3 ed$d%      Z4 ed&d'      Z5 ed(d)      Z6 ed*d+      Z7 ed,d-      Z8 ed.d'      Z9 ed/d0      Z: ed1d2      Z; ed3d4      Z< G d5 d6ej8                        Z=y)7    N)defaultdict)
namedtuple)Decimal)Fractionwraps)StringIO)isinf)isnan)warn   )	xmlwriter)Format)Drawing)Shape)	XMLwriter)xl_rowcol_to_cell)xl_rowcol_to_cell_fast)xl_cell_to_rowcol)xl_col_to_name)xl_rangexl_color)xl_pixel_width)get_sparkline_style)supported_datetime)datetime_to_excel_datetime)get_image_properties)preserve_whitespace)quote_sheetname)DuplicateTableName)OverlappingRangea  
    \bANCHORARRAY\(    |
    \bBYCOL\(          |
    \bBYROW\(          |
    \bCHOOSECOLS\(     |
    \bCHOOSEROWS\(     |
    \bDROP\(           |
    \bEXPAND\(         |
    \bFILTER\(         |
    \bHSTACK\(         |
    \bLAMBDA\(         |
    \bMAKEARRAY\(      |
    \bMAP\(            |
    \bRANDARRAY\(      |
    \bREDUCE\(         |
    \bSCAN\(           |
    \bSEQUENCE\(       |
    \bSINGLE\(         |
    \bSORT\(           |
    \bSORTBY\(         |
    \bSWITCH\(         |
    \bTAKE\(           |
    \bTEXTSPLIT\(      |
    \bTOCOL\(          |
    \bTOROW\(          |
    \bUNIQUE\(         |
    \bVSTACK\(         |
    \bWRAPCOLS\(       |
    \bWRAPROWS\(       |
    \bXLOOKUP\(c                 .     t                fd       }|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                     	 |r|d   }t        |        | g|i |S # t        $ r t              }||dd  z   }Y *w xY wNr   r   )int
ValueErrorr   )selfargskwargs	first_argnew_argsmethods        K/var/www/horilla/myenv/lib/python3.12/site-packages/xlsxwriter/worksheet.pycell_wrapperz'convert_cell_args.<locals>.cell_wrapper_   s]    	' G	I d,T,V,,  	'(3Hd12h&D	's   ! A A r   r-   r/   s   ` r.   convert_cell_argsr1   X   s#     6]- -     c                 .     t                fd       }|S )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c                 4   	 |rt        |d           
| g|i |S # t        $ ro d|d   v r4|d   j                  d      \  }}t        |      \  }}t        |      \  }}nt        |d         \  }}||}}||||g}	|	j	                  |dd         |	}Y w xY w)Nr   :r   r&   r'   splitr   extend)r(   r)   r*   cell_1cell_2row_1col_1row_2col_2r,   r-   s             r.   r/   z(convert_range_args.<locals>.cell_wrapperw   s    	DG d,T,V,,  	d1g~!%as!308u08u0a9u$euueU3HOODH%D	s    A5BBr   r0   s   ` r.   convert_range_argsr?   p   s#     6]- -* r2   c                 .     t                fd       }|S )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c                 $   	 |rt        |d           
| g|i |S # t        $ rg |d   j                  d      D cg c]  }|dz   	 nc c}w c}\  }}t        |      \  }}t        |      \  }}||g}	|	j	                  |dd         |	}Y {w xY w)Nr   r5   1r   r6   )r(   r)   r*   colr9   r:   _r<   r>   r,   r-   s             r.   column_wrapperz+convert_column_args.<locals>.column_wrapper   s    	DG d,T,V,,  	377==3EFCcCiFFNFF(0HAu(0HAuu~HOODH%D	s    BA
ABBr   )r-   rE   s   ` r.   convert_column_argsrF      s#     6]- -  r2   Stringzstring, formatNumberznumber, formatBlankformatBooleanzboolean, formatFormulazformula, format, valueDatetimeArrayFormulaz$formula, format, value, range, atype
RichStringzstring, format, raw_stringErrorzerror, format, valuec                   v    e Zd ZdZ fdZd Zed        Zd Zedd       Z	ddZ
edd       Zdd	Zedd
       ZddZedd       ZddZe	 	 dd       Ze	 	 dd       ZddZ	 	 	 ddZedd       ZddZedd       ZddZedd       ZddZed        Zd Zd Zedd       Zedd       Z edd       Z!edd       Z"edd       Z#edd        Z$edd!       Z%d" Z&dd#Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.e/	 dd+       Z0e/	 dd,       Z1d- Z2dd.Z3dd/Z4dd0Z5e	 dd1       Z6ed2        Z7d3 Z8d4 Z9edd5       Z:e	 dd6       Z;edd7       Z<edd8       Z=ed9        Z>edd:       Z?	 dd;Z@edd<       ZAedd=       ZBdd>ZCd? ZDd@ ZEdA ZFddBZGddCZHeddD       ZIdE ZJdF ZKddGZLddHZMdI ZNdJ ZOdK ZPddLZQddMZRddNZSddOZTe/ddP       ZUddQZVdR ZWdS ZXedT        ZYdU ZZdV Z[dW Z\dX Z]dY Z^dZ Z_d[ Z`dd\Zadd]Zbd^ Zcd_ Zddd`Zeda Zfdb Zgdc Zhdd Zide Zjdf Zkdg Zldh Zmdi Zndj Zodk Zpdl Zqdm Zrdn ZsddoZtddpZudq Zvdr Zwds Zxdt Zydu Zzdv Z{dw Z|dx Z}dy Z~dz Zd{ Zd| Zdd}Zdd~Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd ZddZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 ddZ	 ddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdÄ ZdĄ ZddńZdƄ ZdǄ ZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    c                 $
   t         t        |           d| _        d| _        d| _        d| _        d| _        d| _        d| _	        g | _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        i | _        g | _        d| _        d| _        d| _        d| _        g | _        d	| _        d| _        d| _        d| _        d
| _         d| _!        d| _"        d| _#        d| _$        d| _%        d| _&        d| _'        d| _(        d| _)        d| _*        d| _+        d| _,        g | _-        g | _.        g | _/        d| _0        d| _1        d| _2        d| _3        d| _4        d| _5        d| _6        d| _7        d| _8        d| _9        d| _:        d| _;        d| _<        d| _=        d| _>        d| _?        d| _@        g | _A        g | _B        i | _C        g | _D        d| _E        i | _F        t        t              | _I        d| _J        d
| _K        d| _L        d| _M        d
| _N        d| _O        d| _P        d| _Q        d| _R        d
| _S        d
| _T        d
| _U        d| _V        d| _W        d| _X        d| _Y        d| _Z        d| _[        d| _\        d| _]        i | _^        g | __        t        t              | _`        g | _a        i | _b        i | _c        i | _d        d| _e        d| _f        d| _g        t        t              | _h        g | _i        d| _j        d| _k        d| _l        g | _m        d| _n        d| _o        d| _p        g | _q        d| _r        i | _s        i | _t        i | _u        i | _v        d| _w        d| _x        d
| _y        d| _z        d| _{        g | _|        g | _}        g | _~        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        i | _        d| _        i | _        d| _        i | _        d| _        d| _        d| _        d| _        d| _        g | _        i | _        g | _        d| _        d
| _        d| _        d| _        d| _        t        t              | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _l        d| _        d| _        d| _        d| _        d| _        i | _        d| _        d| _        d| _        d| _        y)z
        Constructor.

        Nr   Fi  i   i @        r   Tffffff?      ?333333?d         \( @@   D      i  )superrR   __init__nameindex	str_tablepaletteconstant_memorytmpdiris_chartsheet
ext_sheets
fileclosedexcel_versionexcel2003_style
xls_rowmax
xls_colmax
xls_strmax
dim_rowmin
dim_rowmax
dim_colmin
dim_colmaxcol_info
selectionshiddenactive	tab_colortop_left_cellpanesactive_paneselectedpage_setup_changed
paper_sizeorientationprint_options_changedhcentervcenterprint_gridlinesscreen_gridlinesprint_headersrow_col_headersheader_footer_changedheaderfooterheader_footer_alignsheader_footer_scalesheader_imagesfooter_imagesheader_images_listmargin_leftmargin_right
margin_topmargin_bottommargin_headermargin_footerrepeat_row_rangerepeat_col_rangeprint_area_range
page_orderblack_whitedraft_qualityprint_comments
page_startfit_page	fit_width
fit_heighthbreaksvbreaksprotect_optionsprotected_rangesnum_protected_rangesset_colsr   dictset_rowszoomzoom_scale_normalprint_scaleis_right_to_left
show_zerosleading_zerosoutline_row_leveloutline_col_leveloutline_styleoutline_belowoutline_right
outline_onoutline_changedoriginal_row_heightdefault_row_heightdefault_row_pixelsdefault_col_widthdefault_col_pixelsdefault_date_pixelsdefault_row_zeroednameswrite_matchtablemergemerged_cellstable_cells	row_spanshas_vmlhas_header_vmlhas_commentscommentscomments_listcomments_authorcomments_visiblevml_shape_idbuttons_listvml_header_idautofilter_areaautofilter_reffilter_range	filter_onfilter_colsfilter_typefilter_cells	row_sizescol_size_changedrow_size_changedlast_shape_id	rel_counthlink_count
hlink_refsexternal_hyper_linksexternal_drawing_linksexternal_comment_linksexternal_vml_linksexternal_table_linksexternal_background_linksdrawing_linksvml_drawing_linkschartsimagestables
sparklinesshapes
shape_hashdrawingdrawing_relsdrawing_rels_idvml_drawing_relsvml_drawing_rels_idbackground_imagebackground_bytesrstringprevious_rowvalidationscond_formatsdata_bars_2010use_data_bars_2010dxf_priority	page_viewvba_codename	date_1904
hyperlinksstrings_to_numbersstrings_to_urlsnan_inf_to_errorsstrings_to_formulasdefault_date_formatdefault_url_formatremove_timezonemax_url_lengthrow_data_filenamerow_data_fhworksheet_metavml_data_idrow_data_fh_closedvertical_dpihorizontal_dpiwrite_handlersignored_errorshas_dynamic_arraysuse_future_functionsignore_write_string)r(   	__class__s    r.   rb   zWorksheet.__init__   sb    	i')	
 "!$!
"'%*"$ $"$%*"$(!$(!"$!   " " "! "$%!#D)	!" !!"!"$#% "$"$!%"$#% "#
 &

#!#D)! ! !" % %$&!&(#&(#"$$&!)+&!#  "#$  $ % "' %d+"'#!&#' #' "&$"!%" !%"' ""'$)!#( r2   c                    |dk(  r | j                   ||g| S | j                  r%|j                  d      r | j                  ||g| S |j                  d      r%|j	                  d      r | j                  ||g| S d|v rb| j
                  rVt        j                  d|      s,t        j                  d|      st        j                  d|      r | j                  ||g| S | j                  rZ	 t        |      }| j                  st        |      s#t        |      s | j                  |||g|d	d   S  | j                   ||g| S  | j                   ||g| S # t        $ r Y 3w xY w)
NrU   =z{=}r5   (ftp|http)s?://mailto:z(in|ex)ternal:r   )_write_blankr   
startswith_write_formulaendswithr   rematch
_write_urlr   floatr   r   r
   _write_numberr'   _write_string)r(   tokenrowrC   r)   fs         r.   _write_token_as_stringz Worksheet._write_token_as_string  sx   B;$4$$S#555##(8(8(=&4&&sC7$77D!ennS&9&4&&sC7$77 5L$$*E288Iu-88,e4 #4??33d33""%L))%(58-4--c3EDHEE
 &4%%c3666 &4%%c3666  s   4AE! !	E-,E-c                 *     | j                   ||g| S )a  
        Write data to a worksheet cell by calling the appropriate write_*()
        method based on the type of data being passed.

        Args:
            row:   The cell row (zero indexed).
            col:   The cell column (zero indexed).
            *args: Args to pass to sub functions.

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of called method.

        _writer(   r!  rC   r)   s       r.   writezWorksheet.write  s    " t{{3+d++r2   c                    |st        d      |d   }|j                  }|| j                  v r| j                  |   } || ||g| }|n|S | | j                  ||g| S |t        u r | j
                  ||g| S |t        t        t        t        fv r | j                  ||g| S |t        u r | j                  |||g| S |t        j                  t        j                  t        j                  t        j                   fv r | j"                  ||g| S t%        |t        t        t        t        f      r | j                  ||g| S t%        |t              r | j                  |||g| S t%        |t              r | j
                  ||g| S t'        |      r | j"                  ||g| S 	 t        |      } | j                  |||g|dd   S # t(        $ r Y n#t         $ r t        dt+        |      z        w xY w	 t        |        | j,                  ||g| S # t(        $ r t        dt+        |      z        w xY w)Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type %s in write())	TypeErrorr  r  r  bool_write_booleanr  r&   r   r   r  strr#  datetimedatetime	timedelta_write_datetime
isinstancer   r'   typer  )	r(   r!  rC   r)   r   
token_typewrite_handlerfunction_returnr"  s	            r.   r&  zWorksheet._write  s   JKK Q __
 ,,, //
;M+D#sBTBO
 &&& =$4$$S#555 &4&&sC7$77%gx88%4%%c3666.4..uc3FFFMMMM	
 
 (4''S8488
 eeS'8<=%4%%c3666 eS!.4..uc3FFF eT"&4&&sC7$77 e$'4''S8488	LeA%4%%c3=DH== 	 	L<tE{JKK	L	LJ%4%%c3666 	L<tE{JKK	Ls   8"G 	H& H
H) )!I
c                 *    | j                  ||||      S )a  
        Write a string to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            string: Cell data. Str.
            format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String truncated to 32k characters.

        )r  )r(   r!  rC   stringcell_formats        r.   write_stringzWorksheet.write_string1  s    " !!#sFK@@r2   c                 f   d}| j                  ||      ryt        |      | j                  kD  r|d | j                   }d}| j                  s| j                  j                  |      }n|}| j                  r || j                  kD  r| j                  |       t        ||      | j                  |   |<   |S Nr   )
_check_dimensionslenrp   rg   re   _get_shared_string_indexr   _write_single_rowcell_string_tupler   )r(   r!  rC   r9  r:  	str_errorstring_indexs          r.   r  zWorksheet._write_stringE  s    	 !!#s+ v;(-doo.FI ##>>BB6JL!L C$*;*;$;""3'  1{K

3r2   c                 *    | j                  ||||      S )a  
        Write a number to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            number:      Cell data. Int or float.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r  r(   r!  rC   numberr:  s        r.   write_numberzWorksheet.write_number`  s      !!#sFK@@r2   c                    t        |      st        |      r| j                  rqt        |      r| j                  ||d|d      S |t        j
                  k(  r| j                  ||d|d      S |t        j
                   k(  r | j                  ||d|d      S t        d      | j                  ||      ry| j                  r || j                  kD  r| j                  |       t        ||      | j                  |   |<   y)N#NUM!z1/0#DIV/0!z-1/0zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr>  r   )r   r
   r   r  mathinfr*  r@  rg   r   rC  cell_number_tupler   rH  s        r.   r  zWorksheet._write_numbers  s    =E&M%%=..sC+wWWtxx'..sCYWWy(..sCiXXD  !!#s+ C$*;*;$;""3'  1E

3r2   c                 *    | j                  ||||      S )a  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            blank:       Any value. It is ignored.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r  r(   r!  rC   blankr:  s        r.   write_blankzWorksheet.write_blank  s    "   c5+>>r2   c                     |y| j                  ||      ry| j                  r || j                  kD  r| j                  |       t	        |      | j
                  |   |<   y)Nr   r>  )r@  rg   r   rC  cell_blank_tupler   rR  s        r.   r  zWorksheet._write_blank  sb     !!#s+ C$*;*;$;""3'  0<

3r2   c                 ,    | j                  |||||      S )a  
        Write a formula to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            formula:     Cell formula.
            cell_format: An optional cell Format object.
            value:       An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Formula can't be None or empty.

        )r  r(   r!  rC   formular:  values         r.   write_formulazWorksheet.write_formula  s    & ""3Wk5IIr2   c           	         | j                  ||      ry||dk(  rt        d       yt        j                  |      r| j	                  |||||||      S |j                  d      r(|j                  d      r| j                  |||||||      S | j                  |      }| j                  r || j                  kD  r| j                  |       t        |||      | j                  |   |<   y)Nr>  rU   zFormula can't be None or empty{r  r   )r@  r   re_dynamic_functionsearchwrite_dynamic_array_formular  r  _write_array_formula_prepare_formularg   r   rC  cell_formula_tupler   rX  s         r.   r  zWorksheet._write_formula  s    !!#s+?gm12 %%g.33S#sG[% 
 c"w'7'7'<,,S#sG[% 
 ''0 C$*;*;$;""3'  2';N

3r2   c           
          t         j                  |      r| j                  |||||||      S | j                  |||||||d      S )an  
        Write a formula to a worksheet cell/range.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            formula:      Cell formula.
            cell_format:  An optional cell Format object.
            value:        An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        static)r^  r_  r`  ra  )r(   	first_row	first_collast_rowlast_colrY  r:  rZ  s           r.   write_array_formulazWorksheet.write_array_formula  sb    : %%g.339h';PU  ((	
 		
r2   c           
      N    | j                  |||||||d      }|dk(  rd| _        |S )a|  
        Write a dynamic array formula to a worksheet cell/range.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            formula:      Cell formula.
            cell_format:  An optional cell Format object.
            value:        An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        dynamicr   T)ra  r  )	r(   rf  rg  rh  ri  rY  r:  rZ  errors	            r.   r`  z%Worksheet.write_dynamic_array_formula  sB    8 ))	
 A:&*D#r2   c                 
   |j                  d      r|dd  }|j                  d      r|dd  }|j                  d      r|d d }d|v r|S t        j                  dd|      }t        j                  d	d
|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd |      }t        j                  d!d"|      }t        j                  d#d$|      }t        j                  d%d&|      }t        j                  d'd(|      }t        j                  d)d*|      }t        j                  d+d,|      }t        j                  d-d.|      }t        j                  d/d0|      }t        j                  d1d2|      }t        j                  d3d4|      }t        j                  d5d6|      }t        j                  d7d8|      }t        j                  d9d:|      }t        j                  d;d<|      }t        j                  d=d>|      }t        j                  d?d@|      }| j                  s|s|S t        j                  dAdB|      }t        j                  dCdD|      }t        j                  dEdF|      }t        j                  dGdH|      }t        j                  dIdJ|      }t        j                  dKdL|      }t        j                  dMdN|      }t        j                  dOdP|      }t        j                  dQdR|      }t        j                  dSdT|      }t        j                  dUdV|      }t        j                  dWdX|      }t        j                  dYdZ|      }t        j                  d[d\|      }t        j                  d]d^|      }t        j                  d_d`|      }t        j                  dadb|      }t        j                  dcdd|      }t        j                  dedf|      }t        j                  dgdh|      }t        j                  didj|      }t        j                  dkdl|      }t        j                  dmdn|      }t        j                  dodp|      }t        j                  dqdr|      }t        j                  dsdt|      }t        j                  dudv|      }t        j                  dwdx|      }t        j                  dydz|      }t        j                  d{d||      }t        j                  d}d~|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd |      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  d	d
|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd |      }t        j                  d!d"|      }t        j                  d#d$|      }t        j                  d%d&|      }t        j                  d'd(|      }t        j                  d)d*|      }t        j                  d+d,|      }t        j                  d-d.|      }t        j                  d/d0|      }t        j                  d1d2|      }t        j                  d3d4|      }t        j                  d5d6|      }t        j                  d7d8|      }t        j                  d9d:|      }t        j                  d;d<|      }|S (=  Nr]  r   r  r  r>  z_xlfn.z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z	\bBYCOL\(z_xlfn.BYCOL(z	\bBYROW\(z_xlfn.BYROW(z\bCHOOSECOLS\(z_xlfn.CHOOSECOLS(z\bCHOOSEROWS\(z_xlfn.CHOOSEROWS(z\bDROP\(z_xlfn.DROP(z
\bEXPAND\(z_xlfn.EXPAND(z
\bFILTER\(z_xlfn._xlws.FILTER(z
\bHSTACK\(z_xlfn.HSTACK(z
\bLAMBDA\(z_xlfn.LAMBDA(z\bMAKEARRAY\(z_xlfn.MAKEARRAY(z\bMAP\(z
_xlfn.MAP(z\bRANDARRAY\(z_xlfn.RANDARRAY(z
\bREDUCE\(z_xlfn.REDUCE(z\bSCAN\(z_xlfn.SCAN(z	\SINGLE\(z_xlfn.SINGLE(z\bSEQUENCE\(z_xlfn.SEQUENCE(z\bSORT\(z_xlfn._xlws.SORT(z
\bSORTBY\(z_xlfn.SORTBY(z
\bSWITCH\(z_xlfn.SWITCH(z\bTAKE\(z_xlfn.TAKE(z\bTEXTSPLIT\(z_xlfn.TEXTSPLIT(z	\bTOCOL\(z_xlfn.TOCOL(z	\bTOROW\(z_xlfn.TOROW(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bVSTACK\(z_xlfn.VSTACK(z\bWRAPCOLS\(z_xlfn.WRAPCOLS(z\bWRAPROWS\(z_xlfn.WRAPROWS(z\bXLOOKUP\(z_xlfn.XLOOKUP(z	\bACOTH\(z_xlfn.ACOTH(z\bACOT\(z_xlfn.ACOT(z\bAGGREGATE\(z_xlfn.AGGREGATE(z
\bARABIC\(z_xlfn.ARABIC(z\bARRAYTOTEXT\(z_xlfn.ARRAYTOTEXT(z\bBASE\(z_xlfn.BASE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBETA.INV\(z_xlfn.BETA.INV(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z
\bBITAND\(z_xlfn.BITAND(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z	\bBITOR\(z_xlfn.BITOR(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z
\bBITXOR\(z_xlfn.BITXOR(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z
\bCONCAT\(z_xlfn.CONCAT(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOTH\(z_xlfn.COTH(z\bCOT\(z
_xlfn.COT(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bCSCH\(z_xlfn.CSCH(z\bCSC\(z
_xlfn.CSC(z\bDAYS\(z_xlfn.DAYS(z\bDECIMAL\(z_xlfn.DECIMAL(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z
\bF.DIST\(z_xlfn.F.DIST(z\bF.INV.RT\(z_xlfn.F.INV.RT(z	\bF.INV\(z_xlfn.F.INV(z
\bF.TEST\(z_xlfn.F.TEST(z\bFILTERXML\(z_xlfn.FILTERXML(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bIFNA\(z_xlfn.IFNA(z\bIFS\(z
_xlfn.IFS(z	\bIMAGE\(z_xlfn.IMAGE(z
\bIMCOSH\(z_xlfn.IMCOSH(z	\bIMCOT\(z_xlfn.IMCOT(z
\bIMCSCH\(z_xlfn.IMCSCH(z	\bIMCSC\(z_xlfn.IMCSC(z
\bIMSECH\(z_xlfn.IMSECH(z	\bIMSEC\(z_xlfn.IMSEC(z
\bIMSINH\(z_xlfn.IMSINH(z	\bIMTAN\(z_xlfn.IMTAN(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bISOMITTED\(z_xlfn.ISOMITTED(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bLET\(z
_xlfn.LET(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z	\bMUNIT\(z_xlfn.MUNIT(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bNORM.INV\(z_xlfn.NORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bPDURATION\(z_xlfn.PDURATION(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPHI\(z
_xlfn.PHI(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bRRI\(z
_xlfn.RRI(z\bSECH\(z_xlfn.SECH(z\bSEC\(z
_xlfn.SEC(z
\bSHEETS\(z_xlfn.SHEETS(z	\bSHEET\(z_xlfn.SHEET(z
\bSKEW.P\(z_xlfn.SKEW.P(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z
\bT.DIST\(z_xlfn.T.DIST(z\bT.INV.2T\(z_xlfn.T.INV.2T(z	\bT.INV\(z_xlfn.T.INV(z
\bT.TEST\(z_xlfn.T.TEST(z\bTEXTAFTER\(z_xlfn.TEXTAFTER(z\bTEXTBEFORE\(z_xlfn.TEXTBEFORE(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bVALUETOTEXT\(z_xlfn.VALUETOTEXT(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z
\bXMATCH\(z_xlfn.XMATCH(z\bXOR\(z
_xlfn.XOR(z
\bZ.TEST\(z_xlfn.Z.TEST()r  r  r  subr  )r(   rY  expand_future_functionss      r.   rb  zWorksheet._prepare_formulaF  s   c"abkGc"abkGC crlG wN &&+-A7K&&~w?&&~w?&&*,?I&&*,?I&&mW=&&A&&(=wG&&A&&A&&)+=wG&&\7;&&)+=wG&&A&&mW=&&@&&*;WE&&&97C&&A&&A&&mW=&&)+=wG&&~w?&&~w?&&A&&A&&*;WE&&*;WE&&)97C((1HN&&~w?&&mW=&&)+=wG&&A&&+-A7K&&mW=&&)+=wG&&*;WE&&02KWU&&*,?I&&)+=wG&&A&&)+=wG&&~w?&&)+=wG&&A&&,.CWM&&/1I7S&&-/EwO&&*,?I&&,.CWM&&)+=wG&&*,?I&&)97C&&A&&/1I7S&&,.CWM&&mW=&&\7;&&,.CWM&&,.CWM&&mW=&&\7;&&mW=&&)97C&&+-A7K&&,.CWM&&*,?I&&)+=wG&&A&&*;WE&&~w?&&A&&)+=wG&&*,?I&&-/EwO&&')F
 &&+-NPW
 &&13MwW&&,.CWM&&/1I7S&&+-A7K&&*,?I&&)+=wG&&/1I7S&&~w?&&~w?&&,.CWM&&mW=&&\7;&&~w?&&A&&~w?&&A&&~w?&&A&&~w?&&A&&~w?&&)+=wG&&)+=wG&&*,?I&&\7;&&,.CWM&&+-A7K&&A&&A&&)+=wG&&)+=wG&&~w?&&-/EwO&&)+=wG&&*;WE&&+-A7K&&*,?I&&+-A7K&&)+=wG&&.0GQ&&.0GQ&&/1I7S&&/1I7S&&,.CWM&&\7;&&,.CWM&&,.CWM&&,.CWM&&+-A7K&&*;WE&&)97C&&\7;&&mW=&&\7;&&A&&~w?&&A&&)97C&&)97C&&)+=wG&&)+=wG&&A&&*;WE&&~w?&&A&&)+=wG&&*,?I&&*;WE&&)97C&&)97C&&+-A7K&&~w?&&~w?&&*,?I&&,.CWM&&A&&\7;&&Ar2   c	                 8   ||kD  r||}}||kD  r||}}| j                  ||      ry| j                  ||      ry||k(  r||k(  rt        ||      }	nt        ||      dz   t        ||      z   }	| j                  |      }| j                  r || j                  kD  r| j                  |       t        ||||	|      | j                  |   |<   | j                  sGt        ||dz         D ]5  }
t        ||dz         D ]!  }|
|k7  s||k7  s| j                  |
|d|       # 7 y)Nr>  r5   r   r   )
r@  r   rb  rg   r   rC  cell_arformula_tupler   ranger  )r(   rf  rg  rh  ri  rY  r:  rZ  atype
cell_ranger!  rC   s               r.   ra  zWorksheet._write_array_formula  s\    x"*IxIx"*IxI !!)Y7!!(H5  Y(%:*9i@J ")Y7#Hh78  ''0 I0A0A$A""9- ,@[%U,


9i(
 ##Y15 E HqL9 ECi'3)+;**3QDEE
 r2   c                 *    | j                  ||||      S )a  
        Write a date or time to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            date:        Date and/or time as a datetime object.
            cell_format: A cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r2  )r(   r!  rC   r/  r:  s        r.   write_datetimezWorksheet.write_datetime2  s      ##CdK@@r2   c                     | j                  ||      ry| j                  r || j                  kD  r| j                  |       | j	                  |      }|| j
                  }t        ||      | j                  |   |<   y)Nr>  r   )r@  rg   r   rC  _convert_date_timer   cell_datetime_tupler   )r(   r!  rC   r/  r:  rI  s         r.   r2  zWorksheet._write_datetimeE  s~    !!#s+ C$*;*;$;""3' ((. 22K  36;G

3r2   c                 *    | j                  ||||      S )a  
        Write a boolean value to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            boolean:     Cell data. bool type.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r,  )r(   r!  rC   booleanr:  s        r.   write_booleanzWorksheet.write_booleanZ  s      ""3WkBBr2   c                     | j                  ||      ry| j                  r || j                  kD  r| j                  |       |rd}nd}t	        ||      | j
                  |   |<   y)Nr>  r   r   )r@  rg   r   rC  cell_boolean_tupler   )r(   r!  rC   r|  r:  rZ  s         r.   r,  zWorksheet._write_booleanm  sf    !!#s+ C$*;*;$;""3'EE  2%E

3r2   c                 .    | j                  ||||||      S )a  
        Write a hyperlink to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )r  )r(   r!  rC   urlr:  r9  tips          r.   	write_urlzWorksheet.write_url  s    & sCk63GGr2   c                    | j                  ||      ry||}d}|j                  d      r&|j                  dd      }|j                  dd      }d}d}|j                  d      rJ|j                  dd      }|j                  dd	      }|j                  dd      }|j                  dd	      }d
}|j                  dd      }d}	t        |      | j                  kD  rt        d       y|}
|dk(  rd|v r|j                  dd      \  }}
nd }
| j                  |      }|
|s| j                  |
      }
t        j                  d|      st        j                  d|      rd|z   }t        j                  dd|      }|
xs d}| j                  }t        |      |kD  st        |      |kD  rt        d||fz         y| xj                  dz  c_        | j                  dkD  rt        d|z         y|| j                  }| j                  s@| j                  r || j                   kD  r| j#                  |       | j%                  ||||       |||
|d| j&                  |   |<   |	S )Nr>  r   	internal:rU      F	external:/\Tr  r   zFIgnoring URL since it exceeds Excel's string limit of 32767 charactersr?  #\w:\\file:///z^\.\\zfIgnoring URL '%s' with link or location/anchor > %d characters since it exceeds Excel's limit for URLSi  zNIgnoring URL '%s' since it exceeds Excel's limit of 65,530 URLS per worksheet.)	link_typer  r-  r  )r@  r  replacerA  rp   r   r7   _escape_urlr  r  ro  r  r   r  r  rg   r   rC  r  r   )r(   r!  rC   r  r:  r9  r  r  externalrE  url_strtmp_url_strmax_urls                r.   r  zWorksheet._write_url  s   !!#s+ >F 	 >>+&++k2.C^^K4FI >>+&++k2.C++c4(C^^K4F^^C.FH 	2. 	v;(#   >cz"yya0W""3'C"8**73 xx$(< 3& &&2s+C m%%s8g[!1G!;EHKW~V  	Ae#-/23  11K''##d.?.?(?&&s+ sC= #	%
S! r2   c                 *     | j                   ||g| S )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

        Args:
            row:          The cell row (zero indexed).
            col:          The cell column (zero indexed).
            string_parts: String and format pairs.
            cell_format:  Optional Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String truncated to 32k characters.
            -3: 2 consecutive formats used.
            -4: Empty string used.
            -5: Insufficient parameters.

        )_write_rich_stringr'  s       r.   write_rich_stringzWorksheet.write_rich_string	  s    * 't&&sC7$77r2   c                    t        |      }d }d}d}| j                  ||      ryt        |d   t              r|j	                         }t               }t               | _        | j                  j                  |       t               }	g }
d}d}t        |      dk  rt        d       y|D ]  }t        |t              sS|dk7  r#|
j                  |	       |
j                  |       n|
j                  |       |dk(  rt        d        y	||z  }d
}n*|dk(  r|dkD  rt        d        y|
j                  |       d}|dz  } t        |
d   t              s| j                  j                  d       |
D ]  }t        |t              r-| j                  j                  d       | j                  |       @g }t        |      r|j                  d       | j                  j                  d||       | j                  j!                  d        | j                  j"                  j%                         }t        |      | j&                  kD  rt        d       y| j(                  s| j*                  j-                  |      }n|}| j(                  r || j.                  kD  r| j1                  |       t3        |||      | j4                  |   |<   y)Nr   rU   r>  rJ   r  zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().r  r9  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().r  r   r)z	xml:spacepreservetzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().r?  )listr@  r3  r   popr	   r   r   _set_filehandlerA  r   append_xml_start_tag_write_fontr   _xml_data_element_xml_end_tagfhgetvaluerp   rg   re   rB  r   rC  cell_rich_string_tupler   )r(   r!  rC   r)   tokensr:  rF  
raw_stringr  default	fragmentspreviousposr   
attributesr9  s                   r.   r  zWorksheet._write_rich_string!  s   d
 !!#s+ fRj&) **,K Z {$$R( (
 	v;!B  "	EeV,x'$$W-$$U+ $$U+B;A  e#
# x'C!GJ    '#1HCE"	J )A,/LL'',  	/E%(++C0  '  
&u-%%&?@..sE:F))#.	/  ))+ z?T__,?  ##>>BB6JL!L C$*;*;$;""3'  6+z 


3 r2   c                 "    || j                   |<   y)a"  
        Add a callback function to the write() method to handle user defined
        types.

        Args:
            user_type:      The user type() to match on.
            user_function:  The user defined function to write the type data.
        Returns:
            Nothing.

        N)r  )r(   	user_typeuser_functions      r.   add_write_handlerzWorksheet.add_write_handler  s     *7I&r2   c                 P    |D ]!  }| j                  ||||      }|r|c S |dz  }# y)a  
        Write a row of data starting from (row, col).

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            data:   A list of tokens to be written with write().
            format: An optional cell Format object.
        Returns:
            0:  Success.
            other: Return value of write() method.

        r   r   r%  r(   r!  rC   datar:  r   rm  s          r.   	write_rowzWorksheet.write_row  =      	EKKS%=E1HC		 r2   c                 P    |D ]!  }| j                  ||||      }|r|c S |dz  }# y)a  
        Write a column of data starting from (row, col).

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            data:   A list of tokens to be written with write().
            format: An optional cell Format object.
        Returns:
            0:  Success.
            other: Return value of write() method.

        r   r   r%  r  s          r.   write_columnzWorksheet.write_column  r  r2   c                    | j                  ||dd      rt        d||fz         y|i }|j                  dd      }|j                  dd      }|j                  dd	      }|j                  d
d	      }|j                  dd      }	|j                  dd      }
|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d|      }|s.t        j                  j                  |      st        d|z         y| j                  j                  ||||||||	|
||||g       y)a  
        Insert an image with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            filename: Path and filename for in supported formats.
            options:  Position, scale, url and data stream of the image.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz Cannot insert image at (%d, %d).r>  Nx_offsetr   y_offsetx_scaler   y_scaler  r  object_positionr  
image_datadescription
decorativeFpositioningImage file '%s' not found.)r@  r   getospathexistsr   r  )r(   r!  rC   filenameoptionsr  r  r  r  r  r  anchorr  r  r  s                  r.   insert_imagezWorksheet.insert_image  sP   " !!#sD$73sCj@A?G;;z1-;;z1-++i+++i+kk%&kk%&.2[[t4
kk-6[[u5
 ]F3"''..":-89	
" r2   c                    | j                  ||      rt        d||fz         y|i }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }	|j                  d	d
      }
|s.t        j                  j                  |      st        d|z         y|r2|| j                  }d| _        | j                  ||||d|       d
| _        t        ||      \  }}}}}}}||||	|
g}| j                  j                  ||      }t        d||      | j                  |   |<   y)a  
        Embed an image in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            filename: Path and filename for in supported formats.
            options:  Url and data stream of the image.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        zCannot embed image at (%d, %d).r>  Nr  r  r:  r  r  r  Fr  T#VALUE!r   )r@  r   r  r  r  r  r  r  r  r   embedded_imagesget_image_indexcell_error_tupler   )r(   r!  rC   r  r  r  r  r:  r  r  r  
image_typerD   digestimageimage_indexs                   r.   embed_imagezWorksheet.embed_image  s`   " !!#s+2c3Z?@?Gkk%&kk%&kk-6[[t4
kk-6[[u5
"''..":-89""55'+D$NN3S+tSA',D$ !:6	
 :z;
K**::5&I  0	;T

3r2   c                    | j                  ||dd      rt        d||fz         y|d}|i }|j                  dd      }|j                  dd      }|j                  d	d
      }|j                  dd
      }|j                  dd
      }	|j                  dd      }
|j                  dd      }| j                  j	                  ||||||||	||
|g       y)a  
        Insert an textbox with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            text:     The text for the textbox.
            options:  Textbox options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz"Cannot insert textbox at (%d, %d).r>  NrU   r  r   r  r  r   r  r  r  r  F)r@  r   r  r   r  )r(   r!  rC   textr  r  r  r  r  r  r  r  s               r.   insert_textboxzWorksheet.insert_textboxR  s    " !!#sD$75c
BC<D?G;;z1-;;z1-++i+++i+.2kk-6[[u5
	
 r2   c                 $   | j                  ||dd      rt        d||fz         y|i }|j                  s"|j                  r"|j                  j                  rt        d       yd|_        |j                  rd|j                  _        |j	                  dd      }|j	                  dd      }|j	                  d	d
      }|j	                  dd
      }|j	                  dd
      }	|j	                  dd      }
|j	                  dd      }|j
                  d
k7  r|j
                  }|j                  d
k7  r|j                  }|j                  r|j                  }|j                  r|j                  }| j                  j                  ||||||||	|
|g
       y)a  
        Insert an chart with its top-left corner in a worksheet cell.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            chart:   Chart object.
            options: Position and scale of the chart.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz Cannot insert chart at (%d, %d).r>  Nz7Chart cannot be inserted in a worksheet more than once.r  r   r  r  r   r  r  r  r  F)r@  r   already_insertedcombinedr  r  r  r  r  r   r  )r(   r!  rC   chartr  r  r  r  r  r  r  r  s               r.   insert_chartzWorksheet.insert_chart  sr   " !!#sD$73sCj@A?G !!U^^8W8WJK%)E"~~26/;;z1-;;z1-++i+++i+.2kk-6[[u5
 ==AmmG==AmmG>>~~H>>~~H	
 r2   c                     |i }| j                  ||      ryt        |      | j                  kD  ryd| _        d| _        ||||g| j
                  |   |<   y)a  
        Write a comment to a worksheet cell.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            comment: Cell comment. Str.
            options: Comment formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32k characters.

        r>  r?  r   r   )r@  rA  rp   r   r   r   )r(   r!  rC   commentr  s        r.   write_commentzWorksheet.write_comment  sh    " ?G !!#s+ w<$//) $'Wg">c3r2   c                     d| _         y)z
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r(   s    r.   show_commentszWorksheet.show_comments       !"r2   c                     |s.t         j                  j                  |      st        d|z         y|| _        || _        y)z
        Set a background image for a worksheet.

        Args:
            filename:       Path and filename for in supported formats.
            is_byte_stream: File is a stream of bytes.
        Returns:
            Nothing.

        r  r>  N)r  r  r  r   r   r   )r(   r  is_byte_streams      r.   set_backgroundzWorksheet.set_background  s7     bggnnX&>-89 . (r2   c                     || _         y)z
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)r   )r(   authors     r.   set_comments_authorzWorksheet.set_comments_author  s      &r2   c                     | j                   S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rc   r  s    r.   get_namezWorksheet.get_name  s     yyr2   c                 V    d| _         d| _        | j                  | j                  _        y)a  
        Set this worksheet as the active worksheet, i.e. the worksheet that is
        displayed when the workbook is opened. Also set it as selected.

        Note: An active worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)rw   r}   rd   r  activesheetr  s    r.   activatezWorksheet.activate,  s$     *.**'r2   c                      d| _         d| _        y)z
        Set current worksheet as a selected worksheet, i.e. the worksheet
        has its tab highlighted.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)r}   rw   r  s    r.   selectzWorksheet.select>  s     r2   c                      d| _         d| _        y)zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   Nrw   r}   r  s    r.   hidezWorksheet.hideO        r2   c                      d| _         d| _        y)z
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        r  r   Nr  r  s    r.   very_hiddenzWorksheet.very_hidden_  r  r2   c                 H    d| _         | j                  | j                  _        y)aJ  
        Set current worksheet as the first visible sheet. This is necessary
        when there are a large number of worksheets and the activated
        worksheet is not visible on the screen.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rw   rd   r  
firstsheetr  s    r.   set_first_sheetzWorksheet.set_first_sheeto  s     )-&r2   c                    |i }||kD  r||}}d}|j                  dd      }|j                  dd      }|j                  dd      }	|s|r|rd}
nd}
| j                  d|||
      ry| j                  d|||
      ry|	dk  rd}	|	dkD  rd}	|	| j                  kD  r|	| _        t        ||d	z         D ]  }||||	|dg| j                  |<    d| _        y)
a  
        Set the width, and other properties of a single column or a
        range of columns.

        Args:
            first_col:   First column (zero-indexed).
            last_col:    Last column (zero-indexed). Can be same as first_col.
            width:       Column width. (optional).
            cell_format: Column cell_format. (optional).
            options:     Dict of options such as hidden and level.

        Returns:
            0:  Success.
            -1: Column number is out of worksheet bounds.

        Trw   F	collapsedlevelr   r>     r   )r  r@  r   rs  ru   r   )r(   rg  ri  widthr:  r  
ignore_rowrw   r  r   
ignore_colrC   s               r.   
set_columnzWorksheet.set_column  s   ( ?G x%-yY 
 Xu-KKU3	GQ' 5VJJ !!!Xz:F!!!Y
JG 19E19E4)))%*D" HqL1 	WC"'feYPU!VDMM#	W !%r2   c                 R    || j                  |      }| j                  |||||      S )a;  
        Set the width, and other properties of a single column or a
        range of columns, where column width is in pixels.

        Args:
            first_col:   First column (zero-indexed).
            last_col:    Last column (zero-indexed). Can be same as first_col.
            width:       Column width in pixels. (optional).
            cell_format: Column cell_format. (optional).
            options:     Dict of options such as hidden and level.

        Returns:
            0:  Success.
            -1: Column number is out of worksheet bounds.

        )_pixels_to_widthr  )r(   rg  ri  r  r:  r  s         r.   set_column_pixelszWorksheet.set_column_pixels  s1    ( ))%0Ey(E;PPr2   c                 <   | j                   rt        d       y| j                  yi }t        | j                  j
                  | j                  j
                  j                        }t        | j                  | j                  dz         D ]3  }| j                  j                  |      s t        | j                  | j                  dz         D ]  }|| j                  |   v s| j                  |   |   }|j                  j                  }d}|dv r_|dk(  r|j                  }||   }	n|j                   }	d|	vrt#        |	      }n1|	j%                  d      D ]  }	t#        |	      }
|
|kD  s|
} n|d	k(  r"d
t'        t)        |j*                              z  }n|dk(  r| j,                  }n|dk(  r|j.                  rd}nd}n|dk(  s|dk(  rt1        |j2                  t4        t6        f      r1|j2                  dkD  r}d
t'        t)        |j2                              z  }n[t1        |j2                  t(              rt#        |j2                        }n+t1        |j2                  t8              r|j2                  rd}nd}| j:                  j                  ||f      r
|dkD  r|dz  }|j                  |d      }||kD  s|||<    6 |j=                         D ]  \  }}| j?                  |d
z         }|dkD  rd}| j@                  j                  |      ry| j@                  j                  |      }|d   }|d   }|-|s+||kD  sk|| j@                  |   d<   d| j@                  |   d<   || j@                  |   d<   d| j@                  |   d<   |dddddg| j@                  |<    y)z
        Simulate autofit based on the data, and datatypes in each column.

        Args:
            None.

        Returns:
            Nothing.

        z1Autofit is not supported in constant_memory mode.N)keyr   r   rG   rO   rG   
rH   r  rM   rK      $   rL   rN      g     o@   TF)!rg   r   rr   sortedre   string_table__getitem__rs  rq   r   r  rs   rt   r  __name__r9  r  r   r7   rA  r-  rI  r   r|  r3  rZ  r  r&   r+  r   itemsr  ru   )r(   col_width_maxstringsrow_numcol_numcell	cell_typelength	string_idr9  
seg_length	width_maxpixel_widthr  ru   
user_widthrw   s                    r.   autofitzWorksheet.autofit  s    DE ??"  NN''T^^-H-H-T-T
 T__doo.AB W	8G::>>'* $//A2EF S8djj11::g.w7D $ 7 7IF $<< %0(,I%,Y%7F%)__Fv-%3F%;F +1,,t*< 8-;F-C
#-#6-7F8
 #h. "#ST[[)9%:!:"j0 "&!9!9"i/  <<%'F%'F"i/93N
 &djj5#,?#zzA~)*STZZ-A)A'

C8%3DJJ%?F'

D9#zz)+)+ ((,,gw-?@VaZ" !. 1 1'1 =I	)17g.gS8	W	8t %2$7$7$9 	N G[ ))+/:E u} }}  )  ==,,W5%a[
!!)&z)49g.q148g.q105DMM'*1-04DMM'*1-*/ua)Mg&5	Nr2   c                    |i }| j                   | j                   }nd}| j                  ||      ry|| j                  }|j                  dd      }|j                  dd      }|j                  dd      }|dk(  rd}| j                  }|dk  rd}|dkD  rd}|| j                  kD  r|| _        |||||g| j
                  |<   d	| _        ||g| j                  |<   y)
a  
        Set the width, and other properties of a row.

        Args:
            row:         Row number (zero-indexed).
            height:      Row height. (optional).
            cell_format: Row cell_format. (optional).
            options:     Dict of options such as hidden, level and collapsed.

        Returns:
            0:  Success.
            -1: Row number is out of worksheet bounds.

        r   r>  rw   Fr  r   r   r  T)rs   r@  r   r  r   r   r   r   )	r(   r!  heightr:  r  min_colrw   r  r   s	            r.   set_rowzWorksheet.set_rowm  s    ?G ??&ooGG !!#w/>,,F Xu-KKU3	GQ' Q;F,,F 19E19E4)))%*D" %k65)Lc !%  &v.sr2   c                 P    || j                  |      }| j                  ||||      S )a  
        Set the width (in pixels), and other properties of a row.

        Args:
            row:         Row number (zero-indexed).
            height:      Row height in pixels. (optional).
            cell_format: Row cell_format. (optional).
            options:     Dict of options such as hidden, level and collapsed.

        Returns:
            0:  Success.
            -1: Row number is out of worksheet bounds.

        )_pixels_to_heightr&  )r(   r!  r$  r:  r  s        r.   set_row_pixelszWorksheet.set_row_pixels  s/     ++F3F||Cg>>r2   c                 n    || j                   }|| j                  k7  rd| _        || _         |rd| _        yy)z
        Set the default row properties.

        Args:
            height:           Default height. Optional, defaults to 15.
            hide_unused_rows: Hide unused rows. Optional, defaults to False.

        Returns:
            Nothing.

        NTr   )r   r   r   r   )r(   r$  hide_unused_rowss      r.   set_default_rowzWorksheet.set_default_row  sB     >,,FT---$(D!&,D#&'D# r2   c           	      R   ||k(  r||k(  rt        d       y||kD  r||}}||kD  r||}}| j                  ||      ry| j                  ||      ryt        ||||      }t        ||dz         D ]  }t        ||dz         D ]  }	| j                  j                  ||	f      r/| j                  j                  ||	f      }
t        d|d|
d      | j                  j                  ||	f      r/| j                  j                  ||	f      }
t        d|d|
d      || j                  ||	f<     | j                  j                  ||||g       | j                  ||||       t        ||dz         D ]5  }t        ||dz         D ]!  }	||k(  r|	|k(  r| j                  ||	d	|       # 7 y
)a3  
        Merge a range of cells.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            data:         Cell data.
            cell_format:  Cell Format object.

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of write().

        zCan't merge single cellNr>  r   zMerge range '!' overlaps previous merge range ''.!' overlaps previous table range 'rU   r   )r   r@  r   rs  r   r  r"   r   r   r  r&  r  )r(   rf  rg  rh  ri  r  r:  ru  r!  rC   previous_ranges              r.   merge_rangezWorksheet.merge_range  s   2  Y(%:*+ x%-yYx%-yY !!)Y7!!(H5 iHhG
HqL1 	?CY15 ?$$((#s4%)%6%6%:%:C:%FN*%~7  %%))3*5%)%5%5%9%93*%EN*%~7 
 5?D%%sCj1?	?$ 	

9i8DE 	Iy$< HqL1 	=CY15 =)#y(8!!#sB<=	= r2   c                     ||k  r||}}||k  r||}}| j                  ||||      }t        ||||      }|| _        || _        ||g| _        t        ||dz         D ]  }d| j                  ||f<    y)a  
        Set the autofilter area in the worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
             Nothing.

        r   TN)_convert_name_arear   r   r   r   rs  r   )r(   rf  rg  rh  ri  arearefrC   s           r.   
autofilterzWorksheet.autofilter!	  s      i%-yYi%-yY &&y)XxPy)Xx@#!&1 HqL1 	7C26Dy#./	7r2   c                    | j                   st        d       y	 t        |       | j                  \  }}||k  s||kD  rt        d|||fz         y| j                  |      }t        |      dvrt        d|z         | j                  ||      }t        |      dk(  r&|d	   dk(  r| j                  ||d
   g       d
| _        yt        |      dk(  r:|d	   dk(  r2|d   d
k(  r*|d   dk(  r"| j                  ||d
   |d   g       d
| _        y|| j                  |<   d	| j                  |<   d
| _        y# t        $ r6 |}t	        |dz         \  }}|| j
                  k\  rt        d|z         Y yY Iw xY w)z
        Set the column filter criteria.

        Args:
            col:       Filter column (zero-indexed).
            criteria:  Filter criteria.

        Returns:
             Nothing.

        -Must call autofilter() before filter_column()NrB   Invalid column '%s'z6Column '%d' outside autofilter() column range (%d, %d))rV   r  z+Incorrect number of tokens in criteria '%s'r  r   r   r  rV      )r   r   r&   r'   r   ro   r   _extract_filter_tokensrA  _parse_filter_expressionfilter_column_listr   r   r   )r(   rC   criteria
col_letterrD   	col_firstcol_lastr  s           r.   filter_columnzWorksheet.filter_columnB	  s    ##@A		H !% 1 1H ?cHnH	8,- ,,X6v;f$>IJ..x@ v;!q	Q##C&)5  [A&)q.VAY!^q	UV##C&)VAY)?@  %+DS!$%DS!O  	J(s3HQdoo%*Z78 &	s   D0 09E/.E/c                 n   | j                   st        d       y	 t        |       | j                  \  }}||k  s||kD  rt        d|||fz         y|| j                  |<   d| j                  |<   d| _	        y# t        $ r5 |}t	        |dz         \  }}|| j
                  k\  rt        d|z         Y yY w xY w)z
        Set the column filter criteria in Excel 2007 list style.

        Args:
            col:      Filter column (zero-indexed).
            filters:  List of filter criteria to match.

        Returns:
             Nothing.

        r9  NrB   r:  z5Column '%d' outside autofilter() column range (%d,%d)r   )
r   r   r&   r'   r   ro   r   r   r   r   )r(   rC   filtersr@  rD   rA  rB  s          r.   r>  zWorksheet.filter_column_list~	  s     ##@A		H !% 1 1H ?cHn )X67  ' !+  	J(s3HQdoo%*Z78 &	s   A6 69B43B4c                    | j                  ||dd      ry| j                  ||dd      ry|i }n|j                         }h d}|j                         D ]  }||vst        d|z          y d|v r|d   |d<   d	|v r|d	   |d<   d
|vrt        d       yddddddddddddd}|d
   |vrt        d|d
   z         y||d
      |d
<   |d
   dk(  r#|j	                  d      |j	                  d      y|d
   dk(  s|d
   dk(  s|d
   dk(  r
d|d<   d|d<   d|vrt        d       yi ddddddd dd!dd"d#d$d#d%d#d&d'd(d'd)d*d+d*d,d-d.d-d/d0d1d0}	|d   |	vrt        d2|d   z         y|	|d      |d<   |d   dk(  s|d   dk(  rd|vrt        d3       yd|d<   d4d5d6d7}
d8|vrd4|d8<   n$|d8   |
vrt        d9|d8   z         y|
|d8      |d8<   |d
   d:v r^|d   rYt        |d         rK| j                  |d         }d;|z  |d<   |d   r*t        |d         r| j                  |d         }d;|z  |d<   |j	                  d      r#t        |d         d<kD  rt        d=|d   z         y|j	                  d>      r#t        |d>         d<kD  rt        d?|d>   z         y|j	                  d      r#t        |d         d@kD  rt        dA|d   z         y|j	                  dB      r#t        |dB         d@kD  rt        dC|dB   z         y|d
   dk(  rBt        |d   t              r/ | j                  |d    }t        |      d@kD  rt        dD|z         ydE|vrd5|dE<   dF|vrd5|dF<   dG|vrd5|dG<   dH|vrd5|dH<   ||||gg|dI<   dJ|v r|dI   j                  |dJ          dK|v r|dK   j                  dLdM      |dK<   | j                  j                  |       y4)Na  
        Add a data validation to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Data validation options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr>  N>   rZ  sourcemaximumminimumr?  dropdownvalidate
error_type
show_error
show_inputerror_titleinput_titlemulti_rangeother_cellsignore_blankerror_messageinput_messagez+Unknown parameter '%s' in data_validation()r?  rG  rZ  rI  rK  z5Parameter 'validate' is required in data_validation()nonewholedecimalr  r/  r0  
textLengthcustom)anyz	any valuezwhole numberrW  integerrX  r  r/  r0  ztext lengthr  rZ  zJUnknown validation type '%s' for parameter 'validate' in data_validation()rP  rU  betweenr?  rH  z5Parameter 'criteria' is required in data_validation()not between
notBetweenequal toequalr  ==not equal tonotEqual!=<>greater thangreaterThan>	less thanlessThan<greater than or equal togreaterThanOrEqual>=less than or equal tolessThanOrEqual<=zHUnknown criteria type '%s' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   r  )stopwarninginformationrL  zJUnknown criteria type '%s' for parameter 'error_type' in data_validation()r/  r0  %.16g    z6Length of input title '%s' exceeds Excel's limit of 32rO  z6Length of error title '%s' exceeds Excel's limit of 32   z9Length of input message '%s' exceeds Excel's limit of 255rT  z9Length of error message '%s' exceeds Excel's limit of 255zSLength of list items '%s' exceeds Excel's limit of 255, use a formula range insteadrS  rJ  rN  rM  cellsrR  rQ  $rU   )r@  copykeysr   r  r   ry  rA  r3  r  	_csv_joinr8   r  r   r  )r(   rf  rg  rh  ri  r  valid_parameters	param_keyvalid_typescriteria_typeserror_types	date_timerY  s                r.   data_validationzWorksheet.data_validation	  s   $ !!)YdC!!(HdDA?G llnG
* ! 	I 00BYNO	 w&x0GG&y1GG W$HI # '"
  :k124;J4GH "-gj.A"BGJ
 J6)M*2O,4
 J6)z"f,z"h."+GJ!%GI W$HI
y
<
 
 	

 '
 J
 *
 *
 M
 
 
 
 '(<
 &
 $%6
  #!
( :n424;J4GH "01D"EGJ :)+wz/Bl/R'E !%GI 
 w&$%GL!\"+5')0)>? $/0E$FGL! J#33 "77#34//0@AI&2GGy!&89K&L 33GI4FG	%,y%8	" ;;}%#gm.D*E*JH-()  ;;}%#gm.D*E*JH-()  ;;'C0H,IC,OK/*+  ;;'C0H,IC,OK/*+  :&(Z8H$-O$dnngg&67G7|c!79@A  (&'GN#W$"#GJw&$%GL!w&$%GL! '	8XFG G#G##GM$:; G#%,]%;%C%CC%LGM" 	(r2   c                    | j                  ||dd      ry| j                  ||dd      ry|i }n|j                         }h d}|j                         D ]  }||vst        d|z          y d|vrt        d       yi d	d
dddddddddddddddddddddddddd d!d!d"d"d#d$d%d&d'}|d   |vrt        d(|d   z         y|d   dk(  rd|d)<   ||d      |d<   i d*d*d+d,d-d.d/d.d0d.d1d2d3d2d4d2d5d6d7d6d8d9d:d9d;d<d=d<d>d?d@d?dAdBdCdDdEdFdGdHdIdJdKdLdMdNdKdNdO}	dP|v r|dP   |	v r|	|dP      |dP<   |d   dQv rd
|d<   dR|v r6t	        |dR         st        dS       y| j                  |dR         }
dT|
z  |dR<   dU|v r6t	        |dU         st        dV       y| j                  |dU         }
dT|
z  |dU<   dW|v r6t	        |dW         st        dX       y| j                  |dW         }
dT|
z  |dW<   i dYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydz}|d   d&k(  r|j                  d{      st        d|       y}|d{   |vrt        d~|d{   z         y||d{      |d{<   d|d<   |d{   j                  d      rd|d<   n|d{   j                  d      rd|d<   | j                  |j                  d      |j                  d            |d<   ||kD  r||}}||kD  r||}}t        ||||      }t        ||      }d|v r|d   }|j                  dd      }d|v r|d   r|d   j                         |d<   | j                  |d<   | xj                  dz  c_        | j                  s|j                  d      s|j                  d      s|j                  d      s|j                  d      sw|j                  d      sf|j                  d      sU|j                  d      sD|j                  d      s3|j                  d      s"|j                  d      s|j                  d      rd|d<   |d   dk(  r|dP   dBk(  rdB|d<   d|dR   d|d|d<   n~|dP   dCk(  rd|d<   d|dR   d|d|d<   na|dP   dDk(  r dD|d<   d|t        |dR         |dR   fz  |d<   n9|dP   dEk(  r dE|d<   d|t        |dR         |dR   fz  |d<   nt        d|dP   z         |d   dk(  r|dP   dFk(  r	d|z  |d<   n|dP   dGk(  r	d|z  |d<   n|dP   dk(  r	d|z  |d<   n|dP   dHk(  rd|d|d|d<   n|dP   dIk(  rd|d|d|d<   n|dP   dJk(  rd|d|d|d<   nn|dP   dKk(  rd|d|d|d<   nY|dP   dLk(  rd|d|d|d|d<   nA|dP   dMk(  rd|d|d|d<   n,|dP   dNk(  rd|d|d|d|d	|d<   nt        d|dP   z         |d   dk(  rd|z  |d<   |d   dk(  rd|z  |d<   |d   dk(  rd|z  |d<   |d   d k(  rd|z  |d<   |d   d!k(  rd|d<   d|d<   d|d<   d|d<   |j!                  ddë       |j!                  ddū       |j!                  ddǫ       |j!                  ddǫ       |j!                  ddʫ       |j!                  dd̫       t#        |d         |d<   t#        |d         |d<   |d   d"k(  rd|d<   d|d<   |j!                  ddë       |j!                  ddͫ       |j!                  ddū       |j!                  ddǫ       |j!                  ddǫ       |j!                  ddΫ       |j!                  ddϫ       |j!                  ddЫ       t#        |d         |d<   t#        |d         |d<   t#        |d         |d<   d|vrd|d<   |d   d$k(  rd|d<   |j                  d«      sd|d<   d|d<   n|d   |d<   |j                  dī      sd|d<   d|d<   n|d   |d<   |j!                  ddǫ       |j!                  ddǫ       |j!                  ddث       |j!                  d|d          |j!                  ddګ       |j!                  ddګ       |j!                  ddګ       |j!                  dd       |j!                  dd۫       |j!                  dd۫       |j!                  ddګ       |j!                  ddګ       |j!                  dd       |j!                  ddܫ       t#        |d         |d<   t#        |d         |d<   t#        |d         |d<   t#        |d         |d<   t#        |d         |d<   |j                  d      r6d| _        |d   dk(  r|d   dk(  rd|d<   |d   dk(  r|d   dk(  rd|d<   ||d<   	 |d   j'                  d/      |d<   	 |d   j'                  d/      |d<   	 |d   j'                  d/      |d<   || j,                  v r| j,                  |   j/                  |       y|g| j,                  |<   y# t(        t*        f$ r Y w xY w# t(        t*        f$ r Y |w xY w# t(        t*        f$ r Y yw xY w)a#  
        Add a conditional format to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Conditional format options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr>  N>$   r4  iconsrZ  rJ   rH  rI  bar_onlyr?  max_typemid_typemin_type	bar_color	bar_solid	max_color	max_value	mid_color	mid_value	min_color	min_value
icon_style
icons_only
max_length
min_lengthrQ  stop_if_truebar_directionbar_no_borderdata_bar_2010reverse_iconsbar_axis_colorbar_border_colorbar_axis_positionbar_negative_colorbar_negative_color_samebar_negative_border_colorbar_negative_border_color_samez.Unknown parameter '%s' in conditional_format()r?  r4  z4Parameter 'type' is required in conditional_format()r  cellIsr/  r0  averageaboveAverage	duplicateduplicateValuesuniqueuniqueValuestoptop10bottomr  time_period
timePeriodblankscontainsBlanks	no_blanksnotContainsBlankserrorscontainsErrors	no_errorsnotContainsErrors2_color_scale3_color_scaledata_bardataBar
expressioniconSet)rY  icon_setz?Unknown value '%s' for parameter 'type' in conditional_format()	directionr]  r^  r_  r`  ra  r  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  
containingcontainsTextnotContains
beginsWithendsWith	yesterdaytoday	last7DayslastWeekthisWeeknextWeek	lastMonth	thisMonth	nextMonth)znot containingzbegins withz	ends withr  r  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthr?  rv  rZ  z5Conditional format 'value' must be a datetime object.rw  rI  z7Conditional format 'minimum' must be a datetime object.rH  z7Conditional format 'maximum' must be a datetime object.3_arrows3Arrows3_flags3Flags3_traffic_lights_rimmed3TrafficLights23_symbols_circled3Symbols4_arrows4Arrows4_red_to_black4RedToBlack4_traffic_lights4TrafficLights5_arrows_gray5ArrowsGray
5_quarters	5Quarters3_arrows_gray3ArrowsGray3_traffic_lights3TrafficLights3_signs3Signs	3_symbols	3Symbols24_arrows_gray4ArrowsGray	4_ratings4Rating5_arrows5Arrows	5_ratings5Ratingr  z^The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format()r  z/Unknown icon_style '%s' in conditional_format()rV   total_icons4r;  5r  r  rQ  r{  rU   rJ   priorityr   r  r  r  r  r  r  r  r  r  r  r  is_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))rY  notContainsTextzISERROR(SEARCH("z))zLEFT(%s,%d)="%s"zRIGHT(%s,%d)="%s"z2Invalid text criteria '%s' in conditional_format()zFLOOR(%s,1)=TODAY()-1zFLOOR(%s,1)=TODAY()tomorrowzFLOOR(%s,1)=TODAY()+1zAND(TODAY()-FLOOR(z,1)<=6,FLOOR(z,1)<=TODAY())zAND(TODAY()-ROUNDDOWN(z*,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(z,0)<(WEEKDAY(TODAY())+7))z",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(z ,0)-TODAY()<=7-WEEKDAY(TODAY()))zAND(ROUNDDOWN(z+,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(z",0)-TODAY()<(15-WEEKDAY(TODAY())))z
AND(MONTH(z)=MONTH(TODAY())-1,OR(YEAR(z)=YEAR(TODAY()),AND(MONTH(z)=1,YEAR(A1)=YEAR(TODAY())-1)))z)=MONTH(TODAY()),YEAR(z)=YEAR(TODAY()))z)=MONTH(TODAY())+1,OR(YEAR(z
)=12,YEAR(z)=YEAR(TODAY())+1)))z9Invalid time_period criteria '%s' in conditional_format()zLEN(TRIM(%s))=0zLEN(TRIM(%s))>0zISERROR(%s)zNOT(ISERROR(%s))
colorScaler  r  r  minr  maxr  r   r  r  z#FF7128r  z#FFEF9C
percentilez#F8696Bz#FFEB84z#63BE7Br  2   autoMinx14_min_typeautoMaxx14_max_typer  z#638EC6r  Fz#FF0000z#000000  rs  )r@  r|  r}  r   r   ry  r  r  _set_icon_propsr   r   r  _get_dxf_indexr   r   rA  
setdefaultr   rl   lstripKeyErrorAttributeErrorr   r  )r(   rf  rg  rh  ri  r  valid_parameterr  
valid_typecriteria_typer  valid_iconsru  
start_cells                 r.   conditional_formatzWorksheet.conditional_format
  s   ( !!)YdC!!(HdDA?G llnG%
P ! 	I/E	QR	  GH
H
F
 F
 ~	

 *
 n
 7
 g
 F
 <
 &
 ,
 &
 ,
 _
  _!
" 	#
$ $!'

. 6?*,*,3FO< v(*'/$(9GFO!
y!
<!
 !
 	!

 '!
 J!
 *!
 *!
 M!
 !
 !
 !
 '(<!
 &!
 $%6!
  #!!
" .#!
$ ,'#$&###%%%')A!
H  WZ%8M%I"/
0C"DGJ 6?..&GFO'!)''*:;PQ $ 7 78H II'.':GG$G#)')*<=RS $ 7 7	8J KI)09)<GI&G#)')*<=RS $ 7 7	8J KI)09)<GI&
	
x
 &'8
  	

 	
 m
  0
 ]
 +
 ]
  0
 x
 
 ]
 
  	!
" #
* 6?i';;|,C  |$K7El+, (3GL4I(J% &'GM"|$//4)*&&11#6)*&#33M*GKK,@ GG
 x"*IxIx"*IxI iHhG
&y)<
 G# /J#++C4J w78#4 ' 1 @ @ BGH #//
Q ##{{?+{{;'{{-.{{/0{{45{{67{{;<{{?+{{./{{+,{{?+*.G&' 6?f$z"n4"0G$&	" $5"3G$&	" $4".%7()G$; &	"
 $
2",%8()G$< &	" .07
0CD 6?l*z"k1%<z%I	"$/%:Z%G	"$
2%<z%I	" $3 ":/ 	" $
2 ":/ 	" $
2 ":/ 	" $
2 ":/ 	" $3 ":z; 	" $3 ":/ 	" $3 ":z:G 	" .07
0CD 6?..!2Z!?GI6?11!2Z!?GI6?..!.!;GI6?11!3j!@GI 6?o-*GFO !%GH #'GJ#'GK z51z51{A.{A.{I6{I6#+GK,@#AGK #+GK,@#AGK  6?o-*GFO !%GHz51z<8z51{A.{A.{I6{I6{I6#+GK,@#AGK #+GK,@#AGK #+GK,@#AGK  ')')$ 6?i' $GH;;z*&+
#*3'*1**=';;z*&+
#*3'*1**='{A.{A.{I617;3GHz516{E233Y?:IF8%@?G2B7/;#+GK,@#AGK *27;M3N*OG&'(09I1J(KG$%,4W=Q5R,SG()3;344G/0
 ;;)*!%Dz"e+0D0I'+$z"e+0D0I'+$)GG	#*;#7#>#>s#CGK 	#*;#7#>#>s#CGK 	#*;#7#>#>s#CGK 
 ***j)009  .5IDj)# .) 		 .) 		 .) 		s6   h h 2h1 hhh.-h.1iic                    i }i }|i }n|j                         }| j                  rt        d       y| j                  ||dd      ry| j                  ||dd      ry||kD  r||}}||kD  r||}}t	        ||||      }t        ||dz         D ]  }	t        ||dz         D ]  }
| j                  j                  |	|
f      r/| j                  j                  |	|
f      }t        d|d|d	      | j                  j                  |	|
f      r/| j                  j                  |	|
f      }t        d|d
|d	      || j                  |	|
f<     h d}|j                         D ]  }||vst        d|z          y |j                  dd      |d<   |j                  dd      |d<   |j                  dd      |d<   ||z
  }|d   r|dz  }|dk  rt        d       y|j                  dd      |d<   |j                  dd      |d<   |j                  dd      |d<   |j                  dd      |d<   |j                  dd      |d<   |j                  dd      |d<   d|v r|d   }||d<   d|v rt        d |z         yt        j                  d!|t        j                        rt        j                  d"|      rt        d#|z         yt        j                  d$|      rt        d%|z         yt        j                  d&|      st        j                  d'|      rt        d(|z         yd)|v r+|d)   |d)<   |d)   d*|d)<   |d)   j                  dd*      |d)<   nd+|d)<   |}|}|j                  d      r|dz  }|j                  d      r|dz  }t	        ||||      |d,<   t	        ||||      |d-<   |d   sd|d<   |d   r|d-   |d<   d}g |d.<   i }t        ||dz         D ],  }|d/t        |      z   d*d*d*dd*ddd0	}d.|v r|t!        |d.         k  r|d.   |dz
     }nd}|r|j                  d1d      }|j                  d2      r|d2   |d<   |d   }|j#                         }||v rt        d3|z          yd||<   |j                  d4      |d5<   d6|v rU|d6   rP|d6   }|j%                  d7      r|j'                  d7      }|j                  d8d9      }| j)                  |d      }||d6<   |j                  d:      r|d:   }|d;k(  rd<}|d=k(  rd>}t+        g d?      }||v r| j-                  ||d         }n| j)                  |d      }||d@<   dA}||d:<   |j                  dBd      }| j/                  |||||       n>|j                  dC      r-|dC   }||dC<   | j1                  ||||j                  d1             ||j3                         |d1<   |||dz
  <   |d.   j5                  |       |d   r| j1                  |||d   |d5          |dz  }/ dD|v r|dD   }d}t        ||dz         D ]y  }	d} t        ||dz         D ]^  }
|t!        |      k  rI| t!        ||         k  r8||   |    }!| |v r| j7                  |	|
|!||           n| j7                  |	|
|!d       | dz  } ` |dz  }{ t9        t        ||dz               D ]T  \  }}|d.   |   }"|"s|"d6   s|j                  |      }#|"d6   }t        ||dz         D ]  }	| j/                  |	|||#        V | j:                  j5                  |       |d   r%t        ||dz         D ]  }
d| j<                  ||
f<    y)EaY  
        Add an Excel table to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Table format options. (Optional)

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
            -3: Not supported in constant_memory mode.
        Nz5add_table() isn't supported in 'constant_memory' moder  Tr>  r   zTable range 'r0  r/  r.  >   r  rc   stylecolumns	total_rowr7  
header_rowbanded_rowslast_columnfirst_columnbanded_columnsz%Unknown parameter '%s' in add_table()r?  r  r  r7  r   z1Must have at least one data row in in add_table()r  Fshow_first_colr  show_last_colshow_row_stripesr  show_col_stripesheader_row_countr  totals_row_shownrc    z.Name '%s' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz-Invalid Excel characters in add_table(): '%s'z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z0Name looks like a cell name in add_table(): '%s'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$z3Invalid name '%s' like a RC cell ref in add_table()r  rU   TableStyleMedium9rs  a_ranger  Column)	idrc   total_stringtotal_functioncustom_totaltotal_valuerY  rJ   name_formatrJ   r   z*Duplicate header name in add_table(): '%s'header_formatr%  rY  r  @z[#This Row],r"  
count_nums	countNumsstd_devstdDevr  r)  countr  r  r+  sumvarr#  rZ  r$  r!  r  )r|  rg   r   r@  r   rs  r   r  r"   r   r}  r  r  UNICODEr  r-  rA  lowerr  r  rb  set_table_function_to_formular  r  r  r  r&  	enumerater   r   )$r(   rf  rg  rh  ri  r  r   col_formatsru  r!  rC   r1  r  r  num_rowsrc   first_data_rowlast_data_rowcol_id
seen_namesr  col_data	user_dataxformatheader_namerY  function	subtotalsrZ  r!  r  ijr   column_dataformula_formats$                                       r.   	add_tablezWorksheet.add_table  s   $ ?G llnGHI !!)YdC!!(HdDA x%-yYx%-yY iHhG
HqL1 	>CY15 >##''c
3%)%5%5%9%93*%EN*%~7  &&**C:6%)%6%6%:%:C:%FN*%~7 
 4>D$$c3Z0>	>$
 ! 	I/<yHI	 ")]D!A 'L$ ? 'L$ ? i'< MHa<DE #*++ne"D!(]E!Bo$+KKu$E !$+KK0@%$H !$+KKa$@ !$+KKU$C ! W6?D E&Md{ELM 88/rzzBbhhG DtKL xx:DAG$NO xxT*bhh7NPT.UJTQR g$W-E'NW~%!#g #7^33C<E'N0E'N # ;;|$aN;;{#QM ")Y(Kg#Iy-Ri |$$%GL! < "'	"2E, i
Y15 x	G  3v;. ""$ " #
H G#S!344 '	 26A: >I $I'mmHd;G !}}X.+4X+>( #+6"2K&,,.Dz)IDPQ!+/
4(.7mmO.LH]+ !I-)I2F"+I"6 #--c2&-nnS&9G #*//#~"F #'"7"7"F.5+ !}}%56#,-=#>#|3'2H#y0'/H$'	%	 $y0&*&E&E ((6*:'G '+&;&;Hd&KG7>H^4'/H5=!12 )mQ ?++HgwQVW"~6'0'@3?0**$g|Y]]8=T
 *-4-C-C-E* /6K
+ )##H- |$""w(8(=:Q aKFqx	v W6?DA^]Q->? 
 HqL9 C3t9}Sa\)9 $Q
+ KKS%QH KKS%>FA Q
  )y(Q,)GH 	OOFG	*62K{95!,!8%i0 1BC OC''Wg~NO	O 	5! < Y15 ;6:!!9c"23; r2   c                    | j                  ||dd      rydt        ||      gi}|i }h d}|j                         D ]  }||vst        d|z          y d|vrt        d       y|j	                  d	d
      }|dvrt        d       y|dk(  rd}||d	<   d|v r%t        |d   t              r	|d   |d<   n	|d   g|d<   t        |d   t              r	|d   |d<   n	|d   g|d<   t        |d         }t        |d         }	||	k7  rt        d       yt        |d         |d<   t        | j                        }
g }|d   D ]B  }|j                  dd      }|j                  d      }d|vr|
dz   |z   }|j                  |       D ||d<   g }|d   D ]%  }|j                  dd      }|j                  |       ' ||d<   |j	                  d      |d<   |j	                  d      |d<   |j	                  d      |d<   |j	                  d      |d<   |j	                  d      |d <   |j	                  d!      |d!<   |j	                  d"      |d"<   |j	                  d#      |d#<   |j	                  d$      |d$<   |j	                  d%      |d%<   |j	                  d&      |d'<   |j	                  d(      |d(<   |j	                  d)d      }|d*k(  rd+|d,<   n|d-k(  rd.|d,<   nd/|d,<   |j	                  d0      }|rd|vr|
dz   |z   }||d0<   |j	                  d1d+      }t        |      }|d2   |d3<   |d   |d4<   |d!   |d5<   |d   |d6<   |d    |d7<   |d   |d8<   |d   |d9<   | j                  ||d3       | j                  ||d4       | j                  ||d5       | j                  ||d6       | j                  ||d7       | j                  ||d8       | j                  ||d9       | j                  j                  |       y+):ap  
        Add sparklines to the worksheet.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            options: Sparkline formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.

        Tr>  	locations>   r  r  axisr4  rs  r  weightmarkersreverselocation	date_axis	low_color	low_point
high_color
high_point
last_color
last_pointempty_cellsfirst_colorfirst_pointplot_hiddenshow_hiddenseries_colormarkers_colornegative_colornegative_pointsz)Unknown parameter '%s' in add_sparkline()rs  z0Parameter 'range' is required in add_sparkline()r?  r4  line)r]  columnwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()r_  stackedrL  rangeszMMust have the same number of location and range parameters in add_sparkline()r-  r{  rU   r  !rQ  highrO  lowr\  negativerV  firstrS  lastrJ  r  r  rH  rK  rX  rw   rI  rT  zeror   emptyconnectspangaprM  r  seriesrY  r[  rZ  rU  rR  rP  rN  )r@  r   r}  r   r  r3  r  rA  r    rc   r  r  r  r   _set_spark_colorr   )r(   r!  rC   r  	sparkliner  r  
spark_typerange_countlocation_count	sheetname
new_rangesspark_rangenew_locationsrL  ri  
date_rangestyle_idr  s                      r.   add_sparklinezWorksheet.add_sparkline  s   $ !!#sD$7 #4S##>"?@	?G
< ! 	I 00@9LM	 '!CD [[0
;;3 #"J&	&  '*-t4)0)<	+&*1**=)>	+&gg&-")'"2Ih#*7#3"4Ih)H-.Y{34 .(0  !;!78	' $DII.	 
$X. 	+K%--c26K &,,S1K +%'#o;k*	+ )	( !+. 	+H''R0H  *	+ "/	+ $KK5	&";;{3	% ',= >	*$[[7	'#KK5	&&{{95	)";;u-	%";;u-	%#KK/	&&{{95	)%kk-8	(%kk(3	( M2.F?!"Igi!'Ig!&Ig [[-
#Z/"S:5J!+	+ ;;w*#H-$)(O	.!&+J&7	"#%*9%5	/"#(>	- "'-	,"'-	,!&u	+ 	i.Ai2BCi/Bi-@i,?i,?i+>y)r2   c                     d}t        ||      }||kD  r||}}||kD  r||}}t        ||||      }|dk(  ry|||gg| _        y)a  
        Set the selected cell or cells in a worksheet

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
            0:  Nothing.
        NA1)r   r   rv   )r(   rf  rg  rh  ri  paneactive_cellsqrefs           r.   set_selectionzWorksheet.set_selection  sh      (	9= x%-yYx%-yYIxB D= +u56r2   c                 <    |dk(  r|dk(  ryt        ||      | _        y)z
        Set the first visible cell at the top left of a worksheet.

        Args:
            row: The cell row (zero indexed).
            col: The cell column (zero indexed).

        Returns:
            0:  Nothing.
        r   N)r   rz   )r(   r!  rC   s      r.   set_top_left_cellzWorksheet.set_top_left_cell  s#     !8q.sC8r2   c                 J    || _         || _        || _        || _        d| _        y)a  
        Control outline settings.

        Args:
            visible:       Outlines are visible. Optional, defaults to True.
            symbols_below: Show row outline symbols below the outline bar.
                           Optional, defaults to True.
            symbols_right: Show column outline symbols to the right of the
                           outline bar. Optional, defaults to True.
            auto_style:    Use Automatic style. Optional, defaults to False.

        Returns:
            0:  Nothing.
        TN)r   r   r   r   r   )r(   visiblesymbols_belowsymbols_right
auto_styles        r.   outline_settingszWorksheet.outline_settings  s+    " "**'#r2   c                 ,    ||}||}|||||g| _         y)at  
        Create worksheet panes and mark them as frozen.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            top_row:  Topmost visible row in scrolling region of pane.
            left_col: Leftmost visible row in scrolling region of pane.

        Returns:
            0:  Nothing.

        N)r{   )r(   r!  rC   top_rowleft_col	pane_types         r.   freeze_paneszWorksheet.freeze_panes  s+     ?GH39=
r2   c                 .    | j                  ||||d       y)a  
        Create worksheet panes and mark them as split.

        Args:
            x:        The position for the vertical split.
            y:        The position for the horizontal split.
            top_row:  Topmost visible row in scrolling region of pane.
            left_col: Leftmost visible row in scrolling region of pane.

        Returns:
            0:  Nothing.

        r  N)r  )r(   xyr  r  s        r.   split_paneszWorksheet.split_panes  s      	!Q15r2   c                 X    |dk  s|dkD  rt        d|z         d}t        |      | _        y)z
        Set the worksheet zoom factor.

        Args:
            zoom: Scale factor: 10 <= zoom <= 400.

        Returns:
            Nothing.

        
     z/Zoom factor %d outside range: 10 <= zoom <= 400rZ   N)r   r&   r   )r(   r   s     r.   set_zoomzWorksheet.set_zoom.  s/     "9s
BTIJDI	r2   c                     d| _         y)z
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r  s    r.   right_to_leftzWorksheet.right_to_left@  r  r2   c                     d| _         y)z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r  s    r.   	hide_zerozWorksheet.hide_zeroM  s     r2   c                 $    t        |      | _        y)z
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   ry   r(   colors     r.   set_tab_colorzWorksheet.set_tab_colorZ  s     "%r2   c                    |dk7  r| j                  |      }|si }i ddddddddddd	dd
ddddddddddddddddddddd}|j                         D ]  }||v r	||   ||<   t        d|z          ||d<   || _        y)z
        Set the password and protection options of the worksheet.

        Args:
            password: An optional password string.
            options:  A dictionary of worksheet objects to protect.

        Returns:
            Nothing.

        rU   sheetTcontentFobjects	scenariosformat_cellsformat_columnsformat_rowsinsert_columnsinsert_rowsinsert_hyperlinksdelete_columnsdelete_rowsselect_locked_cellssortr7  pivot_tablesselect_unlocked_cellszUnknown protection object: '%s'passwordN)_encode_passwordr}  r   r   )r(   r  r  defaultsr
  s        r.   protectzWorksheet.protectg  s?    r>,,X6HG
T
u
 u
 	

 E
 e
 5
 e
 5
  
 e
 5
 "4
 E
 %
  E!
" $T#
* <<> 	>Ch '6<=		>  ('r2   c                 &   |t        d       y|j                  d      }|j                  dd      }| xj                  dz  c_        |dt	        | j                        z   }|r| j                  |      }| j                  j                  |||f       y)	a0  
        Unprotect ranges within a protected worksheet.

        Args:
            cell_range: The cell or cell range to unprotect.
            range_name: An optional name for the range.
            password:   An optional password string. (undocumented)

        Returns:
            Nothing.

        Nz1Cell range must be specified in unprotect_range()r>  r  r{  rU   r   Range)r   r  r  r   r-  r  r   r  r(   ru  
range_namer  s       r.   unprotect_rangezWorksheet.unprotect_range  s     DE  &&s+
''R0
!!Q&! 3t'@'@#AAJ,,X6H$$j*h%GHr2   c                     | j                  ||dd      rt        d||fz         y|i }| j                  |||      }| j                  j	                  |       d| _        y)aM  
        Insert a button form object into the worksheet.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            options: Button formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz!Cannot insert button at (%d, %d).r>  r   r   )r@  r   _button_paramsr   r  r   )r(   r!  rC   r  buttons        r.   insert_buttonzWorksheet.insert_button  si      !!#sD$74SzAB?G$$S#w7  (r2   c                      d| _         d| _        y)z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr   r~   r  s    r.   set_landscapezWorksheet.set_landscape       "&r2   c                      d| _         d| _        y)z
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr  r  s    r.   set_portraitzWorksheet.set_portrait  r  r2   c                     || _         y)z
        Set the page view mode.

        Args:
            0: Normal view mode
            1: Page view mode (the default)
            2: Page break view mode

        Returns:
            Nothing.

        Nr   r(   views     r.   set_page_viewzWorksheet.set_page_view  s     r2   c                     d| _         y)zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        r  Nr  r  s     r.   set_pagebreak_viewzWorksheet.set_pagebreak_view  s     r2   c                 &    |r|| _         d| _        yy)z
        Set the paper type. US Letter = 1, A4 = 9.

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)r   r~   )r(   r   s     r.   	set_paperzWorksheet.set_paper  s     (DO&*D# r2   c                      d| _         d| _        y)zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r   r   r  s    r.   center_horizontallyzWorksheet.center_horizontally$       &*"r2   c                      d| _         d| _        y)zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r   r   r  s    r.   center_verticallyzWorksheet.center_vertically2  r  r2   c                 <    || _         || _        || _        || _        y)z
        Set all the page margins in inches.

        Args:
            left:   Left margin.
            right:  Right margin.
            top:    Top margin.
            bottom: Bottom margin.

        Returns:
            Nothing.

        N)r   r   r   r   )r(   leftrightr  r  s        r.   set_marginszWorksheet.set_margins@  s#      !#r2   c                    |}|j                  dd      }t        |      dkD  rt        d       y|t        |t              sd|i}ni }|j                         }|||d<   g | _        |j                  d      r<| j                  j                  |j                  d      |j                  d      d	g       |j                  d
      r<| j                  j                  |j                  d
      |j                  d      dg       |j                  d      r<| j                  j                  |j                  d      |j                  d      dg       |j                  d      }t        | j                        }||k7  rt        d|d|d|       g | _        yd|v r
|d   | _
        d|v r
|d   | _        || _        |j                  dd      | _        d| _        |rd| _        yy)z
        Set the page header caption and optional margin.

        Args:
            header:  Header string.
            margin:  Header margin.
            options: Header options, mainly for images.

        Returns:
            Nothing.

        
&[Picture]&Gry  zCHeader string cannot be longer than Excel's limit of 255 charactersNmargin
image_leftimage_data_leftLHimage_centerimage_data_centerCHimage_rightimage_data_rightRHzNumber of header images (#) doesn't match placeholder count () in string: align_with_marginsscale_with_docrY   T)r  rA  r   r3  r   r|  r   r  r  r-  r   r   r   r   r   r   )r(   r   r  r  header_origplaceholder_countimage_counts          r.   
set_headerzWorksheet.set_headerS      d3v;VWgt,#W-G ,,.  &GH  ;;|$%%\*GKK8I,JDQ ;;~&%%^,gkk:M.NPTU ;;}%%%]+W[[9K-LdS #LL.$,,-+  1;@
 "$D7*(/0D(ED%w&(/0@(AD%$[[37%)""&D r2   c                    |}|j                  dd      }t        |      dkD  rt        d       y|t        |t              sd|i}ni }|j                         }|||d<   g | _        |j                  d      r<| j                  j                  |j                  d      |j                  d      d	g       |j                  d
      r<| j                  j                  |j                  d
      |j                  d      dg       |j                  d      r<| j                  j                  |j                  d      |j                  d      dg       |j                  d      }t        | j                        }||k7  rt        d|d|d|       g | _        yd|v r
|d   | _
        d|v r
|d   | _        || _        |j                  dd      | _        d| _        |rd| _        yy)z
        Set the page footer caption and optional margin.

        Args:
            footer:  Footer string.
            margin:  Footer margin.
            options: Footer options, mainly for images.

        Returns:
            Nothing.

        r  r  ry  zCFooter string cannot be longer than Excel's limit of 255 charactersNr  r  r  LFr  r  CFr  r  RFzNumber of footer images (r  r  r  r  rY   T)r  rA  r   r3  r   r|  r   r  r  r-  r   r   r   r   r   r   )r(   r   r  r  footer_origr  r  s          r.   
set_footerzWorksheet.set_footer  r  r2   c                 r    ||}|dz  }|dz  }d||fz  }t        | j                        }|dz   |z   | _        y)z
        Set the rows to repeat at the top of each printed page.

        Args:
            first_row: Start row for range.
            last_row: End row for range.

        Returns:
            Nothing.

        Nr   z$%d:$%drb  )r    rc   r   )r(   rf  rh  r5  rs  s        r.   repeat_rowszWorksheet.repeat_rows  sU      H 	Q	A Ix00 $DII.	 )C$ 6r2   c                     ||}t        |d      }t        |d      }|dz   |z   }t        | j                        }|dz   |z   | _        y)z
        Set the columns to repeat at the left hand side of each printed page.

        Args:
            first_col: Start column for range.
            last_col: End column for range.

        Returns:
            Nothing.

        Nr   r5   rb  )r   r    rc   r   )r(   rg  ri  r5  rs  s        r.   repeat_columnszWorksheet.repeat_columns  sZ      H #9a0	!(A. 3) $DII.	 )C$ 6r2   c                 ~    |dk(  rd| _         d| _        d| _        y|dk(  rd| _         d| _        yd| _         d| _        y)a1  
        Set the option to hide gridlines on the screen and the printed page.

        Args:
            option:    0 : Don't hide gridlines
                       1 : Hide printed gridlines only
                       2 : Hide screen and printed gridlines

        Returns:
            Nothing.

        r   r   TN)r   r   r   )r(   options     r.   hide_gridlineszWorksheet.hide_gridlines"  sJ     Q;#$D $%D!)-D&q[#$D $%D!#$D $%D!r2   c                      d| _         d| _        y)z
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r   r  s    r.   print_row_col_headerszWorksheet.print_row_col_headers:  s     "%)"r2   c                     d| _         y)z
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r  s    r.   hide_row_col_headerszWorksheet.hide_row_col_headersH  s      $r2   c                     |dk(  r*|dk(  r%|| j                   dz
  k(  r|| j                  dz
  k(  ry| j                  ||||      }|| _        y)a  
        Set the print area in the current worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        r   r   N)rn   ro   r4  r   )r(   rf  rg  rh  ri  r5  s         r.   
print_areazWorksheet.print_areaU  sZ    ( NQDOOa//DOOa// &&y)XxP $r2   c                      d| _         d| _        y)z
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)r   r~   r  s    r.   print_acrosszWorksheet.print_acrossv  s     "&r2   c                 <    d| _         || _        || _        d| _        y)a  
        Fit the printed area to a specific number of pages both vertically and
        horizontally.

        Args:
            width:  Number of pages horizontally.
            height: Number of pages vertically.

        Returns:
            Nothing.

        r   TN)r   r   r   r~   )r(   r  r$  s      r.   fit_to_pageszWorksheet.fit_to_pages  s!      "&r2   c                     || _         y)z
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r   )r(   
start_pages     r.   set_start_pagezWorksheet.set_start_page  s     %r2   c                 r    |dk  s|dkD  rt        d|z         yd| _        t        |      | _        d| _        y)z
        Set the scale factor for the printed page.

        Args:
            scale: Print scale. 10 <= scale <= 400.

        Returns:
            Nothing.

        r  r  z2Print scale '%d' outside range: 10 <= scale <= 400Nr   T)r   r   r&   r   r~   )r(   scales     r.   set_print_scalezWorksheet.set_print_scale  s?     2:EMN u:"&r2   c                      d| _         d| _        y)z
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r~   r  s    r.   print_black_and_whitezWorksheet.print_black_and_white  s      "&r2   c                     || _         y)z
        Set the horizontal page breaks on a worksheet.

        Args:
            breaks: List of rows where the page breaks should be added.

        Returns:
            Nothing.

        N)r   r(   breakss     r.   set_h_pagebreakszWorksheet.set_h_pagebreaks       r2   c                     || _         y)z
        Set the horizontal page breaks on a worksheet.

        Args:
            breaks: List of columns where the page breaks should be added.

        Returns:
            Nothing.

        N)r   r	  s     r.   set_v_pagebreakszWorksheet.set_v_pagebreaks  r  r2   c                 X    ||| _         ydt        | j                  dz         z   | _         y)z
        Set the VBA name for the worksheet. By default this is the
        same as the sheet name: i.e., Sheet1 etc.

        Args:
            name: The VBA name for the worksheet.

        Returns:
            Nothing.

        NSheetr   )r   r-  rd   )r(   rc   s     r.   set_vba_namezWorksheet.set_vba_name  s,      $D '#djj1n*= =Dr2   c                     |y|j                         }h d}|j                         D ]  }||vst        d|z          y || _        y)a  
        Ignore various Excel errors/warnings in a worksheet for user defined
        ranges.

        Args:
            options: A dict of ignore errors keys with cell range values.

        Returns:
            0: Success.
           -1: Incorrect parameter or option.

        r>  >	   
eval_errorformula_rangeformula_differsformula_unlockedcalculated_columntwo_digit_text_yearempty_cell_referencelist_data_validationnumber_stored_as_textz)Unknown parameter '%s' in ignore_errors()r   )r|  r}  r   r  )r(   r  r  r  s       r.   ignore_errorszWorksheet.ignore_errors  s_     ? llnG

 ! 	I 00@9LM	
 &r2   c                    |d   | _         |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        |d	   | _        |d
   | _	        |d   | _
        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        | j                  rFd| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        | j                  rdt9        j:                  | j
                        \  }}t=        j>                  |       || _         tC        |dd      | _"        | jD                  | _#        y y )Nrc   rd   re   r  rg   rh   r   r   r   r   r   r   r  rm   r  r  r  r  g     )@   rX   r         ?F)dirzw+utf-8modeencoding)$rc   rd   re   r  rg   rh   r   r   r   r   r   r   r  rm   r  r  r  r  r   r   r   r   r   r   r   r   r   r   tempfilemkstempr  closer  openr  r  )r(   	init_datafdr  s       r.   _initializezWorksheet._initialize!  s   f%	w'
";/'(89():;)";/"+,@"A#,-B#C ():;!*+>!?#,-B#C "+,@"A():;():;'(89$-.D$E!():;',D$&+D#&(D##D $DDO!"D!$D!$D(-D%  &--$++>NRHHRL%-D"#H4'JD &&DG  r2   c                 8   | j                          | j                          | j                          | j                          | j	                          | j                          | j                          | j                  s| j                          n| j                          | j                          | j                          | j                  r| j                          | j                          | j                          | j!                          | j#                          | j%                          | j'                          | j)                          | j+                          | j-                          | j/                          | j1                          | j3                          | j5                          | j7                          | j9                          | j;                          | j=                          | j?                          | jA                  d       | jC                          y )N	worksheet)"_xml_declaration_write_worksheet_write_sheet_pr_write_dimension_write_sheet_views_write_sheet_format_pr_write_colsrg   _write_sheet_data_write_optimized_sheet_data_write_sheet_protection_write_protected_rangesrm   _write_phonetic_pr_write_auto_filter_write_merge_cells_write_conditional_formats_write_data_validations_write_hyperlinks_write_print_options_write_page_margins_write_page_setup_write_header_footer_write_row_breaks_write_col_breaks_write_ignored_errors_write_drawings_write_legacy_drawing_write_legacy_drawing_hf_write_picture_write_table_parts_write_ext_listr  
_xml_closer  s    r.   _assemble_xml_filezWorksheet._assemble_xml_fileM  s    	 	 	 	 	! 	##% 	 ##""$,,. 	$$& 	$$& ##% 	! 	! 	'') 	$$& 	  	!!# 	  " 	  	!!# 	  	  	""$ 	 	""$ 	%%' 	 	! 	 	+& 	r2   c                    |dk  s|dk  ry|| j                   k\  s|| j                  k\  ry|s|s| j                  r|| j                  k  ry|sD| j                  || j                  k  r|| _        | j
                  || j
                  kD  r|| _        |sD| j                  || j                  k  r|| _        | j                  || j                  kD  r|| _        yr=  )rn   ro   rg   r   rq   rr   rs   rt   )r(   r!  rC   r  r  s        r.   r@  zWorksheet._check_dimensions  s     7cAg$//!SDOO%; *1E1ET&&&&#*?"%&#*?"%&#*?"%&#*?"%r2   c                 D    t        || j                  | j                        S N)r   r   r  )r(   dt_objs     r.   ry  zWorksheet._convert_date_time  s    )&$..$BVBVWWr2   c                 t   d}d}d}d}t        |d      }	t        |d      }
dt        |dz         z   }dt        |dz         z   }|dk(  r|| j                  dz
  k(  r|	}|
}d}n(|dk(  r|| j                  dz
  k(  r|}|}d}n
|	|z   }|
|z   }||k(  r|s|}n|dz   |z   }t	        | j
                        }|dz   |z   }|S )NrU   r   r   r{  r5   rb  )r   r-  rn   ro   r    rc   )r(   	row_num_1	col_num_1	row_num_2	col_num_2range1range2r5  row_col_only
col_char_1
col_char_2
row_char_1
row_char_2rs  s                 r.   r4  zWorksheet._convert_name_area  s      $Iq1
#Iq1
3y1}--
3y1}--
 >i4??Q+>>FFL!^	T__q-@ @FFL*,F*,F VLDC<&(D $DII.	3%r2   c                     |sy t        |      }d|v r|j                  d       t        |      }|j                          d}t	        |      |kD  r|d | }|S )Nr   i  )r2  remover  r  rA  )r(   r
  
breaks_setbreaks_listmax_num_breakss        r.   _sort_pagebreakszWorksheet._sort_pagebreaks  sd     [

?a :& {n,%o~6Kr2   c                 
   |sg S t        j                  d      }|j                  |      }g }|D ]Q  }|j                  d      r|dd  }|j	                  d      r|d d }|j                  dd      }|j                  |       S |S )Nz"(?:[^"]|"")*"|\S+"r   r>  z"")r  compilefindallr  r  r  r  )r(   r  token_rer  
new_tokensr   s         r.   r<  z Worksheet._extract_filter_tokens  s     I::34!!*-
 		%E$ab	~~c"cr
MM$,Ee$		% r2   c                 :   t        |      dk(  r||d   }t        j                  d|      rd}n+t        j                  d|      rd}nt        d|d|d	       | j	                  ||dd       }| j	                  ||d
d       }||gz   |z   S | j	                  ||      S )Nr  rV   z(and|&&)r   z	(or|\|\|)r   Token 'z3' is not a valid conditional in filter expression ''r;  )rA  r  r  r   _parse_filter_tokens)r(   r  r  conditionalexpression_1expression_2s         r.   r=  z"Worksheet._parse_filter_expression9  s     v;! !)Kxx
K0,43>
L
  44Z!ML44Z!ML;-/,>>,,Z@@r2   c                    ddddddddddddd}|j                  |d   d       }|d   }t        j                  d|d	   j                               rt	        |d         }|dk  s|d
kD  rt        d||fz         |j                         }|dk7  r|dk7  rt        d|d|d       |d	   j                         dk(  rd}nd}|d   dk(  r|dz  }t        |      }|s|d	   rt        d|d	   d|d       t        j                  d|j                               rJ|dk7  r|dk7  rt        d|d   d|d       |j                         }|dk(  r|dk(  rd}n|dk(  rd}d}nd}d}|dk(  rt        j                  d|      rd}||gS )Nr  r  r   rV   r;     )rb  r  z=~eqre  z!~nerf  rl  rr  ri  ro  z
top|bottomr   i  z?The value '%d' in expression '%s' must be in the range 1 to 500r  %z
The type 'z' in expression 'z' must be either 'items' or '%'r     rx  rk  z0' is not a valid operator in filter expression 'rl  zblanks|nonblankszThe operator 'z/' is not valid in relation to Blanks/NonBlanks'r  r  z[*?]   )r  r  r  r1  r&   r   r-  r_  )r(   r  r  	operatorsoperatorr   rZ  s          r.   rm  zWorksheet._parse_filter_tokensW  s   
 
	 ==D1q	 88L&)//"34q	NEqyECK47<j6IJ
 KKMEESL8=zK
 ay E)ayCAJEF1I/4QxE 88&61}Q ay*. KKME  q=Eq= H$E HE q=RYYvu5H%  r2   c                     d}|d d d   D ]!  }|dz	  dz  |dz  dz  z  }|t        |      z  }# |dz	  dz  |dz  dz  z  }|t        |      z  }|dz  }d|z  S )Nr   r>     r   rT   iK  z%X)ordrA  )r(   r  hashchars       r.   r  zWorksheet._encode_password  s    
 TrTN 	DRZ4'TQY&,@ADCID	 t#f(<=Hd{r2   c                     d}| j                   |   \  }}}}}}}}}}}}}||z  }||z  }|d|z  z  }|d|	z  z  }| j                  |||||||      }t        d|dz  z         }t        d|dz  z         }| j                  sFt	               }d|_        || _        | j                  j                  ddt        |      z   dz   d g       n| j                  }|j                         }||d	<   ||d
<   ||d<   ||d<   ||d<   d |d<   ||d<   d|d<   d|d<   ||d<   ||d<   |||d<   |rd }d}d}t        j                  d|      r| j                  |      }t        j                  d|      r| j                  |      }t        j                  d|      ry|j                  dd      }| j                  |      }|j                  dd      }t        j                  d|      st        j                  d|      rd|z   }n|j                  d d!      }t        j                  d"|      r|j                  d"d      }d }|t        |      | j                  kD  rt!        d#|| j                  fz         nM| j"                  j%                  |      s| j&                  j                  |||g       | j)                  |      |d<   | j"                  j%                  |
      s/| j&                  j                  d$d%t        |      z   d&z   |z   g       | j)                  |
      |d<   y )'Nr  g      X@r  5%  r   /drawing../drawings/drawing.xmlr4  
dimensionsr  r$  r  shaper  r   	rel_indexurl_rel_indexr  r  
/hyperlinkExternalr  ^mailto:r  rU   r  %23r  r  r  r  r  r  aIgnoring URL '%s' with link and/or anchor > %d characters since it exceeds Excel's limit for URLS/image../media/image.)r   _position_object_emusr&   r   r   embeddedr   r  r-  _add_drawing_objectr  r  r  r  rA  r  r   r   r  r   _get_drawing_rel_index)r(   rd   image_id
drawing_idr  r$  rc   r  x_dpiy_dpir  drawing_typer!  rC   rD   r  r  r  r  r  r  r  r  r  r  r   drawing_objecttargetrel_typetarget_modes                                 r.   _prepare_imagezWorksheet._prepare_image  sa     KK	
 	' 	$,//h%

 C54<()SFTM*+ ||iG G"DL''..2S_DvMtT llG 446!-v'1|$"'w#)x (,}%"&w#)x &'{#*+' #u'1|$",7N=)F#H$Kxx)3/))#.xx
C())#.xxS)["5))&1U388FF+rxxv/F'&0F#^^D#6FxxS)[#6"!v;!4!44M 3 345  ,,005**118V[2QR6:6Q6QRU6VN?3  $$V,%%+c(m;cAJNO '+&A&A&&I{#r2   c                    d}| j                   |   \  }}}}}}	}
}}}}|j                  d| j                  dz        }|j                  d| j                  dz        }||z  }||	z  }| j	                  |||||||      }t        d|dz  z         }t        d|dz  z         }| j                  sFt               }d|_        || _        | j                  j                  dd	t        |      z   d
z   d g       n| j                  }t        dd|      }|
|_        |j                         }||d<   ||d<   ||d<   ||d<   ||d<   ||d<   ||d<   d|d<   d|d<   |j                  d      |d<   ||d<   |j                  dd       }|rMd }d}d}t        j                   d|      r| j#                  |      }t        j                   d|      r| j#                  |      }t        j                   d|      r5|j%                  dd      }| j#                  |      }|j%                  dd      }t        j                   d |      r|j%                  d d      }d }|t'        |      | j(                  kD  rt+        d!|| j(                  fz         y | j,                  j                  |      s| j.                  j                  |||g       | j1                  |      |d<   y y y )"NrV   r  r$  rr  r  r  r   r  r  r  rectTextBoxr4  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r  r   r   r  r&   r   r   r  r   r  r-  r   r  r  r  r  r  r  rA  r  r   r   r   r  )r(   rd   r  r  r!  rC   r  r  r  r  r  r  r  r  r  r  r$  r  r   r  r  r  r  r  r  s                            r.   _prepare_shapezWorksheet._prepare_shape7  s	    KK	
 GT%<%<q%@AXt'>'>'BC'//h%


 C54<()SFTM*+ ||iG G"DL''..2S_DvMtT llGfi1
 446!-v'1|$"'w#)x (3}%"'w#)x &'{#*+' 'E 2u'1|$kk%&F#H$Kxx)3/))#.xx
C())#.xxS)[*=))&1U3xxS)[#6"!v;!4!44M 3 345  ,,005**118V[2QR6:6Q6QRU6VN?3 "+ r2   c
           	      ,   t        j                  dd|      }| j                  j                  |	      s/| j                  j                  ddt        |      z   dz   |z   g       | j                  |	      }
| j                  j                  |||||||
g       y )Nz\..*$rU   r  r  r  )	r  ro  r   r  r   r  r-  _get_vml_drawing_rel_indexr   )r(   r  r  r$  rc   r  positionr  r  r  ref_ids              r.   _prepare_header_imagezWorksheet._prepare_header_image  s     vvhD)$$((0""))+c(m;cAJNO 008&&FD(E5&A	
r2   c                 b    | j                   j                  ddt        |      z   dz   |z   g       y )Nr  r  r  )r   r  r-  )r(   r  r  s      r.   _prepare_backgroundzWorksheet._prepare_background  s2    &&--'#h-7#=
JK	
r2   c           
         d}| j                   |   \
  }}}}}	}
}}}}|dz
  |_        t        d|j                  |
z  z         }t        d|j                  |z  z         }| j                  ||||	|||      }|j                  }| j                  sEt               }d|_	        || _        | j                  j                  ddt        |      z   dz   g       n| j                  }|j                         }||d<   ||d<   ||d<   ||d	<   ||d
<   d |d<   ||d<   | j                         |d<   d|d<   d |d<   ||d<   ||d<   | j                  j                  ddt        |      z   dz   g       y )Nr   r  r  r  r  r4  r  r  r$  rc   r  r  r  r   r  r  r  r  z/chartz../charts/chart)r   r   r&   r  r$  r  
chart_namer   r   r  r   r  r-  r  r  r   )r(   rd   chart_idr  r  r!  rC   r  r  r  r  r  r  r  r  r  r$  r  rc   r   r  s                        r.   _prepare_chartzWorksheet._prepare_chart  s    KK	
 a< C5;;012SELL7234//h%


  ||iG G"DL''..2S_DvMN llG 446!-v'1|$"'w#)x !%v"&w#)x &*&A&A&C{#*+' $u(3}%'1|$!!(3x=86AB	
r2   c           
      *   | j                  |||||||      \
  }}}}}}	}
}}}t        dd|z  z         }t        dd|z  z         }t        dd|
z  z         }
t        dd|z  z         }t        dd|z  z         }t        dd|z  z         }||||||	|
|||f
S )Nr  r  )_position_object_pixelsr&   )r(   	col_start	row_startx1y1r  r$  r  col_endrow_endx2y2x_absy_abss                 r.   r  zWorksheet._position_object_emus  s    ( ((y"b%
	
 tby!tby!tby!tby!C$,&'C$,&'9b"gwBuUUr2   c           
         d}d}	|dk  r,|dkD  r'|| j                  |dz
        z  }|dz  }|dk  r|dkD  r'|dk  r,|dkD  r'|| j                  |dz
        z  }|dz  }|dk  r|dkD  r'|dk  rd}|dk  rd}| j                  r%t        |      D ]  }
|| j                  |
      z  } n|| j                  |z  z  }||z  }| j
                  r%t        |      D ]  }|	| j                  |      z  }	 n|	| j                  |z  z  }	|	|z  }	|| j                  ||      k\  r/|| j                  |      z  }|dz  }|| j                  ||      k\  r/|| j                  ||      k\  r/|| j                  |      z  }|dz  }|| j                  ||      k\  r/|}|}| j                  ||      dkD  r||z   }| j                  ||      dkD  r||z   }|| j                  ||      k\  r0|| j                  ||      z  }|dz  }|| j                  ||      k\  r0|| j                  ||      k\  r0|| j                  ||      z  }|dz  }|| j                  ||      k\  r0|}|}||||||||||	g
S r%   )	_size_col	_size_rowr   rs  r   r   r   )r(   r  r  r  r  r  r$  r  r  r  r9  row_idr  r  r  r  s                   r.   r  z!Worksheet._position_object_pixels/  s   (  1fQ$..Q//BNI 1fQ
 1fQ$..Q//BNI 1fQ
 6B6B   	* 0//0 T,,y88E   	* 0//0 T,,y88E DNN9f55$..++BNI DNN9f55
 DNN9f55$..++BNI DNN9f55
  >>)V,q0BJE>>)V,q0b[F t~~gv66T^^GV44EqLG t~~gv66
 w77dnnWf55FqLG w77
 9b"gwBuUUr2   c                 "   d}d}d}|| j                   v rn| j                   |   d   }| j                   |   d   }|| j                  }|r	|dk7  rd}|S |dk  rt        |||z   z  dz         }|S t        ||z  dz         |z   }|S | j                  }|S )Nr  r  r   r  r;  r   r  )ru   r   r&   r   )r(   rC   r  max_digit_widthpaddingpixelsr  rw   s           r.   r  zWorksheet._size_col  s      $--MM#&q)E]]3'*F}.. &A+  Uo&?@3FG 	 U_4s:;gE  ,,Fr2   c                     d}|| j                   v r?| j                   |   d   }| j                   |   d   }|r	|dk7  rd}|S t        d|z        }|S t        d| j                  z        }|S )Nr   r   r;  gUUUUUU?)r   r&   r   )r(   r!  r  r  r$  rw   s         r.   r  zWorksheet._size_row  s    
  $.. ^^C(+F^^C(+F&A+ 	 Y/0  T%<%<<=Fr2   c                 <    d}d}|dk  r
|||z   z  }|S ||z
  |z  }|S )Ng      @g      @    )r(   r  r  r  r  s        r.   r  zWorksheet._pixels_to_width  s?    R<o78E  g%8Er2   c                     d|z  S )NrX   r  )r(   r  s     r.   r(  zWorksheet._pixels_to_height  s    f}r2   c                    d}d}d}d dd d d d ||d dd ddddd	}|j                         D ]
  }	||	   ||	<    |d
   s||d
<   |d   s||d<   t        |d         j                         |d<   |d   j                  ddd      |d<   |d   t	        |d         \  }
}|
|d<   ||d<   | j
                  }| j                  }|d   F|dk(  rd|d<   n;||dz
  k(  r	|dz
  |d<   n*||dz
  k(  r	|dz
  |d<   n||dz
  k(  r	|dz
  |d<   n|dz
  |d<   |d   :|dk(  rd|d<   n/||dz
  k(  rd|d<   n!||dz
  k(  rd|d<   n||dz
  k(  rd|d<   nd|d<   |d   ;||dz
  k(  r	|dz
  |d<   n*||dz
  k(  r	|dz
  |d<   n||dz
  k(  r	|dz
  |d<   n|dz   |d<   |d   /||dz
  k(  rd|d<   n!||dz
  k(  rd|d<   n||dz
  k(  rd|d<   nd|d<   |d   r|d
   |d   z  |d
<   |d   r|d   |d   z  |d<   t        d |d
   z         |d
<   t        d |d   z         |d<   | j                  |d   |d   |d   |d   |d
   |d   |      }|j                  |d
          |j                  |d          ||||d!   |d"   |d   |d#   |d$   |d%   g	|gz   S )&N   J   r   z#ffffe1r   Tahoma   r  )r  r  r  	start_col	start_rowr  r  r$  r  r  r  r  	font_name	font_sizefont_familyr  r$  r  ffr  r  r  r  rV   r  rr  r  r  r  r{  r  r;  r  1   r[   r  r  r  r  r  r  r  r  )
r}  r   r1  r  r   rn   ro   r&   r  r  )r(   r!  rC   r9  r  default_widthdefault_heightr  paramsr
  r  r  row_maxcol_maxverticess                  r.   _comment_paramszWorksheet._comment_params  s     "$!
( <<> 	'C!#,F3K	' g+F7Oh-F8 #6'?399;w !/11$Q?w ,+%6vl7K%L"Y	"+F;"+F;
 ////+&ax&'{#!#&-k{#!#&-k{#!#&-k{#&)Ag{#*%ax%&z"!#%'z"!#%'z"!#%'z"%'z"+&gk!&-k{#!#&-k{#!#&-k{#&)Ag{#*%gk!%'z"!#%'z"!#%'z"%'z" )$Woy0AAF7O)%h/&2CCF8 cF7O34wsVH%556x //;;::7O8
 	w(x() 897O;;=!

 J
 
	r2   c           	         | j                   }| j                  }d}dt        | j                        z   }||i d}i }	|j	                         D ]
  }
||
   |	|
<    |	j                  d      }|d|z  }||d   d<   |	j                  d      rd|	d   z   |d<   nd	|z  |d<   |	j                  d
      |d
<   |	j                  d|      |	d<   |	j                  d|      |	d<   |	j                  dd      |	d<   |	j                  dd      |	d<   |	d   |	j                  dd      z  |	d<   |	d   |	j                  dd      z  |	d<   t        d|	d   z         |	d<   t        d|	d   z         |	d<   ||	d<   ||	d<   | j                  |	d   |	d   |	d   |	d   |	d   |	d   |      }|j                  |	d          |j                  |	d          ||d<   |S )Nr   r   )r!  rC   fontcaptionz	Button %dr  macroz[0]!z[0]!Button%d_Clickr  r  r$  r  r  r  r  r  r  r  r  )	r   r   rA  r   r}  r  r&   r  r  )r(   r!  rC   r  r  r  r  button_numberr  r  r
  r  r  s                r.   r  zWorksheet._button_params[  s,    00//C 1 122S"5 <<> 	'C!#,F3K	' **Y' ?!M1G$+vy! ::g$vg6F7O2]BF7O !'

= 9} !**Wm<w!::h?x $ZZ
A6z#ZZ
A6z !/FJJy!,DDw!(+fjjA.FFx cF7O34wsVH%556x!{!{ //;;::7O8
 	w(x()%zr2   c                    g }t        | j                  j                               }|D ]  }t        | j                  |   j                               }|D ]  }	| j                  |   |	   }
 | j                  |
 }|| j                  |   |	<   | j                  r*| j                  |   |	   d   d| j                  |   |	   d<   | j                  |   |	   d   | j
                  | j                  |   |	   d<   |j                  | j                  |   |	            | j                  j                  ddt        |      z   dz   g       | j                  r3|| _
        | j                  j                  ddt        |      z   d	z   g       t        |      }|}t        t        |d
z              D ]  }d|||z   dz   fz  } || _        || _        |S )Nr;  r   rV   /vmlDrawing../drawings/vmlDrawing.vmlz	/commentsz../commentsr  r`   z%s,%d)r  r   r}  r  r   r   r  r   r-  r   r   r   rA  rs  r&   r  r   )r(   r  r   vml_drawing_id
comment_idr   row_numsr!  col_numsrC   user_optionsr  r-  start_data_idrA  s                  r.   _prepare_vml_objectszWorksheet._prepare_vml_objects  s     $--,,./ 	9CdmmC05578H 9#}}S1#6---|<*0c"3' ((}}S)#.q1956c*3/2 ==%c*1-5151E1EDMM#&s+A.c 23 789	9& 	&&4s>7JJVST	
 !)D''..mc*o=FG H# s54<() 	IA![-!2Ca2G$HHK	I '(r2   c                 j    || _         | j                  j                  ddt        |      z   dz   g       y )Nr  r  r  )r   r   r  r-  )r(   r   r  s      r.   _prepare_header_vml_objectsz%Worksheet._prepare_header_vml_objects  s8     +&&4s>7JJVST	
r2   c                 0   | j                   D ]  }||d<   |j                  d      dt        |      z   |d<   |d   j                         }||v rt	        d|d   z        d||<   | j
                  j                  ddt        |      z   dz   g       |d	z  } y )
Nr   rc   Tablez2Duplicate name '%s' used in worksheet.add_table().Tz/tablez../tables/tabler  r   )r   r  r-  r1  r!   r   r  )r(   table_idseenr   rc   s        r.   _prepare_tableszWorksheet._prepare_tables  s    [[ 	E"E$Kyy ( '#h- 7f =&&(Dt|(H5QW=X  "T
 %%,,,s8}<vEF MH+	r2   c           	          d}|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd	      }d
dddddddd}||v r||   }d|d|d}|S t        d|z         |S )NrU   rl  z''r  z'#]z'][z'[e   f   g   h   i   k   m   n   r,  z	SUBTOTAL(z,[z])z(Unsupported function '%s' in add_table())r  r   )r(   r?  col_namerY  r@  func_nums         r.   r3  z$Worksheet._table_function_to_formula  s     ##C.##C.##C.##C. 	
	 y  *H-5x@G  ;hFGr2   c                 4    ||vry dt        ||         i||<   y )Nrgbr   )r(   ro  r  
user_colors       r.   rn  zWorksheet._set_spark_color  s&    W$!&1D(E F	*r2   c                    | j                   ryg }t        ||dz         D ]   }|| j                  vr|j                  d        $t        ||dz         D ]  }|| j                  |   v r| j                  |   |   }|j                  j
                  }	|	dv r|j                  d|j                  z         _|	dk(  r9|j                  }
| j                  j                  |
      }|j                  |       |	dv r"|j                  }|d}|j                  |       |	dk(  s|j                  d	       |j                  d         # |S )
Nr  r   rH   rM   rw  rG   )rL   rN   r   rI   rU   )rg   rs  r   r  r  r  rI  r9  re   _get_shared_stringrZ  )r(   r  r  r  r  r  r  r  r  r  rd   r9  rZ  s                r.   _get_range_datazWorksheet._get_range_data  s9     Y!4 %	&Gdjj(D! GaK8 &djj11::g.w7D $ 7 7I $::Gdkk$9:"h. $!%!B!B5!IF+"&AA $

 =$%EE*"g-B KK%?&%	&N r2   c                     |D cg c]  }t        |t              st        |      n|! }}dj                  |      S c c}w )N,)r3  r-  join)r(   r  items      r.   r~  zWorksheet._csv_joinR  s?     OTTd*T3"7TTATTxx Us   $<c                    t        j                  d|      r|S |j                  dd      }|j                  dd      }|j                  dd      }|j                  dd	      }|j                  d
d      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|S )Nz%[0-9a-fA-F]{2}ru  z%25re  z%22r  z%20rl  z%3cri  z%3er  z%5br  z%5d^z%5e`z%60r]  z%7br  z%7d)r  r_  r  )r(   r  s     r.   r  zWorksheet._escape_urlZ  s    99&,J kk#u%kk#u%kk#u%kk#u%kk#u%kk#u%kk#u%kk#u%kk#u%kk#u%kk#u%
r2   c                    |!| xj                   dz  c_         | j                   S | j                  j                  |      r| j                  |   S | xj                   dz  c_         | j                   | j                  |<   | j                   S Nr   )r   r   r  r(   r  s     r.   r  z Worksheet._get_drawing_rel_indexn  s|    >  A% '''""6*$$V,,  A% (,(<(<Df%'''r2   c                     | j                   j                  |      r| j                   |   S | xj                  dz  c_        | j                  | j                   |<   | j                  S r  )r   r  r   r  s     r.   r  z$Worksheet._get_vml_drawing_rel_indexz  sZ      $$V,((00$$)$,0,D,DD!!&)+++r2   c                    | j                   }|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j
                  r|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j                  r| j                  |j                         |j                  dk(  r| j                  d       |j                  d	k(  r| j                  d
       |j                  dd|j                  fg       |j                  dk(  rn|j                  r| j                  d|j                         nu|j                  r| j                  d|j                         nL|j                   r.| j#                  |j                         }| j%                  d|       n| j%                  dd       |j                  dd|j&                  fg       |j                  dd|j(                  fg       |j&                  dk(  r+|j*                  s|j                  dd|j,                  fg       |j/                  d       y )NrPrbrA  strikeoutlineshadowr   superscriptr  	subscriptszvalr>  themeindexedr  rFontfamilyCalibrischeme)r   r  bold_xml_empty_tagitalicfont_strikeoutfont_outlinefont_shadow	underline_write_underlinefont_script_write_vert_alignr  r  _write_colorcolor_indexed
font_color_get_palette_color_write_rstring_colorr  r  	hyperlinkfont_schemer  )r(   	xf_format
xml_writerr  s       r.   r  zWorksheet._write_font  s   \\
!!%( >>%%c*%%c*##%%h/!!%%i0  %%h/ !!)"5"56   A%""=1  A%"";/ 	!!$%1D1D)E(FG ??b __gy7$$i)@)@A!!++I,@,@AE%%eU3%%gq1 	!!'UI4G4G,H+IJ!!(eY5J5J-K,LM)+I4G4G%%h%9N9N1O0PQ&r2   c                 t    g }|dk(  rdg}n|dk(  rdg}n|dk(  rdg}| j                   j                  d|       y )Nr  )r  double!   )r  singleAccounting"   )r  doubleAccountingur   r   )r(   r%  r  s      r.   r&  zWorksheet._write_underline  sJ    
 >+,J"_56J"_56J##C4r2   c                 F    d|fg}| j                   j                  d|       y )Nr  	vertAlignr9  r(   r  r  s      r.   r(  zWorksheet._write_vert_align  s!    cl^
##K<r2   c                 F    ||fg}| j                   j                  d|       y Nr  r9  r(   rc   rZ  r  s       r.   r-  zWorksheet._write_rstring_color  s!    Um_
##GZ8r2   c                 B    |d   dk(  r|dd  }d|j                         z   S )Nr   r  r   FF)upperr  s     r.   r,  zWorksheet._get_palette_color  s)    8s?!"IEekkm##r2   c                 `    | j                   s"| j                  j                          d| _         y y )NT)r  r  r'  r  s    r.   
_opt_closezWorksheet._opt_close  s*    &&""$&*D# 'r2   c                     | j                   r8| j                  }t        |dd      | _        d| _         | j                  | _        y y )Nza+r!  r"  F)r  r  r(  r  r  )r(   r  s     r.   _opt_reopenzWorksheet._opt_reopen  sA    ""--H#H4'JD&+D#&&DG	 #r2   c                    g }t        |      D ]  }|j                  dddd        |dk(  rd|d   d<   d|d	   d<   |d
k(  rd|d   d<   d|d	   d<   d|d   d<   |dk(  r d|d   d<   d|d	   d<   d|d   d<   d|d   d<   |rt        |      }||k\  r|d	z
  }t        |      D ]  }||   j                  d      N||   d   ||   d<   ||   d   }t	        |t
              r(|j                  d      r|j                  d      ||   d<   ||   j                  d      rBd}||   d   |vrt        d||   d   z         n!||   d   ||   d<   ||   d   dk(  rd||   d<   ||   j                  d      }	|	s|	dk(  sd||   d<    |S )NFr   percent)r?  rZ  r4  rV   C   rZ  r4  r   r;  K   r     r  r  P   <   (   r\   r  r4  )rH  r  rI  rY  zOUnknown icon property type '%s' for sub-property 'type' in conditional_format()rI  numr?  ri  T)	rs  r  rA  r  r3  r-  r  r  r   )
r(   r  
user_propspropsrD   max_datarA  tmpr  r?  s
             r.   r  zWorksheet._set_icon_props  s    {# 	MALLeaKL	M ! "E!HW "E!HW! "E!HW "E!HW "E!HW! "E!HW "E!HW "E!HW "E!HW :H;&&?8_ 0a=$$W-9(21g(>E!HW%  (7+C!#s+s0C,/JJsOa) a=$$V,"PK!!}V,K?F(mF34 ,6a=+@a( 8F+x7/4E!HV, &a=,,Z8C+/E!HZ(;0> r2   c                     d}|dz   }|dz   }|dz   }d}|dz   }d|fd|fg}| j                   d	k(  r7|j                  d
|f       |j                  d|f       |j                  d       | j                  d|       y )Nz"http://schemas.openxmlformats.org/zspreadsheetml/2006/mainz!officeDocument/2006/relationshipszmarkup-compatibility/2006zhttp://schemas.microsoft.com/zoffice/spreadsheetml/2009/9/acxmlnszxmlns:rr   zxmlns:mczxmlns:x14ac)zmc:Ignorablex14acr-  )rl   r  r  )r(   schemarU  xmlns_rxmlns_mc	ms_schemaxmlns_x14acr  s           r.   r/  zWorksheet._write_worksheet4  s     622>>773	"BB&G(<=
 %z845}k:;78K4r2   c                    | j                   | j                  d}n| j                   q| j                  e| j                  | j                  k(  rt        d| j                        }nt        d| j                        }t        d| j                        }|dz   |z   }n| j                   | j                  k(  r:| j                  | j                  k(  r!t        | j                   | j                        }nHt        | j                   | j                        }t        | j                  | j                        }|dz   |z   }| j                  dd|fg       y )Nr{  r   r5   	dimensionr6  )rq   rs   rt   r   rr   r   )r(   r6  r9   r:   s       r.   r1  zWorksheet._write_dimensionH  s   
 ??"t'> C__$)D
 $//1'4??; +1doo>*1doo>slV+__/DOOt4V#DOOT__EC 'tHF&tHF3,'CK5#,8r2   c                 h    | j                  d       | j                          | j                  d       y )N
sheetViews)r  _write_sheet_viewr  r  s    r.   r2  zWorksheet._write_sheet_viewsk  s,    L) 	 ,'r2   c                    g }| j                   s|j                  d       | j                  r|j                  d       | j                  s|j                  d       | j                  r|j                  d       | j
                  r|j                  d       | j                  s|j                  d       | j                  dk(  r|j                  d       n | j                  d	k(  r|j                  d
       | j                  dk7  r|j                  d| j                  f       | j                  dk7  r|j                  d| j                  f       | j                  dk(  r)| j                  r|j                  d| j                  f       | j                  dk(  r|j                  d| j                  f       | j                  d	k(  r|j                  d| j                  f       |j                  d       | j                  st        | j                        rD| j                  d|       | j                          | j!                          | j#                  d       y | j%                  d|       y )N)showGridLinesr   )showRowColHeadersr   )	showZerosr   rightToLeftr   )tabSelectedr   showOutlineSymbolsr   r   )r  
pageLayoutr  )r  pageBreakPreviewrU   topLeftCellrZ   	zoomScaler   zoomScaleNormalzoomScalePageLayoutViewzoomScaleSheetLayoutView)workbookViewIdr   	sheetView)r   r  r   r   r   r}   r   r   rz   r   r   r{   rA  rv   r  _write_panes_write_selectionsr  r   r(   r  s     r.   r`  zWorksheet._write_sheet_viewt  s   
 $$23 67 ./   01 ==01 78 >>Q45^^q :; #}d.@.@AB 99{DII67~~"t'='=!!#4dii"@A~~"!!#<dii"HI~~"!!#=tyy"IJ/0::T__-Z8""$k*Z8r2   c                    | j                   }| j                  }| j                  }d|fg}| j                   | j                  k7  r|j	                  d       | j
                  r|j	                  d       |r|j	                  d|f       |r|j	                  d|f       | j                  dk(  r|j	                  d       | j                  d|       y )	NdefaultRowHeightcustomHeightr   )
zeroHeightr   outlineLevelRowoutlineLevelColr   zx14ac:dyDescentz0.25sheetFormatPr)r   r   r   r   r  r   rl   r   )r(   r   	row_level	col_levelr  s        r.   r3  z Worksheet._write_sheet_format_pr  s    !44**	**	)+=>?
""d&>&>>12""/00)<=0)<=%9:OZ8r2   c                    | j                   sy | j                  d       t        | j                   j                               d   }|}| j                   |   }| j                   |= |}|}t        | j                   j                               D ]:  }| j                   |   }||dz   k(  r||k(  r|}"| j	                  |||       |}|}|}< | j	                  |||       || j                   |<   | j                  d       y )Ncolsr   r   )ru   r  r  r}  _write_col_infor  )r(   rg  ri  prev_col_optionsdeleted_coldeleted_col_optionsrC   col_optionss           r.   r4  zWorksheet._write_cols  s    }}F# DMM..0115	==3MM)$.$--,,./ 	/C--,K hl"{6F'F $$Y:JK	$#. 	/ 	Y2BC &9k"&!r2   c                 z   |\  }}}}}}	d}
d}|r|j                         }|
|sd}d}
n
d}n|dk(  rd}
|dkD  rhd}d}|dk  r0t        t        |||z   z  dz         t        |      z  dz        dz  }n/t        t        ||z  dz         |z   t        |      z  dz        dz  }d|dz   fd	|dz   fd
d|z  fg}|r|j                  d|f       |r|j                  d       |	r|j                  d       |
r|j                  d       |r|j                  d|f       |r|j                  d       | j	                  d|       y )Nr   r   r]   r  r  r  g      p@r  r  r  rw  r  )rw   rB   )bestFitrB   )customWidthrB   outlineLevel)r  rB   rC   )_get_xf_indexr&   r  r  r   )r(   col_minr  ru   r  r:  rw   r   r  r"  custom_widthxf_indexr  r  r  s                  r.   r  zWorksheet._write_col_info  s   BJ?VUIw "002H = d]L 19OGqyUo&?@3FG01 
   U_4s:;gE01 
   GaK GaK go&

 w12o../23~u5601E:.r2   c                     | j                   | j                  d       y | j                  d       | j                          | j	                  d       y )N	sheetData)rq   r   r  _write_rowsr  r  s    r.   r5  zWorksheet._write_sheet_data3  sB    ??",,k*r2   c                    | j                   | j                  d       y | j                  d       d}| j                  j	                  d       | j                  j                  |      }|r9| j                  j                  |       | j                  j                  |      }|r9| j                  j                          t        j                  | j                         | j                  d       y )Nr  i   r   )rq   r   r  r  seekreadr  r(  r'  r  unlinkr  r  )r(   	buff_sizer  s      r.   r6  z%Worksheet._write_optimized_sheet_data=  s     ??",, I!!!$##((3Dd#'',,Y7  ""$IId,,-k*r2   c                     d| j                   fd| j                  fd| j                  fd| j                  fd| j                  fd| j
                  fg}| j                  d|       y )Nr  r  r  r  r   r   pageMargins)r   r   r   r   r   r   r   ru  s     r.   r@  zWorksheet._write_page_marginsU  so     T%%&d''(DOO$t))*t))*t))*

 	M:6r2   c                    g }| j                   sy | j                  r|j                  d| j                  f       | j                  dk7  r|j                  d| j                  f       | j                  r,| j
                  dk7  r|j                  d| j
                  f       | j                  r,| j                  dk7  r|j                  d| j                  f       | j                  r|j                  d       | j                  dkD  r|j                  d| j                  f       | j                  r|j                  d	       n|j                  d
       | j                  r|j                  d       | j                  dk7  r|j                  d       | j                  rS| j                  r|j                  d| j                  f       | j                  rp|j                  d| j                  f       nR| j                  r|j                  d| j                  f       | j                  r|j                  d| j                  f       | j                  d|       y )N	paperSizerZ   r  r   
fitToWidthfitToHeight)	pageOrderoverThenDownfirstPageNumber)r   portrait)r   	landscape)blackAndWhiterB   r   )useFirstPageNumberrB   horizontalDpiverticalDpi	pageSetup)r~   r   r  r   r   r   r   r   r   r   r   ri   r
  r	  r   ru  s     r.   rA  zWorksheet._write_page_setupb  s   & 
 && ??{DOO<= s"w(8(89: ==T^^q0|T^^<===T__1}doo>? ??;< ??Q0$//BC 9::; 45 ??a9: ""!!?D4G4G"HI  !!=$2C2C"DE  !!=$2C2C"DE""!!?D4G4G"HIK4r2   c                 .   g }| j                   sy | j                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j
                  r|j                  d       | j                  d|       y )N)horizontalCenteredr   )verticalCenteredr   )headingsr   )	gridLinesr   printOptions)r   r   r  r   r   r   r   ru  s     r.   r?  zWorksheet._write_print_options  s    
)) <<78 <<56 o. ./NJ7r2   c                    g }| j                   s|j                  d       | j                  s|j                  d       | j                  r\| j	                  d|       | j
                  r| j                          | j                  r| j                          | j                  d       y | j                  r| j                  d|       y y )N)scaleWithDocr   )alignWithMarginsr   headerFooter)r   r  r   r   r  r   _write_odd_headerr   _write_odd_footerr  rm   r   ru  s     r.   rB  zWorksheet._write_header_footer  s    
((12((56%%
;{{&&({{&&(n-!!
; "r2   c                 <    | j                  d| j                         y )N	oddHeader)r  r   r  s    r.   r  zWorksheet._write_odd_header      {DKK8r2   c                 <    | j                  d| j                         y )N	oddFooter)r  r   r  s    r.   r  zWorksheet._write_odd_footer  r  r2   c                 P   | j                          t        | j                  | j                  dz         D ]o  }|| j                  v s|| j
                  v s| j                  |   s0t        |dz        }|| j                  v r| j                  |   }nd }| j                  |   r|| j                  vr| j                  ||       n | j                  ||| j                  |          t        | j                  | j                  dz         D ]9  }|| j                  |   v s| j                  |   |   }| j                  |||       ; | j                  d        || j
                  v r"| j                  ||| j                  |          P| j                  ||| j                  |          r y )Nr   r  r!  )_calculate_spansrs  rq   rr   r   r   r   r&   r   
_write_rowrs   rt   _write_cellr  _write_empty_row)r(   r  
span_indexrk  r  col_refs         r.   r  zWorksheet._write_rows  su   T__doo.AB "	QG4==(dmm+::g& !2.
/>>*5DD::g&dmm36t}}W7MN#($//A:M#N H"djj&99&*jj&9'&BG ,,WgwGH
 %%e,-))'4w9OP ))'4w9OPE"	Qr2   c                 z   | j                   }|| _         || j                  v s|| j                  v s| j                  |   rd }| j                  |   r|| j                  vr| j	                  ||       n | j	                  ||| j                  |          t        | j                  | j                  dz         D ]9  }|| j                  |   v s| j                  |   |   }| j                  |||       ; | j                  d       n | j                  ||| j                  |          | j                  j                          y )Nr   r!  )r   r   r   r   r  rs  rs   rt   r  r  r  clear)r(   current_row_numr  rk  r  r  s         r.   rC  zWorksheet._write_single_row  s    ##+dmm#w$--'?4::gCV Dzz'"$--/OOGT2OOGT4==3IJ$T__doo6IJ DG$**W"55"&**W"5g">(('7CD
 !!%( %%gtT]]75KL 	

r2   c                    i }d }d }t        | j                  | j                  dz         D ]  }|| j                  v rPt        | j                  | j
                  dz         D ]*  }|| j                  |   v s||}|}||k  r|}||kD  s)|}, || j                  v r_t        | j                  | j
                  dz         D ]9  }|| j                  v s|| j                  |   v s$||}|}+||k  r|}||kD  s8|}; |dz   dz  dk(  s|| j                  k(  st        |dz        }||dz  }|dz  }|d|||<   d } || _        y )Nr   r  r   r5   )	rs  rq   rr   r   rs   rt   r   r&   r   )r(   spansspan_minspan_maxr  r  r  s          r.   r  zWorksheet._calculate_spans2  sz   
 T__doo.AB "	$G$**$$T__doo6IJ 	3G$**W"55#+'.H'.H&1+2&1+2	3 $--'$T__doo6IJ 	3G$--/Gt}}W?U4U#+'.H'.H&1+2&1+2	3 1"a'Gt,F 2.
'MHMH3;X(FE*%#HE"	$H r2   c                    d}|r	|\  }}}}	}
nd\  }}}}	}
|| j                   }d|dz   fg}|r|j                         }|r|j                  d|f       |r|j                  d|f       |r|j                  d       || j                  k7  r|j                  dd	|z  f       |r|j                  d
       || j                  k7  r|j                  d       |	r|j                  d|	f       |
r|j                  d       | j                  dk(  r|j                  d       |r| j                  d|       y | j                  d|       y )Nr   )NNr   r   r   r  r   r  s)customFormatr   htz%g)rw   r   rx  r  )r  r   r   r}  r!  )r   r  r  r   rl   _xml_empty_tag_unencoded_xml_start_tag_unencoded)r(   r!  r  
properties	empty_rowr  r$  r:  rw   r   r  r  s               r.   r  zWorksheet._write_rowa  sW   <F9FK	<O9FK	>,,FC!Gn%
 "002H w./sHo.12T---tTF]34m,T---12~u56./%9:))%<))%<r2   c                 .    | j                  |||d       y )NT)r  )r  )r(   r!  r  r  s       r.   r  zWorksheet._write_empty_row  s    UJ$?r2   c                 0   t        ||      }d|fg}|j                  r.|j                  j                         }|j                  d|f       n|| j                  v rF| j                  |   d   r4| j                  |   d   }|j                  d|j                         f       nC|| j
                  v r5| j
                  |   d   }|!|j                  d|j                         f       |j                  j                  }	|	dv r| j                  |j                  |       y |	dv r|j                  }
| j                  s| j                  |
|       y | j                  |
      }
|
j                  d      r$|
j                  d      r| j!                  |
|       y t#        |
      }| j%                  |
||       y |	dk(  r|j&                  }t)        |j&                  t*              r#|j                  d	       |j&                  rd}n`d
}n]t)        |j&                  t,              rCd}|j&                  dk(  rn1|j&                  |v r|j                  d       n|j                  d       | j/                  |j0                  ||       y |	dk(  r|j2                  dk(  r|j                  d       	 t5        |j&                         | j9                  d|       | j;                  |j0                  |j<                         | j?                  |j&                         | jA                  d       y |	dk(  r| jC                  d|       y |	dk(  rP|j                  d	       | j9                  d|       | j?                  |jD                         | jA                  d       y |	dk(  rm|j                  d       |j                  d|j&                  f       | j9                  d|       | j?                  |jF                         | jA                  d       y y # t6        $ r |j                  d       Y bw xY w)Nr  r  r   r  r  z<r>z</r>rL   )r  r  r   )rM  z#N/Az#NAME?z#NULL!rL  z#REF!r  rU   )r  e)r  r-  rN   rl  )cmr   crI   rK   rP   vm)$r   rJ   r  r  r   ru   r  r  _xml_number_elementrI  r9  rg   _xml_string_element_escape_control_charactersr  r  _xml_rich_inline_stringr   _xml_inline_stringrZ  r3  r+  r-  _xml_formula_elementrY  rt  r  r'   r  _write_cell_array_formulars  _write_cell_valuer  r   r|  rm  )r(   r!  rC   r  ru  r  r  row_xfcol_xftype_cell_namer9  r  rZ  error_codess                 r.   r  zWorksheet._write_cell  s    ,C5
J'(
;;{{002HsHo.DMM!dmmC&8&;]]3'*FsF$8$8$:;<DMM!]]3'*F!!!3(<(<(>"?@00 33$$T[[*=77[[F''((<
 88@ $$U+0G00D  36:H++FHjIy(JJE$**d+!!*-::EEDJJ, ::#ZZ;.%%j1%%l3%%dllE:F~- zzY&!!),0djj!
 Z0**4<<D""4::.c"w&Z0y(j)Z0""4<<0c"w&j)tTZZ01Z0""4::.c" '+  0!!,/0s   O7 7PPc                 0    |d}| j                  d|       y )NrU   vr  )r(   rZ  s     r.   r  zWorksheet._write_cell_value  s    =EsE*r2   c                 6    dd|fg}| j                  d||       y )N)r  arrayr6  r"  r  )r(   rY  ru  r  s       r.   r  z#Worksheet._write_cell_array_formula  s#    $uj&9:
sGZ8r2   c                 "   g }| j                   s1| j                  s%| j                  s| j                  s| j                  sy | j                  r|j                  d| j                  f       | j                  r|j                  d       | j                   s| j                  s| j                  rT| j                  d|       | j                          | j                          | j                          | j                  d       y | j                  d|       y )NcodeName)
filterModer   sheetPr)r   r   ry   r   r   r  r  _write_tab_color_write_outline_pr_write_page_set_up_prr  r   ru  s     r.   r0  zWorksheet._write_sheet_pr  s    
 NNNN((%%z4+<+<=>>>/0==DNNd.B.B	:6!!#""$&&(i(	:6r2   c                 H    | j                   sy dg}| j                  d|       y )N)	fitToPager   pageSetUpPr)r   r   ru  s     r.   r  zWorksheet._write_page_set_up_pr7  s$    }}&'
M:6r2   c                 P    | j                   }|sy d|fg}| j                  d|       y )Nr  tabColor)ry   r   )r(   r  r  s      r.   r  zWorksheet._write_tab_color?  s-    en%
J
3r2   c                 .   g }| j                   sy | j                  r|j                  d       | j                  s|j                  d       | j                  s|j                  d       | j
                  s|j                  d       | j                  d|       y )N)applyStylesr   )summaryBelowr   )summaryRightr   rh  	outlinePr)r   r   r  r   r   r   r   ru  s     r.   r  zWorksheet._write_outline_prJ  s    
##01!!12!!1278K4r2   c                     | j                  | j                        }|sy t        |      }d|fd|fg}| j                  d|       |D ]  }| j	                  |d        | j                  d       y )Nr-  manualBreakCount	rowBreaksi?  )rc  r   rA  r  
_write_brkr  )r(   page_breaksr-  r  r  s        r.   rC  zWorksheet._write_row_breaks\  s~    ++DLL9K  e'


 	K4" 	,GOOGU+	, 	+&r2   c                     | j                  | j                        }|sy t        |      }d|fd|fg}| j                  d|       |D ]  }| j	                  |d        | j                  d       y )Nr-  r  	colBreaksi )rc  r   rA  r  r  r  )r(   r  r-  r  r  s        r.   rD  zWorksheet._write_col_breaksq  s~    ++DLL9K  e'


 	K4" 	.GOOGW-	. 	+&r2   c                 :    d|fd|fdg}| j                  d|       y )Nr   r  )manr   brkr   )r(   brk_idbrk_maxr  s       r.   r  zWorksheet._write_brk  s'    Vnug&6
C
E:.r2   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]  }| j                  |        | j	                  d       y )Nr-  
mergeCells)r   rA  r  _write_merge_cellr  )r(   r   r-  r  merged_ranges        r.   r;  zWorksheet._write_merge_cells  se    zzL!&'
L*5( 	1L""<0	1 	,'r2   c                     |\  }}}}t        ||      }t        ||      }|dz   |z   }d|fg}	| j                  d|	       y )Nr5   r6  	mergeCell)r   r   )
r(   r  row_minr  r  r  r9   r:   r6  r  s
             r.   r  zWorksheet._write_merge_cell  sS    /;,'7G #7G4"7G4slV#cl^
K4r2   c                 |   g }d }t        | j                  j                               }|sy |D ](  }t        | j                  |   j                               }|D ]  }| j                  |   |   }|d   }| j                  rQ| j                  |   rB| j                  |   |   r0| j                  |   |   }	|	j                  j
                  dk7  r|d   }|dk(  r_| xj                  dz  c_        |j                  |||| j                  |d   ||d   g       | j                  j                  d|d   dg       |j                  ||||d   |d   |d   g        + | j                  d	       |D ]=  }
|
j                  d
      }|dk(  r | j                  |
  )|dk(  s/ | j                  |
  ? | j                  d	       y )Nr  rG   r  r   r-  r  r  r  r   r   r  )r  r   r}  r   r  r  r   r  r   r  r  _write_hyperlink_external_write_hyperlink_internalr  )r(   r   displayr  r  r  r  linkr  r  r)   s              r.   r>  zWorksheet._write_hyperlinks  s    
 $//..01    0	Gdoog6;;=>H $ +w/8 -	 ::$**W"5$**W:Mg:V::g.w7D~~..(:"&u+>NNa'N%%%## NN K# K
 --44%tE{J?
 %%%## K K K	E+0	f 	L) 	6DIA~...5a...5	6 	,'r2   c                     t        ||      }dt        |      z   }d|fd|fg}	||	j                  d|f       ||	j                  d|f       ||	j                  d|f       | j                  d|	       y )NrIdr6  r:idrL  r  tooltipr.  )r   r-  r  r   )
r(   r!  rC   id_numrL  r  r  r6  r_idr  s
             r.   r  z#Worksheet._write_hyperlink_external  s      S)s6{"clVTN3
z845y'23y'23K4r2   c                     t        ||      }d|fd|fg}||j                  d|f       |j                  d|f       | j                  d|       y )Nr6  rL  r  r  r.  )r   r  r   )r(   r!  rC   rL  r  r  r6  r  s           r.   r  z#Worksheet._write_hyperlink_internal  s_      S)clZ$:;
y'239g./K4r2   c                     | j                   sy d| j                   fg}| j                  r4| j                  d|       | j                          | j	                  d       y | j                  d|       y )Nr6  
autoFilter)r   r   r  _write_autofiltersr  r   ru  s     r.   r:  zWorksheet._write_auto_filter  sd    ""d1123
>>j9##%l+ j9r2   c                     | j                   \  }}t        ||dz         D ]E  }|| j                  vr| j                  |   }| j                  |   }| j	                  ||z
  ||       G y r  )r   rs  r   r   _write_filter_column)r(   col1col2rC   r  r   s         r.   r  zWorksheet._write_autofilters*  sz     ((ttax( 
	GC$*** %%c*F**3/K %%cDj+vF
	Gr2   c                     d|fg}| j                  d|       |dk(  r| j                  |       n| j                  |       | j                  d       y )NcolIdfilterColumnr   )r  _write_filters_write_custom_filtersr  )r(   r9  r   rE  r  s        r.   r  zWorksheet._write_filter_column;  sS    '(
NJ7!( &&w/.)r2   c                    |D cg c]!  }t        |      j                         dk7  s |# }}g }t        |      t        |      k7  rdg}t        |      dk(  r!t        |      dk(  r| j                  d|       y | j	                  d|       t        |      D ]  }| j                  |        | j                  d       y c c}w )Nr  )rS  r   r   r   rE  )r-  r1  rA  r   r  r  _write_filterr  )r(   rE  filter
non_blanksr  r7  s         r.   r!  zWorksheet._write_filtersJ  s    +2Vc&k6G6G6IX6UfV
V
w<3z?*&Jw<1ZA!5	:6 	:6$Z0 /
"":./ i(! Ws
   !B=B=c                 2    d|fg}| j                  d|       y )Nr  r%  r  r<  s      r.   r$  zWorksheet._write_filter^  s    cl^
Hj1r2   c                 L   t        |      dk(  r2| j                  d        | j                  |  | j                  d       y g }|d   dk(  rdg}ndg}| j                  d|       | j                  |d   |d          | j                  |d   |d          | j                  d       y )	Nr  customFiltersr   )andr   )r*  r   r   rV   r;  )rA  r  _write_custom_filterr  )r(   r  r  s      r.   r"  zWorksheet._write_custom_filtersd  s    v;!0%D%%v.o. J ayA~(\
(\
 <%%fQi;%%fQi;o.r2   c                     g }dddddddd}||   ||   }nt        d|z         |dk7  r|j                  d	|f       |j                  d
|f       | j                  d|       y )Nrk  ra  rq  rh  rd  rn  )r   r  rV   r;  r  rr  rw  zUnknown operator = %sry  r  customFilter)r   r  r   )r(   ry  r  r  rx  s        r.   r+  zWorksheet._write_custom_filter{  s    
  #
	 X* *H(834 wz8455#,'NJ7r2   c                    g }| j                   sy | j                   }|d   r|j                  d|d   f       |d   r|j                  d       |d   r|j                  d       |d   s|j                  d       |d   s|j                  d	       |d
   r|j                  d       |d   r|j                  d       |d   r|j                  d       |d   r|j                  d       |d   r|j                  d       |d   r|j                  d       |d   r|j                  d       |d   r|j                  d       |d   s|j                  d       |d   r|j                  d       |d   r|j                  d       |d    r|j                  d!       |d"   s|j                  d#       | j                  d$|       y )%Nr  r  )r  r   r  )r  r   r  )r  r   r  )r  r   r  )formatCellsr   r  )formatColumnsr   r  )
formatRowsr   r  )insertColumnsr   r  )
insertRowsr   r  )insertHyperlinksr   r  )deleteColumnsr   r  )
deleteRowsr   r  )selectLockedCellsr   r  )r  r   r7  )r  r   r  )pivotTablesr   r  )selectUnlockedCellsr   sheetProtection)r   r  r   )r(   r  r  s      r.   r7  z!Worksheet._write_sheet_protection  s   
##&&:z7:+>?@7l+9n-y!n-{#./>"01#$23=!/0#$23=!/0&'56#$23=!/0,-676?k*< /0>"01./89-z:r2   c                     | j                   dk(  ry | j                  d       | j                  D ]  \  }}}| j                  |||        | j	                  d       y )Nr   protectedRanges)r   r  r   _write_protected_ranger  r  s       r.   r8  z!Worksheet._write_protected_ranges  sc    $$)-.040E0E 	J,J
H''
JI	J 	+,r2   c                     g }|r|j                  d|f       |j                  d|f       |j                  d|f       | j                  d|       y )Nr  r~  rc   protectedRanger  r   )r(   ru  r  r  r  s        r.   r=  z Worksheet._write_protected_range  sT    
z8457J/06:./,j9r2   c                 ~    | j                   sy | xj                  dz  c_        | j                  | j                         y r  )r   r   _write_drawingr  s    r.   rF  zWorksheet._write_drawings  s,    ||!DNN+r2   c                 N    dt        |      z   }d|fg}| j                  d|       y )Nr  r  r   r-  r   )r(   r  r  r  s       r.   rB  zWorksheet._write_drawing  s,    s:&tn%
Iz2r2   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r  r  legacyDrawing)r   r   r-  r   r(   r  r  s      r.   rG  zWorksheet._write_legacy_drawing  sK    || 	!s4>>**tn%
OZ8r2   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r  r  legacyDrawingHF)r   r   r-  r   rG  s      r.   rH  z"Worksheet._write_legacy_drawing_hf  sN    "" 	!s4>>**tn%
-z:r2   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r  r  picture)r   r   r-  r   rG  s      r.   rI  zWorksheet._write_picture  sM    $$ 	!s4>>**tn%
Iz2r2   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]  }| j                  |        | j	                  d       y )Nr-  dataValidations)r   rA  r  _write_data_validationr  )r(   r   r-  r  
validations        r.   r=  z!Worksheet._write_data_validations  si    &&K &'
-z:% 	4J''
3	4 	+,r2   c                    d}g }|d   D ]6  }|dk7  r|dz  }|\  }}}}||kD  r||}}||kD  r||}}|t        ||||      z  }8 |j                  d      r|d   }|d   dk7  r4|j                  d|d   f       |d   d	k7  r|j                  d
|d   f       d|v r2|d   dk(  r|j                  d       |d   dk(  r|j                  d       |d   r|j                  d       |d   s|j                  d       |d   r|j                  d       |d   r|j                  d       d|v r|j                  d|d   f       d|v r|j                  d|d   f       d|v r|j                  d|d   f       d|v r|j                  d|d   f       |j                  d |f       |d   dk(  r| j                  d!|       y | j	                  d!|       | j                  |d"          |d#   | j                  |d#          | j                  d!       y )$NrU   rz  r  rQ  rK  rV  r4  r?  r]  ry  rL  r   )
errorStylert  r  )rQ  ru  rS  )
allowBlankr   rJ  )showDropDownr   rN  )showInputMessager   rM  )showErrorMessager   rO  
errorTitlerT  rm  rP  promptTitlerU  promptr~  dataValidationrZ  rH  )r   r  r  r   r  _write_formula_1_write_formula_2r  )	r(   r  r~  r  rz  	row_firstrA  row_lastrB  s	            r.   rN  z Worksheet._write_data_validation'  s   
 W% 	HE{9>6Y	8X 8#)19H8#)19HXiHhGGE	H  ;;}%M*E:&(vwz':;<z"i/!!:wz/B"CD7"|$)!!";<|$)!!"?@>"/0z"12< 56< 56G#|W]-CDEg%w(@ABG#}gm.DEFg%x)ABC7E*+:&( 0*= 0*= !!''"23 y!-%%gi&89./r2   c                     t        |t              r | j                  | }d|z  }n	 t        |       | j                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nz"%s"r  formula1)r3  r  r~  r  r'   r  r  r  r(   rY  s     r.   rZ  zWorksheet._write_formula_1t  st     gt$$dnng.Gw&G2g 	z73  2%%c*%nnS1G2s   A +A32A3c                     	 t        |       | j	                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nr  formula2r  r'   r  r  r  r`  s     r.   r[  zWorksheet._write_formula_2  sN    	.'N 	z73  	.!!#&!..-	.     +AAc                     t        | j                  j                               }|sy |D ]!  }| j                  || j                  |          # y rP  )r  r   r}  _write_conditional_formatting)r(   ra  
cond_ranges      r.   r<  z$Worksheet._write_conditional_formats  sN    ))..01  	J..D--j9	r2   c                     d|fg}| j                  d|       |D ]  }| j                  |        | j                  d       y )Nr~  conditionalFormatting)r  _write_cf_ruler  )r(   rg  r  r  params        r.   rf  z'Worksheet._write_conditional_formatting  sN    
+,
3Z@ 	'E&	' 	12r2   c                 *	   d|d   fg}d|v r|d   |j                  d|d   f       |j                  d|d   f       |j                  d      r|j                  d       |d   dk(  r|j                  d|d	   f       | j                  d
|       d|v r-d|v r)| j                  |d          | j                  |d          n| j                  |d          | j	                  d
       y |d   dk(  rt        j                  d|d	         r|j                  d       t        j                  d|d	         r|j                  d       t        j                  d|d	         r;t        j                  d|d	         }|j                  d|j                  d      f       | j                  d
|       y |d   dk(  rad	|v r|d	   dk(  r|j                  d       d|v r|j                  d       |d   xs d}|j                  d|f       | j                  d
|       y |d   dk(  r| j                  d
|       y |d   dk(  r| j                  d
|       y |d   d k(  s|d   d!k(  s|d   d"k(  s|d   d#k(  rd|j                  d|d	   f       |j                  d$|d   f       | j                  d
|       | j                  |d%          | j	                  d
       y |d   d&k(  rN|j                  d&|d	   f       | j                  d
|       | j                  |d%          | j	                  d
       y |d   d'k(  s|d   d(k(  s|d   d)k(  s|d   d*k(  r8| j                  d
|       | j                  |d%          | j	                  d
       y |d   d+k(  r5| j                  d
|       | j                  |       | j	                  d
       y |d   d,k(  rW| j                  d
|       | j                  |       |j                  d-      r| j                  |       | j	                  d
       y |d   d.k(  r8| j                  d
|       | j                  |d	          | j	                  d
       y |d   d/k(  r5| j                  d
|       | j                  |       | j	                  d
       y y )0Nr4  rJ   dxfIdr  r  )
stopIfTruer   r  ry  r?  cfRulerI  rH  rZ  r  below)r  r   ra  )equalAverager   z[123] std devz([123]) std devr+  r   r  ru  )rH  r   r  )r  r   r  rankr  r  r  r  r  r  r  rY  r  r  r  r  r  r  r  r  r  r  )r  r  r  _write_formula_elementr  r  r_  groupr   _write_color_scale_write_data_bar_write_data_bar_ext_write_icon_set)r(   r  r  r  rr  s        r.   rj  zWorksheet._write_cf_rule  s   vf~./
v&"2">wx(89::vj'9:;::n%/0&>X%z6*+=>?*5F"yF':++F9,=>++F9,=>++F7O<h'F^~-yy&"45!!"56yy&"45!!"56yy&*<=		"3VJ5GH!!8U[[^"<=*5F^w&V#z(:c(A!!.1f$!!-0'?(bDvtn-*5F^00*5F^~-*5 6Nn,f~!22f~-f~+z6*+=>?vvg78*5''y(9:h'F^|+|VJ-?@A*5''y(9:h' 6N..f~!44f~!11f~!44*5''y(9:h'F^|+*5##F+h'F^y(*5  (zz,-((0h'F^|+*5''z(:;h'F^y(*5  (h' )r2   c                     	 t        |       | j	                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nr  rY  rc  r`  s     r.   rs  z Worksheet._write_formula_element  sN    	.'N 	y'2  	.!!#&!..-	.rd  c                 j   | j                  d       | j                  |d   |d          |d   | j                  |d   |d          | j                  |d   |d          | j                  d|d	          |d
   | j                  d|d
          | j                  d|d          | j                  d       y )Nr  r  r  r  r  r  r  r  r  r  r  )r  _write_cfvor)  r  )r(   rk  s     r.   ru  zWorksheet._write_color_scale   s     	L)z*E+,>?(U:.k0BCz*E+,>?%{!34)eU;%78%{!34,'r2   c                    g }|j                  d      r|j                  d|d   f       |j                  d      r|j                  d|d   f       |j                  d      r|j                  d       | j                  d|       | j                  |d   |d	          | j                  |d
   |d          | j	                  d|d          | j                  d       y )Nr  	minLengthr  	maxLengthr  	showValuer   r  r  r  r  r  r  r  )r  r  r  r{  r)  r  )r(   rk  r  s      r.   rv  zWorksheet._write_data_bar5  s    
 99\"{E,,?@A99\"{E,,?@A99Z ./Iz2z*E+,>?z*E+,>?%{!34)$r2   c                 L   | j                   dz   }t        | j                        dz   }d||fz  }||d<   | j                  j                  |       | j	                  d       | j                  d       | j                  d|       | j                  d       | j                  d       y )Nr   z{DA7ABA51-AAAA-BBBB-%04X-%012X}guidextLstz&{B025F937-C7B1-47D3-B67F-A62EFF666E3E}zx14:idext)rd   rA  r   r  r  
_write_extr  r  )r(   rk  worksheet_countdata_bar_countr  s        r.   rw  zWorksheet._write_data_bar_extL  s     **q.T001A50O^3TT f""5)H%@Ax.% (#r2   c                 T   g }|d   dk7  rd|d   fg}|j                  d      r|j                  d       |j                  d      r|j                  d       | j                  d|       t        |d         D ]  }| j	                  |d	   |d
   |d            | j                  d       y )Nr  r  r  r  r  r  )rK  r   r  r4  rZ  r?  )r  r  r  reversedr{  r  )r(   rk  r  icons       r.   rx  zWorksheet._write_icon_set^  s    
 "22$eL&9:;J99\"./99_%n-Iz2 U7^, 	LDT&\4=$z:JK	L 	)$r2   c                     d|fg}||j                  d|f       |r|j                  d       | j                  d|       y )Nr4  r  )gter   cfvor@  )r(   cf_typer  r?  r  s        r.   r{  zWorksheet._write_cfvot  sG    w'(
?ucl+j)FJ/r2   c                 2    ||fg}| j                  d|       y r>  r  r?  s       r.   r)  zWorksheet._write_color  s    Um_
GZ0r2   c                 D    | j                   D ]  } | j                  |   y rP  )rv   _write_selection)r(   	selections     r.   rt  zWorksheet._write_selections  s%     	.I!D!!9-	.r2   c                     g }|r|j                  d|f       |r|j                  d|f       |r|j                  d|f       | j                  d|       y )Nr|  
activeCellr~  r  r@  )r(   r|  r}  r~  r  s        r.   r  zWorksheet._write_selection  sX    
vtn-|[9:w./K4r2   c                     | j                   }t        |      sy |d   dk(  r | j                  |  y  | j                  |  y )Nr;  r  )r{   rA  _write_split_panes_write_freeze_panes)r(   r{   s     r.   rs  zWorksheet._write_panes  s@    

5z8q=#D##U+$D$$e,r2   c                 
   g }|}|}t        ||      }	d}
d}d}d}| j                  r| j                  d   \  }}}g | _        |rw|rud}
t        |d      }t        d|      }| j                  j                  d||g       | j                  j                  d||g       | j                  j                  d||g       nC|r!d}
| j                  j                  d||g       n d}
| j                  j                  d||g       |dk(  rd}n
|dk(  rd}nd	}|r|j                  d
|f       |r|j                  d|f       |j                  d|	f       |j                  d|
f       |j                  d|f       | j                  d|       y )NrU   r   bottomRighttopRight
bottomLeftfrozenr   frozenSplitr7   xSplitySplitrl  
activePanestater|  )r   rv   r  r   )r(   r!  rC   r  r  r  r  y_splitx_splitrz   r|   r  r}  r~  rD   row_cellcol_cells                    r.   r  zWorksheet._write_freeze_panes  s   
)'8< ??&*ooa&8#QU DO 3'K(a0H(C0HOO""J(#CDOO""L(H#EFOO""M;#FG$KOO""JU#CD 'KOO""L+u#EF >E!^!EEx12x12=-89<567E*+FJ/r2   c                    g }d}d}d}	d}
|}|}| j                   r| j                   d   \  }}	}
g | _         d}|rt        d|z  dz         }|r| j                  |      }||k(  r9||k(  r4t        d|dz
  dz  dz  z         }t        d|dz
  dz  d	z  d
z  dz  z         }t        ||      }|s|}	|}
|rw|rud}t        |d      }t        d|      }| j                   j	                  d||g       | j                   j	                  d||g       | j                   j	                  d|	|
g       nC|r!d}| j                   j	                  d|	|
g       n d}| j                   j	                  d|	|
g       |r|j	                  dd|z  f       |r|j	                  dd|z  f       |j	                  d|f       |r|j	                  d|f       | j                  d|       y )Nr   rU   r   r\   i,  r  r[     rV   r;  r^   r  r  r  r  rw  r  rl  r  r|  )rv   r&   _calculate_x_split_widthr   r  r   )r(   r!  rC   r  r  r  r  has_selectionr|   r}  r~  r  r  rD   rz   r  r  s                    r.   r  zWorksheet._write_split_panes  s	   
 ??&*ooa&8#QU DOM "w,,-G33G<G
 c>h#o#3" 4r 99:G3'C-2!5!9A!=!BBCH)'8< 'K!E 3'K(!4H(H5HOO""J(#CDOO""L(H#EFOO""M;#FG$KOO""JU#CD 'KOO""L+u#EF x7):;<x7):;<=-89|[9:FJ/r2   c                     d}d}|dk  rt        |||z   z  dz         }nt        ||z  dz         |z   }|dz  dz  }|dz  }|dz   }|S )	Nr  r  r   r  rV   r;  r\   r  )r&   )r(   r  r  r  r  pointstwipss          r.   r  z"Worksheet._calculate_x_split_width%  ss      19/G";<sBCF0367'AF !a  r2   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]2  }| xj                  dz  c_        | j	                  | j                         4 | j                  d       y )Nr-  
tablePartsr   )r   rA  r  r   _write_table_partr  )r(   r   r-  r  rD   s        r.   rJ  zWorksheet._write_table_parts<  s    F  

 	L*5 	3ANNaN""4>>2	3
 	,'r2   c                 N    dt        |      z   }d|fg}| j                  d|       y )Nr  r  	tablePartrD  rG  s      r.   r  zWorksheet._write_table_partU  s8     s4y  

 	K4r2   c                     t        | j                        }t        | j                        }|s|sy | j                  d       |r| j	                          |r| j                          | j                  d       y )Nr  )rA  r   r   r  _write_ext_list_data_bars_write_ext_list_sparklinesr  )r(   has_data_barshas_sparkliness      r.   rK  zWorksheet._write_ext_listc  sd    D//0T__-^ 	H%**,++-(#r2   c                     | j                  d       | j                  d       | j                  D ]  }| j                  |        | j	                  d       | j	                  d       y )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsr  )r  r  r   "_write_conditional_formatting_2010r  )r(   r  s     r.   r  z#Worksheet._write_ext_list_data_barsv  sb    @A89 ++ 	>H33H=	> 	67% r2   c                 B   d}d|fg}| j                  d|       | j                  |       | j                  |       | j                  |d   |d          | j                  |d   |d          |d   s| j	                  |d	          |d
   s| j                  |d          |d   s|d   s| j                  |d          |d   dk7  r| j                  |d          | j                  d       | j                  d       | j                  d|d          | j                  d       y )N3http://schemas.microsoft.com/office/excel/2006/mainxmlns:xmzx14:conditionalFormattingr  r  r  r  r  r  r  r  r  r  r  rV  r  x14:dataBar
x14:cfRulexm:sqrefrs  )
r  _write_x14_cf_rule_write_x14_data_bar_write_x14_cfvo_write_x14_border_color_write_x14_negative_fill_color _write_x14_negative_border_color_write_x14_axis_colorr  r  )r(   r  xmlns_xmr  s       r.   r  z,Worksheet._write_conditional_formatting_2010  sC   H!8,-
7D 	) 	  * 	Xn5x7LMXn5x7LM(((2D)EF 12//9M0NO )=>11(;V2WX '(F2&&x0@'AB-(,' 	z8G+<=56r2   c                 F    d}|d   }d|fd|fg}| j                  d|       y )Nr  r  r4  r   r  r  )r(   r  	rule_typer  r  s        r.   r  zWorksheet._write_x14_cf_rule  s4    	y)D$<8
L*5r2   c                    d}d}d|fd|fg}|d   s|j                  d       |d   r|j                  d       |d	   d
k(  r|j                  d       |d	   dk(  r|j                  d       |d   r|j                  d       |d   s|d   s|j                  d       |d   dk(  r|j                  d       |d   dk(  r|j                  d       | j                  d|       y )Nr   rZ   r}  r~  r  )borderr   r  )gradientr   r  r  )r  leftToRightr  )r  rf  r  )negativeBarColorSameAsPositiver   r  )$negativeBarBorderColorSameAsPositiver   r  middle)axisPositionr  rV  )r  rV  r  )r  r  )r(   r  r  r  r  s        r.   r  zWorksheet._write_x14_data_bar  s   

 *%*%


 (m,K o.O$.:;O$/:;-.CD )=>IJ'(H489'(F267M:6r2   c                     d|fg}|dv r| j                  d|       y | j                  d|       | j                  d|       | j                  d       y )Nr4  )r  r  r  r  zx14:cfvoxm:f)r   r  r  r  )r(   r  rZ  r  s       r.   r  zWorksheet._write_x14_cfvo  sV    y)*
<<
J7
J7""651j)r2   c                 2    d|fg}| j                  d|       y )Nr  zx14:borderColorr  r(   r  r  s      r.   r  z!Worksheet._write_x14_border_color  s    cl^
-z:r2   c                 2    d|fg}| j                  d|       y )Nr  zx14:negativeFillColorr  r  s      r.   r  z(Worksheet._write_x14_negative_fill_color  s    cl^
3Z@r2   c                 2    d|fg}| j                  d|       y )Nr  zx14:negativeBorderColorr  r  s      r.   r  z*Worksheet._write_x14_negative_border_color  s    cl^
5zBr2   c                 2    d|fg}| j                  d|       y )Nr  zx14:axisColorr  r  s      r.   r  zWorksheet._write_x14_axis_color  s    cl^
OZ8r2   c                    | j                  d       | j                          t        | j                        D ]  }| j	                  |       | j                  |d          | j                  |d          | j                          | j                  |d          | j                  |d          | j                  |d          | j                  |d          | j                  |d          |d	   r| j                  d
|d	          | j                  |       | j                  d        | j                  d       | j                  d       y )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}rY  r[  rZ  rU  rR  rP  rN  rM  r  x14:sparklineGroupx14:sparklineGroupsr  )r  _write_sparkline_groupsr  r   _write_sparkline_group_write_color_series_write_color_negative_write_color_axis_write_color_markers_write_color_first_write_color_last_write_color_high_write_color_lowr  _write_sparklinesr  )r(   ro  s     r.   r  z$Worksheet._write_ext_list_sparklines  sB   @A 	$$& "$//2 !	4I''	2 $$Y~%>? &&y1A'BC ""$ %%i&@A ##Im$<= ""9\#:; ""9\#:; !!)K"89%&&vy/EF""9-23C!	4F 	/0% r2   c                    | j                  d       t        |d         D ]X  }|d   |   }|d   |   }| j                  d       | j                  d|       | j                  d|       | j                  d       Z | j                  d       y )Nzx14:sparklinesr-  ra  rG  zx14:sparkliner  r  )r  rs  r  r  )r(   ro  rA  ru  rL  s        r.   r  zWorksheet._write_sparklines-   s     	,-y)* 	/A#H-a0K -a0H0""6;7"":x8o.	/ 	*+r2   c                 F    d}|dz   }d|fd|fg}| j                  d|       y )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14urir  r  )r(   r  rW  	xmlns_x14r  s        r.   r  zWorksheet._write_ext>   s<    788	 )$CL


 	E:.r2   c                 6    d}d|fg}| j                  d|       y )Nr  r  r  r  )r(   r  r  s      r.   r  z!Worksheet._write_sparkline_groupsJ   s%    H!8,-
1:>r2   c                 .   |j                  d      }g }|j                  d      )|d   dk(  rd|d<   n|j                  d|d   f       d|d<   |j                  d      )|d   dk(  rd|d<   n|j                  d	|d   f       d|d<   |d
   dk7  r|j                  d
|d
   f       |j                  d      r|j                  d|d   f       |j                  d      r|j                  d       |r|j                  d|f       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d        |j                  d      r|j                  d!|d   f       |j                  d      r|j                  d"|d   f       |j                  d#      r|j                  d$       | j                  d%|       y )&Nri  r  rt  cust_max	manualMaxrZ  r  cust_min	manualMinr4  r]  rI  
lineWeightrM  )dateAxisr   displayEmptyCellsAsrJ  )rJ  r   rc  )rc  r   rd  )rd  r   rf  )rf  r   rg  )rg  r   re  )re  r   rH  )displayXAxisr   rw   )displayHiddenr   minAxisTypemaxAxisTyperK  re  r  )r  r  r  )r(   r  ri  r  s       r.   r  z Worksheet._write_sparkline_groupR   sc   0 G$
;;u)u~(&-
#!!;"?@&.
#;;u)u~(&-
#!!;"?@&.
# 6?f$vwv78;;x |WX->?@;;{#o.4e<=;;y!n-;;vk*;;uj);;wl+;;vk*;;z"o.;;v12;;x 23;;z"}gj.ABC;;z"}gj.ABC;;y!010*=r2   c                    g }|j                  d      r|j                  d|d   f       |j                  d      r|j                  d|d   f       |j                  d      r|j                  d|d   f       | j                  ||       y )Nr  r  tint)r  r  r   )r(   elementr  r  s       r.   _write_spark_colorzWorksheet._write_spark_color   s    
99UueEl3499Wwg7899VvuV}56GZ0r2   c                 (    | j                  d|       y )Nzx14:colorSeriesr  r  s     r.   r  zWorksheet._write_color_series   s     159r2   c                 (    | j                  d|       y )Nzx14:colorNegativer  r  s     r.   r  zWorksheet._write_color_negative   s     3U;r2   c                 ,    | j                  dddi       y )Nzx14:colorAxisr  FF000000r  r  s    r.   r  zWorksheet._write_color_axis   s    %1DEr2   c                 (    | j                  d|       y )Nzx14:colorMarkersr  r  s     r.   r  zWorksheet._write_color_markers   s     2E:r2   c                 (    | j                  d|       y )Nzx14:colorFirstr  r  s     r.   r  zWorksheet._write_color_first   s     0%8r2   c                 (    | j                  d|       y )Nzx14:colorLastr  r  s     r.   r  zWorksheet._write_color_last       7r2   c                 (    | j                  d|       y )Nzx14:colorHighr  r  s     r.   r  zWorksheet._write_color_high   r  r2   c                 (    | j                  d|       y )Nzx14:colorLowr  r  s     r.   r  zWorksheet._write_color_low   s    6r2   c                 0    ddg}| j                  d|       y )N)fontId0)r4  noConversion
phoneticPrr  ru  s     r.   r9  zWorksheet._write_phonetic_pr   s#     $


 	L*5r2   c                    | j                   sy | j                  d       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d	|       | j                   j                  d
      r!| j                   d
   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j	                  d       y )NignoredErrorsr  numberStoredAsTextr  	evalErrorr  rY  r  formulaRanger  unlockedFormular  emptyCellReferencer  listDataValidationr  calculatedColumnr  twoDigitTextYear)r  r  r  _write_ignored_errorr  )r(   ignored_ranges     r.   rE  zWorksheet._write_ignored_errors   s   ""O,""#:; //0GHM%%&:MJ""<0 //=M%%k=A""#45 //0ABM%%i?""?3 //@M%%nmD""#56 //0BCM%%&7G""#9: //0FGM%%&:MJ""#9: //0FGM%%&:MJ""#67 //0CDM%%&8-H""#89 //0EFM%%&8-H/*r2   c                 8    d|f|dfg}| j                  d|       y )Nr~  r   ignoredErrorr  )r(   r4  r  r  s       r.   r  zWorksheet._write_ignored_error!  s,     m$1I


 	NJ7r2   rP  )Nr   )F)Nr   re  )NNN)NF)r   r   )r   r   r   r   )NNr   )NN)rZ   )rU   N)r   )rW   rW   rX   rX   )rU   NN)FF)r   )r  
__module____qualname____doc__rb   r#  r1   r(  r&  r;  r  rJ  r  rT  r  r[  r  r?   rj  r`  rb  ra  rw  r2  r}  r,  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rF   r  r  r"  r&  r)  r,  r2  r7  rC  r>  r  r  rE  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  rM  r@  ry  r4  rc  r<  r=  rm  r  r  r  r  r  r  r  r  r  r  r  r(  r  r  r  r  r  r3  rn  r  r~  r  r  r  r  r&  r(  r-  r,  rD  rF  r  r/  r1  r2  r`  r3  r4  r  r5  r6  r@  rA  r?  rB  r  r  r  rC  r  r  r  r  r  r  r0  r  r  r  rC  rD  r  r;  r  r>  r  r  r:  r  r  r!  r$  r"  r+  r7  r8  r=  rF  rB  rG  rH  rI  r=  rN  rZ  r[  r<  rf  rj  rs  ru  rv  rw  rx  r{  r)  rt  r  rs  r  r  r  rJ  r  rK  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r9  rE  r  __classcell__)r  s   @r.   rR   rR      sB   W)t#7J , ,&NL` A A&6 A A$8 ? ?&$ J J*@  *
 *
X  ) )Zrz 4l A A$* C C$6 H H*iV 8 8.wr7  ,  , : :x ; ;z 1 1f D DL ! !F")&&5$"  4$ IM> >@ IMQ Q0PNd;z?((. JNI IV 7 7@:x(T @ @D @D~ ~@ I IV
 } }~  7  7D 9 9$ GH$0 > >, 6 6"$")1(fI>  F''+$&K'ZK'Z74 7 74&0*$  @''$%','>"(^*'XbHBX&P4BA<V!p"uJn]W~
&
:
x VH^V@<*
GRGR1f
2:G3j(
(,4'l5=9$+'>L5(!9F(99v90&"PB/H++07L5\82<(99&QP#J-^1=f@t#l+9787	45$'*'*/($5L(^ FJ5& >B5:"G"*)(2/.86.;`
-
:,39;3-$K0Z4"4
3j(X3(*%.$$%,
01.
5
-60pE0N.(25$&!+7Z6%7N	*;
A
C
9
,!\,"
/?W>r1:<F;98876++Z8r2   rR   )>r.  rN  r  r  r%  collectionsr   r   rX  r   	fractionsr   	functoolsr   ior	   r
   r   warningsr   rU   r   rJ   r   r   r   r  r   r   utilityr   r   r   r   r   r   r   r   r   r   r   r   r    
exceptionsr!   r"   rf  VERBOSEr^  r1   r?   rF   rD  rP  rV  r  rc  rz  rr  r  r  rR   r  r2   r.   <module>r&     s:     	 	  # "              & + & #   # ( ' / ) ( $ * ( bjj< JJ?  P0@@ x)9: x)9: gx0 	+<= 	+CD  -=> !:  $L2NO g'=> UA8	## UA8r2   