
    ,h^B                    `   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 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 ddlmZ ddlm Z m!Z!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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddlm7Z7  ejp                  dejr                        Z:d Z;d Z<d Z= edd      Z> edd      Z? edd      Z@ edd       ZA ed!d"      ZB ed#d$      ZC ed%d      ZD ed&d'      ZE ed(d)      ZF G d* d+ejn                        ZGy),    N)defaultdict
namedtuple)Decimal)Fractionwraps)StringIO)isinfisnan)warn)CommentType)Image)UrlUrlTypes)
ButtonType   )	xmlwriter)DrawingDrawingInfoDrawingTypes)DuplicateTableNameOverlappingRange)Format)Shape)_datetime_to_excel_datetime_get_sparkline_style_preserve_whitespace_supported_datetime	_xl_color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        V/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/xlsxwriter/worksheet.pycell_wrapperz'convert_cell_args.<locals>.cell_wrapperd   s]    	' G	I d,T,V,,  	'(3Hd12h&D	's   ! A A r   r2   r4   s   ` r3   convert_cell_argsr6   ]   s#     6]- -     c                 .     t                fd       }|S )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c                 4   	 |rt        |d           
| g|i |S # t        $ ro d|d   v r4|d   j                  d      \  }}t        |      \  }}t        |      \  }}nt        |d         \  }}||}}||||g}	|	j	                  |dd         |	}Y w xY w)Nr   :r   r+   r,   splitr!   extend)r-   r.   r/   cell_1cell_2row_1col_1row_2col_2r1   r2   s             r3   r4   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   r5   s   ` r3   convert_range_argsrD   u   s#     6]- -* r7   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   r:   1r   r;   )r-   r.   r/   colr>   r?   _rA   rC   r1   r2   s             r3   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   )r2   rJ   s   ` r3   convert_column_argsrK      s#     6]- -  r7   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 fdZd Zed        Zd Zedd       Z	ddZ
edd       Zdd	Zedd
       ZddZedd       ZddZe	 	 dd       Ze	 	 dd       ZddZed        Z	 	 	 ddZedd       ZddZedd       ZddZedd       ZddZed        Zd Zd Z edd       Z!edd       Z"edd       Z#edd       Z$edd        Z%edd!       Z&edd"       Z'd# Z(dd$Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0e1	 dd,       Z2e1	 dd-       Z3dd.Z4dd/Z5dd0Z6dd1Z7e	 dd2       Z8ed3        Z9d4 Z:d5 Z;edd6       Z<e	 dd7       Z=edd8       Z>edd9       Z?ed:        Z@edd;       ZA	 dd<ZBedd=       ZCed d>       ZDdd?ZEd@ ZFdA ZGdB ZHddCZId dDZJeddE       ZKeddF       ZLdG ZMdH ZNddIZOdJ ZPdK ZQdL ZRdM ZSddNZTddOZUddPZVddQZWe1ddR       ZXddSZYdT ZZdU Z[edV        Z\dW Z]dX Z^dY Z_dZ Z`d[ Zad\ Zbd] Zcdd^Zddd_Zed` Zfda ZgddbZhdc Zidd Zjde Zkdf Zldg Zmdh Zndi ZoddjZpdkeqdlerdmerfdnZsdo Ztdp Zudq Zvdr Zwds Zxdt ZydduZzddvZ{dw Z|dx Z}dye~fdzZd{efd|Zd} Zd~ Zd Zd Zd Zd Zd Zd ZddZddZd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd ZddZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZderderderdefdZderderdefdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdÄ ZdĄ Zdń ZdƄ ZdǄ ZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ ZddфZd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS (  	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    c                 <
   t         |           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)r-   	__class__s    r3   rh   zWorksheet.__init__   st    		
 "!$!
"'%*"$ $"$%*"$(!$(!"$!   " " "! "$%!#D)	!" %!"!"$#% "$"$!%"$#% "#
 &

#!#D)! % !"F % %$&!&(#&(#"$$&!)+&!#  "#$  $ "' %d+"'#!&#' #' "&'+$#' $"!%" !%"' ""'$)!#( #r7   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)NrZ   =z{=}r:   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_numberr,   _write_string)r-   tokenrowrH   r.   fs         r3   _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c                 *     | j                   ||g| S )a  
        Write data to a worksheet cell by calling the appropriate write_*()
        method based on the type of data being passed.

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

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

        _writer-   r'  rH   r.   s       r3   writezWorksheet.write  s    " t{{3+d++r7   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#  r+   r   r   r$  strr)  datetimedatetime	timedelta_write_datetime
isinstancer   r   r"  r,   typer%  )	r-   r'  rH   r.   r&  
token_typewrite_handlerfunction_returnr(  s	            r3   r,  zWorksheet._write  s    JKK Q __
 ,,, //
;M+D#sBTBO
 &&& =$4$$S#555 &4&&sC7$77%gx88%4%%c3666.4..uc3FFFMMMM	
 
 (4''S8488
 eeS'8<=%4%%c3666 eS!.4..uc3FFF eT"&4&&sC7$77 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c                 *    | j                  ||||      S )a  
        Write a string to a worksheet cell.

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

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

        )r%  )r-   r'  rH   stringcell_formats        r3   write_stringzWorksheet.write_string>  s    " !!#sFK@@r7   c                 f   d}| j                  ||      ryt        |      | j                  kD  r|d | j                   }d}| j                  s| j                  j                  |      }n|}| j                  r || j                  kD  r| j                  |       t        ||      | j                  |   |<   |S Nr   )
_check_dimensionslenrv   rm   rk   _get_shared_string_indexr   _write_single_rowCellStringTupler   )r-   r'  rH   r?  r@  	str_errorstring_indexs          r3   r%  zWorksheet._write_stringR  s    	 !!#s+ v;(-doo.FI ##>>BB6JL!L C$*;*;$;""3'  /|[I

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

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

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

        )r$  r-   r'  rH   numberr@  s        r3   write_numberzWorksheet.write_numberm  s      !!#sFK@@r7   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() optionrD  r   )r   r
   r  r  mathinfr0  r  r   r#  rF  rm   r   rI  CellNumberTupler   rN  s        r3   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r7   c                 *    | j                  ||||      S )a  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

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

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

        )r  )r-   r'  rH   blankr@  s        r3   write_blankzWorksheet.write_blank  s    "   c5+>>r7   c                     |y| j                  ||      ry| j                  r || j                  kD  r| j                  |       t	        |      | j
                  |   |<   y)Nr   rD  )rF  rm   r   rI  CellBlankTupler   )r-   r'  rH   rI   r@  s        r3   r  zWorksheet._write_blank  sb     !!#s+ C$*;*;$;""3'  .k:

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

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

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

        )r  r-   r'  rH   formular@  values         r3   write_formulazWorksheet.write_formula  s    & ""3Wk5IIr7   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)NrD  rZ   zFormula can't be None or empty{r  r   )rF  r   re_dynamic_functionsearchwrite_dynamic_array_formular  r  _write_array_formula_prepare_formularm   r   rI  CellFormulaTupler   r]  s         r3   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r7   c           
          t         j                  |      r| j                  |||||||      S | j                  |||||||d      S )an  
        Write a formula to a worksheet cell/range.

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

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

        static)rc  rd  re  rf  )r-   	first_row	first_collast_rowlast_colr^  r@  r_  s           r3   write_array_formulazWorksheet.write_array_formula  sb    : %%g.339h';PU  ((	
 		
r7   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)rf  r  )	r-   rk  rl  rm  rn  r^  r@  r_  errors	            r3   re  z%Worksheet.write_dynamic_array_formula*  sB    8 ))	
 A:&*D#r7   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 (=  Nrb  r   r  r  rD  z_xlfn.z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z	\bBYCOL\(z_xlfn.BYCOL(z	\bBYROW\(z_xlfn.BYROW(z\bCHOOSECOLS\(z_xlfn.CHOOSECOLS(z\bCHOOSEROWS\(z_xlfn.CHOOSEROWS(z\bDROP\(z_xlfn.DROP(z
\bEXPAND\(z_xlfn.EXPAND(z
\bFILTER\(z_xlfn._xlws.FILTER(z
\bHSTACK\(z_xlfn.HSTACK(z
\bLAMBDA\(z_xlfn.LAMBDA(z\bMAKEARRAY\(z_xlfn.MAKEARRAY(z\bMAP\(z
_xlfn.MAP(z\bRANDARRAY\(z_xlfn.RANDARRAY(z
\bREDUCE\(z_xlfn.REDUCE(z\bSCAN\(z_xlfn.SCAN(z	\SINGLE\(z_xlfn.SINGLE(z\bSEQUENCE\(z_xlfn.SEQUENCE(z\bSORT\(z_xlfn._xlws.SORT(z
\bSORTBY\(z_xlfn.SORTBY(z
\bSWITCH\(z_xlfn.SWITCH(z\bTAKE\(z_xlfn.TAKE(z\bTEXTSPLIT\(z_xlfn.TEXTSPLIT(z	\bTOCOL\(z_xlfn.TOCOL(z	\bTOROW\(z_xlfn.TOROW(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bVSTACK\(z_xlfn.VSTACK(z\bWRAPCOLS\(z_xlfn.WRAPCOLS(z\bWRAPROWS\(z_xlfn.WRAPROWS(z\bXLOOKUP\(z_xlfn.XLOOKUP(z	\bACOTH\(z_xlfn.ACOTH(z\bACOT\(z_xlfn.ACOT(z\bAGGREGATE\(z_xlfn.AGGREGATE(z
\bARABIC\(z_xlfn.ARABIC(z\bARRAYTOTEXT\(z_xlfn.ARRAYTOTEXT(z\bBASE\(z_xlfn.BASE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBETA.INV\(z_xlfn.BETA.INV(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z
\bBITAND\(z_xlfn.BITAND(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z	\bBITOR\(z_xlfn.BITOR(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z
\bBITXOR\(z_xlfn.BITXOR(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z
\bCONCAT\(z_xlfn.CONCAT(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOTH\(z_xlfn.COTH(z\bCOT\(z
_xlfn.COT(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bCSCH\(z_xlfn.CSCH(z\bCSC\(z
_xlfn.CSC(z\bDAYS\(z_xlfn.DAYS(z\bDECIMAL\(z_xlfn.DECIMAL(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z
\bF.DIST\(z_xlfn.F.DIST(z\bF.INV.RT\(z_xlfn.F.INV.RT(z	\bF.INV\(z_xlfn.F.INV(z
\bF.TEST\(z_xlfn.F.TEST(z\bFILTERXML\(z_xlfn.FILTERXML(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bIFNA\(z_xlfn.IFNA(z\bIFS\(z
_xlfn.IFS(z	\bIMAGE\(z_xlfn.IMAGE(z
\bIMCOSH\(z_xlfn.IMCOSH(z	\bIMCOT\(z_xlfn.IMCOT(z
\bIMCSCH\(z_xlfn.IMCSCH(z	\bIMCSC\(z_xlfn.IMCSC(z
\bIMSECH\(z_xlfn.IMSECH(z	\bIMSEC\(z_xlfn.IMSEC(z
\bIMSINH\(z_xlfn.IMSINH(z	\bIMTAN\(z_xlfn.IMTAN(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bISOMITTED\(z_xlfn.ISOMITTED(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bLET\(z
_xlfn.LET(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z	\bMUNIT\(z_xlfn.MUNIT(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bNORM.INV\(z_xlfn.NORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bPDURATION\(z_xlfn.PDURATION(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPHI\(z
_xlfn.PHI(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bRRI\(z
_xlfn.RRI(z\bSECH\(z_xlfn.SECH(z\bSEC\(z
_xlfn.SEC(z
\bSHEETS\(z_xlfn.SHEETS(z	\bSHEET\(z_xlfn.SHEET(z
\bSKEW.P\(z_xlfn.SKEW.P(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z
\bT.DIST\(z_xlfn.T.DIST(z\bT.INV.2T\(z_xlfn.T.INV.2T(z	\bT.INV\(z_xlfn.T.INV(z
\bT.TEST\(z_xlfn.T.TEST(z\bTEXTAFTER\(z_xlfn.TEXTAFTER(z\bTEXTBEFORE\(z_xlfn.TEXTBEFORE(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bVALUETOTEXT\(z_xlfn.VALUETOTEXT(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z
\bXMATCH\(z_xlfn.XMATCH(z\bXOR\(z
_xlfn.XOR(z
\bZ.TEST\(z_xlfn.Z.TEST()r  r  r   subr  )r-   r^  expand_future_functionss      r3   rg  zWorksheet._prepare_formulaX  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r7   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],rZ   )appendjoin)r^  escaped_formulain_string_literalchars       r3   _prepare_table_formulaz Worksheet._prepare_table_formula  s    gN! 	-D s{(9$9! !&&t, s{&&~6&&t,	-" yy))r7   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)NrD  r:   r   r   )
rF  r%   rg  rm   r   rI  CellArrayFormulaTupler   ranger$  )r-   rk  rl  rm  rn  r^  r@  r_  atype
cell_ranger'  rH   s               r3   rf  zWorksheet._write_array_formula-  s\    x"*IxIx"*IxI !!)Y7!!(H5  Y(%:*9i@J ")Y7#Hh78  ''0 I0A0A$A""9- ,A[%U,


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

        )r8  )r-   r'  rH   r5  r@  s        r3   write_datetimezWorksheet.write_datetimec  s      ##CdK@@r7   c                     | j                  ||      ry| j                  r || j                  kD  r| j                  |       | j	                  |      }|| j
                  }t        ||      | j                  |   |<   y)NrD  r   )rF  rm   r   rI  _convert_date_timer  CellDatetimeTupler   )r-   r'  rH   r5  r@  rO  s         r3   r8  zWorksheet._write_datetimev  s~    !!#s+ C$*;*;$;""3' ((. 22K  1E

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

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

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

        )r2  r-   r'  rH   booleanr@  s        r3   write_booleanzWorksheet.write_boolean  s      ""3WkBBr7   c                     | j                  ||      ry| j                  r || j                  kD  r| j                  |       |rd}nd}t	        ||      | j
                  |   |<   y)NrD  r   r   )rF  rm   r   rI  CellBooleanTupler   )r-   r'  rH   r  r@  r_  s         r3   r2  zWorksheet._write_boolean  sf    !!#s+ C$*;*;$;""3'EE  0{C

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

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )r"  r-   r'  rH   urlr@  r?  tips          r3   	write_urlzWorksheet.write_url  s    & sCk63GGr7   c                    | j                  ||      ryt        |t              s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)NrD  r   i  zIgnoring URL 'z>' since it exceeds Excel's limit of 65,530 URLs per worksheet.r   )rF  r9  r   _text_tipr   r   _original_urlr  r  rm   r   rI  r%  textr   r  s          r3   r"  zWorksheet._write_url  s    !!#s+ #s#c(C!"	 	Ae# !2!2 3 4- .  11K''##d.?.?(?&&s+ sC;? %(S!r7   c                 *     | j                   ||g| S )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

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

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

        )_write_rich_stringr-  s       r3   write_rich_stringzWorksheet.write_rich_string  s    * 't&&sC7$77r7   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   rZ   rD  rM      zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().r  r?  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().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().rE  )listrF  r9  r   popr	   r'   r   _set_filehandlerG  r   ry  _xml_start_tag_write_fontr   _xml_data_element_xml_end_tagfhgetvaluerv   rm   rk   rH  r   rI  CellRichStringTupler   )r-   r'  rH   r.   tokensr@  rL  
raw_stringr  default	fragmentspreviousposr&  
attributesr?  s                   r3   r  zWorksheet._write_rich_string  s   d
 !!#s+ fRj&) **,K Z {$$R( (
 	v;!B  "	EeV,x'$$W-$$U+ $$U+B;A  e#
# x'C!GJ    '#1HCE"	J )A,/LL'',  	/E%(++C0  '  
'.%%&?@..sE:F))#.	/  ))+ z?T__,?  ##>>BB6JL!L C$*;*;$;""3'  3+z 


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

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

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

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

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

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

        r   r   r+  r  s          r3   write_columnzWorksheet.write_column  r  r7   c                     | 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 (, ).rD  r   )rF  r   _image_from_source_row_col_set_user_optionsr   ry  )r-   r'  rH   sourceoptionsimages         r3   insert_imagezWorksheet.insert_image  sx    " !!#sD$7+C53%r:; ''8

(5!r7   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  rD  Nr@  TF#VALUE!r   )rF  r   r  r  getr  r  r  r  r  get_image_indexCellErrorTupler   )r-   r'  rH   r  r  r  r@  image_indexs           r3   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r7   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  rD  NrZ   x_offsetr   y_offsetx_scaler   y_scaleobject_positiondescription
decorativeF)rF  r   r  r   ry  )r-   r'  rH   r  r  r  r  r  r  anchorr  r  s               r3   insert_textboxzWorksheet.insert_textbox  s    " !!#sD$7-cU"SE<=<D?G;;z1-;;z1-++i+++i+.2kk-6[[u5
	
 r7   c                 (   | 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  rD  Nz7Chart cannot be inserted in a worksheet more than once.rE  r  r   r  r  r   r  r  r  r  F)rF  r   already_insertedcombinedr  r  r  r  r  r   ry  )r-   r'  rH   chartr  r  r  r  r  r  r  r  s               r3   insert_chartzWorksheet.insert_chartH  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	
 r7   c                     | 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.

        rD  rE  Tr   )rF  rG  rv   r   r   r   r   )r-   r'  rH   commentr  s        r3   write_commentzWorksheet.write_comment  sc    $ !!#s+ w<$//)  c39")c3r7   c                     d| _         y)z
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r-   s    r3   show_commentszWorksheet.show_comments       !%r7   c                 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   )r-   r  is_byte_streamr  s       r3   set_backgroundzWorksheet.set_background  s2     ''/ %R
 r7   c                     || _         y)z
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

        )ri   r  s    r3   get_namezWorksheet.get_name  s     yyr7   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   rj   r  activesheetr  s    r3   activatezWorksheet.activate  s$     *.**'r7   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    r3   selectzWorksheet.select  s     r7   c                      d| _         d| _        y)zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   Nr}   r   r  s    r3   hidezWorksheet.hide        r7   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    r3   very_hiddenzWorksheet.very_hidden%  r  r7   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}   rj   r  
firstsheetr  s    r3   set_first_sheetzWorksheet.set_first_sheet5  s     )-&r7   c                    |i }||kD  r||}}d}|j                  dd      }|j                  dd      }|j                  dd      }	|s|r|rd}
nd}
| j                  d|||
      ry| j                  d|||
      ry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   rD     r   )r  rF  maxminr   r  r{   r   )r-   rl  rn  widthr@  r  
ignore_rowr}   r  r   
ignore_colrH   s               r3   
set_columnzWorksheet.set_columnG  s   ( ?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 !%r7   c                 R    || j                  |      }| j                  |||||      S )a;  
        Set the width, and other properties of a single column or a
        range of columns, where column width is in pixels.

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

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

        )_pixels_to_widthr  )r-   rl  rn  r  r@  r  s         r3   set_column_pixelszWorksheet.set_column_pixels  s1    ( ))%0Ey(E;PPr7   c                 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   rP   rT   rP   
rO   r  rS   rQ      $   rR   rU         TF)#rm   r   rx   r  r	  sortedrk   string_table__getitem__r  rw   r   r  ry   rz   r  __name__r?  r  r#   r<   r  rG  r3  rO  r   r  r9  r_  r#  r+   r1  r   itemsr{   )r-   	max_widthcol_width_maxstringsrow_numcol_numcell	cell_typelength	string_idr?  
seg_length	width_maxpixel_widthr  r{   
user_widthr}   s                     r3   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r7   c                    |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   rD  r}   Fr  r   r   r  T)
ry   rF  r   r  r  r  r   r   r   r   )	r-   r'  heightr@  r  min_colr}   r  r   s	            r3   set_rowzWorksheet.set_row3  s    ?G ??&ooGG !!#w/>,,F Xu-KKU3	GQ' Q;F,,F E1E1!$T%;%;U!C %k65)Lc !%  &v.sr7   c                 P    || j                  |      }| j                  ||||      S )a  
        Set the width (in pixels), and other properties of a row.

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

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

        )_pixels_to_heightr*  )r-   r'  r(  r@  r  s        r3   set_row_pixelszWorksheet.set_row_pixelsm  s/     ++F3F||Cg>>r7   c                 n    || j                   }|| j                  k7  rd| _        || _         |rd| _        yy)z
        Set the default row properties.

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

        Returns:
            Nothing.

        NTr   )r   r   r   r   )r-   r(  hide_unused_rowss      r3   set_default_rowzWorksheet.set_default_row  sB     >,,FT---$(D!&,D#&'D# r7   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 cellrD  r   zMerge range '!' overlaps previous merge range ''.!' overlaps previous table range 'rZ   r   )r   rF  r$   r  r   r  r   r   r   ry  r,  r  )r-   rk  rl  rm  rn  r  r@  r  r'  rH   previous_ranges              r3   merge_rangezWorksheet.merge_range  s   2  Y(%:*+ x%-yYx%-yY !!)Y7!!(H5 iHhG
HqL1 	;CY15 ;$$((#s4%)%6%6%:%:C:%FN*'
| 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<=	= r7   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 'r3  	worksheetN)	_convert_name_arear$   r   r   r   r  r   r  r   )
r-   rk  rl  rm  rn  arearefrH   r   r   s
             r3   
autofilterzWorksheet.autofilter  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r7   c           	         | 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()NrG   Invalid column ''Column '%' outside autofilter() column range (r  ))r[   r  z(Incorrect number of tokens in criteria 'r  r   r   r  r[      )r   r   r+   r,   r!   ru   r   _extract_filter_tokensrG  _parse_filter_expressionfilter_column_listr   r   r   )r-   rH   criteria
col_letterrI   	col_firstcol_lastr  s           r3   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c           	      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.

        r>  NrG   r?  r@  rA  rB  ,rC  r   )
r   r   r+   r,   r!   ru   r   r   r   r   )r-   rH   filtersrI  rI   rJ  rK  s          r3   rG  zWorksheet.filter_column_listK	  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.
        TrD  N>   r_  r  maximumminimumrH  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()rE  r  r_  rR  rT  z5Parameter 'validate' is required in data_validation()nonewholedecimalr  r5  r6  
textLengthcustom)anyz	any valuezwhole numberra  integerrb  r  r5  r6  ztext lengthr   rd  zUnknown validation type 'z/' for parameter 'validate' in data_validation()rY  r^  betweenrH  rQ  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informationrU  z' for parameter 'error_type'.r5  r6  .16g    zLength of input title 'z' exceeds Excel's limit of 32rX  zLength of error title '   zLength of input message 'z' exceeds Excel's limit of 255r]  zLength of error message 'zLength of list items 'z;' exceeds Excel's limit of 255, use a formula range insteadr\  rS  rW  rV  cellsr[  rZ  $rZ   )rF  copykeysr   r  r   r  rG  r9  r  	_csv_joinr=   replacer   ry  )r-   rk  rl  rm  rn  r  valid_parameters	param_keyvalid_typescriteria_typeserror_types	date_timer^  s                r3   data_validationzWorksheet.data_validationu	  s0   $ !!)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" 	(r7   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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)                  ddӫ       |j)                  ddի       t+        |d         |d<   t+        |d         |d<   |d   d#k(  rd|d<   d|d<   |j)                  dd̫       |j)                  dd֫       |j)                  ddΫ       |j)                  ddЫ       |j)                  ddЫ       |j)                  dd׫       |j)                  ddث       |j)                  dd٫       t+        |d         |d<   t+        |d         |d<   t+        |d         |d<   d|vrd|d<   |d   d%k(  rd|d<   |j                  d˫      sd|d<   d|d<   n|d   |d<   |j                  dͫ      sd|d<   d|d<   n|d   |d<   |j)                  ddЫ       |j)                  ddЫ       |j)                  dd       |j)                  d|d          |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       |j)                  dd       t+        |d         |d<   t+        |d         |d<   t+        |d         |d<   t+        |d         |d<   t+        |d         |d<   |j                  d      r6d| _        |d   dk(  r|d   dk(  rd|d<   |d   dk(  r|d   dk(  rd|d<   ||d<   	 |d   j/                  d1      |d<   	 |d   j/                  d1      |d<   	 |d   j/                  d1      |d<   || j4                  v r| j4                  |   j7                  |       y|g| j4                  |<   y# t0        t2        f$ r Y w xY w# t0        t2        f$ r Y |w xY w# t0        t2        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.
        TrD  N>$   r:  iconsr_  rM   rQ  rR  bar_onlyrH  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_lengthrZ  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_samer_  z' in conditional_format()rE  r:  z4Parameter 'type' is required in conditional_format()r  cellIsr5  r6  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)r^  icon_setzUnknown value 'z.' for parameter 'type' in conditional_format()	directionrg  rh  ri  rj  rk  r  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  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 monthrH  r_  r  z5Conditional format 'value' must be a datetime object.r  rR  z7Conditional format 'minimum' must be a datetime object.rQ  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().r[   total_icons4rD  5r  r  rZ  r  rZ   rM   priorityr   r  r  r  r  r  r  r  r  r  r  r  is_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))r^  notContainsTextzISERROR(SEARCH("z))zLEFT(rN  z)="rx  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(rC  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#FF0000z#000000  r  )rF  r  r  r   r9  r1  r3  upperr   r  r  r  _set_icon_propsr$   r%   r  _get_dxf_indexr   r   rG  
setdefaultr   rr   lstripKeyErrorAttributeErrorr   ry  )r-   rk  rl  rm  rn  r  valid_parameterr  
valid_typecriteria_typer  valid_iconsr  
start_cellr_  r   rH  s                    r3   conditional_formatzWorksheet.conditional_formatx
  s   ( !!)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.{I6{I6#,W[-A#BGK #,W[-A#BGK  6?o-*GFO !%GHz51z<8z51{A.{A.{I6{I6{I6#,W[-A#BGK #,W[-A#BGK #,W[-A#BGK  ')')$ 6?i' $GH;;z*&+
#*3'*1**=';;z*&+
#*3'*1**='{A.{A.{I617;3GHz516{E233Y?:IF8%@?G2B7/;#,W[-A#BGK *3G<N4O*PG&'(1':J2K(LG$%,5g>R6S,TG()3<344G/0
 ;;)*!%Dz"e+0D0I'+$z"e+0D0I'+$)GG	#*;#7#>#>s#CGK 	#*;#7#>#>s#CGK 	#*;#7#>#>s#CGK 
 ***j)009  .5IDj)# .) 		 .) 		 .) 		s6   7h< i 'i& <iii#"i#&i87i8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  TrD  r   zTable range 'r4  r3  r2  >   r  ri   stylecolumns	total_rowr<  
header_rowbanded_rowslast_columnfirst_columnbanded_columnsr_  ' in add_table()rE  r  r  r<  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_shownri    zName 'z&' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz*Invalid Excel characters in add_table(): 'r@  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  rZ   TableStyleMedium9r  a_ranger  Column)	idri   total_stringtotal_functioncustom_totaltotal_valuer^  rM   name_formatrM   r   z'Duplicate header name in add_table(): 'header_formatr0  r^  r  r-  
count_nums	countNumsstd_devstdDevr  r3  countr  r  r5  sumvarr.  rd  r/  r,  r  r8  zTable autofilter range 'z0' overlaps previous Worksheet autofilter range 'r   ) r  rm   r   rF  r$   r  r   r  r   r   r  r   r!  UNICODEr  r3  rG  lowerr  r  r~  rg  set_table_function_to_formular  r%  r  ry  r,  	enumerater   r   )&r-   rk  rl  rm  rn  r  r   col_formatsr  r'  rH   r5  r  r  num_rowsri   first_data_rowlast_data_rowcol_id
seen_namesr  col_data	user_dataxformatheader_namer^  function	subtotalsr_  r,  r  ijr&  column_dataformula_formatr   r   s&                                         r3   	add_tablezWorksheet.add_tableo  s~	   $ ?G llnGHI !!)YdC!!(HdDA x%-yYx%-yY iHhG
HqL1 	:CY15 :##''c
3%)%5%5%9%93*%EN*'
| 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 r7   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.

        TrD  	locations>   r  r  axisr:  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_pointsr_  z' in add_sparkline()r  z0Parameter 'range' is required in add_sparkline()rE  r:  line)rg  columnwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()ri  stackedrV  rangeszMMust have the same number of location and range parameters in add_sparkline()r7  r  rZ   r  !r[  highrY  lowrf  negativer`  firstr]  lastrT  r  r  rR  rU  rb  r}   rS  r^  zeror   emptyconnectspangaprW  r  seriesrc  re  rd  r_  r\  rZ  rX  )rF  r%   r  r   r  r9  r  rG  r    ri   r  r  ry  r   _set_spark_colorr   )r-   r'  rH   r  	sparkliner  r  
spark_typerange_countlocation_count	sheetname
new_rangesspark_rangenew_locationsrV  rs  
date_rangestyle_idr  s                      r3   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)r7   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|   )r-   rk  rl  rm  rn  paneactive_cellsqrefs           r3   set_selectionzWorksheet.set_selection  sh      (	9= x%-yYx%-yYIxB D= +u56r7   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   )r-   r'  rH   s      r3   set_top_left_cellzWorksheet.set_top_left_cell  s#     !8q.sC8r7   c                 J    || _         || _        || _        || _        d| _        y)a  
        Control outline settings.

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

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

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

        Returns:
            0:  Nothing.

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

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

        Returns:
            0:  Nothing.

        r  N)r  )r-   xyr  r  s        r3   split_paneszWorksheet.split_panes  s      	!Q15r7   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 <= 400r_   N)r   r+   r   )r-   r   s     r3   set_zoomzWorksheet.set_zoom  s3     "9s
=&HIJDI	r7   c                     d| _         y)z
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   r   r-   colors     r3   set_tab_colorzWorksheet.set_tab_color'  s     #5)r7   c                    |dk7  r| j                  |      }|si }i ddddddddddd	dd
ddddddddddddddddddddd}|j                         D ]  }||v r	||   ||<   t        d| 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.

        rZ   sheetTcontentFobjects	scenariosformat_cellsformat_columnsformat_rowsinsert_columnsinsert_rowsinsert_hyperlinksdelete_columnsdelete_rowsselect_locked_cellssortr<  pivot_tablesselect_unlocked_cellszUnknown protection object: 'r@  passwordN)_encode_passwordr  r   r   )r-   r  r  defaultsr  s        r3   protectzWorksheet.protect4  sC    r>,,X6HG
T
u
 u
 	

 E
 e
 5
 e
 5
  
 e
 5
 "4
 E
 %
  E!
" $T#
* <<> 	<Ch '3C5:;		<  ('r7   c                 &   |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()rD  r  r  rZ   r   Ranger   )r   r  r  r   r3  r  r   ry  r-   r  
range_namer  s       r3   unprotect_rangezWorksheet.unprotect_rangeg  s     DE  &&s+
''R0
!!Q&! 3t'@'@#AAJ,,X6H$$j*h%GHr7   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  rD  r   r   )	rF  r   r   r   rG  r   r   ry  r   )r-   r'  rH   r  r(  r  button_numberbuttons           r3   insert_buttonzWorksheet.insert_button  s      !!#sD$7,SEC5;<?G ((''C 1 122Cfe]GL  (r7   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  r2  r  s        r3   insert_checkboxzWorksheet.insert_checkbox  sn    " {33$$& ///3/G/G/I,,,99;66K""3WkBBr7   c                      d| _         d| _        y)z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

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

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

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

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

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

        Returns:
            Nothing.

        N)r   r   r   r   )r-   leftrightr  r  s        r3   set_marginszWorksheet.set_margins4  s#      !#r7   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_docr^   T)r  rG  r   r9  r   r  r   r  r  _header_positionry  r7  r   r   r   r   r   r   )r-   r   r  r  header_origr  placeholder_countimage_counts           r3   
set_headerzWorksheet.set_headerG  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 r7   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  r^   T)r  rG  r   r9  r   r  r   r  r  r  ry  r7  r   r   r   r   r   r   )r-   r   r  r  footer_origr  r  r  s           r3   
set_footerzWorksheet.set_footer  r  r7   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:$rl  )r    ri   r   )r-   rk  rm  r:  r}  s        r3   repeat_rowszWorksheet.repeat_rows  sX      H 	Q	A 9+Rz* $DII.	 )C$ 6r7   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   r:   rl  )r"   r    ri   r   )r-   rl  rn  r:  r}  s        r3   repeat_columnszWorksheet.repeat_columns  sZ      H #9a0	!(A. 3) $DII.	 )C$ 6r7   c                 ~    |dk(  rd| _         d| _        d| _        y|dk(  rd| _         d| _        yd| _         d| _        y)a1  
        Set the option to hide gridlines on the screen and the printed page.

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

        Returns:
            Nothing.

        r   r   TN)r   r   r   )r-   options     r3   hide_gridlineszWorksheet.hide_gridlines  sJ     Q;#$D $%D!)-D&q[#$D $%D!#$D $%D!r7   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    r3   print_row_col_headerszWorksheet.print_row_col_headers2  s     "%)"r7   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    r3   hide_row_col_headerszWorksheet.hide_row_col_headers@  s      $r7   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   rD  )rt   ru   r9  r   )r-   rk  rl  rm  rn  r:  s         r3   
print_areazWorksheet.print_areaM  sZ    ( NQDOOa//DOOa// &&y)XxP $r7   c                      d| _         d| _        y)z
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

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

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

        Returns:
            Nothing.

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

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r   )r-   
start_pages     r3   set_start_pagezWorksheet.set_start_page  s     %r7   c                 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   r+   r   r   )r-   scales     r3   set_print_scalezWorksheet.set_print_scale  sC     2:='JKL u:"&r7   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    r3   print_black_and_whitezWorksheet.print_black_and_white  s      "&r7   c                     || _         y)z
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r   r-   breakss     r3   set_h_pagebreakszWorksheet.set_h_pagebreaks       r7   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     r3   set_v_pagebreakszWorksheet.set_v_pagebreaks  r  r7   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   r3  rj   )r-   ri   s     r3   set_vba_namezWorksheet.set_vba_name  s,      $D '#djj1n*= =Dr7   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.

        rD  >	   
eval_errorformula_rangeformula_differsformula_unlockedcalculated_columntwo_digit_text_yearempty_cell_referencelist_data_validationnumber_stored_as_textr_  z' in ignore_errors()r   )r  r  r   r  )r-   r  r  r  s       r3   ignore_errorszWorksheet.ignore_errors  sd     ? ,,.

 ! 	I 00*9+5IJK	
 &r7   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 )Nri   rj   rk   r  rm   rn   r   r  r  r  r  r  r  r  rs   r	  r
  r  r  g     )@   r]   r         ?F)dirzw+utf-8modeencoding)%ri   rj   rk   r  rm   rn   r   r  r  r  r  r  r  r  rs   r	  r
  r  r  r   r   r   r   r   r   r   r   r   r   tempfilemkstemposcloser  openr  r  )r-   	init_datafdfilenames       r3   _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  r7   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 )Nr8  )"_xml_declaration_write_worksheet_write_sheet_pr_write_dimension_write_sheet_views_write_sheet_format_pr_write_colsrm   _write_sheet_data_write_optimized_sheet_data_write_sheet_protection_write_protected_rangesrs   _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    r3   _assemble_xml_filezWorksheet._assemble_xml_fileG  s    	 	 	 	 	! 	##% 	 ##""$,,. 	$$& 	$$& ##% 	! 	! 	'') 	$$& 	  	!!# 	  " 	  	!!# 	  	  	""$ 	 	""$ 	%%' 	 	! 	 	+& 	r7   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rC  )rt   ru   rm   r   rw   rx   ry   rz   )r-   r'  rH   r  r  s        r3   rF  zWorksheet._check_dimensions  s     7cAg$//!SDOO%; *1E1ET&&&&#*?"%&#*?"%&#*?"%&#*?"%r7   c                 D    t        || j                  | j                        S N)r   r   r	  )r-   dt_objs     r3   r  zWorksheet._convert_date_time  s    *64>>4CWCWXXr7   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 )NrZ   r   r   r  r:   rl  )r"   r3  rt   ru   r    ri   )r-   	row_num_1	col_num_1	row_num_2	col_num_2range1range2r:  row_col_only
col_char_1
col_char_2
row_char_1
row_char_2r}  s                 r3   r9  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%r7   c                     |sg S t        |      }d|v r|j                  d       t        |      }|j                          d}t	        |      |kD  r|d | }|S )Nr   i  )r<  remover  r  rG  )r-   r  
breaks_setbreaks_listmax_num_breakss        r3   _sort_pagebreakszWorksheet._sort_pagebreaks  sf     I[

?a :& {n,%o~6Kr7   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+rx  r   rD  z"")r   compilefindallr  r  r  ry  )r-   r  token_rer  
new_tokensr&  s         r3   rE  z Worksheet._extract_filter_tokens  s     I::34!!*-
 		%E$ab	~~c"cr
MM$,Ee$		% r7   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  r[   z(and|&&)r   z	(or|\|\|)r   Token 'z3' is not a valid conditional in filter expression 'r@  rD  )rG  r   r!  r   _parse_filter_tokens)r-   r  r  conditionalexpression_1expression_2s         r3   rF  z"Worksheet._parse_filter_expression3  s     v;! !)Kxx
K0,4k] +--7L;
  44Z!ML44Z!ML;-/,>>((V<<r7   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   r[   rD     )rl  r  z=~eqro  z!~nerp  rv  r|  rs  ry  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 'r3  zblanks|nonblanks)r  r  zThe operator 'z0' is not valid in relation to Blanks/NonBlanks'.r  r'  z[*?]   )r  r   r!  r;  r+   r   r3  rd  )r-   r  r  	operatorsoperatorr&  r_  s          r3   r|  zWorksheet._parse_filter_tokensP  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%  r7   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   rD     r   rY   iK  X)ordrG  )r-   r  digestr}  s       r3   r  zWorksheet._encode_password  s    
 TrTN 	 D|t+10FGFc$iF	  R<4'Vq[F,BC#h-&r7   c                     t        |t              r|}|S |(|j                  d      rt        |d         }||_        |S t        |      }|S )Nr  )r9  r   r  
image_name)r-   r  r  r  s       r3   r  zWorksheet._image_from_source  s[     fe$E   W[[%>',/0E%E  &MEr7   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_anchorr+   r   r   embeddedr   ry  r3  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)r-   r  r  r  r  r(  
dimensionsr   drawing_objectr  targettarget_modes               r3   _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3r7   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  r[   r(  r  r/  r  r   r  r  r  rectTextBoxr   r  )$r   r  r   r   r  r+   r   r   r  r   ry  r3  r   r  r   r   SHAPEr  r  r  r  r  r  r  r  r  r   from_optionsr  r  r   r  r   r  r  r  )r-   rj   r  r'  rH   r  r  r  r  r  r  r  r  r  r  r(  r  r   shaper  r  r  r  s                          r3   _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3r7   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\..*$rZ   r  r  r  )r   rt  r  r   r  r  r   ry  r3  r  _get_vml_drawing_rel_index_ref_idr   )r-   r  r  s      r3   _prepare_header_imagezWorksheet._prepare_header_imageY  s     66(B0@0@A$$((7""))$s8}4s:U=S=SS 77F&&u-r7   c                 b    | j                   j                  ddt        |      z   dz   |z   g       y )Nr  r  r  )r   ry  r3  )r-   r  image_extensions      r3   _prepare_backgroundzWorksheet._prepare_backgroundk  s2    &&--'#h-7#=OP	
r7   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   r+  r+   r  r(  r  
chart_namer   r   r  r   ry  r3  r   r   CHARTr  r  r  r  _namer  r  r  r  r  r  r  r   )r-   rj   chart_idr  r'  rH   r  r  r  r  r  r  r  r  r  r(  r  ri   r   r  s                       r3   _prepare_chartzWorksheet._prepare_chartq  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	
r7   c           
      *   | j                  |||||||      \
  }}}}}}	}
}}}t        dd|z  z         }t        dd|z  z         }t        dd|
z  z         }
t        dd|z  z         }t        dd|z  z         }t        dd|z  z         }||||||	|
|||f
S )Nr/  r  )_position_object_pixelsr+   )r-   	col_start	row_startx1y1r  r(  r  col_endrow_endx2y2x_absy_abss                 r3   r  zWorksheet._position_object_emus  s    ( ((y"b%
	
 tby!tby!tby!tby!C$,&'C$,&'9b"gwBuUUr7   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 r*   )	_size_col	_size_rowr  r   r  r   r   r   )r-   r  r  r  r  r  r(  r  r  r  rC  row_idr  r  r  r  s                   r3   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Ur7   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  rD  r   r/  )r{   r   r+   r   )r-   rH   r  max_digit_widthpaddingpixelsr  r}   s           r3   r  zWorksheet._size_colM  s      $--MM#&q)E]]3'*F}.. &A+  Uo&?@3FG 	 U_4s:;gE  ,,Fr7   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   rD  gUUUUUU?)r   r+   r   )r-   r'  r  r  r(  r}   s         r3   r  zWorksheet._size_rowk  s    
  $.. ^^C(+F^^C(+F&A+ 	 Y/0  T%<%<<=Fr7   c                 <    d}d}|dk  r
|||z   z  }|S ||z
  |z  }|S )Ng      @g      @    )r-   r  r  r  r  s        r3   r	  zWorksheet._pixels_to_width  s?    R<o78E  g%8Er7   c                     d|z  S )Nr]   r  )r-   r  s     r3   r,  zWorksheet._pixels_to_height  s    f}r7   r  c           	         d}| j                  |j                  |j                  |j                  |j                  |j
                  |j                  |      }|j                  |j
                         |j                  |j                         |S Nr   )r  	start_col	start_rowr  r  r  r(  ry  )r-   r  r  verticess       r3   _comment_verticeszWorksheet._comment_vertices  ss    //MMNN
 	&'r7   r  c           	         d}| j                  |j                  |j                  |j                  |j                  |j
                  |j                  |      }|j                  |j
                         |j                  |j                         |S r  )r  rH   r'  r  r  r  r(  ry  )r-   r  r  r  s       r3   _button_verticeszWorksheet._button_vertices  sk    //JJJJOOOOLLMM
 	%&r7   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  re   r   rN  )r  r   r  r  r  
is_visibler   r  r   ry  r   r  r   r3  r   r   r   rG  r  r+   r  r   )r-   r  r   vml_drawing_id
comment_idr   row_numsr'  col_numsrH   r  r  r7  start_data_idrK  data_ids                   r3   _prepare_vml_objectszWorksheet._prepare_vml_objects  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 '(r7   c                 j    || _         | j                  j                  ddt        |      z   dz   g       y )Nr  r  r  )r   r   ry  r3  )r-   r   r  s      r3   _prepare_header_vml_objectsz%Worksheet._prepare_header_vml_objects  s8     +&&4s>7JJVST	
r7   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 )Nr+  ri   TablezDuplicate name 'z ' used in worksheet.add_table().Tz/tablez../tables/tabler  r   )r   r  r3  r;  r   r   ry  )r-   table_idseenr   ri   s        r3   _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+	r7   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 )NrZ   r@  z''#z'#]z'][z'[e   f   g   h   i   k   m   n   r6  z	SUBTOTAL(z,[z])zUnsupported function 'r   )r  r   )r-   rI  col_namer^  rJ  func_nums         r3   r=  z$Worksheet._table_function_to_formula  s     ##C.##C.##C.##C. 	
	 y  *H!(2hZr:G  )(3CDEr7   c                 4    ||vry dt        ||         i||<   y )Nrgb)r   )r-   ry  r  
user_colors       r3   rx  zWorksheet._set_spark_color*  s&    W$!&	'*2E(F G	*r7   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   rO   rS   r  rP   r  r   rL   rZ   )rm   r  r   ry  r  r  rO  r?  rk   _get_shared_stringr_  )r-   r  r  r  r  r  r  r  r  r  rj   r?  r_  s                r3   _get_range_datazWorksheet._get_range_data1  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 r7   c                     |D cg c]  }t        |t              st        |      n|! }}dj                  |      S c c}w )NrN  )r9  r3  rz  )r-   r  items      r3   r  zWorksheet._csv_joinf  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%25rx  z%22r'  z%20rv  z%3crs  z%3er  z%5br  z%5d^z%5e`z%60rb  z%7br  z%7d)r   rd  r  )r-   r  s     r3   _escape_urlzWorksheet._escape_urln  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%
r7   c                    |!| xj                   dz  c_         | j                   S | j                  j                  |      r| j                  |   S | xj                   dz  c_         | j                   | j                  |<   | j                   S Nr   )r   r   r  r-   r  s     r3   r  z Worksheet._get_drawing_rel_index  s|    >  A% '''  ($$V,,!$($8$8&!###r7   c                     | j                   j                  |      r| j                   |   S | xj                  dz  c_        | j                  | j                   |<   | j                  S r  )r   r  r   r  s     r3   r  z$Worksheet._get_vml_drawing_rel_index  sZ      $$V,((00  A% (,(@(@f%'''r7   c                    | j                   }|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j
                  r|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j                  r| j                  |j                         |j                  dk(  r| j                  d       |j                  d	k(  r| j                  d
       |j                  dd|j                  fg       |j                  dk(  rn|j                  r| j                  d|j                         nu|j                  r| j                  d|j                         nL|j                   r.| j#                  |j                         }| j%                  d|       n| j%                  dd       |j                  dd|j&                  fg       |j                  dd|j(                  fg       |j&                  dk(  r+|j*                  s|j                  dd|j,                  fg       |j/                  d       y )NrPrbrK  strikeoutlineshadowr   superscriptr  	subscriptszvalrD  themeindexedr  rFontfamilyCalibrischeme)r   r  bold_xml_empty_tagitalicfont_strikeoutfont_outlinefont_shadow	underline_write_underlinefont_script_write_vert_align	font_sizer+  _write_colorcolor_indexed
font_color_get_palette_color_write_rstring_color	font_namefont_family	hyperlinkfont_schemer  )r-   	xf_format
xml_writerr  s       r3   r  zWorksheet._write_font  s   \\
!!%( >>%%c*%%c*##%%h/!!%%i0  %%h/ !!)"5"56   A%""=1  A%"";/ 	!!$%1D1D)E(FG ??b __gy7$$i)@)@A!!++I,@,@AE%%eU3%%gq1 	!!'UI4G4G,H+IJ!!(eY5J5J-K,LM)+I4G4G%%h%9N9N1O0PQ&r7   c                 t    g }|dk(  rdg}n|dk(  rdg}n|dk(  rdg}| j                   j                  d|       y )Nr  )r*  double!   )r*  singleAccounting"   )r*  doubleAccountingur   r2  )r-   r7  r  s      r3   r8  zWorksheet._write_underline  sJ    
 >+,J"_56J"_56J##C4r7   c                 F    d|fg}| j                   j                  d|       y )Nr*  	vertAlignrN  r-   r*  r  s      r3   r:  zWorksheet._write_vert_align  s!    cl^
##K<r7   c                 F    ||fg}| j                   j                  d|       y Nr  rN  r-   ri   r_  r  s       r3   r@  zWorksheet._write_rstring_color  s!    Um_
##GZ8r7   c                 B    |d   dk(  r|dd  }d|j                         z   S )Nr   r  r   FF)r
  r  s     r3   r?  zWorksheet._get_palette_color  s)    8s?!"IEekkm##r7   c                 `    | j                   s"| j                  j                          d| _         y y )NT)r  r  r8  r  s    r3   
_opt_closezWorksheet._opt_close  s*    &&""$&*D# 'r7   c                     | j                   r8| j                  }t        |dd      | _        d| _         | j                  | _        y y )Nza+r1  r2  F)r  r  r9  r  r  )r-   r<  s     r3   _opt_reopenzWorksheet._opt_reopen  sA    ""--H#H4'JD&+D#&&DG #r7   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)rH  r_  r:  r[   C   r_  rI  r   rD  K   r     r  r  P   <   (   ra   r  r:  )r\  r  rO  r^  zUnknown icon property type 'z2' for sub-property 'type' in conditional_format().rO  numrH  rs  T)	r  ry  rG  r  r9  r3  r  r  r   )
r-   r  
user_propspropsrI   max_datarK  tmpr  rH  s
             r3   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< r7   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x14acr8  )rr   ry  r  )r-   schemari  xmlns_rxmlns_mc	ms_schemaxmlns_x14acr  s           r3   r@  zWorksheet._write_worksheetI  s     622>>773	"BB&G(<=
 %z845}k:;78K4r7   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   r:   	dimensionr;  )rw   ry   rz   r%   rx   r2  )r-   r;  r>   r?   s       r3   rB  zWorksheet._write_dimension]  s   
 ??"t'> C__$)D
 $//1'4??; +1doo>*1doo>slV+__/DOOt4V#DOOT__EC 'tHF&tHF3,'CK5#,8r7   c                 h    | j                  d       | j                          | j                  d       y )N
sheetViews)r  _write_sheet_viewr  r  s    r3   rC  zWorksheet._write_sheet_views  s,    L) 	 ,'r7   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  pageBreakPreviewrZ   topLeftCellr_   	zoomScaler   zoomScaleNormalzoomScalePageLayoutViewzoomScaleSheetLayoutView)workbookViewIdr   	sheetView)r   ry  r   r   r   r   r   r   r   r   r   r   r|   r  _write_panes_write_selectionsr  r2  r-   r  s     r3   rt  zWorksheet._write_sheet_view  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8r7   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   ry  r   rr   r2  )r-   r   	row_level	col_levelr  s        r3   rD  z Worksheet._write_sheet_format_pr  s    !44**	**	)+=>?
""d&>&>>12""/00)<=0)<=%9:OZ8r7   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  )r-   rl  rn  prev_col_optionsdeleted_coldeleted_col_optionsrH   col_optionss           r3   rE  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"&!r7   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   rb   r  r  r/  g      p@r  r  r  r  r  )r}   rG   )bestFitrG   )customWidthrG   outlineLevel)r  rG   rH   )_get_xf_indexr+   r#  ry  r2  )r-   col_mincol_maxr{   r  r@  r}   r   r  r&  custom_widthxf_indexr  r  r  s                  r3   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:.r7   c                     | j                   | j                  d       y | j                  d       | j                          | j	                  d       y )N	sheetData)rw   r2  r  _write_rowsr  r  s    r3   rF  zWorksheet._write_sheet_dataH  sB    ??",,k*r7   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   )rw   r2  r  r  seekreadr  r.  r8  r7  unlinkr  r  )r-   	buff_sizer  s      r3   rG  z%Worksheet._write_optimized_sheet_dataR  s     ??",, I!!!$##((3Dd#'',,Y7  ""$IId,,-k*r7   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   r2  r  s     r3   rQ  zWorksheet._write_page_marginsj  so     T%%&d''(DOO$t))*t))*t))*

 	M:6r7   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	paperSizer_   r  r   
fitToWidthfitToHeight)	pageOrderoverThenDownfirstPageNumber)r   portrait)r   	landscape)blackAndWhiterG   r   )useFirstPageNumberrG   horizontalDpiverticalDpi	pageSetup)r   r   ry  r   r   r   r   r   r   r   r   ro   r  r  r2  r  s     r3   rR  zWorksheet._write_page_setupw  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4r7   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   ry  r   r   r   r2  r  s     r3   rP  zWorksheet._write_print_options  s    
)) <<78 <<56 o. ./NJ7r7   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   ry  r   r   r  r   _write_odd_headerr   _write_odd_footerr  rs   r2  r  s     r3   rS  zWorksheet._write_header_footer  s    
((12((56%%
;{{&&({{&&(n-!!
; "r7   c                 <    | j                  d| j                         y )N	oddHeader)r  r   r  s    r3   r  zWorksheet._write_odd_header      {DKK8r7   c                 <    | j                  d| j                         y )N	oddFooter)r  r   r  s    r3   r  zWorksheet._write_odd_footer  r  r7   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  rw   rx   r   r   r   r+   r   
_write_rowry   rz   _write_cellr  _write_empty_row)r-   r  
span_indexru  r  col_refs         r3   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r7   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  ry   rz   r  r  r  clear)r-   current_row_numr  ru  r  r  s         r3   rI  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 	

r7   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   r:   )r  rw   rx   r   ry   rz   r  r  r   r+   r   )r-   spansspan_minspan_maxr  r  r  s          r3   r  zWorksheet._calculate_spansG  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=	$@ r7   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  ry  r   rr   _xml_empty_tag_unencoded_xml_start_tag_unencoded)r-   r'  r  
properties	empty_rowr  r(  r@  r}   r   r  r  s               r3   r  zWorksheet._write_rowr  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:))%<))%<r7   c                 .    | j                  |||d       y )NT)r  )r  )r-   r'  r  r  s       r3   r  zWorksheet._write_empty_row  s    UJ$?r7   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>rR   )r  r#  r   )rS  z#N/Az#NAME?z#NULL!rR  z#REF!r  rZ   )r  e)r  r3  rU   rq  )cmr   crL   rQ   rN   vm)$r&   rM   r  ry  r   r{   r  r  _xml_number_elementrO  r?  rm   _xml_string_element_escape_control_charactersr  r  _xml_rich_inline_stringr   _xml_inline_stringr_  r9  r1  r3  _xml_formula_elementr^  r  r#  r,   r  _write_cell_array_formular  _write_cell_valuer  r2  r  rr  )r-   r'  rH   r  r  r  r  row_xfcol_xftype_cell_namer?  r  r_  error_codess                 r3   r  zWorksheet._write_cell  s    ,C5
J'(
;;{{002HsHo.DMM!dmmC&8&;]]3'*FsF$8$8$:;<DMM!]]3'*F!!!3(<(<(>"?@00 33$$T[[*=77[[F''((<
 88@ $$U+0G00D  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 )NrZ   vr  )r-   r_  s     r3   r  zWorksheet._write_cell_value#  s    =EsE*r7   c                 6    dd|fg}| j                  d||       y )N)r  arrayr;  r(  r  )r-   r^  r  r  s       r3   r  z#Worksheet._write_cell_array_formula*  s#    $uj&9:
sGZ8r7   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   ry  r  _write_tab_color_write_outline_pr_write_page_set_up_prr  r2  r  s     r3   rA  zWorksheet._write_sheet_pr0  s    
 NNNN((%%z4+<+<=>>>/0==DNNd.B.B	:6!!#""$&&(i(	:6r7   c                 H    | j                   sy dg}| j                  d|       y )N)	fitToPager   pageSetUpPr)r   r2  r  s     r3   r  zWorksheet._write_page_set_up_prL  s$    }}&'
M:6r7   c                 P    | j                   }|sy d|fg}| j                  d|       y )Nr  tabColor)r   r2  )r-   r  r  s      r3   r   zWorksheet._write_tab_colorT  s-    en%
J
3r7   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   ry  r   r   r   r2  r  s     r3   r  zWorksheet._write_outline_pr_  s    
##01!!12!!1278K4r7   c                     | j                  | j                        }|sy t        |      }d|fd|fg}| j                  d|       |D ]  }| j	                  |d        | j                  d       y )Nr7  manualBreakCount	rowBreaksi?  )rt  r   rG  r  
_write_brkr  )r-   page_breaksr7  r  r  s        r3   rT  zWorksheet._write_row_breaksq  s~    ++DLL9K  e'


 	K4" 	,GOOGU+	, 	+&r7   c                     | j                  | j                        }|sy t        |      }d|fd|fg}| j                  d|       |D ]  }| j	                  |d        | j                  d       y )Nr7  r  	colBreaksi )rt  r   rG  r  r  r  )r-   r  r7  r  r  s        r3   rU  zWorksheet._write_col_breaks  s~    ++DLL9K  e'


 	K4" 	.GOOGW-	. 	+&r7   c                 :    d|fd|fdg}| j                  d|       y )Nr+  r  )manr   brkr2  )r-   brk_idbrk_maxr  s       r3   r  zWorksheet._write_brk  s'    Vnug&6
C
E:.r7   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]  }| j                  |        | j	                  d       y )Nr7  
mergeCells)r   rG  r  _write_merge_cellr  )r-   r   r7  r  merged_ranges        r3   rL  zWorksheet._write_merge_cells  se    zzL!&'
L*5( 	1L""<0	1 	,'r7   c                     |\  }}}}t        ||      }t        ||      }|dz   |z   }d|fg}	| j                  d|	       y )Nr:   r;  	mergeCell)r%   r2  )
r-   r  row_minr  row_maxr  r>   r?   r;  r  s
             r3   r  zWorksheet._write_merge_cell  sS    /;,'7G #7G4"7G4slV#cl^
K4r7   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   rP   Tr   r  External)r  r   r  r  r   r  r  _is_object_link
_link_typer   URLEXTERNALr   _write_hyperlink_externalr   ry  r  _write_hyperlink_internalr  )r-   r  r  r  r  r  r  s          r3   rO  zWorksheet._write_hyperlinks  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@ 	,'r7   r'  rH   id_numr  c                 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rIdr;  r:idrV  displaytooltiprC  )r%   r3  r  ry  r$  r  r  r2  )r-   r'  rH   r*  r  r;  r_idr  s           r3   r(  z#Worksheet._write_hyperlink_external  s    S)s6{"clVTN3
;;z3;;78y#))4588y#((34K4r7   c                     t        ||      }d|fd|j                  fg}|j                  r|j                  d|j                  f       |j                  d|j                  f       | j                  d|       y )Nr;  rV  r/  r.  rC  )r%   r  r  ry  r  r2  )r-   r'  rH   r  r;  r  s         r3   r)  z#Worksheet._write_hyperlink_internal  sj    S)clZ$;<
88y#((349cii01K4r7   c                     | j                   sy d| j                   fg}| j                  r4| j                  d|       | j                          | j	                  d       y | j                  d|       y )Nr;  
autoFilter)r   r   r  _write_autofiltersr  r2  r  s     r3   rK  zWorksheet._write_auto_filter  sd    ""d1123
>>j9##%l+ j9r7   c                     | j                   \  }}t        ||dz         D ]E  }|| j                  vr| j                  |   }| j                  |   }| j	                  ||z
  ||       G y r  )r   r  r   r   _write_filter_column)r-   col1col2rH   r  r   s         r3   r4  zWorksheet._write_autofilters"  sz     ((ttax( 
	GC$*** %%c*F**3/K %%cDj+vF
	Gr7   c                     d|fg}| j                  d|       |dk(  r| j                  |       n| j                  |       | j                  d       y )NcolIdfilterColumnr   )r  _write_filters_write_custom_filtersr  )r-   rC  r   rO  r  s        r3   r6  zWorksheet._write_filter_column3  sS    '(
NJ7!( &&w/.)r7   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  )rX  r   r   r   rO  )r3  r;  rG  r2  r  r  _write_filterr  )r-   rO  filter
non_blanksr  r<  s         r3   r<  zWorksheet._write_filtersB  s    +2Vc&k6G6G6IX6UfV
V
w<3z?*&Jw<1ZA!5	:6 	:6$Z0 /
"":./ i(! Ws
   !B=B=c                 2    d|fg}| j                  d|       y )Nr*  r@  r  rQ  s      r3   r?  zWorksheet._write_filterV  s    cl^
Hj1r7   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   )rE  r   r   r[   rD  )rG  r  _write_custom_filterr  )r-   r  r  s      r3   r=  zWorksheet._write_custom_filters\  s    v;!0%D%%v.o. J ayA~(\
(\
 <%%fQi;%%fQi;o.r7   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 )Nru  rk  r{  rr  rn  rx  )r   r  r[   rD  r  r  r  zUnknown operator = r  r*  customFilter)r   ry  r2  )r-   r  r*  r  r  s        r3   rF  zWorksheet._write_custom_filters  s    
  #
	 X* *H&xj12 wz8455#,'NJ7r7   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   r<  )r3  r   r  )pivotTablesr   r  )selectUnlockedCellsr   sheetProtection)r   ry  r2  )r-   r  r  s      r3   rH  z!Worksheet._write_sheet_protection  s   
##&&:z7:+>?@7l+9n-y!n-{#./>"01#$23=!/0#$23=!/0&'56#$23=!/0,-676?k*< /0>"01./89-z:r7   c                     | j                   dk(  ry | j                  d       | j                  D ]  \  }}}| j                  |||        | j	                  d       y )Nr   protectedRanges)r   r  r   _write_protected_ranger  r  s       r3   rI  z!Worksheet._write_protected_ranges  sc    $$)-.040E0E 	J,J
H''
JI	J 	+,r7   c                     g }|r|j                  d|f       |j                  d|f       |j                  d|f       | j                  d|       y )Nr  r  ri   protectedRangery  r2  )r-   r  r  r  r  s        r3   rX  z Worksheet._write_protected_range  sT    
z8457J/06:./,j9r7   c                 ~    | j                   sy | xj                  dz  c_        | j                  | j                         y r  )r   r   _write_drawingr  s    r3   rW  zWorksheet._write_drawings  s,    ||!DNN+r7   c                 N    dt        |      z   }d|fg}| j                  d|       y )Nr,  r-  r   r3  r2  )r-   r  r0  r  s       r3   r]  zWorksheet._write_drawing  s,    s:&tn%
Iz2r7   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r,  r-  legacyDrawing)r   r   r3  r2  r-   r0  r  s      r3   rX  zWorksheet._write_legacy_drawing  sK    || 	!s4>>**tn%
OZ8r7   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r,  r-  legacyDrawingHF)r   r   r3  r2  rb  s      r3   rY  z"Worksheet._write_legacy_drawing_hf  sN    "" 	!s4>>**tn%
-z:r7   c                     | j                   sy | xj                  dz  c_        dt        | j                        z   }d|fg}| j                  d|       y )Nr   r,  r-  picture)r   r   r3  r2  rb  s      r3   rZ  zWorksheet._write_picture   sM    $$ 	!s4>>**tn%
Iz2r7   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]  }| j                  |        | j	                  d       y )Nr7  dataValidations)r   rG  r  _write_data_validationr  )r-   r   r7  r  
validations        r3   rN  z!Worksheet._write_data_validations  si    &&K &'
-z:% 	4J''
3	4 	+,r7   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 )$NrZ   r  r'  rZ  rT  r`  r:  rH  rg  r  rU  r   )
errorStyler~  r  )rl  r  r\  )
allowBlankr   rS  )showDropDownr   rW  )showInputMessager   rV  )showErrorMessager   rX  
errorTitler]  rr  rY  promptTitler^  promptr  dataValidationr_  rQ  )r$   r  ry  r2  r  _write_formula_1_write_formula_2r  )	r-   r  r  r  r  	row_firstrJ  row_lastrK  s	            r3   ri  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./r7   c                     t        |t              r | j                  | }d| d}n	 t        |       | j                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nrx  r  formula1)r9  r  r  r#  r,   r  r  r  r-   r^  s     r3   ru  zWorksheet._write_formula_1l  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#  r,   r  r  r  r{  s     r3   rv  zWorksheet._write_formula_2}  sN    	.'N 	z73  	.!!#&!..-	.     +AAc                     t        | j                  j                               }|sy |D ]!  }| j                  || j                  |          # y ra  )r  r   r  _write_conditional_formatting)r-   rk  
cond_ranges      r3   rM  z$Worksheet._write_conditional_formats  sN    ))..01  	J..D--j9	r7   c                     d|fg}| j                  d|       |D ]  }| j                  |        | j                  d       y )Nr  conditionalFormatting)r  _write_cf_ruler  )r-   r  paramsr  params        r3   r  z'Worksheet._write_conditional_formatting  sN    
+,
3Z@ 	'E&	' 	12r7   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 )0Nr:  rM   dxfIdr  r  )
stopIfTruer   r  r  rH  cfRulerR  rQ  r_  r  below)r  r   rk  )equalAverager   z[123] std devz([123]) std devr5  r   r  r  )r\  r   r  )r  r   r  rankr  r  r  r   r  r  r  r^  r  r  r  r  r  r  r  r  r  r  )ry  r  r  _write_formula_elementr  r   rd  groupr2  _write_color_scale_write_data_bar_write_data_bar_ext_write_icon_set)r-   r  r  r!  r  s        r3   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' )r7   c                     	 t        |       | j	                  d|       y # t        $ r% |j                  d      r|j                  d      }Y @w xY w)Nr  r^  r~  r{  s     r3   r  z Worksheet._write_formula_element  sN    	.'N 	y'2  	.!!#&!..-	.r  c                 j   | j                  d       | j                  |d   |d          |d   | j                  |d   |d          | j                  |d   |d          | j                  d|d	          |d
   | j                  d|d
          | j                  d|d          | j                  d       y )Nr  r  r  r  r  r  r  r  r  r  r  )r  _write_cfvor<  r  )r-   r  s     r3   r  zWorksheet._write_color_scale  s     	L)z*E+,>?(U:.k0BCz*E+,>?%{!34)eU;%78%{!34,'r7   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                  d       y )Nr  	minLengthr  	maxLengthr  	showValuer   r  r  r  r  r  r  r  )ry  r  r  r  r<  r  )r-   r  r  s      r3   r  zWorksheet._write_data_bar-  s    
 5 {E,,?@A5 {E,,?@A99Z ./Iz2z*E+,>?z*E+,>?%{!34)$r7   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)rj   rG  r   ry  r  
_write_extr  r  )r-   r  worksheet_countdata_bar_countr  s        r3   r  zWorksheet._write_data_bar_extD  s     **q.T001A50O^3TT f""5)H%@Ax.% (#r7   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  )rU  r   r  r:  r_  rH  )r  ry  r  reversedr  r  )r-   r  r  icons       r3   r  zWorksheet._write_icon_setV  s    
 "22$eL&9:;J99\"./99_%n-Iz2 U7^, 	LDT&\4=$z:JK	L 	)$r7   c                     d|fg}||j                  d|f       |r|j                  d       | j                  d|       y )Nr:  r*  )gter   cfvor[  )r-   cf_typer*  rH  r  s        r3   r  zWorksheet._write_cfvol  sG    w'(
?ucl+j)FJ/r7   c                 2    ||fg}| j                  d|       y rS  r  rT  s       r3   r<  zWorksheet._write_colorx  s    Um_
GZ0r7   c                 D    | j                   D ]  } | j                  |   y ra  )r|   _write_selection)r-   	selections     r3   r  zWorksheet._write_selections~  s%     	.I!D!!9-	.r7   c                     g }|r|j                  d|f       |r|j                  d|f       |r|j                  d|f       | j                  d|       y )Nr  
activeCellr  r  r[  )r-   r  r  r  r  s        r3   r  zWorksheet._write_selection  sX    
vtn-|[9:w./K4r7   c                 p    | j                   }|sy |d   dk(  r | j                  |  y  | j                  |  y )NrD  r  )r   _write_split_panes_write_freeze_panes)r-   r   s     r3   r  zWorksheet._write_panes  s<    

8q=#D##U+$D$$e,r7   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 )NrZ   r   bottomRighttopRight
bottomLeftfrozenr   frozenSplitr<   xSplitySplitr  
activePanestater  )r%   r|   ry  r2  )r-   r'  rH   r  r  r  r  y_splitx_splitr   r   r  r  r  rI   row_cellcol_cells                    r3   r  zWorksheet._write_freeze_panes  s   
)'8< ??&*ooa&8#QU DO 3'K(a0H(C0HOO""J(#CDOO""L(H#EFOO""M;#FG$KOO""JU#CD 'KOO""L+u#EF >E!^!EEx12x12=-89<567E*+FJ/r7   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 )NFrZ   r   Tra   i,  r/  r`     r[   rD  rc   r  r  r  r  r  r  r  r  r  )r|   r+   _calculate_x_split_widthr%   ry  r2  )r-   r'  rH   r  r  rI   r  has_selectionr   r  r  r  r  r   r  r  s                   r3   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/r7   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/  r[   rD  ra   r  )r+   )r-   r  r  r  r  pointstwipss          r3   r  z"Worksheet._calculate_x_split_width  ss      19/G";<sBCF0367'AF !a  r7   c                     | j                   }t        |      }|sy d|fg}| j                  d|       |D ]2  }| xj                  dz  c_        | j	                  | j                         4 | j                  d       y )Nr7  
tablePartsr   )r   rG  r  r   _write_table_partr  )r-   r   r7  r  rI   s        r3   r[  zWorksheet._write_table_parts4  s    F  

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

 	K4r7   c                     t        | j                        }t        | j                        }|s|sy | j                  d       |r| j	                          |r| j                          | j                  d       y )Nr  )rG  r   r   r  _write_ext_list_data_bars_write_ext_list_sparklinesr  )r-   has_data_barshas_sparkliness      r3   r\  zWorksheet._write_ext_list[  sd    D//0T__-^ 	H%**,++-(#r7   c                     | j                  d       | j                  d       | j                  D ]  }| j                  |        | j	                  d       | j	                  d       y )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsr  )r  r  r   "_write_conditional_formatting_2010r  )r-   r  s     r3   r  z#Worksheet._write_ext_list_data_barsn  sb    @A89 ++ 	>H33H=	> 	67% r7   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  r`  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  )r-   r  xmlns_xmr  s       r3   r  z,Worksheet._write_conditional_formatting_2010|  sC   H!8,-
7D 	) 	  * 	Xn5x7LMXn5x7LM(((2D)EF 12//9M0NO )=>11(;V2WX '(F2&&x0@'AB-(,' 	z8G+<=56r7   c                 F    d}|d   }d|fd|fg}| j                  d|       y )Nr  r  r:  r+  r  r  )r-   r  	rule_typer  r  s        r3   r  zWorksheet._write_x14_cf_rule  s4    	y)D$<8
L*5r7   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   r_   r  r  r  )borderr   r  )gradientr   r  r  )r  leftToRightr  )r  rz  r  )negativeBarColorSameAsPositiver   r  )$negativeBarBorderColorSameAsPositiver   r  middle)axisPositionr  r`  )r  r`  r  )ry  r  )r-   r  r  r  r  s        r3   r  zWorksheet._write_x14_data_bar  s   

 *%*%


 (m,K o.O$.:;O$/:;-.CD )=>IJ'(H489'(F267M:6r7   c                     d|fg}|dv r| j                  d|       y | j                  d|       | j                  d|       | j                  d       y )Nr:  )r  r  r  r  zx14:cfvoxm:f)r2  r  r  r  )r-   r  r_  r  s       r3   r  zWorksheet._write_x14_cfvo  sV    y)*
<<
J7
J7""651j)r7   c                 2    d|fg}| j                  d|       y )Nr  zx14:borderColorr  r-   r  r  s      r3   r  z!Worksheet._write_x14_border_color  s    cl^
-z:r7   c                 2    d|fg}| j                  d|       y )Nr  zx14:negativeFillColorr  r  s      r3   r  z(Worksheet._write_x14_negative_fill_color  s    cl^
3Z@r7   c                 2    d|fg}| j                  d|       y )Nr  zx14:negativeBorderColorr  r  s      r3   r  z*Worksheet._write_x14_negative_border_color  s    cl^
5zBr7   c                 2    d|fg}| j                  d|       y )Nr  zx14:axisColorr  r  s      r3   r  zWorksheet._write_x14_axis_color  s    cl^
OZ8r7   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}rc  re  rd  r_  r\  rZ  rX  rW  r  x14:sparklineGroupx14:sparklineGroupsr  )r  _write_sparkline_groupsr  r   _write_sparkline_group_write_color_series_write_color_negative_write_color_axis_write_color_markers_write_color_first_write_color_last_write_color_high_write_color_lowr  _write_sparklinesr  )r-   ry  s     r3   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% r7   c                    | j                  d       t        |d         D ]X  }|d   |   }|d   |   }| j                  d       | j                  d|       | j                  d|       | j                  d       Z | j                  d       y )Nzx14:sparklinesr7  rk  rQ  zx14:sparkliner  r  )r  r  r  r  )r-   ry  rK  r  rV  s        r3   r  zWorksheet._write_sparklines%  s     	,-y)* 	/A#H-a0K -a0H0""6;7"":x8o.	/ 	*+r7   c                 F    d}|dz   }d|fd|fg}| j                  d|       y )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14urir  r  )r-   r  rk  	xmlns_x14r  s        r3   r  zWorksheet._write_ext6  s<    788	 )$CL


 	E:.r7   c                 6    d}d|fg}| j                  d|       y )Nr  r  r  r  )r-   r  r  s      r3   r  z!Worksheet._write_sparkline_groupsB  s%    H!8,-
1:>r7   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 )&Nrs  r  r  cust_max	manualMaxrd  r  cust_min	manualMinr:  rg  rS  
lineWeightrW  )dateAxisr   displayEmptyCellsAsrT  )rT  r   rm  )rm  r   rn  )rn  r   rp  )rp  r   rq  )rq  r   ro  )ro  r   rR  )displayXAxisr   r}   )displayHiddenr   minAxisTypemaxAxisTyperU  ry  r  )r  ry  r  )r-   r  rs  r  s       r3   r  z Worksheet._write_sparkline_groupJ  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*=r7   c                    g }|j                  d      r|j                  d|d   f       |j                  d      r|j                  d|d   f       |j                  d      r|j                  d|d   f       | j                  ||       y )Nr  r+  tint)r  ry  r2  )r-   elementr  r  s       r3   _write_spark_colorzWorksheet._write_spark_color  s    
99UueEl3499Wwg7899VvuV}56GZ0r7   c                 (    | j                  d|       y )Nzx14:colorSeriesr  r  s     r3   r  zWorksheet._write_color_series  s     159r7   c                 (    | j                  d|       y )Nzx14:colorNegativer  r  s     r3   r  zWorksheet._write_color_negative  s     3U;r7   c                 ,    | j                  dddi       y )Nzx14:colorAxisr  FF000000r  r  s    r3   r  zWorksheet._write_color_axis  s    %1DEr7   c                 (    | j                  d|       y )Nzx14:colorMarkersr  r  s     r3   r  zWorksheet._write_color_markers  s     2E:r7   c                 (    | j                  d|       y )Nzx14:colorFirstr  r  s     r3   r  zWorksheet._write_color_first  s     0%8r7   c                 (    | j                  d|       y )Nzx14:colorLastr  r  s     r3   r  zWorksheet._write_color_last      7r7   c                 (    | j                  d|       y )Nzx14:colorHighr  r  s     r3   r   zWorksheet._write_color_high  r   r7   c                 (    | j                  d|       y )Nzx14:colorLowr  r  s     r3   r  zWorksheet._write_color_low  s    6r7   c                 0    ddg}| j                  d|       y )N)fontId0)r:  noConversion
phoneticPrr  r  s     r3   rJ  zWorksheet._write_phonetic_pr  s#     $


 	L*5r7   c                    | j                   sy | j                  d       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d	|       | j                   j                  d
      r!| j                   d
   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j                   j                  d      r!| j                   d   }| j                  d|       | j	                  d       y )NignoredErrorsr+  numberStoredAsTextr#  	evalErrorr%  r^  r$  formulaRanger&  unlockedFormular)  emptyCellReferencer*  listDataValidationr'  calculatedColumnr(  twoDigitTextYear)r  r  r  _write_ignored_errorr  )r-   ignored_ranges     r3   rV  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/*r7   c                 8    d|f|dfg}| j                  d|       y )Nr  r   ignoredErrorr  )r-   rU  r3  r  s       r3   r2  zWorksheet._write_ignored_error   s,     m$O


 	NJ7r7   ra  r  )F)Nr   rj  )NNN)i  )NF)r   r   )r   r   r   r   )NNr   )NN)r_   )rZ   N)r   )r\   r\   r]   r]   )rZ   NN)FF)r   )r  
__module____qualname____doc__rh   r)  r6   r.  r,  rA  r%  rP  r$  rY  r  r`  r  rD   ro  re  rg  staticmethodr~  rf  r  r8  r  r2  r  r"  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rK   r  r
  r&  r*  r-  r0  r6  r<  rL  rG  r  r  rO  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r	  r  r  r  r  r  r  r  r  r!  r,  r=  r^  rF  r  r9  rt  rE  rF  r|  r  r  r   r+   r  r  r  r  r  r  r  r  r  r	  r,  r   r  r   r  r  r  r  r=  rx  r  r  r  r  r  r  r8  r:  r@  r?  rX  rZ  r  r@  rB  rC  rt  rD  rE  r  rF  rG  rQ  rR  rP  rS  r  r  r  rI  r  r  r  r  r  r  rA  r  r   r  rT  rU  r  rL  r  rO  r   r(  r)  rK  r4  r6  r<  r?  r=  rF  rH  rI  rX  rW  r]  rX  rY  rZ  rN  ri  ru  rv  rM  r  r  r  r  r  r  r  r  r<  r  r  r  r  r  r  r[  r  r\  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rJ  rV  r2  __classcell__)r  s   @r3   rW   rW      s   Y$x$3L , ,&SJj A A&6 A A$B ? ?&$ J J*@  *
 *
X  ) )Zrn * *H 4l A A$* C C$6 H H*(T 8 8.wr7  ,  ,  > * *X 1 1f D DL  B%2&5$"  4$ IM; ;z IMQ Q0SNj8t?((. JNJ JX 'E 'ER:x(T @ @D @Dt tl S Sj
 } }~  7  7D 9 9$ GH$0 > >, 6 6"$%*1(f D ! !F C CF''+$&M'^M'^74 7 74&0*$  @''$%','>"(^,'\bHBY&P4B=:U!n"L4L4 L4 	L4\C4J.$
8
t VH\V|<*
 &z &3j
2:H3j($(4'l5=9$+'=J5(!9F(99v90&"PB/H++07L5\82<(99&QP#J)V5=n@t#l+9787	45$'*'*/($50(d5S 5s 5C 5c 5$5S 5s 5 5:"G"*)(2/.86.;`
-
:,39;3-$K0Z4"4
3j(X3(*%.$$%,
01.
5
-60pE0N.(25$&!+7Z6%7N	*;
A
C
9
,!\,"
/?W>r1:<F;98876++Z8r7   rW   )Hr4  rT  r7  r   r5  collectionsr   r   rb  r   	fractionsr   	functoolsr   ior	   r
   r   warningsr   xlsxwriter.commentsr   xlsxwriter.imager   xlsxwriter.urlr   r   xlsxwriter.vmlr   rZ   r   r   r   r   r   
exceptionsr   r   rM   r   r  r   utilityr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   rv  VERBOSErc  r6   rD   rK   r[  r  rV  rJ  r  rh  r  r  r  rW   r  r7   r3   <module>rG     s)     	 	  /       + " ( %  7 7 <      ! bjj< JJ?  P0@@ GX.G%;<X'78X'78i):; i)AB z+;<  /KL ": H}8	## H}8r7   