
    liZ                       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mZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZmZ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%m&Z& d dl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddl*mBZB  ej                  dej                        ZEd ZFd ZGd ZH edd      ZI edd      ZJ ed d!      ZK ed"d#      ZL ed$d%      ZM ed&d'      ZN ed(d!      ZO ed)d*      ZP ed+d,      ZQ G d- d.e*j                        ZRy)/    N)defaultdict
namedtuple)Decimal)Fractionwraps)BytesIOStringIO)isinfisnan)AnyDictListLiteralOptionalUnion)warn)Chart)Color)CommentType)Image)UrlUrlTypes)
ButtonType   )	xmlwriter)DrawingDrawingInfoDrawingTypes)DuplicateTableNameOverlappingRange)Format)Shape)_datetime_to_excel_datetime_get_sparkline_style_preserve_whitespace_supported_datetimequote_sheetnamexl_cell_to_rowcolxl_col_to_namexl_pixel_widthxl_rangexl_rowcol_to_cellxl_rowcol_to_cell_fast)	XMLwritera  
    \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        R/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/xlsxwriter/worksheet.pycell_wrapperz'convert_cell_args.<locals>.cell_wrapperf   s]    	' G	I d,T,V,,  	'(3Hd12h&D	's   ! A A r   r:   r<   s   ` r;   convert_cell_argsr>   _   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   r3   r4   splitr)   extend)r5   r6   r7   cell_1cell_2row_1col_1row_2col_2r9   r:   s             r;   r<   z(convert_range_args.<locals>.cell_wrapper~   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   r=   s   ` r;   convert_range_argsrL   w   s#     6]- -* r?   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   rB   1r   rC   )r5   r6   r7   colrF   rG   _rI   rK   r9   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:   rR   s   ` r;   convert_column_argsrS      s#     6]- -  r?   BlankformatErrorzerror, format, valueNumberznumber, formatStringzstring, formatBooleanzboolean, formatFormulazformula, format, valueDatetime
RichStringzstring, format, raw_stringArrayFormulaz$formula, format, value, range, atypec                   
    e Zd ZdZd2 fdZdedefdZedededee	d   e
f   fd	       Zdedefd
Ze	 d3dedededee   de	d   f
d       Z	 d3dedededee   de	d   f
dZe	 d3dededeeeef   dee   de	d   f
d       Z	 d3dededeeeef   dee   de	d   f
dZe	 d3dedede
dee   fd       Z	 d3dededee   de	d   fdZe	 	 d4dedededee   de	d   f
d       Z	 	 d4dedededee   de	d   f
dZe	 	 d4dedededededee   de	d   fd       Ze	 	 d4dedededededee   de	d   fd       Zd5d Zed!        Z	 	 	 d6de	d   fd"Z e	 d3deded#e!jB                  dee   de	d   f
d$       Z"d3dededefd%Z#e	 d3deded&e$dee   fd'       Z%d3dededefd(Z&e	 	 	 d7deded)edee   dee   d*ee   fd+       Z'	 d7dededefd,Z(ededed-eeef   de	d.   fd/       Z)dededefd0Z*d2d1Z+e	 d3dededee   dee	d   e
f   fd2       Z,e	 d3dededee   dee	d   e
f   fd3       Z-e	 d3deded4eee.e/f   d5ee0ee
f      de	d   f
d6       Z1e	 d3deded4eee.e/f   d5ee0ee
f      de	d   f
d7       Z2e	 d3deded8ed5ee0ee
f      de	d   f
d9       Z3e	 d3deded:e4d5ee0ee
f      de	d   f
d;       Z5e	 d3deded<ed5ee0ee
f      de	d   f
d=       Z6d2d>Z7	 d5d4eee.e/f   d?e$de	d   fd@Z8d2dAZ9dB Z:d2dCZ;d2dDZ<d2dEZ=d2dFZ>d2dGZ?e@	 	 	 d7dededHee   dee   d5ee0ee
f      de	d   fdI       ZAe@	 	 	 d7dededHee   dee   d5ee0ee
f      de	d   fdJ       ZBd8dKeddfdLZC	 	 	 d7dedMee   dee   d5ee0ee
f      de	d   f
dNZD	 	 	 d7dedMee   dee   d5ee0ee
f      de	d   f
dOZE	 d9dMee   dPe$ddfdQZFe	 d3dededededRe
dee   defdS       ZGedededededdf
dT       ZHdedUeddfdVZIdedWeJe   ddfdXZKe	 d3dedededed5ee0ee
f      de	d   fdY       ZLe	 d3dedededed5ee0ee
f      de	d   fdZ       ZMe	 d3dedededed5ee0ee
f      de	d[   fd\       ZNe	 d3deded5ee0ee
f      de	d   fd]       ZOedededededdf
d^       ZPed:dededdfd_       ZQ	 	 	 	 d;d`e$dae$dbe$dce$ddf
ddZRe	 	 	 d<dededeee   dfee   dgeddfdh       ZSe	 	 d=diedjedeee   dfee   ddf
dk       ZTd>dleddfdmZUd2dnZVd2doZWdpeeeXf   ddfdqZY	 d?dred5ee0ee
f      ddfdsZZ	 	 d=dteduee   dree   defdvZ[e	 d3deded5ee0ee
f      de	d   fdw       Z\e	 d3deded&e$dee   fdx       Z]d2dyZ^d2dzZ_d@d{e	d|   ddfd}Z`d2d~Zadee	d   ef   ddfdZbd2dZcd2dZd	 	 	 	 dAdededededdf
dZe	 dBded5ee0ee
f      ddfdZf	 dBded5ee0ee
f      ddfdZgd3dedee   ddfdZhe@d3dedee   ddfd       Zid@de	d|   ddfdZjd2dZkd2dZlededededede	d   f
d       Zmd2dZndHedMeddfdZodeddfdZpdeddfdZqd2dZrdeJe   ddfdZsdeJe   ddfdZtd3dee   ddfdZud3d5ee0ee
f      de	d   fdZvd2dZwd2dZx	 dCdededefdZyd Zzd Z{d Z|d Z}d Z~d ZdefdZd3d5ee0ee
f      fdZde/dededdfdZd2dZd2dZd2dZd2dZd Zd ZdDdefdZdDdefdZd Zd Zd<efdZdefdZd Zd2dZd2dZd Zd2dZd ZdÄ ZdĄ Zd3dńZd3dƄZd2dǄZd2dȄZd2dɄZd2dʄZd2d˄Zd2d̄Zd3d̈́Zd2d΄Zd2dτZd2dЄZd2dфZd2d҄Zd2dӄZd2dԄZd2dՄZd2dքZd2dׄZd2d؄Zd2dلZd2dڄZd2dۄZd2d܄Zd2d݄ZdDd2dބZd2d߄Zd9deddfdZd3deddfdZdededdfdZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZdededed)eddf
dZdeded)eddfdZŐd2dZƐd2dZǐd2dZȐd2dZɐd2dZʐd2dZːd2dZ̐d2dZ͐d2dZΐd2dZϐd2dZАd2dZѐd2dZҐd2dZӐd2d ZԐd2dZՐd2dZ֐d2dZאd2dZؐd2dZِd2dZڐd2dZېd2dZܐd2d	Zݐd2d
Zސd2dZߐd2dZd3d2dZd2dZd2dZd2dZd2dZdededdfdZdededdfdZd Zd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2dZd2d Zd2d!Zd2d"Zd2d#Zd2d$Zd2d%Zd2d&Zd2d'Zd2d(Zd2d)Zd2d*Zd2d+Zd2d,Z d2d-Zd2d.Zd2d/Zd2d0Zd2d1Z xZS (E  	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    returnNc                 <
   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| _/        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| _?        g | _@        g | _A        i | _B        g | _C        d| _D        i | _E        t        t              | _H        d| _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| _\        i | _]        g | _^        t        t              | __        g | _`        i | _a        i | _b        i | _c        d| _d        d| _e        d| _f        t        t              | _g        g | _h        d| _i        d| _j        d| _k        g | _l        d| _m        d| _n        d| _o        ddg| _p        d| _q        i | _r        i | _s        i | _t        i | _u        d| _v        d| _w        d
| _x        d| _y        d| _z        g | _{        g | _|        g | _}        g | _~        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        i | _        d| _        i | _        d| _        i | _        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| _        d| _        d| _k        d| _        d| _        d| _        d| _        d| _        i | _        d| _        d| _        d| _        d| _        d| _        y)z
        Constructor.

        Nr   Fi  i   i @        r   Tffffff?      ?333333?d         \( @@   D      	   i  )super__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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default_checkbox_formatworkbook_add_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embedded_images)r5   	__class__s    r;   rq   zWorksheet.__init__   st    		
 "!$!
"'%*"$ $"$%*"$(!$(!"$!   " " "! "$%!#D)	!" %!"!"$#% "$"$!%"$#% "#
 &

#!#D)! % !"F % %$&!&(#&(#"$$&!)+&!#  "#$  $ "' %d+"'#!&#' #' "&'+$#' $"!%" !%"' ""'$)!#( #r?   rowrP   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 rx| j
                  rlt        j                  d|      sBt        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)Nrc   =z{=}rB   z(ftp|http)s?://zmailto:z(in|ex)ternal:zfile://r   )_write_blankr  
startswith_write_formulaendswithr  rematch
_write_urlr
  floatr  r   r   _write_numberr4   _write_string)r5   tokenr"  rP   r6   fs         r;   _write_token_as_stringz Worksheet._write_token_as_string  s   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88Iu- #4??33d33""%L))%(58-4--c3EDHEE
 &4%%c3666 "t!!#s2T22  s   
AE7 7	FF)r   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r5   r"  rP   r6   s       r;   writezWorksheet.write  s    " t{{3+d++r?   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%        |t(              r | j*                  ||g| S 	 t        |      } | j                  |||g|dd   S # t,        $ r Y n$t         $ r t        dt/        |       d      w xY w	 t        |        | j0                  ||g| S # t,        $ r t        dt/        |       d      w xY w)Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type z in write())	TypeErrorr!  r  r&  bool_write_booleanr-  r3   r   r   r.  strr2  datetimedatetime	timedelta_write_datetime
isinstancer'   r   r,  r4   typer/  )	r5   r"  rP   r6   r0  
token_typewrite_handlerfunction_returnr1  s	            r;   r6  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 u%'4''S8488 eS!"4??33d33	JeA%4%%c3=DH== 	 	J/U}KHII	J	JJ%4%%c3666 	J/U}KHII	Js   "G? ?	H+
!H+/I "I0stringcell_format)r   r3  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/  )r5   r"  rP   rH  rI  s        r;   write_stringzWorksheet.write_string@  s    & !!#sFK@@r?   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   r3  rJ  )
_check_dimensionslenr   rv   rt   _get_shared_string_indexr   _write_single_rowCellStringTupler   )r5   r"  rP   rH  rI  	str_errorstring_indexs          r;   r/  zWorksheet._write_stringV  s     	 !!#s+ v;(-doo.FI ##>>BB6JL!L C$*;*;$;""3'  /|[I

3r?   numberc                 *    | 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.  r5   r"  rP   rV  rI  s        r;   write_numberzWorksheet.write_numbers  s    , !!#sFK@@r?   c                 0   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                  t        u rt        |      }| 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() optionr3  r   )r   r   r  r(  mathinfr:  r!  r   r-  rO  rv   r   rR  CellNumberTupler   rX  s        r;   r.  zWorksheet._write_number  s    =E&M%%=..sC+wWWTXX%..sCYWWdhhY&..sCiXXD 
 x'6]F !!#s+ C$*;*;$;""3'  /v{C

3r?   blankc                 *    | 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&  )r5   r"  rP   r`  rI  s        r;   write_blankzWorksheet.write_blank  s    &   c5+>>r?   c                     |y| j                  ||      ry| j                  r || j                  kD  r| j                  |       t	        |      | j
                  |   |<   y)Nr   r3  )rO  rv   r   rR  CellBlankTupler   )r5   r"  rP   rQ   rI  s        r;   r&  zWorksheet._write_blank  sd      !!#s+ C$*;*;$;""3'  .k:

3r?   r   formulac                 ,    | 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(  r5   r"  rP   re  rI  values         r;   write_formulazWorksheet.write_formula  s    4 ""3Wk5IIr?   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)Nr3  rc   zFormula can't be None or empty{r%  r   )rO  r   re_dynamic_functionsearchwrite_dynamic_array_formular'  r)  _write_array_formula_prepare_formularv   r   rR  CellFormulaTupler   rg  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'  0eL

3r?   	first_row	first_collast_rowlast_colc           
          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)rl  rm  rn  ro  )r5   rr  rs  rt  ru  re  rI  rh  s           r;   write_array_formulazWorksheet.write_array_formula!  sb    : %%g.339h';PU  ((	
 		
r?   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)ro  r  )	r5   rr  rs  rt  ru  re  rI  rh  errors	            r;   rn  z%Worksheet.write_dynamic_array_formulaN  sB    8 ))	
 A:&*D#r?   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 (=  Nrk  r   r$  r%  r3  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  )r5   re  expand_future_functionss      r;   rp  zWorksheet._prepare_formula|  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r?   c                     d| vr| S g }d}| D ]F  }|dk(  r| }|r|j                  |       |dk(  r|j                  d       6|j                  |       H dj                  |      S )N@F"z[#This Row],rc   )appendjoin)re  escaped_formulain_string_literalchars       r;   _prepare_table_formulaz Worksheet._prepare_table_formula3  s    gN! 	-D s{(9$9! !&&t, s{&&~6&&t,	-" yy))r?   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)Nr3  rB   r   r   )
rO  r-   rp  rv   r   rR  CellArrayFormulaTupler   ranger.  )r5   rr  rs  rt  ru  re  rI  rh  atype
cell_ranger"  rP   s               r;   ro  zWorksheet._write_array_formulaQ  s\    x"*IxIx"*IxI !!)Y7!!(H5  Y(%:*9i@J ")Y7#Hh78  ''0 I0A0A$A""9- ,A[%U,


9i(
 ##Y15 E HqL9 ECi'3)+;**3QDEE
 r?   r?  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.

        )rB  )r5   r"  rP   r?  rI  s        r;   write_datetimezWorksheet.write_datetime  s    , ##CdK@@r?   c                     | j                  ||      ry| j                  r || j                  kD  r| j                  |       | j	                  |      }|| j
                  }t        ||      | j                  |   |<   y)Nr3  r   )rO  rv   r   rR  _convert_date_timer  CellDatetimeTupler   )r5   r"  rP   r?  rI  rV  s         r;   rB  zWorksheet._write_datetime  s~    !!#s+ C$*;*;$;""3' ((. 22K  1E

3r?   booleanc                 *    | 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<  r5   r"  rP   r  rI  s        r;   write_booleanzWorksheet.write_boolean  s    $ ""3WkBBr?   c                     | j                  ||      ry| j                  r || j                  kD  r| j                  |       |rd}nd}t	        ||      | j
                  |   |<   y)Nr3  r   r   )rO  rv   r   rR  CellBooleanTupler   )r5   r"  rP   r  rI  rh  s         r;   r<  zWorksheet._write_boolean  sf    !!#s+ C$*;*;$;""3'EE  0{C

3r?   urltipc                 .    | 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,  )r5   r"  rP   r  rI  rH  r  s          r;   	write_urlzWorksheet.write_url  s    6 sCk63GGr?   c                    | j                  ||      ryt        |t              sv| j                  }d|v r|j	                  dd      \  }}	n|}d}	t        |      |kD  st        |	      |kD  rt        d| d| d       yt        |      }|||_        |||_        | xj                  dz  c_	        | j                  d	kD  rt        d|j                   d
       y|| j                  }| j                  sJ| j                  r || j                  kD  r| j                  |       | j!                  |||j"                  |       || j$                  |   |<   y)Nr3  #r   rc   zIgnoring URL 'z!' with link or location/anchor > z4 characters since it exceeds Excel's limit for URLs.i  z>' since it exceeds Excel's limit of 65,530 URLs per worksheet.r   )rO  rC  r   r  rD   rP  r   _text_tipr   _original_urlr  r  rv   r   rR  r/  textr	  )
r5   r"  rP   r  rI  rH  r  max_urlurl_str
anchor_strs
             r;   r,  zWorksheet._write_url  so    !!#s+ #s# ))Gcz&)iiQ&7#
7|g%Z7)B$SE)J7) TJ K c(C!"	 	Ae# !2!2 3 4- .  11K''##d.?.?(?&&s+ sC;? %(S!r?   r6   )r   r3  rJ  r  r  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_stringr7  s       r;   write_rich_stringzWorksheet.write_rich_string@  s    . 't&&sC7$77r?   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   rc   r3  rU      zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().r  zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().r  rH  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().rJ  )listrO  rC  r"   popr
   r/   r   _set_filehandlerP  r   r  _xml_start_tag_write_fontr&   _xml_data_element_xml_end_tagfhgetvaluer   rv   rt   rQ  r   rR  CellRichStringTupler   )r5   r"  rP   r6   tokensrI  rU  
raw_stringr  default	fragmentspreviousposr0  
attributesrH  s                   r;   r  zWorksheet._write_rich_stringZ  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  '  
'.%%&?@..sE:F))#.	/  ))+ z?T__,?  ##>>BB6JL!L C$*;*;$;""3'  3+z 


3 r?   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  )r5   	user_typeuser_functions      r;   add_write_handlerzWorksheet.add_write_handler  s     *7I&r?   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   r5  r5   r"  rP   datarI  r0  r{  s          r;   	write_rowzWorksheet.write_row  =    "  	EKKS%=E1HC		 r?   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   r5  r  s          r;   write_columnzWorksheet.write_column  r  r?   sourceoptionsc                     | j                  ||dd      rt        d| d| d       y| j                  ||      }||_        ||_        |j                  |       | j                  j                  |       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).
            source:   Filename, BytesIO, or Image object.
            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 (, ).r3  r   )rO  r   _image_from_source_row_col_set_user_optionsr   r  )r5   r"  rP   r  r  images         r;   insert_imagezWorksheet.insert_image  sx    . !!#sD$7+C53%r:; ''8

(5!r?   c                    | j                  ||      rt        d| d| d       y|i }| j                  ||      }|j                  |       |j	                  dd      }|j
                  r:|| j                  }d| _        | j                  |||j
                  |       d| _        | 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).
            source:   Filename, BytesIO, or Image object.
            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 (r  r  r3  NrI  TF#VALUE!r   )rO  r   r  r  getr  r  r  r  r   get_image_indexCellErrorTupler   )r5   r"  rP   r  r  r  rI  image_indexs           r;   embed_imagezWorksheet.embed_image:  s    . !!#s+*3%r#b9:?G ''8(kk-699""55'+D$NN3UYY<',D$**::5A  .ikR

3r?   r  c                    | j                  ||dd      rt        d| d| d       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 (r  r  r3  Nrc   x_offsetr   y_offsetx_scaler   y_scaleobject_positiondescription
decorativeF)rO  r   r  r   r  )r5   r"  rP   r  r  r  r  r  r  anchorr  r  s               r;   insert_textboxzWorksheet.insert_textboxm  s    & !!#sD$7-cU"SE<=<D?G;;z1-;;z1-++i+++i+.2kk-6[[u5
	
 r?   chartc                 (   | j                  ||dd      rt        d| d| d       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 (r  r  r3  Nz7Chart cannot be inserted in a worksheet more than once.rJ  r  r   r  r  r   r  r  r  r  F)rO  r   already_insertedcombinedr  r  r  r  r  r   r  )r5   r"  rP   r  r  r  r  r  r  r  r  r  s               r;   insert_chartzWorksheet.insert_chart  sx   & !!#sD$7+C53%r:;?G !!U^^8W8WJK!%>>.2ENN+;;z1-;;z1-++i+++i+.2kk-6[[u5
 ==AmmG==AmmG>>~~H>>~~H	
 r?   commentc                     | j                  ||      ryt        |      | j                  kD  ryd| _        d| _        t        ||||      }|| 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.

        r3  rJ  Tr   )rO  rP  r   r   r   r   r   )r5   r"  rP   r  r  s        r;   write_commentzWorksheet.write_comment  sc    ( !!#s+ w<$//)  c39")c3r?   c                     d| _         y)z
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r5   s    r;   show_commentszWorksheet.show_comments       !%r?   is_byte_streamc                 N    | j                  |      }|| _        |rt        d       y)z
        Set a background image for a worksheet.

        Args:
            source:         Filename, BytesIO, or Image object.
            is_byte_stream: Deprecated. Use a BytesIO object instead.

        Returns:
            0:  Success.

        zThe `is_byte_stream` parameter in `set_background()` is deprecated. This argument can be omitted if you are using a BytesIO object.r   )r  r   r   )r5   r  r  r  s       r;   set_backgroundzWorksheet.set_background  s2     ''/ %R
 r?   c                     || _         y)z
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)r   )r5   authors     r;   set_comments_authorzWorksheet.set_comments_author8  s      &r?   c                     | j                   S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rr   r  s    r;   get_namezWorksheet.get_nameE  s     yyr?   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)r   r   rs   r  activesheetr  s    r;   activatezWorksheet.activateS  s$     *.**'r?   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   r   r  s    r;   selectzWorksheet.selecte  s     r?   c                      d| _         d| _        y)zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   Nr   r   r  s    r;   hidezWorksheet.hidev        r?   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  r?   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)r   rs   r  
firstsheetr  s    r;   set_first_sheetzWorksheet.set_first_sheet  s     )-&r?   widthc                    |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t        |	d      }	t        |	d      }	t        | j                  |	      | _        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.

        Tr   F	collapsedlevelr   r3     r   )r  rO  maxminr   r  r   r   )r5   rs  ru  r
  rI  r  
ignore_rowr   r  r  
ignore_colrP   s               r;   
set_columnzWorksheet.set_column  s   2 ?G x%-yY 
 Xu-KKU3	GQ' 5VJJ !!!Xz:F!!!Y
JG E1E1!$T%;%;U!C HqL1 	WC"'feYPU!VDMM#	W !%r?   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  )r5   rs  ru  r
  rI  r  s         r;   set_column_pixelszWorksheet.set_column_pixels  s1    2 ))%0Ey(E;PPr?   	max_widthc                 x   | j                   rt        d       y| j                  yi }t        | j	                  |      d      }t        | j                  j                  | j                  j                  j                        }t        | j                  | j                  dz         D ]1  }| j                  j                  |      s t        | j                  | j                  dz         D ]  }|| j                  |   v s| j                  |   |   }|j                  j                   }d}|dv rc|dk(  r|j"                  }	||	   }
n|j$                  }
d	|
vrt'        |
      }n/|
j)                  d	      D ]  }
t'        |
      }t+        ||      } n |d
k(  r"dt-        t/        |j0                              z  }n|dk(  r| j2                  }n|dk(  r|j4                  rd}nd}n|dv rt7        |j8                  t:        t<        f      r1|j8                  dkD  r}dt-        t/        |j8                              z  }n[t7        |j8                  t.              rt'        |j8                        }n+t7        |j8                  t>              r|j8                  rd}nd}| j@                  j                  ||f      r
|dkD  r|dz  }|j                  |d      }||kD  s|||<    4 |jC                         D ]  \  }}| j	                  |dz         }t        ||      }| jD                  j                  |      ry| jD                  j                  |      }|d   }|d   }|-|s+||kD  sp|| jD                  |   d<   d| jD                  |   d<   || jD                  |   d<   d| jD                  |   d<   |dddddg| jD                  |<    y)z
        Simulate autofit based on the data, and datatypes in each column.

        Args:
            max_width (optional): max column width to autofit, in pixels.

        Returns:
            Nothing.

        z1Autofit is not supported in constant_memory mode.Ng     o@)keyr   r   rX   r\   rX   
rW   r  r[   rY      $   rZ   r]         TF)#rv   r   r   r  r  sortedrt   string_table__getitem__r  r   r   r  r   r   r!  __name__rH  r  r+   rD   r  rP  r=  rV  r   r  rC  rh  r-  r3   r;  r   itemsr   )r5   r  col_width_maxstringsrow_numcol_numcell	cell_typelength	string_idrH  
seg_length	width_maxpixel_widthr
  r   
user_widthr   s                     r;   autofitzWorksheet.autofit	  s    DE ??"  --i8%@	 NN''T^^-H-H-T-T
 T__doo.AB V	8G::>>'* $//A2EF R8djj11::g.w7D $ 7 7IF $<< %0(,I%,Y%7F%)__Fv-%3F%;F +1,,t*< A-;F-C
),VZ)@A #h. "#ST[[)9%:!:"j0 "&!9!9"i/  <<%'F%'F"&AA
 &djj5#,?#zzA~)*STZZ-A)A'

C8%3DJJ%?F'

D9#zz)+)+ ((,,gw-?@VaZ" !. 1 1'1 =I	)17g.eR8	V	8r %2$7$7$9 	N G[ ))+/:E y)E }}  )  ==,,W5%a[
!!)&z)49g.q148g.q105DMM'*1-04DMM'*1-*/ua)Mg&3	Nr?   heightc                    |i }| j                   | j                   }nd}| j                  ||      ry|| j                  }|j                  dd      }|j                  dd      }|j                  dd      }|dk(  rd}| j                  }t	        |d      }t        |d      }t	        | j                  |      | _        |||||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   r3  r   Fr  r  r   r  T)
r   rO  r   r  r  r  r   r   r   r   )	r5   r"  r3  rI  r  min_colr   r  r  s	            r;   set_rowzWorksheet.set_row  s   * ?G ??&ooGG !!#w/>,,F Xu-KKU3	GQ' Q;F,,F E1E1!$T%;%;U!C %k65)Lc !%  &v.sr?   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_heightr6  )r5   r"  r3  rI  r  s        r;   set_row_pixelszWorksheet.set_row_pixels  s/    * ++F3F||Cg>>r?   hide_unused_rowsc                 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   )r5   r3  r:  s      r;   set_default_rowzWorksheet.set_default_row  sB     >,,FT---$(D!&,D#&'D# r?   r  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 cellr3  r   zMerge range '!' overlaps previous merge range ''.!' overlaps previous table range 'rc   r   )r   rO  r,   r  r   r  r!   r   r   r  r6  r&  )r5   rr  rs  rt  ru  r  rI  r  r"  rP   previous_ranges              r;   merge_rangezWorksheet.merge_range	  s   >  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*'
| 4""0!15 
 ##''c
3%)%5%5%9%93*%EN*'
| 4""0!15 
 1;!!3*-;	;& 	

9i8DE 	Iy$< HqL1 	=CY15 =)#y(8!!#sB<=	= r?   c                    ||k  r||}}||k  r||}}| j                  ||||      }t        ||||      }|| _        || _        ||g| _        t        ||dz         D ]i  }| j                  j                  ||f      r7| j                  j                  ||f      \  }}	|dk(  rt        d| d|	 d      d|f| j                  ||f<   k 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   r   zWorksheet autofilter range 'z,' overlaps previous Table autofilter range 'r?  	worksheetN)	_convert_name_arear,   r   r   r   r  r   r  r!   )
r5   rr  rs  rt  ru  arearefrP   r   r   s
             r;   
autofilterzWorksheet.autofilterd	  s   $ i%-yYi%-yY &&y)XxPy)Xx@#!&1 HqL1 
	EC  $$i%56,0,=,=,A,A9cBR,S)\')*6se <33?.D 
 4?2DDy#./
	Er?   criteriac           	         | j                   st        d       y	 t        |       | j                  \  }}||k  s||kD  rt        d| d| d| d	       y| j                  |      }t        |      d
vrt        d| d       | 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        $ r7 |}t	        |dz         \  }}|| j
                  k\  rt        d| d       Y yY Ow 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()NrO   Invalid column ''Column '%' outside autofilter() column range (r  ))rd   r  z(Incorrect number of tokens in criteria 'r  r   r   r   rd      )r   r   r3   r4   r)   r~   r   _extract_filter_tokensrP  _parse_filter_expressionfilter_column_listr   r   r   )r5   rP   rI  
col_letterrQ   	col_firstcol_lastr  s           r;   filter_columnzWorksheet.filter_column	  s    ##@A		H !% 1 1H ?cHn3%  #Bxj3 ,,X6v;f$;H:QGH..x@ v;!q	Q##C&)5  [A&)q.VAY!^q	UV##C&)VAY)?@  %+DS!$%DS!O  	J(s3HQdoo%'
|156 &	s   D5 5:E54E5filtersc           	      x   | j                   st        d       y	 t        |       | j                  \  }}||k  s||kD  rt        d| d| d| d	       y|| j                  |<   d
| j                  |<   d
| _	        y# t        $ r6 |}t	        |dz         \  }}|| j
                  k\  rt        d| d       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.

        rK  NrO   rL  rM  rN  rO  ,rP  r   )
r   r   r3   r4   r)   r~   r   r   r   r   )r5   rP   rY  rU  rQ   rV  rW  s          r;   rT  zWorksheet.filter_column_list	  s     ##@A		H !% 1 1H ?cHn3%  ;az,  ' !+  	J(s3HQdoo%'
|156 &	s   A: ::B98B9c                    | j                  ||dd      ry| j                  ||dd      ry|i }n|j                         }h d}|j                         D ]  }||vst        d| d        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    d       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/d0d/d1d2d3d2}	|d   |	vrt        d4|d    d5       y|	|d      |d<   |d   dk(  s|d   dk(  rd|vrt        d6       yd|d<   d7d8d9d:}
d;|vrd7|d;<   n%|d;   |
vrt        d4|d;    d<       y|
|d;      |d;<   |d   d=v r\|d	   rWt        |d	         rI| j                  |d	         }|d>|d	<   |d   r)t        |d         r| j                  |d         }|d>|d<   |j	                  d      r$t        |d         d?kD  rt        d@|d    dA       y|j	                  dB      r$t        |dB         d?kD  rt        dC|dB    dA       y|j	                  d      r$t        |d         dDkD  rt        dE|d    dF       y|j	                  dG      r$t        |dG         dDkD  rt        dH|dG    dF       y|d   dk(  rCt        |d	   t              r0 | j                  |d	    }t        |      dDkD  rt        dI| dJ       ydK|vrd8|dK<   dL|vrd8|dL<   dM|vrd8|dM<   dN|vrd8|dN<   ||||gg|dO<   dP|v r|dO   j                  |dP          dQ|v r|dQ   j                  dRdS      |dQ<   | j                  j                  |       y7)Ta  
        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.
        Tr3  N>   rh  r  maximumminimumrI  dropdownvalidate
error_type
show_error
show_inputerror_titleinput_titlemulti_rangeother_cellsignore_blankerror_messageinput_messageUnknown parameter 'z' in data_validation()rJ  r  rh  r^  r`  z5Parameter 'validate' is required in data_validation()nonewholedecimalr  r?  r@  
textLengthcustom)anyz	any valuezwhole numberrm  integerrn  r  r?  r@  ztext lengthr,  rp  zUnknown validation type 'z/' for parameter 'validate' in data_validation()re  rj  betweenrI  r]  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<=zUnknown criteria type 'z/' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   r  )stopwarninginformationra  z' for parameter 'error_type'.r?  r@  .16g    zLength of input title 'z' exceeds Excel's limit of 32rd  zLength of error title '   zLength of input message 'z' exceeds Excel's limit of 255ri  zLength of error message 'zLength of list items 'z;' exceeds Excel's limit of 255, use a formula range insteadrh  r_  rc  rb  cellsrg  rf  $rc   )rO  copykeysr   r  r'   r  rP  rC  r  	_csv_joinrE   replacer  r  )r5   rr  rs  rt  ru  r  valid_parameters	param_keyvalid_typescriteria_typeserror_types	date_timere  s                r;   data_validationzWorksheet.data_validation	  s0   2 !!)YdC!!(HdDA?G llnG
* ! 	I 00*9+5KLM	 w&x0GG&y1GG W$HI # '"
  :k1+GJ,?+@ A2 3 )'**=>

 J6)M*2O,4
 J6)z"f,z"h."+GJ!%GI W$HI
y
<
 
 	

 '
 J
 *
 *
 M
 
 
 
 '(<
 &
 $%6
  #!
( :n4)'**=)> ?2 3 ,WZ-@A
 :)+wz/Bl/R'E !%GI 
 w&$%GL!\"+5)',*?)@ A. / $/0E$FGL! J#33 #GG$45//0@AI"+D!1GGy!&9'):L&M 33GI4FG	(1$'7	" ;;}%#gm.D*E*J)'-*@)A B. /  ;;}%#gm.D*E*J)'-*@)A B. /  ;;'C0H,IC,O+GO,D+E F/ 0  ;;'C0H,IC,O+GO,D+E F/ 0  :&(Z8H$-O$dnngg&67G7|c!,WI 67 8  (&'GN#W$"#GJw&$%GL!w&$%GL! '	8XFG G#G##GM$:; G#%,]%;%C%CC%LGM" 	(r?   c                 b   | j                  ||dd      ry| j                  ||dd      ry|i }n|j                         }h d}|j                         D ]  }||vst        d| d        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    d*       y|d   dk(  rd|d+<   ||d      |d<   i d,d,d-d.d/d0d1d0d2d0d3d4d5d4d6d4d7d8d9d8d:d;d<d;d=d>d?d>d@dAdBdAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdMdPdQ}	dR|v r|dR   |	v r|	|dR      |dR<   dS|v r2t	        |dS   t
              rt        |dS         j                         |dS<   |d   dTv rd|d<   dS|v r5t        |dS         st        dU       y| j                  |dS         }
|
dV|dS<   dW|v r5t        |dW         st        dX       y| j                  |dW         }
|
dV|dW<   dY|v r5t        |dY         st        dZ       y| j                  |dY         }
|
dV|dY<   i d[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|}|d   d'k(  r|j                  d}      st        d~       y|d}   |vrt        d|d}    d       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|dS   }t'        |      }|dR   }|dR   dDk(  rdD|d<   d| d| d|d<   nc|dR   dEk(  rd|d<   d| d| d|d<   nI|dR   dFk(  rdF|d<   d| d| d| d|d<   n,|dR   dGk(  rdG|d<   d| d| d| d|d<   nt        d| d       |d   dk(  r|dR   dHk(  r
d| d|d<   n|dR   dIk(  r
d| d|d<   n|dR   dk(  r
d| d|d<   n|dR   dJk(  rd| d| d|d<   n|dR   dKk(  rd| d| d|d<   n|dR   dLk(  rd| d| d|d<   no|dR   dMk(  rd| d| d|d<   nZ|dR   dNk(  rd| d| d| d|d<   nB|dR   dOk(  rd| d| d|d<   n-|dR   dPk(  rd| d| d| d| d	|d<   nt        d|dR    d       |d   dk(  r	d| dÝ|d<   |d   dk(  r	d| dĝ|d<   |d   dk(  r	d| dƝ|d<   |d   d!k(  r	d| d|d<   |d   d"k(  rd|d<   d|d<   d|d<   d|d<   |j)                  dd̫       |j)                  ddΫ       |j)                  ddЫ       |j)                  ddЫ       |j)                  dt+        dӫ             |j)                  dt+        dի             t+        j,                  |d         |d<   t+        j,                  |d         |d<   |d   d#k(  rd|d<   d|d<   |j)                  dd̫       |j)                  dd֫       |j)                  ddΫ       |j)                  ddЫ       |j)                  ddЫ       |j)                  dt+        d׫             |j)                  dt+        dث             |j)                  dt+        d٫             t+        j,                  |d         |d<   t+        j,                  |d         |d<   t+        j,                  |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)                  dt+        d             |j)                  d|d          |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dt+        d             |j)                  dt+        d             |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dt+        d             t+        j,                  |d         |d<   t+        j,                  |d         |d<   t+        j,                  |d         |d<   t+        j,                  |d         |d<   t+        j,                  |d         |d<   |j                  d      r6d| _        |d   dk(  r|d   dk(  rd|d<   |d   dk(  r|d   dk(  rd|d<   ||d<   	 |d   j1                  d1      |d<   	 |d   j1                  d1      |d<   	 |d   j1                  d1      |d<   || j6                  v r| j6                  |   j9                  |       y|g| j6                  |<   y# t2        t4        f$ r Y w xY w# t2        t4        f$ r Y |w xY w# t2        t4        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.
        Tr3  N>$   rD  iconsrh  rU   r]  r^  bar_onlyrI  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_lengthrf  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_samerk  z' in conditional_format()rJ  rD  z4Parameter 'type' is required in conditional_format()r*  cellIsr?  r@  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)re  icon_setzUnknown value 'z.' for parameter 'type' in conditional_format()	directionrs  rt  ru  rv  rw  r$  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  
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 monthrI  rh  r  z5Conditional format 'value' must be a datetime object.r  r^  z7Conditional format 'minimum' must be a datetime object.r]  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 'z' in conditional_format().rd   total_icons4rQ  5r   r  rf  r  rc   rU   priorityr   r  r  r  r  r  r  r  r  r  r  r  is_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))re  notContainsTextzISERROR(SEARCH("z))zLEFT(r[  z)="r  zRIGHT(zInvalid text criteria 'zFLOOR(z,1)=TODAY()-1z,1)=TODAY()tomorrowz,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)))zInvalid time_period criteria 'z	LEN(TRIM(z))=0z))>0zISERROR(rP  zNOT(ISERROR(
colorScaler  r  r  r  r  r  r  r   r  r  z#FF7128r  z#FFEF9C
percentilez#F8696Bz#FFEB84z#63BE7Br  2   autoMinx14_min_typeautoMaxx14_max_typer  z#638EC6r  Fz#FF0000#000000  r  )rO  r  r  r   rC  r;  r=  upperr'   r  r  r'  _set_icon_propsr,   r-   r  _get_dxf_indexr  r  rP  
setdefaultr   _from_valuer{   lstripKeyErrorAttributeErrorr  r  )r5   rr  rs  rt  ru  r  valid_parameterr  
valid_typecriteria_typer  valid_iconsr  
start_cellrh  r,  rI  s                    r;   conditional_formatzWorksheet.conditional_format   s   2 !!)YdC!!(HdDA?G llnG%
P ! 	I/*9+5NOP	  GH
H
F
 F
 ~	

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

. 6?*,!'&/!2 3* + 6?h&#+GK $WV_5!
y!
<!
 !
 	!

 '!
 J!
 *!
 *!
 M!
 !
 !
 !
 '(<!
 &!
 $%6!
  #!!
" .#!
$ ,'#$&###%%%')A!
H  WZ%8M%I"/
0C"DGJ g*WW-=t"D"77#34::<GG 6?..&GFO'!*77+;<PQ 33GG4DE	&/%5 G#*79+=>RS 33GI4FG	(1$'7	"G#*79+=>RS 33GI4FG	(1$'7	"
	
x
 &'8
  	

 	
 m
  0
 ]
 +
 ]
  0
 x
 
 ]
 
  	!
" #
* 6?i';;|,D  |$K7*7<+@*A B/ 0 $/0E$FGL! &'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$G$EZFz*Hz"n4"0';E7"ZLPS%T	"$5"3'7wbB%O	"$4".',ZL&UG1%M	"$
2",'-j\6(#eWA%N	".xj8QRS 6?l*z"k1'-j\%G	"$/'-j\%E	"$
2'-j\%G	" $3( 5'L7 	" $
2,ZL 9))34MO 	"
 $
2,ZL 9!!+,LN 	"
 $
2$ZL 1!!+,NP 	"
 $3  -)l +**45TV 	" $3  -&<'79 	" $3  -)l +**4 6&<';= 	" 4WZ5H4I J. / 6?..#,ZL!=GI6?11#,ZL!=GI6?..#+J<q!9GI6?11#/
|2!>GI 6?o-*GFO !%GH #'GJ#'GK z51z51{A.{A.{E),<={E),<=#(#4#4W[5I#JGK #(#4#4W[5I#JGK  6?o-*GFO !%GHz51z<8z51{A.{A.{E),<={E),<={E),<=#(#4#4W[5I#JGK #(#4#4W[5I#JGK #(#4#4W[5I#JGK  ')')$ 6?i' $GH;;z*&+
#*3'*1**=';;z*&+
#*3'*1**='{A.{A.{E),<=17;3GHz516{E233U95EF:E)<LM8%@?G2B7/y1AB#(#4#4W[5I#JGK */*;*;GDV<W*XG&'(-(9(9'BR:S(TG$%,1,=,=,--G() 493D3D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   -k2 l l 2lllll.-l.)r   r3  rJ  r  c                 Z   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| d        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!| d"       yt        j                  d#|t        j                        rt        j                  d$|      rt        d%| d&       yt        j                  d'|      rt        d(| d&       yt        j                  d)|      st        j                  d*|      rt        d+| d,       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	        ||||      |d0<   t	        ||||      |d1<   |d   sd|d<   |d   r|d1   |d<   d}g |d2<   i }t        ||dz         D ],  }|d3t        |      z   d.d.d.dd.ddd4	}d2|v r|t!        |d2         k  r|d2   |dz
     }nd}|r|j                  d5d      }|j                  d6      r|d6   |d<   |d   }|j#                         }||v rt        d7| d&        yd||<   |j                  d8      |d9<   d:|v rT|d:   rO|d:   }|j%                  d;      r|j'                  d;      }| j)                  |      }| j+                  |d      }||d:<   |j                  d<      r|d<   }|d=k(  rd>}|d?k(  rd@}t-        g dA      }||v r| j/                  ||d         }n| j+                  |d      }||dB<   dC}||d<<   |j                  dDd      }| j1                  |||||       n>|j                  dE      r-|dE   }||dE<   | j3                  ||||j                  d5             ||j5                         |d5<   |||dz
  <   |d2   j7                  |       |d   r| j3                  |||d   |d9          |dz  }/ dF|v r|dF   }d}t        ||dz         D ]y  }	d} t        ||dz         D ]^  }
|t!        |      k  rI| t!        ||         k  r8||   |    }!| |v r| j9                  |	|
|!||           n| j9                  |	|
|!d       | dz  } ` |dz  }{ t;        t        ||dz               D ]T  \  }}|d2   |   }"|"s|"d:   s|j                  |      }#|"d:   }t        ||dz         D ]  }	| j1                  |	|||#        V | j<                  j7                  |       |d   r{t        ||dz         D ]i  }
| j>                  j                  ||
f      r7| j>                  j                  ||
f      \  }$}%|$dGk(  rt        dH| dI|% d	      dJ|f| j>                  ||
f<   k y)KaY  
        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  Tr3  r   zTable range 'r@  r?  r>  >   r  rr   stylecolumns	total_rowrH  
header_rowbanded_rowslast_columnfirst_columnbanded_columnsrk  ' in add_table()rJ  r*  r)  rH  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_shownrr    zName 'z&' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz*Invalid Excel characters in add_table(): 'rM  z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z-Name looks like a cell name in add_table(): 'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$zInvalid name 'z#' like a RC cell ref in add_table()r&  rc   TableStyleMedium9r  a_ranger'  Column)	idrr   total_stringtotal_functioncustom_totaltotal_valuere  rU   name_formatrU   r   z'Duplicate header name in add_table(): 'header_formatr>  re  r$  r;  
count_nums	countNumsstd_devstdDevr  rA  countr  r  rC  sumvarr<  rp  r=  r:  r  rD  zTable autofilter range 'z0' overlaps previous Worksheet autofilter range 'r   ) r  rv   r   rO  r,   r  r   r  r!   r   r  r*  r+  UNICODEr  r=  rP  lowerr'  r  r  rp  set_table_function_to_formular(  r/  r  r  r6  	enumerater   r   )&r5   rr  rs  rt  ru  r  r   col_formatsr  r"  rP   rA  r  r  num_rowsrr   first_data_rowlast_data_rowcol_id
seen_namesr)  col_data	user_dataxformatheader_namere  function	subtotalsrh  r:  r  ijr0  column_dataformula_formatr   r   s&                                         r;   	add_tablezWorksheet.add_table  s~	   2 ?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*'
| 4((6'7r; 
 $$((#s4%)%6%6%:%:C:%FN*'
| 4((6'7r; 
 0:  #s,:	:&
 ! 	I/*9+5EFG	 ")]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{vdV#IJK 88/rzzBbhhG A$qIJ xx:DADTF!LM xxT*bhh7NPT.U~dV+NOP 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)FtfANO!'+Jt$.7mmO.LH]+ !I-)I2F"+I"6 #--c2&-nnS&9G #'"="=g"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 
L$$(()S)9:040A0A0E0EyRUFV0W-K"k1.6zl C;;G.L 
 8?
6K!!9c"23
L r?   c                    | j                  ||dd      rydt        ||      gi}|i }h d}|j                         D ]  }||vst        d| d        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d0|d-<   |j	                  d1      }|rd|vr|
dz   |z   }||d1<   |j	                  d2d,      }t        |      }|d3   |d4<   |d   |d5<   |d"   |d6<   |d   |d7<   |d!   |d8<   |d   |d9<   |d   |d:<   | j                  ||d4       | j                  ||d5       | j                  ||d6       | j                  ||d7       | j                  ||d8       | j                  ||d9       | j                  ||d:       | 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.

        Tr3  	locations>   r  r  axisrD  r  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_pointsrk  z' in add_sparkline()r  z0Parameter 'range' is required in add_sparkline()rJ  rD  line)ru  columnwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()rw  stackedrd  rangeszMMust have the same number of location and range parameters in add_sparkline()rE  r  rc   r$  !ri  highrg  lowrt  negativern  firstrk  lastrb  r  r  r`  rc  rp  r   ra  rl  zeror   emptyconnectspangapre  r&  seriesrq  rs  rr  rm  rj  rh  rf  )rO  r-   r  r   r  rC  r  rP  r(   rr   r  r  r  r%   _set_spark_colorr   )r5   r"  rP   r  	sparkliner  r  
spark_typerange_countlocation_count	sheetname
new_rangesspark_rangenew_locationsrd  r  
date_rangestyle_idr&  s                      r;   add_sparklinezWorksheet.add_sparkline[  s   ( !!#sD$7 #4S##>"?@	?G
< ! 	I 00*9+5IJK	 '!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*$X.$)(O	.!&+J&7	"#%*9%5	/"#(>	- "'-	,"'-	,!&u	+ 	i.Ai2BCi/Bi-@i,?i,?i+>y)r?   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,   r   )r5   rr  rs  rt  ru  paneactive_cellsqrefs           r;   set_selectionzWorksheet.set_selection  sh       (	9= x%-yYx%-yYIxB D= +u56r?   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-   r   )r5   r"  rP   s      r;   set_top_left_cellzWorksheet.set_top_left_cellB  s#     !8q.sC8r?   visiblesymbols_belowsymbols_right
auto_stylec                 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   )r5   r  r  r  r  s        r;   outline_settingszWorksheet.outline_settingsT  s+    * "**'#r?   top_rowleft_col	pane_typec                 ,    ||}||}|||||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   )r5   r"  rP   r  r  r  s         r;   freeze_paneszWorksheet.freeze_panesp  s+    , ?GH39=
r?   xyc                 .    | 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  )r5   r  r  r  r  s        r;   split_paneszWorksheet.split_panes  s    , 	!Q15r?   r   c                 Z    |dk  s|dkD  rt        d| d       d}t        |      | _        y)z
        Set the worksheet zoom factor.

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

        Returns:
            Nothing.

        
     zZoom factor 'z"' outside range: 10 <= zoom <= 400rh   N)r   r3   r   )r5   r   s     r;   set_zoomzWorksheet.set_zoom  s3     "9s
=&HIJDI	r?   c                     d| _         y)z
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r  s    r;   	hide_zerozWorksheet.hide_zero  s     r?   colorc                 8    t        j                  |      | _        y)z
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   r  r   r5   r  s     r;   set_tab_colorzWorksheet.set_tab_color  s     **51r?   passwordc                    |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| d         ||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.

        rc   sheetTcontentFobjects	scenariosformat_cellsformat_columnsformat_rowsinsert_columnsinsert_rowsinsert_hyperlinksdelete_columnsdelete_rowsselect_locked_cellssortrH  pivot_tablesselect_unlocked_cellszUnknown protection object: 'rM  r  N)_encode_passwordr  r   r   )r5   r  r  defaultsr  s        r;   protectzWorksheet.protect  sC    r>,,X6HG
T
u
 u
 	

 E
 e
 5
 e
 5
  
 e
 5
 "4
 E
 %
  E!
" $T#
* <<> 	<Ch '3C5:;		<  ('r?   r  
range_namec                 &   |t        d       y|j                  d      }|j                  dd      }| xj                  dz  c_        |dt	        | j                        z   }|r| j                  |      }| j                  j                  |||f       y)	aU  
        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:
            0:  Success.
            -1: Parameter error.

        z1Cell range must be specified in unprotect_range()r3  r$  r  rc   r   Ranger   )r   r  r  r   r=  r  r   r  r5   r  r  r  s       r;   unprotect_rangezWorksheet.unprotect_range  s    & DE  &&s+
''R0
!!Q&! 3t'@'@#AAJ,,X6H$$j*h%GHr?   c                    | j                  ||dd      rt        d| d| d       y|i }| j                  }| j                  }dt	        | j
                        z   }t        ||||||      }| 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 (r  r  r3  r   r   )	rO  r   r   r   rP  r   r   r  r   )r5   r"  rP   r  r3  r
  button_numberbuttons           r;   insert_buttonzWorksheet.insert_button;  s    $ !!#sD$7,SEC5;<?G ((''C 1 122Cfe]GL  (r?   c                     |r|j                   s|j                          |sG| j                  s/| j                         | _        | j                  j                          | j                  }| j	                  ||||      S )a  
        Insert a boolean checkbox in a worksheet cell.

        Args:
            row:          The cell row (zero indexed).
            col:          The cell column (zero indexed).
            boolean:      The boolean value to display as a checkbox.
            cell_format:  Cell Format object.  (optional)

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

        )checkboxset_checkboxr  r  r<  r  s        r;   insert_checkboxzWorksheet.insert_checkboxa  sn    & {33$$& ///3/G/G/I,,,99;66K""3WkBBr?   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       "&r?   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  r?   view)r   r   r  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  )r5   r  s     r;   set_page_viewzWorksheet.set_page_view  s     r?   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     r?   r   )r   ro   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   )r5   r   s     r;   	set_paperzWorksheet.set_paper  s     (DO&*D# r?   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       &*"r?   c                      d| _         d| _        y)zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r   r   r  s    r;   center_verticallyzWorksheet.center_vertically  r  r?   leftrightr  r  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   )r5   r  r  r  r  s        r;   set_marginszWorksheet.set_margins  s#    (  !#r?   r   c                 b   |}|j                  dd      }t        |      dkD  rt        d       y|t        |t              sd|i}ni }|j                         }|||d<   g | _        |j                  d      rW|j                  d      |d	<   | j                  |j                  d      |      }d
|_	        | j                  j                  |       |j                  d      rW|j                  d      |d	<   | j                  |j                  d      |      }d|_	        | j                  j                  |       |j                  d      rW|j                  d      |d	<   | j                  |j                  d      |      }d|_	        | j                  j                  |       |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]&Gr  zCHeader string cannot be longer than Excel's limit of 255 charactersNmargin
image_leftimage_data_left
image_dataLHimage_centerimage_data_centerCHimage_rightimage_data_rightRHNumber of footer images '#' doesn't match placeholder count '' in string: align_with_marginsscale_with_docrg   T)r  rP  r   rC  r   r  r   r  r  _header_positionr  rE  r   r   r   r   r   r   )r5   r   r  r  header_origr  placeholder_countimage_counts           r;   
set_headerzWorksheet.set_header  6    d3v;VWgt,#W-G ,,.  &GH  ;;|$$+KK0A$BGL!++GKK,EwOE%)E"%%e,;;~&$+KK0C$DGL!++GKK,GQE%)E"%%e,;;}%$+KK0B$CGL!++GKK,FPE%)E"%%e,"LL.$,,-++K= 9+,M+H "$D7*(/0D(ED%w&(/0@(AD%$[[37%)""&D r?   r   c                 b   |}|j                  dd      }t        |      dkD  rt        d       y|t        |t              sd|i}ni }|j                         }|||d<   g | _        |j                  d      rW|j                  d      |d	<   | j                  |j                  d      |      }d
|_	        | j                  j                  |       |j                  d      rW|j                  d      |d	<   | j                  |j                  d      |      }d|_	        | j                  j                  |       |j                  d      rW|j                  d      |d	<   | j                  |j                  d      |      }d|_	        | j                  j                  |       |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  r  zCFooter string cannot be longer than Excel's limit of 255 charactersNr  r  r  r  LFr  r  CFr  r  RFr  r  r  r  r   rg   T)r  rP  r   rC  r   r  r   r  r  r  r  rE  r   r   r   r   r   r   )r5   r   r  r  footer_origr  r  r  s           r;   
set_footerzWorksheet.set_footerT  r  r?   c                 t    ||}|dz  }|dz  }d| d| }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   r  z:$rz  )r(   rr   r   )r5   rr  rt  rF  r  s        r;   repeat_rowszWorksheet.repeat_rows  sX      H 	Q	A 9+Rz* $DII.	 )C$ 6r?   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   rB   rz  )r*   r(   rr   r   )r5   rs  ru  rF  r  s        r;   repeat_columnszWorksheet.repeat_columns  sZ      H #9a0	!(A. 3) $DII.	 )C$ 6r?   optionc                 ~    |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   )r5   r  s     r;   hide_gridlineszWorksheet.hide_gridlines  sJ     Q;#$D $%D!)-D&q[#$D $%D!#$D $%D!r?   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     "%)"r?   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_headers   s      $r?   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   r3  )r}   r~   rE  r   )r5   rr  rs  rt  ru  rF  s         r;   
print_areazWorksheet.print_area  sZ    , NQDOOa//DOOa// &&y)XxP $r?   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_across0  s     "&r?   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   )r5   r
  r3  s      r;   fit_to_pageszWorksheet.fit_to_pages>  s!      "&r?   
start_pagec                     || _         y)z
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r   )r5   r  s     r;   set_start_pagezWorksheet.set_start_pageP  s     %r?   scalec                 t    |dk  s|dkD  rt        d| d       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  zPrint scale 'z#' outside range: 10 <= scale <= 400Nr   T)r   r   r3   r   r   )r5   r!  s     r;   set_print_scalezWorksheet.set_print_scale]  sC     2:='JKL u:"&r?   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_whites  s      "&r?   breaksc                     || _         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   r5   r&  s     r;   set_h_pagebreakszWorksheet.set_h_pagebreaks       r?   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*  r?   rr   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=  rs   )r5   rr   s     r;   set_vba_namezWorksheet.set_vba_name  s,      $D '#djj1n*= =Dr?   c                     |y|j                         }h d}|j                         D ]  }||vst        d| d        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.

        r3  >	   
eval_errorformula_rangeformula_differsformula_unlockedcalculated_columntwo_digit_text_yearempty_cell_referencelist_data_validationnumber_stored_as_textrk  z' in ignore_errors()r   )r  r  r   r  )r5   r  r  r  s       r;   ignore_errorszWorksheet.ignore_errors  sd     ? ,,.

 ! 	I 00*9+5IJK	
 &r?   c                    |d   | _         |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                  rdt;        j<                  | j
                        \  }}t?        j@                  |       || _!        tE        |dd      | _#        | jF                  | _$        y y )Nrr   rs   rt   r  rv   rw   r  r
  r  r  r  r  r  r  r|   r  r  r  r   g     )@   rf   r         ?F)dirzw+utf-8modeencoding)%rr   rs   rt   r  rv   rw   r  r
  r  r  r  r  r  r  r|   r  r  r  r   r   r   r   r   r   r   r   r   r   r   tempfilemkstemposcloser  openr  r  )r5   	init_datafdfilenames       r;   _initializezWorksheet._initialize  s   f%	w'
";/'(89():;)";/"+,@"A#,-B#C ():;!*+>!?#,-B#C "+,@"A#,-B#C ():;():;'(89$-.D$E!():;',D$&+D#&(D##D $DDO!"D!$D!$D(-D%  &--$++>NRHHRL%-D"#H4'JD &&DG  r?   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 )NrD  )"_xml_declaration_write_worksheet_write_sheet_pr_write_dimension_write_sheet_views_write_sheet_format_pr_write_colsrv   _write_sheet_data_write_optimized_sheet_data_write_sheet_protection_write_protected_rangesr|   _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_file	  s    	 	 	 	 	! 	##% 	 ##""$,,. 	$$& 	$$& ##% 	! 	! 	'') 	$$& 	  	!!# 	  " 	  	!!# 	  	  	""$ 	 	""$ 	%%' 	 	! 	 	+& 	r?   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rN  )r}   r~   rv   r   r   r   r   r   )r5   r"  rP   r  r  s        r;   rO  zWorksheet._check_dimensionsm  s     7cAg$//!SDOO%; *1E1ET&&&&#*?"%&#*?"%&#*?"%&#*?"%r?   c                 D    t        || j                  | j                        S N)r$   r  r  )r5   dt_objs     r;   r  zWorksheet._convert_date_time  s    *64>>4CWCWXXr?   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 )Nrc   r   r   r  rB   rz  )r*   r=  r}   r~   r(   rr   )r5   	row_num_1	col_num_1	row_num_2	col_num_2range1range2rF  row_col_only
col_char_1
col_char_2
row_char_1
row_char_2r  s                 r;   rE  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%r?   c                     |sg S t        |      }d|v r|j                  d       t        |      }|j                          d}t	        |      |kD  r|d | }|S )Nr   i  )rJ  remover  r  rP  )r5   r&  
breaks_setbreaks_listmax_num_breakss        r;   _sort_pagebreakszWorksheet._sort_pagebreaks  sf     I[

?a :& {n,%o~6Kr?   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   r3  z"")r*  compilefindallr'  r)  r  r  )r5   r  token_rer  
new_tokensr0  s         r;   rR  z Worksheet._extract_filter_tokens  s     I::34!!*-
 		%E$ab	~~c"cr
MM$,Ee$		% r?   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  rd   z(and|&&)r   z	(or|\|\|)r   Token 'z3' is not a valid conditional in filter expression 'rM  rQ  )rP  r*  r+  r   _parse_filter_tokens)r5   r  r  conditionalexpression_1expression_2s         r;   rS  z"Worksheet._parse_filter_expression  s     v;! !)Kxx
K0,4k] +--7L;
  44Z!ML44Z!ML;-/,>>((V<<r?   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| d| d       |j                         }|dv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                               rD|dv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   rd   rQ     )rx  r$  z=~eqr{  z!~ner|  r  r  r  r  z
top|bottomr   i  zThe value 'z' in expression 'z' must be in the range 1 to 500)r%  %z
The type 'z ' must be either 'items' or '%%'r     r  r  r  z0' is not a valid operator in filter expression 'r?  zblanks|nonblanks)r  r   zThe operator 'z0' is not valid in relation to Blanks/NonBlanks'.r  r5  z[*?]   )r  r*  r+  rI  r3   r   r=  rm  )r5   r  r  	operatorsoperatorr0  rh  s          r;   r  zWorksheet._parse_filter_tokens  s   
 
	 ==D1q	 88L&)//"34q	NEqyECK!%(9* F4 5
 KKMEN* '8 E5 6
 ay E)ayCAJEF1I%( $))3B8 88&6v%$VAYK/@ ME F
 KKME  q=Eq= H$E HE q=RYYvu5H%  r?   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S )Nr   r3     r   rb   iK  X)ordrP  )r5   r  digestr  s       r;   r  zWorksheet._encode_passwordk  s    
 TrTN 	 D|t+10FGFc$iF	  R<4'Vq[F,BC#h-&r?   c                     t        |t              r|}|S |(|j                  d      rt        |d         }||_        |S t        |      }|S )Nr  )rC  r   r  
image_name)r5   r  r  r  s       r;   r  zWorksheet._image_from_source|  s[     fe$E   W[[%>',/0E%E  &MEr?   r  image_id
drawing_idc           	         |j                   |j                  z  }|j                  |j                  z  }|d|j                  z  z  }|d|j
                  z  z  }| j                  |j                  |j                  |j                  |j                  |||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'               }t(        j*                  |_        ||_        |j0                  |_        ||_         ||_        d |_        |j                  |_        d|_        |j8                  |_        |j:                  |j:                  |_        |j<                  r|j<                  }	|	j?                         }
|	jA                         }| jB                  jE                  |	jF                        s| jH                  j#                  d	|
|g       | jK                  |	jF                        |	_        |	|_        | jB                  jE                  |jL                        s9| jH                  j#                  d
dt%        |      z   dz   |jN                  z   g       | jK                  |jL                        |_        |jQ                  |       y )Ng      X@r=  5%  r   /drawing../drawings/drawing.xmlr   
/hyperlink/image../media/image.))_width_x_scale_height_y_scale_x_dpi_y_dpi_position_object_emusr  r  	_x_offset	_y_offset_anchorr3   r   r   embeddedr   r  r=  r   r   IMAGE_drawing_type_dimensionsr  _description_shape
_rel_index_decorativer  _url_target_target_moder   r  _linkr   _get_drawing_rel_index_digest_image_extension_add_drawing_object)r5   r  r  r  r
  r3  
dimensionsr   drawing_objectr  targettarget_modes               r;   _prepare_imagezWorksheet._prepare_image  sx    u~~-/ 	$$$%%//JJJJOOOOMM

 C54<()SFTM*+ ||iG G"DL''..2S_DvMtT llG$'3'9'9$%/"&+&6&6# %!' $!&$%!%*%6%6"(*/*;*;N'::**C[[]F**,K$$((3""))<*MN!88CCN"%N  $$U]]3%%$s8}4s:U=S=SS %)$?$?$N!##N3r?   c                 2   | 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|      }|	|_        t               }t        j                   |_        ||_        ||_        ||_        ||_        ||_        |
|_        d|_        ||_        t5        j6                  |      }|r|j9                         }|j;                         }| j<                  j                  |j>                        s| j@                  j                  d||g       | jC                  |j>                        |_        ||_"        |jG                  |       y )Nr
  rd   r3  r  r=  r  r   r  r  r  rectTextBoxr   r  )$r   r  r   r   r  r3   r   r   r  r   r  r=  r#   r  r   r   SHAPEr  r  r  r  r  r  r  r  r  r   from_optionsr  r  r   r  r   r  r  r  )r5   rs   r  r"  rP   r  r  r  r  r  r  r  r  r  r
  r3  r  r   shaper  r  r  r  s                          r;   _prepare_shapezWorksheet._prepare_shape  s    KK	
 GT%<%<q%@AXt'>'>'BC'//h%


 C54<()SFTM*+ ||iG G"DL''..2S_DvMtT llGfi1
$'3'9'9$%/" %!'&1# %!'$%!%/"w'[[]F**,K$$((3""))<*MN!88CCN"%N##N3r?   c                    t        j                  dd|j                        |_        | j                  j	                  |j
                        s9| j                  j                  ddt        |      z   dz   |j                  z   g       | j                  |j
                        |_        | j                  j                  |       y )Nz\..*$rc   r  r  r  )r*  r}  r  r   r  r  r   r  r=  r  _get_vml_drawing_rel_index_ref_idr   )r5   r  r  s      r;   _prepare_header_imagezWorksheet._prepare_header_image  s     66(B0@0@A$$((7""))$s8}4s:U=S=SS 77F&&u-r?   c                 b    | j                   j                  ddt        |      z   dz   |z   g       y )Nr  r  r  )r   r  r=  )r5   r  image_extensions      r;   _prepare_backgroundzWorksheet._prepare_background/  s2    &&--'#h-7#=OP	
r?   c           
      
   | 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                  }t               }t        j                  |_        ||_        ||_        ||_        ||_        d |_        ||_        | j/                         |_        ||_        ||_        |j7                  |       | j8                  j                  ddt        |      z   dz   g       y )Nr   r=  r  r  r  z/chartz../charts/chart)r   r9  r3   r
  r3  r  
chart_namer   r   r  r   r  r=  r   r   CHARTr  r  r  r  _namer  r  r  r  r  r  r  r   )r5   rs   chart_idr  r"  rP   r  r  r  r  r  r  r  r  r
  r3  r  rr   r   r  s                       r;   _prepare_chartzWorksheet._prepare_chart5  s    KK	
 a< C5;;012SELL7234//h%


  ||iG G"DL''..2S_DvMN llG$'3'9'9$%/" %!'# $!'$($?$?$A!&1#%/"##N3!!(3x=86AB	
r?   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_pixelsr3   )r5   	col_start	row_startx1y1r
  r3  r  col_endrow_endx2y2x_absy_abss                 r;   r  zWorksheet._position_object_emuso  s    ( ((y"b%
	
 tby!tby!tby!tby!C$,&'C$,&'9b"gwBuUUr?   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't        d|      }t        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 r2   )	_size_col	_size_rowr  r   r  r   r   r   )r5   r  r  r  r  r
  r3  r  r  r  rQ  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
 BZBZ   	* 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Ur?   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  rQ  r   r=  )r   r   r3   r   )r5   rP   r  max_digit_widthpaddingpixelsr
  r   s           r;   r  zWorksheet._size_col  s      $--MM#&q)E]]3'*F}.. &A+  Uo&?@3FG 	 U_4s:;gE  ,,Fr?   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   rQ  gUUUUUU?)r   r3   r   )r5   r"  r  r  r3  r   s         r;   r  zWorksheet._size_row/  s    
  $.. ^^C(+F^^C(+F&A+ 	 Y/0  T%<%<<=Fr?   c                 <    d}d}|dk  r
|||z   z  }|S ||z
  |z  }|S )Ng      @g      @    )r5   r  r  r  r
  s        r;   r  zWorksheet._pixels_to_widthD  s?    R<o78E  g%8Er?   c                     d|z  S )Nrf   r  )r5   r  s     r;   r8  zWorksheet._pixels_to_heightP  s    f}r?   c           	         d}| j                  |j                  |j                  |j                  |j                  |j
                  |j                  |      }|j                  |j
                         |j                  |j                         |S Nr   )r  	start_col	start_rowr  r  r
  r3  r  )r5   r  r  verticess       r;   _comment_verticeszWorksheet._comment_verticesT  ss    //MMNN
 	&'r?   r  c           	         d}| j                  |j                  |j                  |j                  |j                  |j
                  |j                  |      }|j                  |j
                         |j                  |j                         |S r  )r  rP   r"  r  r  r
  r3  r  )r5   r  r  r  s       r;   _button_verticeszWorksheet._button_verticesg  sk    //JJJJOOOOLLMM
 	%&r?   c                 N   g }t        | j                  j                               }|D ]  }t        | j                  |   j                               }|D ]u  }	| j                  |   |	   }
| j                  |
      |
_        |
j
                  | j                  |
_        |
j                  | j                  |
_        |j                  |
       w  | j                  D ]  }| 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 ]  }||z   dz   }| d	| } || _        || _        |S )
N/vmlDrawing../drawings/vmlDrawing.vmlz	/commentsz../commentsr  rn   r   r[  )r!  r   r  r  r  
is_visibler   r  r   r  r   r  r   r=  r   r   r   rP  r  r3   r  r   )r5   r  r   vml_drawing_id
comment_idr   row_numsr"  col_numsrP   r  r  rE  start_data_idrY  data_ids                   r;   _prepare_vml_objectszWorksheet._prepare_vml_objectsz  s     $--,,./ 	)CdmmC05578H )--,S1#'#9#9'#B  %%-)-)>)>G& >>)%)%9%9GN()	)" '' 	<F"33F;FO	< 	&&4s>7JJVST	
 !)D''..mc*o=FG H# s54<() 	5A#a'!+G(M7)4K	5 '(r?   c                 j    || _         | j                  j                  ddt        |      z   dz   g       y )Nr  r  r   )r   r   r  r=  )r5   r   r  s      r;   _prepare_header_vml_objectsz%Worksheet._prepare_header_vml_objects  s8     +&&4s>7JJVST	
r?   c                 2   | j                   D ]  }||d<   |j                  d      dt        |      z   |d<   |d   j                         }||v rt	        d|d    d      d||<   | j
                  j                  ddt        |      z   d	z   g       |d
z  } y )Nr9  rr   TablezDuplicate name 'z ' used in worksheet.add_table().Tz/tablez../tables/tabler  r   )r   r  r=  rI  r    r   r  )r5   table_idseenr   rr   s        r;   _prepare_tableszWorksheet._prepare_tables  s    [[ 	E"E$Kyy ( '#h- 7f =&&(Dt|(&uV}o5UV  DJ %%,,,s8}<vEF MH+	r?   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| d       |S )Nrc   rM  z''r  z'#]z'][z'[e   f   g   h   i   k   m   n   rD  z	SUBTOTAL(z,[z])zUnsupported function 'r.  )r  r   )r5   rW  col_namere  rX  func_nums         r;   rK  z$Worksheet._table_function_to_formula  s     ##C.##C.##C.##C. 	
	 y  *H!(2hZr:G  )(3CDEr?   c                 D    ||vry t        j                  ||         ||<   y ro  )r   r  )r5   r  r  
user_colors       r;   r  zWorksheet._set_spark_color  s'    W$ % 1 1'*2E F	*r?   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                  |j                  d       ^|	dk(  r9|j                  }
| j                  j                  |
      }|j                  |       |	dv r"|j                  }|d}|j                  |       |	dk(  s|j                  d	       |j                  d         " |S )
Nr  r   rW   r[   r  rX   r  r   rT   rc   )rv   r  r   r  r!  r$  rV  rH  rt   _get_shared_stringrh  )r5   r  r  r  r  r  r(  r)  r*  r+  rs   rH  rh  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 $::t{{4&8:"h. $!%!B!B5!IF+"&AA $

 =$%EE*"g-B KK%?&%	&N r?   c                     |D cg c]  }t        |t              st        |      n|! }}dj                  |      S c c}w )Nr[  )rC  r=  r  )r5   r%  items      r;   r  zWorksheet._csv_join*  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}r  z%25r  z%22r5  z%20r  z%3cr  z%3er  z%5br  z%5d^z%5e`z%60rk  z%7br%  z%7d)r*  rm  r  )r5   r  s     r;   _escape_urlzWorksheet._escape_url2  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%
r?   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  r5   r  s     r;   r  z Worksheet._get_drawing_rel_indexF  s|    >  A% '''  ($$V,,!$($8$8&!###r?   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_indexS  sZ      $$V,((00  A% (,(@(@f%'''r?   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d|j                  fg       n|j                  r | j                  dd|j                  fg       nX|j                   r9|j                   }|j"                  s4| j                  d|j%                                n| j                  ddg       |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brY  strikeoutlineshadowr   superscriptr  	subscriptszvalr3  r  themeindexed)r7  r   rFontfamilyCalibrischeme)r   r  bold_xml_empty_tagitalicfont_strikeoutfont_outlinefont_shadow	underline_write_underlinefont_script_write_vert_align	font_sizer7  _write_rstring_colorcolor_indexed
font_color_is_automatic_attributes	font_namefont_family	hyperlinkfont_schemer  )r5   	xf_format
xml_writerr  s       r;   r  zWorksheet._write_fontb  s(   \\
!!%( >>%%c*%%c*##%%h/!!%%i0  %%h/ !!)"5"56   A%""=1  A%"";/ 	!!$%1D1D)E(FG ??b __%%g)//0J/KL$$%%gI<S<S0T/UV!!((E&&))'53D3D3FG%%g~> 	!!'UI4G4G,H+IJ!!(eY5J5J-K,LM)+I4G4G%%h%9N9N1O0PQ&r?   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  )r6  double!   )r6  singleAccounting"   )r6  doubleAccountingur   r>  )r5   rC  r  s      r;   rD  zWorksheet._write_underline  sJ    
 >+,J"_56J"_56J##C4r?   c                 F    d|fg}| j                   j                  d|       y )Nr6  	vertAlignrZ  r5   r6  r  s      r;   rF  zWorksheet._write_vert_align  s!    cl^
##K<r?   c                 <    | j                   j                  ||       y ro  rZ  r5   rr   r  s      r;   rH  zWorksheet._write_rstring_color  s    ##D*5r?   c                 `    | j                   s"| j                  j                          d| _         y y )NT)r  r  rF  r  s    r;   
_opt_closezWorksheet._opt_close  s*    &&""$&*D# 'r?   c                     | j                   r8| j                  }t        |dd      | _        d| _         | j                  | _        y y )Nza+r?  r@  F)r  r  rG  r  r  )r5   rJ  s     r;   _opt_reopenzWorksheet._opt_reopen  sA    ""--H#H4'JD&+D#&&DG #r?   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      rCd}||   d   |vrt        d||   d    d       n!||   d   ||   d<   ||   d   dk(  rd||   d<   ||   j                  d      }	|	s|	dk(  sd||   d<    |S )NFr   percent)rI  rh  rD  rd   C   rh  rU  r   rQ  K   r     r  r   P   <   (   rj   r$  rD  )re  r  rV  re  zUnknown icon property type 'z2' for sub-property 'type' in conditional_format().rV  numrI  r  T)	r  r  rP  r  rC  r=  r'  r  r   )
r5   r  
user_propspropsrQ   max_datarY  tmpr  rI  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?::a=;P:Q RO P
 ,6a=+@a( 8F+x7/4E!HV, &a=,,Z8C+/E!HZ(90< r?   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x14acrD  )r{   r  r  )r5   schemarr  xmlns_rxmlns_mc	ms_schemaxmlns_x14acr  s           r;   rN  zWorksheet._write_worksheet  s     622>>773	"BB&G(<=
 %z845}k:;78K4r?   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   rB   	dimensionrG  )r   r   r   r-   r   r>  )r5   rG  rF   rG   s       r;   rP  zWorksheet._write_dimension  s   
 ??"t'> C__$)D
 $//1'4??; +1doo>*1doo>slV+__/DOOt4V#DOOT__EC 'tHF&tHF3,'CK5#,8r?   c                 h    | j                  d       | j                          | j                  d       y )N
sheetViews)r  _write_sheet_viewr  r  s    r;   rQ  zWorksheet._write_sheet_views<  s,    L) 	 ,'r?   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| j                  rD| j                  d|       | j                          | j                          | j!                  d       y | j#                  d|       y )N)showGridLinesr   )showRowColHeadersr   )	showZerosr   rightToLeftr   )tabSelectedr   showOutlineSymbolsr   r   )r  
pageLayoutr  )r  pageBreakPreviewrc   topLeftCellrh   	zoomScaler   zoomScaleNormalzoomScalePageLayoutViewzoomScaleSheetLayoutView)workbookViewIdr   	sheetView)r   r  r   r   r   r   r   r  r   r   r   r   r   r  _write_panes_write_selectionsr  r>  r5   r  s     r;   r}  zWorksheet._write_sheet_viewE  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::Z8""$k*Z8r?   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   r{   r>  )r5   r   	row_level	col_levelr  s        r;   rR  z Worksheet._write_sheet_format_pr  s    !44**	**	)+=>?
""d&>&>>12""/00)<=0)<=%9:OZ8r?   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   )r   r  r!  r  _write_col_infor  )r5   rs  ru  prev_col_optionsdeleted_coldeleted_col_optionsrP   col_optionss           r;   rS  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"&!r?   c                 x   |\  }}}}}}	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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   rk   r  r   r=  g      p@r  r  r
  r  r&  )r   rO   )bestFitrO   )customWidthrO   outlineLevel)r  rO   rP   )_get_xf_indexr3   r-  r  r>  )r5   col_mincol_maxr   r
  rI  r   r  r  r2  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 t&

 w12o../23~u5601E:.r?   c                     | j                   | j                  d       y | j                  d       | j                          | j	                  d       y )N	sheetData)r   r>  r  _write_rowsr  r  s    r;   rT  zWorksheet._write_sheet_data  sB    ??",,k*r?   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   )r   r>  r  r  seekreadr  r8  rF  rE  unlinkr  r  )r5   	buff_sizer  s      r;   rU  z%Worksheet._write_optimized_sheet_data  s     ??",, I!!!$##((3Dd#'',,Y7  ""$IId,,-k*r?   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>  r  s     r;   r_  zWorksheet._write_page_margins&  so     T%%&d''(DOO$t))*t))*t))*

 	M:6r?   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	paperSizerh   r!  r   
fitToWidthfitToHeight)	pageOrderoverThenDownfirstPageNumber)r   portrait)r   	landscape)blackAndWhiterO   r   )useFirstPageNumberrO   horizontalDpiverticalDpi	pageSetup)r   r   r  r   r   r   r   r   r   r   r   rx   r  r  r>  r  s     r;   r`  zWorksheet._write_page_setup3  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4r?   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>  r  s     r;   r^  zWorksheet._write_print_options  s    
)) <<78 <<56 o. ./NJ7r?   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  r|   r>  r  s     r;   ra  zWorksheet._write_header_footer  s    
((12((56%%
;{{&&({{&&(n-!!
; "r?   c                 <    | j                  d| j                         y )N	oddHeader)r  r   r  s    r;   r  zWorksheet._write_odd_header      {DKK8r?   c                 <    | j                  d| j                         y )N	oddFooter)r  r   r  s    r;   r  zWorksheet._write_odd_footer  r  r?   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_spansr  r   r   r   r   r   r3   r   
_write_rowr   r   _write_cellr  _write_empty_row)r5   r(  
span_indexr  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r?   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  r  r   r   r  r  r  clear)r5   current_row_numr(  r  r)  r  s         r;   rR  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 	

r?   c                    i }d }d }t        | j                  | j                  dz         D ]#  }|| j                  v rYt        | j                  | j
                  dz         D ]3  }|| j                  |   v s||}|}t        ||      }t        ||      }5 || j                  v rht        | j                  | j
                  dz         D ]B  }|| j                  v s|| j                  |   v s$||}|}+t        ||      }t        ||      }D |dz   dz  dk(  s|| j                  k(  st        |dz        }||dz  }|dz  }| d| ||<   d }& || _
        y )Nr   r  r   rB   )r  r   r   r   r   r   r  r  r   r3   r   )r5   spansspan_minspan_maxr(  r)  r  s          r;   r  zWorksheet._calculate_spans  s{   
 T__doo.AB 	$G$**$$T__doo6IJ >G$**W"55#+'.H'.H'*8W'=H'*8W'=H> $--'$T__doo6IJ >G$--/Gt}}W?U4U#+'.H'.H'*8W'=H'*8W'=H> 1"a'Gt,F 2.
'MHMH+3*AhZ(@E*%#H=	$@ r?   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  s|| j                  k(  r$|| j                   k7  r|j                  d|d	f       |r|j                  d
       || j                  k7  s|| j                  k(  r || 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   htg)r   r   r  r  )r  r   r  r  r"  )r   r  r  r   r{   _xml_empty_tag_unencoded_xml_start_tag_unencoded)r5   r"  r  
properties	empty_rowr  r3  rI  r   r  r  r  s               r;   r  zWorksheet._write_row.  s   <F9FK	<O9FK	>,,FC!Gn%
 "002H w./sHo.12T---d...6T=T=T3Ttqz34m,T---d...6T=T=T3T12~u56./%9:))%<))%<r?   c                 .    | j                  |||d       y )NT)r  )r  )r5   r"  r  r  s       r;   r  zWorksheet._write_empty_rowe  s    UJ$?r?   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>rZ   )r  r/  r   )r\  z#N/Az#NAME?z#NULL!r[  z#REF!r  rc   )r  e)r  r=  r]   rz  )cmr   crT   rY   rV   vm)$r.   rU   r  r  r   r   r!  r$  _xml_number_elementrV  rH  rv   _xml_string_element_escape_control_charactersr'  r)  _xml_rich_inline_stringr&   _xml_inline_stringrh  rC  r;  r=  _xml_formula_elementre  r  r-  r4   r  _write_cell_array_formular  _write_cell_valuer  r>  r  r{  )r5   r"  rP   r*  r  r  r  row_xfcol_xftype_cell_namerH  r  rh  error_codess                 r;   r  zWorksheet._write_celli  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  4F;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 )Nrc   vr  )r5   rh  s     r;   r  zWorksheet._write_cell_value  s    =EsE*r?   c                 6    dd|fg}| j                  d||       y )N)r  arrayrG  r1  r  )r5   re  r  r  s       r;   r  z#Worksheet._write_cell_array_formula  s#    $uj&9:
sGZ8r?   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   r   r   r  r  r  _write_tab_color_write_outline_pr_write_page_set_up_prr  r>  r  s     r;   rO  zWorksheet._write_sheet_pr  s    
 NNNN((%%z4+<+<=>>>/0==DNNd.B.B	:6!!#""$&&(i(	:6r?   c                 H    | j                   sy dg}| j                  d|       y )N)	fitToPager   pageSetUpPr)r   r>  r  s     r;   r  zWorksheet._write_page_set_up_pr  s$    }}&'
M:6r?   c                 b    | j                   }|sy | j                  d|j                                y )NtabColor)r   _write_colorrL  r  s     r;   r	  zWorksheet._write_tab_color  s*    *e&7&7&9:r?   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   r  	outlinePr)r   r   r  r   r   r   r>  r  s     r;   r
  zWorksheet._write_outline_pr  s    
##01!!12!!1278K4r?   c                     | j                  | j                        }|sy t        |      }d|fd|fg}| j                  d|       |D ]  }| j	                  |d        | j                  d       y )NrE  manualBreakCount	rowBreaksi?  )r  r   rP  r  
_write_brkr  )r5   page_breaksrE  r  r(  s        r;   rb  zWorksheet._write_row_breaks+  s~    ++DLL9K  e'


 	K4" 	,GOOGU+	, 	+&r?   c                     | j                  | j                        }|sy t        |      }d|fd|fg}| j                  d|       |D ]  }| j	                  |d        | j                  d       y )NrE  r  	colBreaksi )r  r   rP  r  r  r  )r5   r  rE  r  r)  s        r;   rc  zWorksheet._write_col_breaks@  s~    ++DLL9K  e'


 	K4" 	.GOOGW-	. 	+&r?   c                 :    d|fd|fdg}| j                  d|       y )Nr9  r  )manr   brkr>  )r5   brk_idbrk_maxr  s       r;   r  zWorksheet._write_brkU  s'    Vnug&6
C
E:.r?   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]  }| j                  |        | j	                  d       y )NrE  
mergeCells)r   rP  r  _write_merge_cellr  )r5   r   rE  r  merged_ranges        r;   rZ  zWorksheet._write_merge_cells[  se    zzL!&'
L*5( 	1L""<0	1 	,'r?   c                     |\  }}}}t        ||      }t        ||      }|dz   |z   }d|fg}	| j                  d|	       y )NrB   rG  	mergeCell)r-   r>  )
r5   r'  row_minr  row_maxr  rF   rG   rG  r  s
             r;   r&  zWorksheet._write_merge_cellm  sS    /;,'7G #7G4"7G4slV#cl^
K4r?   c                 &   t        | j                  j                               }|sy | j                  d       |D ]C  }t        | j                  |   j                               }|D ]  }| j                  |   |   }| j                  rS| j                  |   rD| j                  |   |   r2| j                  |   |   }|j
                  j                  dk7  rd|_        |j                  t        j                  t        j                  fv ra| xj                  dz  c_        | j                  ||| j                  |       | j                  j                  d|j!                         dg       | j#                  |||        F | j%                  d       y )Nr	  rX   Tr   r  External)r!  r	  r  r  r   r!  r$  _is_object_link
_link_typer   URLEXTERNALr   _write_hyperlink_externalr   r  r  _write_hyperlink_internalr  )r5   r  r(  r  r)  r  r*  s          r;   r]  zWorksheet._write_hyperlinksz  sh    $//..01  	L)   	JGdoog6;;=>H $ Joog.w7 ::$**W"5$**W:Mg:V::g.w7D~~..(:.2+>>hllH4E4E%FFNNa'N22$..#
 --44%s{{}jA
 227GSI3J	J@ 	,'r?   id_numc                 b   t        ||      }dt        |      z   }d|fd|fg}|j                  r|j                  d|j                  f       |j                  r|j                  d|j
                  f       |j                  r|j                  d|j                  f       | j                  d|       y )NrIdrG  r:idrd  displaytooltiprO  )r-   r=  r  r  r.  r  r  r>  )r5   r"  rP   r4  r  rG  r_idr  s           r;   r2  z#Worksheet._write_hyperlink_external  s      S)s6{"clVTN3
;;z3;;78y#))4588y#((34K4r?   c                     t        ||      }d|fd|j                  fg}|j                  r|j                  d|j                  f       |j                  d|j                  f       | j                  d|       y )NrG  rd  r9  r8  rO  )r-   r  r  r  r  r>  )r5   r"  rP   r  rG  r  s         r;   r3  z#Worksheet._write_hyperlink_internal  sj    S)clZ$;<
88y#((349cii01K4r?   c                     | j                   sy d| j                   fg}| j                  r4| j                  d|       | j                          | j	                  d       y | j                  d|       y )NrG  
autoFilter)r   r   r  _write_autofiltersr  r>  r  s     r;   rY  zWorksheet._write_auto_filter  sd    ""d1123
>>j9##%l+ j9r?   c                     | j                   \  }}t        ||dz         D ]E  }|| j                  vr| j                  |   }| j                  |   }| j	                  ||z
  ||       G y r*  )r   r  r   r   _write_filter_column)r5   col1col2rP   r  r   s         r;   r>  zWorksheet._write_autofilters  sz     ((ttax( 
	GC$*** %%c*F**3/K %%cDj+vF
	Gr?   c                     d|fg}| j                  d|       |dk(  r| j                  |       n| j                  |       | j                  d       y )NcolIdfilterColumnr   )r  _write_filters_write_custom_filtersr  )r5   rQ  r   rY  r  s        r;   r@  zWorksheet._write_filter_column  sS    '(
NJ7!( &&w/.)r?   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  )r`  r   r   r   rY  )r=  rI  rP  r>  r  r!  _write_filterr  )r5   rY  filter
non_blanksr  rH  s         r;   rF  zWorksheet._write_filters  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 )Nr6  rJ  r!  r]  s      r;   rI  zWorksheet._write_filter  s    cl^
Hj1r?   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   )rO  r   r   rd   rQ  )rP  r  _write_custom_filterr  )r5   r  r  s      r;   rG  zWorksheet._write_custom_filters  s    v;!0%D%%v.o. J ayA~(\
(\
 <%%fQi;%%fQi;o.r?   c                     g }dddddddd}||   ||   }nt        d|        |dk7  r|j                  d	|f       |j                  d
|f       | j                  d|       y )Nr  rw  r  r~  rz  r  )r   r  rd   rQ  r   r  r  zUnknown operator = r  r6  customFilter)r   r  r>  )r5   r  r6  r  r  s        r;   rP  zWorksheet._write_custom_filter/  s    
  #
	 X* *H&xj12 wz8455#,'NJ7r?   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   rH  )r=  r   r  )pivotTablesr   r  )selectUnlockedCellsr   sheetProtection)r   r  r>  )r5   r  r  s      r;   rV  z!Worksheet._write_sheet_protectionJ  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:r?   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;   rW  z!Worksheet._write_protected_rangesz  sc    $$)-.040E0E 	J,J
H''
JI	J 	+,r?   c                     g }|r|j                  d|f       |j                  d|f       |j                  d|f       | j                  d|       y )Nr  r  rr   protectedRanger  r>  )r5   r  r  r  r  s        r;   rb  z Worksheet._write_protected_range  sT    
z8457J/06:./,j9r?   c                 ~    | j                   sy | xj                  dz  c_        | j                  | j                         y r*  )r   r   _write_drawingr  s    r;   re  zWorksheet._write_drawings  s,    ||!DNN+r?   c                 N    dt        |      z   }d|fg}| j                  d|       y )Nr6  r7  r   r=  r>  )r5   r  r:  r  s       r;   rg  zWorksheet._write_drawing  s,    s:&tn%
Iz2r?   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r6  r7  legacyDrawing)r   r   r=  r>  r5   r:  r  s      r;   rf  zWorksheet._write_legacy_drawing  sK    || 	!s4>>**tn%
OZ8r?   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r6  r7  legacyDrawingHF)r   r   r=  r>  rl  s      r;   rg  z"Worksheet._write_legacy_drawing_hf  sN    "" 	!s4>>**tn%
-z:r?   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r6  r7  picture)r   r   r=  r>  rl  s      r;   rh  zWorksheet._write_picture  sM    $$ 	!s4>>**tn%
Iz2r?   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]  }| j                  |        | j	                  d       y )NrE  dataValidations)r  rP  r  _write_data_validationr  )r5   r  rE  r  
validations        r;   r\  z!Worksheet._write_data_validations  si    &&K &'
-z:% 	4J''
3	4 	+,r?   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 )$Nrc   r  r5  rf  r`  rl  rD  rI  rs  r  ra  r   )
errorStyler  r  )rv  r  rh  )
allowBlankr   r_  )showDropDownr   rc  )showInputMessager   rb  )showErrorMessager   rd  
errorTitleri  r{  re  promptTitlerj  promptr  dataValidationrh  r]  )r,   r  r  r>  r  _write_formula_1_write_formula_2r  )	r5   r  r  r  r  	row_firstrV  row_lastrW  s	            r;   rs  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./r?   c                     t        |t              r | j                  | }d| d}n	 t        |       | j                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nr  r$  formula1)rC  r  r  r-  r4   r'  r  r  r5   re  s     r;   r  zWorksheet._write_formula_1(  sw     gt$$dnng.G'!nG2g 	z73  2%%c*%nnS1G2s   A +A43A4c                     	 t        |       | j	                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nr$  formula2r-  r4   r'  r  r  r  s     r;   r  zWorksheet._write_formula_29  sN    	.'N 	z73  	.!!#&!..-	.     +AAc                     t        | j                  j                               }|sy |D ]!  }| j                  || j                  |          # y ro  )r!  r  r  _write_conditional_formatting)r5   ry  
cond_ranges      r;   r[  z$Worksheet._write_conditional_formatsF  sN    ))..01  	J..D--j9	r?   c                     d|fg}| j                  d|       |D ]  }| j                  |        | j                  d       y )Nr  conditionalFormatting)r  _write_cf_ruler  )r5   r  paramsr  params        r;   r  z'Worksheet._write_conditional_formattingR  sN    
+,
3Z@ 	'E&	' 	12r?   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 )0NrD  rU   dxfIdr
  r  )
stopIfTruer   r  r  rI  cfRuler^  r]  rh  r  below)r  r   rw  )equalAverager   z[123] std devz([123]) std devrC  r   r  r  )re  r   r  )r  r   r  rankr  r  r  r  r  r  r  re  r  r  r  r  r  r  r  r  r  r  )r  r  r  _write_formula_elementr  r*  rm  groupr>  _write_color_scale_write_data_bar_write_data_bar_ext_write_icon_set)r5   r  r  r+  r  s        r;   r  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' )r?   c                     	 t        |       | j	                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nr$  re  r  r  s     r;   r  z Worksheet._write_formula_element  sN    	.'N 	y'2  	.!!#&!..-	.r  c                    | j                  d       | j                  |d   |d          |d   | j                  |d   |d          | j                  |d   |d          | j                  d|d	   j                                |d
   #| j                  d|d
   j                                | j                  d|d   j                                | j	                  d       y )Nr  r  r  r  r  r  r  r  r  r  r  )r  _write_cfvor  rL  r  )r5   r  s     r;   r  zWorksheet._write_color_scale  s     	L)z*E+,>?(U:.k0BCz*E+,>?'5#5#A#A#CD)gu['9'E'E'GH'5#5#A#A#CD,'r?   c                    g }d|v r|j                  d|d   f       d|v r|j                  d|d   f       |j                  d      r|j                  d       | j                  d|       | j                  |d   |d	          | j                  |d
   |d          | j	                  d|d   j                                | j                  d       y )Nr  	minLengthr  	maxLengthr  	showValuer   r  r  r  r  r  r  r  )r  r  r  r  r  rL  r  )r5   r  r  s      r;   r  zWorksheet._write_data_bar  s    
 5 {E,,?@A5 {E,,?@A99Z ./Iz2z*E+,>?z*E+,>?'5#5#A#A#CD)$r?   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)rs   rP  r  r  r  
_write_extr  r  )r5   r  worksheet_countdata_bar_countr  s        r;   r  zWorksheet._write_data_bar_ext   s     **q.T001A50O^3TT f""5)H%@Ax.% (#r?   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  )rc  r   r  rD  rh  rI  )r  r  r  reversedr  r  )r5   r  r  icons       r;   r  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 	)$r?   c                     d|fg}||j                  d|f       |r|j                  d       | j                  d|       y )NrD  r6  )gter   cfvore  )r5   cf_typer6  rI  r  s        r;   r  zWorksheet._write_cfvo(  sG    w'(
?ucl+j)FJ/r?   c                 (    | j                  ||       y ro  r!  r_  s      r;   r  zWorksheet._write_color4  s    D*-r?   c                 D    | j                   D ]  } | j                  |   y ro  )r   _write_selection)r5   	selections     r;   r  zWorksheet._write_selections8  s%     	.I!D!!9-	.r?   c                     g }|r|j                  d|f       |r|j                  d|f       |r|j                  d|f       | j                  d|       y )Nr  
activeCellr  r  re  )r5   r  r  r  r  s        r;   r  zWorksheet._write_selection=  sX    
vtn-|[9:w./K4r?   c                 p    | j                   }|sy |d   dk(  r | j                  |  y  | j                  |  y )NrQ  r  )r   _write_split_panes_write_freeze_panes)r5   r   s     r;   r  zWorksheet._write_panesL  s<    

8q=#D##U+$D$$e,r?   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 )Nrc   r   bottomRighttopRight
bottomLeftfrozenr   frozenSplitrD   xSplitySplitr  
activePanestater  )r-   r   r  r>  )r5   r"  rP   r  r  r  r  y_splitx_splitr   r   r  r  r  rQ   row_cellcol_cells                    r;   r  zWorksheet._write_freeze_panesX  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/r?   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f       |r|j	                  d|df       |j	                  d|f       |r|j	                  d|f       | j                  d|       y )NFrc   r   Trj   i,  r=  ri     rd   rQ  rl   r  r  r  r  r  r  r  r  r  )r   r3   _calculate_x_split_widthr-   r  r>  )r5   r"  rP   r  r  rQ   r  has_selectionr   r  r  r  r  r   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 xGD>;<xGD>;<=-89|[9:FJ/r?   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=  rd   rQ  rj   r  )r3   )r5   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  r?   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]2  }| xj                  dz  c_        | j	                  | j                         4 | j                  d       y )NrE  
tablePartsr   )r   rP  r  r   _write_table_partr  )r5   r   rE  r  rQ   s        r;   ri  zWorksheet._write_table_parts  s    F  

 	L*5 	3ANNaN""4>>2	3
 	,'r?   c                 N    dt        |      z   }d|fg}| j                  d|       y )Nr6  r7  	tablePartri  rl  s      r;   r  zWorksheet._write_table_part	  s8     s4y  

 	K4r?   c                     t        | j                        }t        | j                        }|s|sy | j                  d       |r| j	                          |r| j                          | j                  d       y )Nr  )rP  r  r   r  _write_ext_list_data_bars_write_ext_list_sparklinesr  )r5   has_data_barshas_sparkliness      r;   rj  zWorksheet._write_ext_list  sd    D//0T__-^ 	H%**,++-(#r?   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  )r5   r  s     r;   r  z#Worksheet._write_ext_list_data_bars*  sb    @A89 ++ 	>H33H=	> 	67% r?   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  rl  r  x14:dataBar
x14:cfRulexm:sqrefr  )
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  )r5   r  xmlns_xmr  s       r;   r  z,Worksheet._write_conditional_formatting_20108  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6r?   c                 F    d}|d   }d|fd|fg}| j                  d|       y )Nr  r  rD  r9  r  r  )r5   r  	rule_typer  r  s        r;   r  zWorksheet._write_x14_cf_rulee  s4    	y)D$<8
L*5r?   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   rh   r  r  r  )borderr   r  )gradientr   r  r  )r  leftToRightr  )r  r  r  )negativeBarColorSameAsPositiver   r  )$negativeBarBorderColorSameAsPositiver   r  middle)axisPositionr  rl  )r  rl  r  )r  r  )r5   r  r  r  r  s        r;   r  zWorksheet._write_x14_data_barm  s   

 *%*%


 (m,K o.O$.:;O$/:;-.CD )=>IJ'(H489'(F267M:6r?   c                     d|fg}|dv r| j                  d|       y | j                  d|       | j                  d|       | j                  d       y )NrD  )r  r  r  r  zx14:cfvoxm:f)r>  r  r  r  )r5   r  rh  r  s       r;   r  zWorksheet._write_x14_cfvo  sV    y)*
<<
J7
J7""651j)r?   c                 D    | j                  d|j                                y )Nzx14:borderColorr  rL  r  s     r;   r  z!Worksheet._write_x14_border_color  s    +U->->-@Ar?   c                 D    | j                  d|j                                y )Nzx14:negativeFillColorr>  rL  r  s     r;   r  z(Worksheet._write_x14_negative_fill_color  s    3U5F5F5HIr?   c                 D    | j                  d|j                                y )Nzx14:negativeBorderColorr  r  s     r;   r  z*Worksheet._write_x14_negative_border_color  s    5u7H7H7JKr?   c                 D    | j                  d|j                                y )Nzx14:axisColorr  r  s     r;   r  zWorksheet._write_x14_axis_color  s    OU->->-@Ar?   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}rq  rs  rr  rm  rj  rh  rf  re  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  )r5   r  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% r?   c                    | j                  d       t        |d         D ]X  }|d   |   }|d   |   }| j                  d       | j                  d|       | j                  d|       | j                  d       Z | j                  d       y )Nzx14:sparklinesrE  ry  r_  zx14:sparkliner  r  )r  r  r  r  )r5   r  rY  r  rd  s        r;   r  zWorksheet._write_sparklines  s     	,-y)* 	/A#H-a0K -a0H0""6;7"":x8o.	/ 	*+r?   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  )r5   r  rt  	xmlns_x14r  s        r;   r  zWorksheet._write_ext  s<    788	 )$CL


 	E:.r?   c                 6    d}d|fg}| j                  d|       y )Nr  r  r  r  )r5   r  r  s      r;   r  z!Worksheet._write_sparkline_groups  s%    H!8,-
1:>r?   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 )&Nr  r  r  cust_max	manualMaxrp  r  cust_min	manualMinrD  ru  ra  
lineWeightre  )dateAxisr   displayEmptyCellsAsrb  )rb  r   r{  )r{  r   r|  )r|  r   r~  )r~  r   r  )r  r   r}  )r}  r   r`  )displayXAxisr   r   )displayHiddenr   minAxisTypemaxAxisTyperc  r  r  )r  r  r  )r5   r  r  r  s       r;   r  z Worksheet._write_sparkline_group   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*=r?   c                 J    |r!| j                  ||j                                y y ro  r  )r5   tagr  s      r;   _write_spark_colorzWorksheet._write_spark_color[   s#    c5#4#4#67 r?   c                 (    | j                  d|       y )Nzx14:colorSeriesr!  r  s     r;   r  zWorksheet._write_color_series`   s     159r?   c                 (    | j                  d|       y )Nzx14:colorNegativer#  r  s     r;   r  zWorksheet._write_color_negatived   s     3U;r?   c                 :    | j                  dt        d             y )Nzx14:colorAxisr  )r!  r   r  s    r;   r  zWorksheet._write_color_axish   s    y1ABr?   c                 (    | j                  d|       y )Nzx14:colorMarkersr#  r  s     r;   r  zWorksheet._write_color_markersl   s     2E:r?   c                 (    | j                  d|       y )Nzx14:colorFirstr#  r  s     r;   r	  zWorksheet._write_color_firstp   s     0%8r?   c                 (    | j                  d|       y )Nzx14:colorLastr#  r  s     r;   r
  zWorksheet._write_color_lastt       7r?   c                 (    | j                  d|       y )Nzx14:colorHighr#  r  s     r;   r  zWorksheet._write_color_highx   r)  r?   c                 (    | j                  d|       y )Nzx14:colorLowr#  r  s     r;   r  zWorksheet._write_color_low|   s    6r?   c                 0    ddg}| j                  d|       y )N)fontId0)rD  noConversion
phoneticPrr!  r  s     r;   rX  zWorksheet._write_phonetic_pr   s#     $


 	L*5r?   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ignoredErrorsr9  numberStoredAsTextr1  	evalErrorr3  re  r2  formulaRanger4  unlockedFormular7  emptyCellReferencer8  listDataValidationr5  calculatedColumnr6  twoDigitTextYear)r  r  r  _write_ignored_errorr  )r5   ignored_ranges     r;   rd  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/*r?   c                 8    d|f|dfg}| j                  d|       y )Nr  r   ignoredErrorr!  )r5   ra  r<  r  s       r;   r;  zWorksheet._write_ignored_error   s,     m$O


 	NJ7r?   )r`   Nro  r  )F)Nr   rw  )NNN)i  )NF)r   r   )r   r   r   r   )NNr   )NN)rh   )rc   N)r   )re   re   rf   rf   )rc   NN)FF)r   (  r$  
__module____qualname____doc__rq   r3   r2  r>   r   r   r   r8  r6  r=  r   r"   rL  r/  r-  r   rY  r.  rb  r&  ri  r(  rL   rx  rn  rp  staticmethodr  ro  r>  r  rB  r;  r  r<  r  r,  r  r  r  r  r  r	   r   r   r  r  r  r   r  r  r  r  r  r  r  r   r  r  r	  rS   r  r  r2  r6  r9  r<  rB  rH  rX  r   rT  r  r$  r]  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r%  r)  r,  r/  r:  rK  rl  rO  r  rE  r  rR  rS  r  r  r  r  r  r  r  r  r  r  r  r  r  r8  r   r  r   r  r  r
  r  rK  r  r"  r  r(  r  r  r  rD  rF  rH  ra  rc  r  rN  rP  rQ  r}  rR  rS  r  rT  rU  r_  r`  r^  ra  r  r  r  rR  r  r  r  r  r  r  rO  r  r	  r
  rb  rc  r  rZ  r&  r]  r   r2  r3  rY  r>  r@  rF  rI  rG  rP  rV  rW  rb  re  rg  rf  rg  rh  r\  rs  r  r  r[  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ri  r  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r  r  r  r  r	  r
  r  r  rX  rd  r;  __classcell__)r!  s   @r;   r_   r_      s   Y$x$3 $33 $3L , ,3 ,%8K2L , ,&SJ# SJC SJj OSAA A*-A<DV<LA		A A, PT *-<DV<L		:  )-AA A c5(*+	A
 f%A 
A A: )-%% % c5(*+	%
 f%% 
%N NR?? ?),?;CF;K? ?, FJ 2:62B	(  )-JJ J 	J
 f%J 
	J JB )-%% % 	%
 f%% 
	%N  )-*
*
 *
 	*

 *
 *
 f%*
 
*
 *
X  )-)) ) 	)
 ) ) f%) 
) )Zrn * *H 4 
4l  )-AA A 	A
 f%A 
A A03 S S * QUCC C+/C>Fv>NC C(# C s 6  )- $!HH H 	H
 f%H H c]H H< KO;; ;	;z 88 8).sF{);8	&	'8 82wc w ws wr7 HL 5=f5E	wqz3	 0 HL 5=f5E	wqz3	 0  -1## # c7E)*	#
 $sCx.)# 
# #J  -100 0 c7E)*	0
 $sCx.)0 
0 0d QU33 3(+36>tCH~6N3	3 3j TXFF F).F9A$sCx.9QF		F FP TX!! !+.!9A$sCx.9Q!		! !F% JOC%/0BF	6&5$"  4$ 
 "&(,,0@@ @ 	@
 f%@ $sCx.)@ 
@ @D 
 "&(,,0QQ Q 	Q
 f%Q $sCx.)Q 
Q Q:SN SN SNp #'(,,0>> > f%	>
 $sCx.)> 
>F #'(,,0?? ? f%	?
 $sCx.)? 
?6 HM(uo(@D(	(2  )-PP P 	P
 P P f%P 
P Pd )E)E),)E8;)EGJ)E	)E )EV: : : :x(c (DI ($ (T  -1GG G 	G
 G $sCx.)G 
	G GR  -1{{ { 	{
 { $sCx.){ 
	{ {z  -1ZZ Z 	Z
 Z $sCx.)Z 
	Z Zx
 FJ +3DcN+C		 B "7"7),"78;"7GJ"7	"7 "7H 9S 93 9t 9 9& $$ $ 	$
 $ 
$8 
 "&"&>> > #	>
 3-> > 
> >: 
 "&"&66 6 #	6
 3-6 
6 6.S 4 $%25e#4 2 2 GK3(3(+3DcN+C3(	3(p %)"&	%% SM% 3-	%
 
%N FJ## #+3DcN+C#	# #J QUCC C+/C>Fv>NC CJ''''"2 4 +E'$-*<$= +$ +  $$ $ 	$
 $ 
$4 RVO'O')1$sCx.)AO'	O'd RVO'O')1$sCx.)AO'	O'b7S 7HSM 7T 74 7 7x} 7PT 7 74&WW%5 &d &0*$   ), 8; GJ 	   D''# 's 't '$% % %'S 'T ','tCy T tCy T ># >$ >"(Xd38n%= (QV (^,'\bJ @E!! !	!FY&P4B=:U!nC "(4S>2J L4L4 L4 	L4
 
L4\C4J.$
8
t VH\V|S <S *
 &z &3j
2:G3j($(5'n5=6+'=J5(!9F(99v90&"PB/H++07L5\82<(99&QP#J)V5=c 5=t 5=n@C @D @t#s t# t#t t#l+9787;5$'*'*/($50(d55 5*-5475	5(5S 5s 5 5 5:"G"*)(2/.86.;`
-
:,39;3-$K0Z4"4
3j(X3(*%.$$%,
0..
5
-8080 80	80tE0c E0 E0d E0N.(25$&!+7Z6%7N	*BJLB,!\,"
/?W>r8
:<C;98876++Z8 8r?   r_   )Sr>  r]  rE  r*  rC  collectionsr   r   rn  r   	fractionsr   	functoolsr   ior	   r
   r   r   typingr   r   r   r   r   r   warningsr   xlsxwriter.chartr   xlsxwriter.colorr   xlsxwriter.commentsr   xlsxwriter.imager   xlsxwriter.urlr   r   xlsxwriter.vmlr   rc   r   r   r   r   r   
exceptionsr    r!   rU   r"   r  r#   utilityr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r  VERBOSErl  r>   rL   rS   rd  r  r_  rS  r  rq  r  r  r  r_   r  r?   r;   <module>rS     s5     	 	  /       < <  " " + " ( %  7 7 <      ! bjj< JJ?  P0@@ GX.G%;<X'78X'78i):; i)AB z+;<  /KL ": t8	## t8r?   