
    	iZ                       d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZmZmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z%m&Z& d dl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddl*mBZB  ejC        dejD                  ZEd ZFd ZGd ZH edd          ZI edd          ZJ ed d!          ZK ed"d#          ZL ed$d%          ZM ed&d'          ZN ed(d!          ZO ed)d*          ZP ed+d,          ZQ G d- d.e*jB                  ZRdS )/    N)defaultdict
namedtuple)Decimal)Fractionwraps)BytesIOStringIO)isinfisnan)AnyDictListLiteralOptionalUnion)warn)Chart)Color)CommentType)Image)UrlUrlTypes)
ButtonType   )	xmlwriter)DrawingDrawingInfoDrawingTypes)DuplicateTableNameOverlappingRange)Format)Shape)_datetime_to_excel_datetime_get_sparkline_style_preserve_whitespace_supported_datetimequote_sheetnamexl_cell_to_rowcolxl_col_to_namexl_pixel_widthxl_rangexl_rowcol_to_cellxl_rowcol_to_cell_fast)	XMLwritera  
    \bANCHORARRAY\(    |
    \bBYCOL\(          |
    \bBYROW\(          |
    \bCHOOSECOLS\(     |
    \bCHOOSEROWS\(     |
    \bDROP\(           |
    \bEXPAND\(         |
    \bFILTER\(         |
    \bHSTACK\(         |
    \bLAMBDA\(         |
    \bMAKEARRAY\(      |
    \bMAP\(            |
    \bRANDARRAY\(      |
    \bREDUCE\(         |
    \bSCAN\(           |
    \bSEQUENCE\(       |
    \bSINGLE\(         |
    \bSORT\(           |
    \bSORTBY\(         |
    \bSWITCH\(         |
    \bTAKE\(           |
    \bTEXTSPLIT\(      |
    \bTOCOL\(          |
    \bTOROW\(          |
    \bUNIQUE\(         |
    \bVSTACK\(         |
    \bWRAPCOLS\(       |
    \bWRAPROWS\(       |
    \bXLOOKUP\(c                 <     t                      fd            }|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                     	 |r|d         }t          |           n,# t          $ r t          |          }||dd          z   }Y nw xY w | g|R i |S Nr   r   )int
ValueErrorr)   )selfargskwargs	first_argnew_argsmethods        L/srv/django_bis/venv311/lib/python3.11/site-packages/xlsxwriter/worksheet.pycell_wrapperz'convert_cell_args.<locals>.cell_wrapperf   s    	'  G	I 	' 	' 	'(33Hd122h&DDD	'
 vd,T,,,V,,,s    &AAr   r:   r<   s   ` r;   convert_cell_argsr>   _   s6     6]]- - - - ]-     c                 <     t                      fd            }|S )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c                    	 |rt          |d                    n# t          $ r d|d         v rC|d                             d          \  }}t          |          \  }}t          |          \  }}nt          |d                   \  }}||}}||||g}	|	                    |dd                     |	}Y nw xY w 
| g|R i |S )Nr   :r   r3   r4   splitr)   extend)r5   r6   r7   cell_1cell_2row_1col_1row_2col_2r9   r:   s             r;   r<   z(convert_range_args.<locals>.cell_wrapper~   s    	 DG 	 	 	d1g~~!%as!3!3088u088uu0a99u$euueU3HOODH%%%DDD	 vd,T,,,V,,,s    BB65B6r   r=   s   ` r;   convert_range_argsrL   w   s6     6]]- - - - ]-* r?   c                 <     t                      fd            }|S )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c                 L   	 |rt          |d                    n# t          $ rr d |d                             d          D             \  }}t          |          \  }}t          |          \  }}||g}|                    |dd                     |}Y nw xY w 	| g|R i |S )Nr   c                     g | ]}|d z   S )1 ).0cols     r;   
<listcomp>z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>   s    FFFCcCiFFFr?   rB   r   rC   )
r5   r6   r7   rF   rG   _rI   rK   r9   r:   s
            r;   column_wrapperz+convert_column_args.<locals>.column_wrapper   s    	 DG 	 	 	FF47==3E3EFFFNFF(00HAu(00HAuu~HOODH%%%DDD	 vd,T,,,V,,,s    A9BBr   )r:   rV   s   ` r;   convert_column_argsrW      s6     6]]- - - - ]-  r?   BlankformatErrorzerror, format, valueNumberznumber, formatStringzstring, formatBooleanzboolean, formatFormulazformula, format, valueDatetime
RichStringzstring, format, raw_stringArrayFormulaz$formula, format, value, range, atypec                       e Zd ZdZd: fdZdedefdZedededee	d         e
f         fd	            Zdedefd
Ze	 d;dedededee         de	d         f
d            Z	 d;dedededee         de	d         f
dZe	 d;dededeeeef         dee         de	d         f
d            Z	 d;dededeeeef         dee         de	d         f
dZe	 d;dedede
dee         fd            Z	 d;dededee         de	d         fdZe	 	 d<dedededee         de	d         f
d            Z	 	 d<dedededee         de	d         f
dZe	 	 d<dedededededee         de	d         fd            Ze	 	 d<dedededededee         de	d         fd            Zd=d!Zed"             Z	 	 	 d>de	d         fd$Z e	 d;deded%e!j!        dee         de	d         f
d&            Z"d;dededefd'Z#e	 d;deded(e$dee         fd)            Z%d;dededefd*Z&e	 	 	 d?deded+edee         dee         d,ee         fd-            Z'	 d?dededefd.Z(ededed/eeef         de	d0         fd1            Z)dededefd2Z*d:d3Z+e	 d;dededee         dee	d         e
f         fd4            Z,e	 d;dededee         dee	d         e
f         fd5            Z-e	 d;deded6eee.e/f         d7ee0ee
f                  de	d         f
d8            Z1e	 d;deded6eee.e/f         d7ee0ee
f                  de	d         f
d9            Z2e	 d;deded:ed7ee0ee
f                  de	d         f
d;            Z3e	 d;deded<e4d7ee0ee
f                  de	d         f
d=            Z5e	 d;deded>ed7ee0ee
f                  de	d         f
d?            Z6d:d@Z7	 d=d6eee.e/f         dAe$de	d         fdBZ8d:dCZ9dD Z:d:dEZ;d:dFZ<d:dGZ=d:dHZ>d:dIZ?e@	 	 	 d?dededJee         dee         d7ee0ee
f                  de	d         fdK            ZAe@	 	 	 d?dededJee         dee         d7ee0ee
f                  de	d         fdL            ZBd@dNeddfdOZC	 	 	 d?dedPee         dee         d7ee0ee
f                  de	d         f
dQZD	 	 	 d?dedPee         dee         d7ee0ee
f                  de	d         f
dRZE	 dAdPee         dSe$ddfdTZFe	 d;dededededUe
dee         defdV            ZGedededededdf
dW            ZHdedXeddfdYZIdedZeJe         ddfd[ZKe	 d;dedededed7ee0ee
f                  de	d         fd\            ZLe	 d;dedededed7ee0ee
f                  de	d         fd]            ZMe	 d;dedededed7ee0ee
f                  de	d^         fd_            ZNe	 d;deded7ee0ee
f                  de	d         fd`            ZOedededededdf
da            ZPedBdededdfdb            ZQ	 	 	 	 dCdde$dee$dfe$dge$ddf
dhZRe	 	 	 dDdedediee         djee         dkeddfdl            ZSe	 	 dEdmednediee         djee         ddf
do            ZTdFdqeddfdrZUd:dsZVd:dtZWdueeeXf         ddfdvZY	 dGdxed7ee0ee
f                  ddfdyZZ	 	 dEdzed{ee         dxee         defd|Z[e	 d;deded7ee0ee
f                  de	d         fd}            Z\e	 d;deded(e$dee         fd~            Z]d:dZ^d:dZ_dHde	d         ddfdZ`d:dZadee	d         ef         ddfdZbd:dZcd:dZd	 	 	 	 dIdededededdf
dZe	 dJded7ee0ee
f                  ddfdZf	 dJded7ee0ee
f                  ddfdZgd;dedee         ddfdZhe@d;dedee         ddfd            ZidHde	d         ddfdZjd:dZkd:dZlededededede	d         f
d            Zmd:dZndJedPeddfdZodeddfdZpdeddfdZqd:dZrdeJe         ddfdZsdeJe         ddfdZtd;dee         ddfdZud;d7ee0ee
f                  de	d         fdZvd:dZwd:dZx	 dKdededefdZyd Zzd Z{d Z|d Z}d Z~d ZdefdZd;d7ee0ee
f                  fdZde/dededdfdZd:dZd:dZd:dZd:dZd Zd ZdLdefdZdLdefdZd Zd Zd>efdZdefdĄZdń Zd:dƄZd:dǄZdȄ Zd:dɄZdʄ Zd˄ Zd̄ Zd;d̈́Zd;d΄Zd:dτZd:dЄZd:dфZd:d҄Zd:dӄZd:dԄZd;dՄZd:dքZd:dׄZd:d؄Zd:dلZd:dڄZd:dۄZd:d܄Zd:d݄Zd:dބZd:d߄Zd:dZd:dZd:dZd:dZd:dZd:dZdLd:dZd:dZdAdeddfdZd;deddfdZdededdfdZd:dZd:dZd:dZd:dZd:dZd:dZd:dZd:dZd:dZd:dZd:dZd:dZdededed+eddf
dZdeded+eddfdZŐd:dZƐd:dZǐd:dZȐd:dZɐd:dZʐd:dZːd:d Z̐d:dZ͐d:dZΐd:dZϐd:dZАd:dZѐd:dZҐd:dZӐd:dZԐd:d	ZՐd:d
Z֐d:dZאd:dZؐd:dZِd:dZڐd:dZېd:dZܐd:dZݐd:dZސd:dZߐd:dZd;d:dZd:dZd:dZd:dZd:dZdededdfdZdededdfdZd Zd:dZd:dZd:dZd:d Zd:d!Zd:d"Zd:d#Zd:d$Zd:d%Zd:d&Zd:d'Zd:d(Zd:d)Zd:d*Zd:d+Zd:d,Zd:d-Zd:d.Zd:d/Zd:d0Zd:d1Zd:d2Zd:d3Zd:d4Z d:d5Zd:d6Zd:d7Zd:d8Zd:d9Z xZS (M  	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

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

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

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

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

        _writer5   r&  rS   r6   s       r;   writezWorksheet.write  s     " t{3+d++++r?   c                    |st          d          |d         }|j        }|| j        v r| j        |         } || ||g|R  }|n|S | | j        ||g|R  S |t          u r | j        ||g|R  S |t          t          t          t          fv r | j
        ||g|R  S |t          u r | j        |||g|R  S |t          j        t          j        t          j        t          j        fv r | j        ||g|R  S t%          |t          t          t          t          f          r | j
        ||g|R  S t%          |t                    r | j        |||g|R  S t%          |t                    r | j        ||g|R  S t'          |          r | j        ||g|R  S t%          |t(                    r | j        ||g|R  S 	 t          |          } | j
        |||g|dd          R  S # t,          $ r Y n-t           $ r! t          dt/          |           d          w xY w	 t          |            | j        ||g|R  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_booleanr1  r3   r   r   r2  strr6  datetimedatetime	timedelta_write_datetime
isinstancer'   r   r0  r4   typer3  )	r5   r&  rS   r6   r4  
token_typewrite_handlerfunction_returnr5  s	            r;   r:  zWorksheet._write  sb     	LJKKK Q _
 ,,, /
;M+mD#sBTBBBO
 &&& =$4$S#55555 &4&sC7$7777%gx888%4%c366666.4.uc3FFFFFMM	
 
 
 (4'S848888
 eeS'8<== 	7%4%c366666 eS!! 	G.4.uc3FFFFF eT"" 	8&4&sC7$7777 u%% 	9'4'S848888 eS!! 	4"4?33d3333	JeA%4%c3=DH==== 	 	 	D 	J 	J 	JHUHHHIII	J	JJJJ%4%c366666 	J 	J 	JHUHHHIII	Js   6&G 
H)*HH5 5+I stringcell_format)r   r7  c                 2    |                      ||||          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.

        )r3  )r5   r&  rS   rL  rM  s        r;   write_stringzWorksheet.write_string@  s    & !!#sFK@@@r?   c                 ^   d}|                      ||          rdS t          |          | j        k    r|d | j                 }d}| j        s| j                            |          }n|}| j        r || j        k    r|                     |           t          ||          | j	        |         |<   |S Nr   r7  rN  )
_check_dimensionslenr   rz   rx   _get_shared_string_indexr  _write_single_rowCellStringTupler   )r5   r&  rS   rL  rM  	str_errorstring_indexs          r;   r3  zWorksheet._write_stringV  s     	 !!#s++ 	2 v;;((-do-.FI # 	">BB6JJLL!L  	(C$*;$;$;""3'''  /|[II
3r?   numberc                 2    |                      ||||          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.

        )r2  r5   r&  rS   rZ  rM  s        r;   write_numberzWorksheet.write_numbers  s    , !!#sFK@@@r?   c                 Z   t          |          st          |          r| j        r|t          |          r|                     ||d|d          S |t          j        k    r|                     ||d|d          S |t          j         k    r|                     ||d|d          S nt          d          |j        t          u rt          |          }| 
                    ||          rdS | j        r || j        k    r|                     |           t          ||          | j        |         |<   dS )N#NUM!z1/0#DIV/0!z-1/0zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr7  r   )r   r   r  r,  mathinfr>  r%  r   r1  rS  rz   r  rV  CellNumberTupler   r\  s        r;   r2  zWorksheet._write_number  sQ    == 	E&MM 	% == X..sC+wWWWTX%%..sCYWWWdhY&&..sCiXXX '  D  
 x''6]]F !!#s++ 	2  	(C$*;$;$;""3'''  /v{CC
3qr?   blankc                 2    |                      ||||          S )a  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

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

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

        )r*  )r5   r&  rS   rd  rM  s        r;   write_blankzWorksheet.write_blank  s    &   c5+>>>r?   c                     |dS |                      ||          rdS | j        r || j        k    r|                     |           t	          |          | j        |         |<   dS )Nr   r7  )rS  rz   r  rV  CellBlankTupler   )r5   r&  rS   rU   rM  s        r;   r*  zWorksheet._write_blank  s{     1 !!#s++ 	2  	(C$*;$;$;""3'''  .k::
3qr?   r   formulac                 4    |                      |||||          S )a  
        Write a formula to a worksheet cell.

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

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

        )r,  r5   r&  rS   ri  rM  values         r;   write_formulazWorksheet.write_formula  s     4 ""3Wk5IIIr?   c           	         |                      ||          rdS ||dk    rt          d           dS t                              |          r|                     |||||||          S |                    d          r0|                    d          r|                     |||||||          S |                     |          }| j	        r || j
        k    r|                     |           t          |||          | j        |         |<   dS )Nr7  rg   zFormula can't be None or empty{r)  r   )rS  r   re_dynamic_functionsearchwrite_dynamic_array_formular+  r-  _write_array_formula_prepare_formularz   r  rV  CellFormulaTupler   rk  s         r;   r,  zWorksheet._write_formula  s;    !!#s++ 	2?gmm12222 %%g.. 	33S#sG[%  
 c"" 	w'7'7'<'< 	,,S#sG[%  
 ''00  	(C$*;$;$;""3'''  0eLL
3qr?   	first_row	first_collast_rowlast_colc           
          t                               |          r|                     |||||||          S |                     |||||||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)rp  rq  rr  rs  )r5   rv  rw  rx  ry  ri  rM  rl  s           r;   write_array_formulazWorksheet.write_array_formula!  st    : %%g.. 	339h';PU   ((	
 	
 		
r?   c           
      X    |                      |||||||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)rs  r!  )	r5   rv  rw  rx  ry  ri  rM  rl  errors	            r;   rr  z%Worksheet.write_dynamic_array_formulaN  sI    8 ))	
 	
 A::&*D#r?   Fc                     |                     d          r
|dd          }|                     d          r
|dd          }|                    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 (=  Nro  r   r(  r)  r7  z_xlfn.z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z	\bBYCOL\(z_xlfn.BYCOL(z	\bBYROW\(z_xlfn.BYROW(z\bCHOOSECOLS\(z_xlfn.CHOOSECOLS(z\bCHOOSEROWS\(z_xlfn.CHOOSEROWS(z\bDROP\(z_xlfn.DROP(z
\bEXPAND\(z_xlfn.EXPAND(z
\bFILTER\(z_xlfn._xlws.FILTER(z
\bHSTACK\(z_xlfn.HSTACK(z
\bLAMBDA\(z_xlfn.LAMBDA(z\bMAKEARRAY\(z_xlfn.MAKEARRAY(z\bMAP\(z
_xlfn.MAP(z\bRANDARRAY\(z_xlfn.RANDARRAY(z
\bREDUCE\(z_xlfn.REDUCE(z\bSCAN\(z_xlfn.SCAN(z	\SINGLE\(z_xlfn.SINGLE(z\bSEQUENCE\(z_xlfn.SEQUENCE(z\bSORT\(z_xlfn._xlws.SORT(z
\bSORTBY\(z_xlfn.SORTBY(z
\bSWITCH\(z_xlfn.SWITCH(z\bTAKE\(z_xlfn.TAKE(z\bTEXTSPLIT\(z_xlfn.TEXTSPLIT(z	\bTOCOL\(z_xlfn.TOCOL(z	\bTOROW\(z_xlfn.TOROW(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bVSTACK\(z_xlfn.VSTACK(z\bWRAPCOLS\(z_xlfn.WRAPCOLS(z\bWRAPROWS\(z_xlfn.WRAPROWS(z\bXLOOKUP\(z_xlfn.XLOOKUP(z	\bACOTH\(z_xlfn.ACOTH(z\bACOT\(z_xlfn.ACOT(z\bAGGREGATE\(z_xlfn.AGGREGATE(z
\bARABIC\(z_xlfn.ARABIC(z\bARRAYTOTEXT\(z_xlfn.ARRAYTOTEXT(z\bBASE\(z_xlfn.BASE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBETA.INV\(z_xlfn.BETA.INV(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z
\bBITAND\(z_xlfn.BITAND(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z	\bBITOR\(z_xlfn.BITOR(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z
\bBITXOR\(z_xlfn.BITXOR(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z
\bCONCAT\(z_xlfn.CONCAT(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOTH\(z_xlfn.COTH(z\bCOT\(z
_xlfn.COT(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bCSCH\(z_xlfn.CSCH(z\bCSC\(z
_xlfn.CSC(z\bDAYS\(z_xlfn.DAYS(z\bDECIMAL\(z_xlfn.DECIMAL(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z
\bF.DIST\(z_xlfn.F.DIST(z\bF.INV.RT\(z_xlfn.F.INV.RT(z	\bF.INV\(z_xlfn.F.INV(z
\bF.TEST\(z_xlfn.F.TEST(z\bFILTERXML\(z_xlfn.FILTERXML(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bIFNA\(z_xlfn.IFNA(z\bIFS\(z
_xlfn.IFS(z	\bIMAGE\(z_xlfn.IMAGE(z
\bIMCOSH\(z_xlfn.IMCOSH(z	\bIMCOT\(z_xlfn.IMCOT(z
\bIMCSCH\(z_xlfn.IMCSCH(z	\bIMCSC\(z_xlfn.IMCSC(z
\bIMSECH\(z_xlfn.IMSECH(z	\bIMSEC\(z_xlfn.IMSEC(z
\bIMSINH\(z_xlfn.IMSINH(z	\bIMTAN\(z_xlfn.IMTAN(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bISOMITTED\(z_xlfn.ISOMITTED(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bLET\(z
_xlfn.LET(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z	\bMUNIT\(z_xlfn.MUNIT(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bNORM.INV\(z_xlfn.NORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bPDURATION\(z_xlfn.PDURATION(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPHI\(z
_xlfn.PHI(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bRRI\(z
_xlfn.RRI(z\bSECH\(z_xlfn.SECH(z\bSEC\(z
_xlfn.SEC(z
\bSHEETS\(z_xlfn.SHEETS(z	\bSHEET\(z_xlfn.SHEET(z
\bSKEW.P\(z_xlfn.SKEW.P(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z
\bT.DIST\(z_xlfn.T.DIST(z\bT.INV.2T\(z_xlfn.T.INV.2T(z	\bT.INV\(z_xlfn.T.INV(z
\bT.TEST\(z_xlfn.T.TEST(z\bTEXTAFTER\(z_xlfn.TEXTAFTER(z\bTEXTBEFORE\(z_xlfn.TEXTBEFORE(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bVALUETOTEXT\(z_xlfn.VALUETOTEXT(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z
\bXMATCH\(z_xlfn.XMATCH(z\bXOR\(z
_xlfn.XOR(z
\bZ.TEST\(z_xlfn.Z.TEST()r+  r-  r.  subr"  )r5   ri  expand_future_functionss      r;   rt  zWorksheet._prepare_formula|  s   c"" 	"abbkGc"" 	"abbkGC   	#crclG wN &+-A7KK&~w??&~w??&*,?II&*,?II&mW==&AA&(=wGG&AA&AA&)+=wGG&\7;;&)+=wGG&AA&mW==&@@&*;WEE&&97CC&AA&AA&mW==&)+=wGG&~w??&~w??&AA&AA&*;WEE&*;WEE&)97CC( 	1H 	N&~w??&mW==&)+=wGG&AA&+-A7KK&mW==&)+=wGG&*;WEE&02KWUU&*,?II&)+=wGG&AA&)+=wGG&~w??&)+=wGG&AA&,.CWMM&/1I7SS&-/EwOO&*,?II&,.CWMM&)+=wGG&*,?II&)97CC&AA&/1I7SS&,.CWMM&mW==&\7;;&,.CWMM&,.CWMM&mW==&\7;;&mW==&)97CC&+-A7KK&,.CWMM&*,?II&)+=wGG&AA&*;WEE&~w??&AA&)+=wGG&*,?II&-/EwOO&')F
 
 &+-NPW
 
 &13MwWW&,.CWMM&/1I7SS&+-A7KK&*,?II&)+=wGG&/1I7SS&~w??&~w??&,.CWMM&mW==&\7;;&~w??&AA&~w??&AA&~w??&AA&~w??&AA&~w??&)+=wGG&)+=wGG&*,?II&\7;;&,.CWMM&+-A7KK&AA&AA&)+=wGG&)+=wGG&~w??&-/EwOO&)+=wGG&*;WEE&+-A7KK&*,?II&+-A7KK&)+=wGG&.0GQQ&.0GQQ&/1I7SS&/1I7SS&,.CWMM&\7;;&,.CWMM&,.CWMM&,.CWMM&+-A7KK&*;WEE&)97CC&\7;;&mW==&\7;;&AA&~w??&AA&)97CC&)97CC&)+=wGG&)+=wGG&AA&*;WEE&~w??&AA&)+=wGG&*,?II&*;WEE&)97CC&)97CC&+-A7KK&~w??&~w??&*,?II&,.CWMM&AA&\7;;&AAr?   c                     d| vr| S g }d}| D ]T}|dk    r| }|r|                     |           #|dk    r|                     d           ?|                     |           Ud                    |          S )N@F"z[#This Row],rg   )appendjoin)ri  escaped_formulain_string_literalchars       r;   _prepare_table_formulaz Worksheet._prepare_table_formula3  s    gN! 	- 	-D s{{(9$9! ! &&t,,, s{{&&~6666&&t,,,,yy)))r?   r{  c	                 x   ||k    r||}}||k    r||}}|                      ||          rdS |                      ||          rdS ||k    r||k    rt          ||          }	n$t          ||          dz   t          ||          z   }	|                     |          }| j        r || j        k    r|                     |           t          ||||	|          | j        |         |<   | j        sPt          ||dz             D ]<}
t          ||dz             D ]&}|
|k    s||k    r| 	                    |
|d|           '=dS )Nr7  rB   r   r   )
rS  r-   rt  rz   r  rV  CellArrayFormulaTupler   ranger2  )r5   rv  rw  rx  ry  ri  rM  rl  atype
cell_ranger&  rS   s               r;   rs  zWorksheet._write_array_formulaQ  s    x"*IxIx"*IxI !!)Y77 	2!!(H55 	2   Y(%:%:*9i@@JJ ")Y77#Hh778  ''00  	.I0A$A$A""9--- ,A[%U,
 ,

9i(
 # 	EY155 E E HqL99 E ECi''3)+;+;**3QDDDE qr?   rC  c                 2    |                      ||||          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.

        )rF  )r5   r&  rS   rC  rM  s        r;   write_datetimezWorksheet.write_datetime  s    , ##CdK@@@r?   c                     |                      ||          rdS | j        r || j        k    r|                     |           |                     |          }|| j        }t          ||          | j        |         |<   dS )Nr7  r   )rS  rz   r  rV  _convert_date_timer  CellDatetimeTupler   )r5   r&  rS   rC  rM  rZ  s         r;   rF  zWorksheet._write_datetime  s    !!#s++ 	2  	(C$*;$;$;""3''' ((.. 2K  1EE
3qr?   booleanc                 2    |                      ||||          S )a  
        Write a boolean value to a worksheet cell.

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

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

        )r@  r5   r&  rS   r  rM  s        r;   write_booleanzWorksheet.write_boolean  s    $ ""3WkBBBr?   c                     |                      ||          rdS | j        r || j        k    r|                     |           |rd}nd}t	          ||          | j        |         |<   dS )Nr7  r   r   )rS  rz   r  rV  CellBooleanTupler   )r5   r&  rS   r  rM  rl  s         r;   r@  zWorksheet._write_boolean  s    !!#s++ 	2  	(C$*;$;$;""3''' 	EEE  0{CC
3qr?   urltipc                 6    |                      ||||||          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.
        )r0  )r5   r&  rS   r  rM  rL  r  s          r;   	write_urlzWorksheet.write_url  s     6 sCk63GGGr?   c                    |                      ||          rdS t          |t                    s| j        }d|v r|                    dd          \  }}	n|}d}	t          |          |k    st          |	          |k    rt          d| d| d           dS t          |          }|||_        |||_        | xj	        dz  c_	        | j	        d	k    rt          d|j
         d
           dS || j        }| j        sD| j        r || j        k    r|                     |           |                     |||j        |           || j        |         |<   dS )Nr7  #r   rg   zIgnoring URL 'z!' with link or location/anchor > z4 characters since it exceeds Excel's limit for URLs.i  z>' since it exceeds Excel's limit of 65,530 URLs per worksheet.r   )rS  rG  r   r  rD   rT  r   _text_tipr   _original_urlr  r#  rz   r  rV  r3  textr  )
r5   r&  rS   r  rM  rL  r  max_urlurl_str
anchor_strs
             r;   r0  zWorksheet._write_url  s    !!#s++ 	2 #s## 	 )Gczz&)iiQ&7&7#
7||g%%Z7)B)BKS K K7 K K K   rc((C!"	 	Ae##.!2 . . .   2 1K' 	@# ,d.?(?(?&&s+++ sC;??? %(S!qr?   r6   )r   r7  rN  r  r  c                       | j         ||g|R  S )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

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

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

        )_write_rich_stringr;  s       r;   write_rich_stringzWorksheet.write_rich_string@  s!    . 't&sC7$7777r?   c                 0   t          |          }d }d}d}|                     ||          rdS t          |d         t                    r|                                }t                      }t                      | _        | j                            |           t                      }	g }
d}d}t          |          dk    rt          d           dS |D ]}t          |t                    sf|dk    r+|
                    |	           |
                    |           n|
                    |           |dk    rt          d            d	S ||z  }d
}n5|dk    r|dk    rt          d            dS |
                    |           d}|dz  }t          |
d         t                    s| j                            d           |
D ]}t          |t                    r0| j                            d           |                     |           Gg }t          |          r|                    d           | j                            d||           | j                            d           | j        j                                        }t          |          | j        k    rt          d           dS | j        s| j                            |          }n|}| j        r || j        k    r|                     |           t3          |||          | j        |         |<   dS )Nr   rg   r7  rY      zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().r  zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().r  rL  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().r  r   r)z	xml:spacepreservetzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().rN  )listrS  rG  r"   popr
   r/   r  _set_filehandlerT  r   r  _xml_start_tag_write_fontr&   _xml_data_element_xml_end_tagfhgetvaluer   rz   rx   rU  r  rV  CellRichStringTupler   )r5   r&  rS   r6   tokensrM  rY  
raw_stringr  default	fragmentspreviousposr4  
attributesrL  s                   r;   r  zWorksheet._write_rich_stringZ  s   d
 !!#s++ 	2 fRj&)) 	' **,,K ZZ {{$$R((( ((
 	v;;!B   2 "	 "	EeV,, $x''$$W---$$U++++ $$U+++B;;A   22 e#
# x''C!GGJ   22   '''#1HCC )A,// 	-L'',,,  	/ 	/E%(( /++C000  ''''  
'.. A%%&?@@@..sE:FFF))#.... ))++ z??T_,,?   2 # 	">BB6JJLL!L  	(C$*;$;$;""3'''  3+z 
  

3 qr?   c                     || j         |<   dS )a"  
        Add a callback function to the write() method to handle user defined
        types.

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

        N)r  )r5   	user_typeuser_functions      r;   add_write_handlerzWorksheet.add_write_handler  s     *7I&&&r?   c                 V    |D ]%}|                      ||||          }|r|c S |dz  }&dS )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   r9  r5   r&  rS   datarM  r4  r  s          r;   	write_rowzWorksheet.write_row  K    "  	 	EKKS%==E 1HCCqr?   c                 V    |D ]%}|                      ||||          }|r|c S |dz  }&dS )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   r9  r  s          r;   write_columnzWorksheet.write_column  r  r?   sourceoptionsc                    |                      ||dd          rt          d| d| d           dS |                     ||          }||_        ||_        |                    |           | j                            |           dS )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 (, ).r7  r   )rS  r   _image_from_source_row_col_set_user_optionsr   r  )r5   r&  rS   r  r  images         r;   insert_imagezWorksheet.insert_image  s    . !!#sD$77 	:C::3:::;;;2 ''88

(((5!!!qr?   c                    |                      ||          rt          d| d| d           dS |i }|                     ||          }|                    |           |                    dd          }|j        r4|| j        }d| _        |                     |||j        |           d| _        | j	        
                    |          }t          d	||          | j        |         |<   d
S )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  r7  NrM  TF#VALUE!r   )rS  r   r  r  getr  r  r#  r  r$  get_image_indexCellErrorTupler   )r5   r&  rS   r  r  r  rM  image_indexs           r;   embed_imagezWorksheet.embed_image:  s   . !!#s++ 	9399#999:::2?G ''88(((kk-669 	-""5'+D$NN3UY<<<',D$*::5AA  .ikRR
3qr?   r  c                    |                      ||dd          rt          d| d| d           dS |d}|i }|                    dd	          }|                    d
d	          }|                    dd          }|                    dd          }|                    dd          }	|                    dd          }
|                    dd          }| j                            ||||||||	||
|g           d	S )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  r7  Nrg   x_offsetr   y_offsetx_scaler   y_scaleobject_positiondescription
decorativeF)rS  r   r  r   r  )r5   r&  rS   r  r  r  r  r  r  anchorr  r  s               r;   insert_textboxzWorksheet.insert_textboxm  s(   & !!#sD$77 	<c<<S<<<===2<D?G;;z1--;;z1--++i++++i++.22kk-66[[u55
	
 	
 	
 qr?   chartc                    |                      ||dd          rt          d| d| d           dS |i }|j        s|j        r|j        j        rt          d           dS d|_        |j        rd|j        _        |                    d	d
          }|                    dd
          }|                    dd          }|                    dd          }|                    dd          }	|                    dd          }
|                    dd          }|j        dk    r|j        }|j        dk    r|j        }|j        r|j        }|j        r|j        }| j	        
                    ||||||||	|
|g
           d
S )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  r7  Nz7Chart cannot be inserted in a worksheet more than once.rN  r  r   r  r  r   r  r  r  r  F)rS  r   already_insertedcombinedr  r  r  r  r  r   r  )r5   r&  rS   r  r  r  r  r  r  r  r  r  s               r;   insert_chartzWorksheet.insert_chart  s   & !!#sD$77 	:C::3:::;;;2?G ! 	U^ 	8W 	JKKK2!%> 	3.2EN+;;z1--;;z1--++i++++i++.22kk-66[[u55
 =AmG=AmG> 	&~H> 	&~H	
 	
 	
 qr?   commentc                     |                      ||          rdS t          |          | j        k    rdS d| _        d| _        t          ||||          }|| j        |         |<   dS )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.

        r7  rN  Tr   )rS  rT  r   r   r   r   r   )r5   r&  rS   r  r  s        r;   write_commentzWorksheet.write_comment  su    ( !!#s++ 	2 w<<$/))2  c399")c3qr?   c                     d| _         dS )z
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

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

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

        Returns:
            0:  Success.

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

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

        )rv   r  s    r;   get_namezWorksheet.get_nameE  s     yr?   c                 D    d| _         d| _        | j        | j        _        dS )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   rw   r  activesheetr  s    r;   activatezWorksheet.activateS  s%     *.*'''r?   c                 "    d| _         d| _        dS )z
        Set current worksheet as a selected worksheet, i.e. the worksheet
        has its tab highlighted.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)r   r   r  s    r;   selectzWorksheet.selecte  s     r?   c                 "    d| _         d| _        dS )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   Nr   r   r  s    r;   hidezWorksheet.hidev        r?   c                 "    d| _         d| _        dS )z
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        r  r   Nr  r  s    r;   very_hiddenzWorksheet.very_hidden  r  r?   c                 6    d| _         | j        | j        _        dS )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   rw   r  
firstsheetr  s    r;   set_first_sheetzWorksheet.set_first_sheet  s     )-&&&r?   widthc                    |i }||k    r||}}d}|                     dd          }|                     dd          }|                     dd          }	|s|r|rd}
nd}
|                     d|||
          rdS |                     d|||
          rdS t          |	d          }	t          |	d	          }	t          | j        |	          | _        t          ||d
z             D ]}||||	|dg| j        |<   d| _        dS )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.

        NTr   F	collapsedlevelr   r7     r   )r  rS  maxminr   r  r   r   )r5   rw  ry  r  rM  r  
ignore_rowr   r  r  
ignore_colrS   s               r;   
set_columnzWorksheet.set_column  sL   2 ?G x%-yY 
 Xu--KKU33	GQ''  	5 	V 	JJJ !!!Xz:FF 	2!!!Y
JGG 	2 E1E1!$T%;U!C!C HqL11 	W 	WC"'feYPU!VDM# !%qr?   c                 b    ||                      |          }|                     |||||          S )a;  
        Set the width, and other properties of a single column or a
        range of columns, where column width is in pixels.

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

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

        )_pixels_to_widthr  )r5   rw  ry  r  rM  r  s         r;   set_column_pixelszWorksheet.set_column_pixels  s7    2 ))%00Ey(E;PPPr?     	max_widthc                 "   | j         rt          d           dS | j        dS i }t          |                     |          d          }t          | j        j        | j        j        j                  }t          | j
        | j        dz             D ]}| j                            |          st          | j        | j        dz             D ]}|| j        |         v r| j        |         |         }|j        j        }d}|dv rj|dk    r|j        }	||	         }
n|j        }
d	|
vrt'          |
          }n.|
                    d	          D ]!}
t'          |
          }t+          ||          }"n|d
k    r%dt-          t/          |j                            z  }n|dk    r| j        }n|dk    r|j        rd}nd}n|dv rt7          |j        t:          t<          f          r0|j        dk    r$dt-          t/          |j                            z  }nUt7          |j        t.                    rt'          |j                  }n&t7          |j        t>                    r|j        rd}nd}| j                             ||f          r|dk    r|dz  }|                    |d          }||k    r|||<   |!                                D ]\  }}|                     |dz             }t          ||          }| j"                            |          rv| j"                            |          }|d         }|d         }|)|s'||k    r || j"        |         d<   d| j"        |         d<   || j"        |         d<   d| j"        |         d<   |dddddg| j"        |<   dS )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   r\   r`   r\   
r[   r  r_   r]      $   r^   ra         TF)#rz   r   r   r  r  sortedrx   string_table__getitem__r  r   r   r  r   r   r%  __name__rL  r  r+   rD   r  rT  rA  rZ  r   r  rG  rl  r1  r3   r?  r   itemsr   )r5   r  col_width_maxstringsrow_numcol_numcell	cell_typelength	string_idrL  
seg_length	width_maxpixel_widthr  r   
user_widthr   s                     r;   autofitzWorksheet.autofit	  s'     	DEEEF ?"F  --i88%@@	 N'T^-H-T
 
 
 T_do.ABB V	8 V	8G:>>'**  $/A2EFF R8 R8dj111:g.w7D $ 7IF $<<< %00(,I%,Y%7FF%)_Fv--%3F%;%;FF +1,,t*<*< A A-;F-C-C
),VZ)@)@A #h.. "#ST[)9)9%:%:!:"j00 "&!9"i//  < (%'FF%'FF"&AAA
 &dj5#,?? ,#zA~~)*STZ-A-A)A'
C88 ,%3DJ%?%?FF'
D99 ,#z ,)+)+ (,,gw-?@@ %VaZZ" !. 1 1'1 = =I	))17g.eR8j %2$7$7$9$9 	N 	N G[ ))+/::E y))E }  )) N  =,,W55%a[
!!)&)z))49g.q148g.q105DM'*1-04DM'*1--*/ua)Mg&&3	N 	Nr?   heightc                    |i }| j         | j         }nd}|                     ||          rdS || j        }|                    dd          }|                    dd          }|                    dd          }|dk    r	d}| j        }t	          |d          }t          |d	          }t	          | j        |          | _        |||||g| j        |<   d
| _        ||g| j	        |<   dS )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.

        Nr   r7  r   Fr  r  r   r  T)
r   rS  r   r  r  r  r   r   r   r   )	r5   r&  r8  rM  r  min_colr   r  r  s	            r;   set_rowzWorksheet.set_row  s   * ?G ?&oGGG !!#w// 	2>,F Xu--KKU33	GQ'' Q;;F,F E1E1!$T%;U!C!C %k65)Lc !%  &v.sqr?   c                 `    ||                      |          }|                     ||||          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;  )r5   r&  r8  rM  r  s        r;   set_row_pixelszWorksheet.set_row_pixels  s5    * ++F33F||Cg>>>r?   hide_unused_rowsc                 `    || j         }|| j        k    rd| _        || _         |r	d| _        dS dS )z
        Set the default row properties.

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

        Returns:
            Nothing.

        NTr   )r   r   r   r   )r5   r8  r?  s      r;   set_default_rowzWorksheet.set_default_row  sO     >,FT---$(D!&,D# 	(&'D###	( 	(r?   r  c           	         ||k    r||k    rt          d           dS ||k    r||}}||k    r||}}|                     ||          rdS |                     ||          rdS t          ||||          }t          ||dz             D ]}t          ||dz             D ]}	| j                            ||	f          r2| j                            ||	f          }
t          d| d|
 d          | j                            ||	f          r2| j                            ||	f          }
t          d| d|
 d          || j        ||	f<   | j        	                    ||||g           | 
                    ||||           t          ||dz             D ]=}t          ||dz             D ]'}	||k    r|	|k    r|                     ||	d|           (>d	S )
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 cellr7  r   zMerge range '!' overlaps previous merge range ''.!' overlaps previous table range 'rg   r   )r   rS  r,   r  r   r  r!   r   r   r  r:  r*  )r5   rv  rw  rx  ry  r  rM  r  r&  rS   previous_ranges              r;   merge_rangezWorksheet.merge_range	  s   >   Y(%:%:*+++2 x%-yYx%-yY !!)Y77 	2!!(H55 	2 iHhGG
HqL11 	; 	;CY155 ; ;$((#s44 %)%6%:%:C:%F%FN*5
 5 5"05 5 5  
 #''c
33 %)%5%9%93*%E%EN*5
 5 5"05 5 5  
 1;!3*--;$ 	
9i8DEEE 	Iy$<<< HqL11 	= 	=CY155 = =)##y(8(8!!#sB<<<<=
 qr?   c                    ||k     r||}}||k     r||}}|                      ||||          }t          ||||          }|| _        || _        ||g| _        t          ||dz             D ]g}| j                            ||f          r;| j                            ||f          \  }}	|dk    rt          d| d|	 d          d|f| j        ||f<   hdS )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 'rD  	worksheetN)	_convert_name_arear,   r   r   r   r  r   r  r!   )
r5   rv  rw  rx  ry  arearefrS   r   r   s
             r;   
autofilterzWorksheet.autofilterd	  sD   $ i%-yYi%-yY &&y)XxPPy)Xx@@#!&1 HqL11 
	E 
	EC $$i%566 ,0,=,A,A9cBR,S,S)\'))*Ds D D3?D D D  
 4?2DDy#.//
	E 
	Er?   criteriac           	      P   | j         st          d           dS 	 t          |           nH# t          $ r; |}t	          |dz             \  }}|| j        k    rt          d| d           Y dS Y nw xY w| j        \  }}||k     s||k    rt          d| d| d| d	           dS |                     |          }t          |          d
vrt          d| d           | 	                    ||          }t          |          dk    r*|d         dk    r| 
                    ||d         g           npt          |          dk    rI|d         dk    r=|d         dk    r1|d         dk    r%| 
                    ||d         |d         g           n|| j        |<   d| j        |<   d| _        dS )z
        Set the column filter criteria.

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

        Returns:
             Nothing.

        -Must call autofilter() before filter_column()NrP   Invalid column ''Column '%' outside autofilter() column range (r  ))rh   r  z(Incorrect number of tokens in criteria 'r  r   r   r%  rh      )r   r   r3   r4   r)   r   r   _extract_filter_tokensrT  _parse_filter_expressionfilter_column_listr   r   r   )r5   rS   rN  
col_letterrU   	col_firstcol_lastr  s           r;   filter_columnzWorksheet.filter_column	  s    # 	@AAAF		HHHH 	 	 	J(s33HQdo%%5
555666 &%	 !% 1H ??cHnn33 3 3#3 3'/3 3 3   F,,X66v;;f$$GHGGGHHH..x@@ v;;!q	Q##C&)5555[[A&)q..VAY!^^q	UV##C&)VAY)?@@@@ %+DS!$%DS!   * ?A/.A/filtersc           	         | j         st          d           dS 	 t          |           nH# t          $ r; |}t	          |dz             \  }}|| j        k    rt          d| d           Y dS Y nw xY w| j        \  }}||k     s||k    rt          d| d| d| d	           dS || j        |<   d
| j        |<   d
| _	        dS )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.

        rP  NrP   rQ  rR  rS  rT  ,rU  r   )
r   r   r3   r4   r)   r   r   r   r   r   )r5   rS   r_  rZ  rU   r[  r\  s          r;   rY  zWorksheet.filter_column_list	  s0    # 	@AAAF		HHHH 	 	 	J(s33HQdo%%5
555666 &%	 !% 1H ??cHnn,3 , ,, , (, , ,   F ' !r^  c                 	   |                      ||dd          rdS |                      ||dd          rdS |i }n|                                }h d}|                                D ]}||vrt          d| d            dS d|v r|d         |d	<   d
|v r|d
         |d	<   d|vrt          d           dS ddddddddddddd}|d         |vrt          d|d          d           dS ||d                  |d<   |d         dk    r,|                    d          |                    d          dS |d         dk    s|d         dk    s|d         dk    r
d|d<   d|d<   d|vrt          d           dS 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           dS |	|d                  |d<   |d         dk    s|d         dk    rd|vrt          d6           dS nd|d<   d7d8d9d:}
d;|vrd7|d;<   n6|d;         |
vrt          d4|d;          d<           dS |
|d;                  |d;<   |d         d=v r~|d	         rvt          |d	                   ra|                     |d	                   }|d>|d	<   |d         r7t          |d                   r"|                     |d                   }|d>|d<   |                    d          r4t          |d                   d?k    rt          d@|d          dA           dS |                    dB          r4t          |dB                   d?k    rt          dC|dB          dA           dS |                    d          r4t          |d                   dDk    rt          dE|d          dF           dS |                    dG          r4t          |dG                   dDk    rt          dH|dG          dF           dS |d         dk    rSt          |d	         t                    r8 | j
        |d	          }t          |          dDk    rt          dI| dJ           dS 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                             |dP                    dQ|v r|dQ                             dRdS          |dQ<   | j                            |           d7S )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.
        Tr7  N>   rl  r  maximumminimumrN  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()rN  r  rl  rd  rf  z5Parameter 'validate' is required in data_validation()nonewholedecimalr  rC  rD  
textLengthcustom)anyz	any valuezwhole numberrs  integerrt  r  rC  rD  ztext lengthr1  rv  zUnknown validation type 'z/' for parameter 'validate' in data_validation()rk  rp  betweenrN  rc  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informationrg  z' for parameter 'error_type'.rC  rD  .16g    zLength of input title 'z' exceeds Excel's limit of 32rj  zLength of error title '   zLength of input message 'z' exceeds Excel's limit of 255ro  zLength of error message 'zLength of list items 'z;' exceeds Excel's limit of 255, use a formula range insteadrn  re  ri  rh  cellsrm  rl  $rg   )rS  copykeysr   r  r'   r  rT  rG  r  	_csv_joinrE   replacer  r  )r5   rv  rw  rx  ry  r  valid_parameters	param_keyvalid_typescriteria_typeserror_types	date_timeri  s                r;   data_validationzWorksheet.data_validation	  s   2 !!)YdCC 	2!!(HdDAA 	2?GG llnnG
 
 
* ! 	 	I 000L9LLLMMMrr 1
 w&x0GG&y1GG W$$HIII2 # '"
 
  :k113GJ,? 3 3 3   2)'**=>

 J6))M**2O,,42
 J6))z"f,,z"h.."+GJ!%GI W$$HIII2
y
<
 
 	

 '
 J
 *
 *
 M
 
 
 
 '(<
 &
 $%6
  #!
( :n443'**= 3 3 3   2,WZ-@A
 :)++wz/Bl/R/R''E   r ( "&GI 
 
 w&&$%GL!!\"+55/',*? / / /   2$/0E$FGL! J#333  4#GG$455 4 //0@AAI"+22GGy! 9&9'):L&M&M 9 33GI4FGG	(1%8%8	" ;;}%% 	#gm.D*E*E*J*J/'-*@ / / /   2 ;;}%% 	#gm.D*E*E*J*J/'-*@ / / /   2 ;;'' 	C0H,I,IC,O,O0GO,D 0 0 0   2 ;;'' 	C0H,I,IC,O,O0GO,D 0 0 0   2 :&((Z8H$-O-O($dngg&67G7||c!!8W 8 8 8   r ((&'GN#W$$"#GJw&&$%GL!w&&$%GL! '	8XFG G##G##GM$:;;; G##%,]%;%C%CC%L%LGM" 	(((qr?   c                    |                      ||dd          rdS |                      ||dd          rdS |i }n|                                }h d}|                                D ]}||vrt          d| d            dS d|vrt          d	           dS 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*           dS |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 rEt	          |dS         t
                    r*t          |dS                                                   |dS<   |d         dTv rd|d<   dS|v rHt          |dS                   st          dU           dS | 	                    |dS                   }
|
dV|dS<   dW|v rHt          |dW                   st          dX           dS | 	                    |dW                   }
|
dV|dW<   dY|v rHt          |dY                   st          dZ           dS | 	                    |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|
                    d}          st          d~           dS |d}         |vrt          d|d}          d           dS ||d}                  |d}<   d|d<   |d}                             d          rd|d<   n |d}                             d          rd|d<   |                     |
                    d          |
                    d                    |d<   ||k    r||}}||k    r||}}t          ||||          }t          ||          }d|v r|d         }|                    dd          }d|v r%|d         r|d                                         |d<   | j        |d<   | xj        dz  c_        | j        s|
                    d          s|
                    d          s|
                    d          s|
                    d          s|
                    d          s~|
                    d          si|
                    d          sT|
                    d          s?|
                    d          s*|
                    d          s|
                    d          rd|d<   |d         dk    r|dS         }t'          |          }|dR         }|dR         dDk    rdD|d<   d| d| d|d<   ns|dR         dEk    rd|d<   d| d| d|d<   nU|dR         dFk    rdF|d<   d| d| d| d|d<   n4|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<   n|dR         dMk    rd| d| d|d<   nm|dR         dNk    rd| d| d| d|d<   nQ|dR         dOk    rd| d| d|d<   n8|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<   |                    dd̦           |                    ddΦ           |                    ddЦ           |                    ddЦ           |                    dt+          dӦ                     |                    dt+          dզ                     t+          j        |d                   |d<   t+          j        |d                   |d<   |d         d#k    rAd|d<   d|d<   |                    dd̦           |                    dd֦           |                    ddΦ           |                    ddЦ           |                    ddЦ           |                    dt+          dצ                     |                    dt+          dئ                     |                    dt+          d٦                     t+          j        |d                   |d<   t+          j        |d                   |d<   t+          j        |d                   |d<   d|vrd|d<   |d         d%k    rZd|d<   |
                    d˦          sd|d<   d|d<   n|d         |d<   |
                    dͦ          sd|d<   d|d<   n|d         |d<   |                    ddЦ           |                    ddЦ           |                    dt+          d                     |                    d|d                    |                    dd           |                    dd           |                    dd           |                    dd           |                    dt+          d                     |                    dt+          d                     |                    dd           |                    dd           |                    dd           |                    dt+          d                     t+          j        |d                   |d<   t+          j        |d                   |d<   t+          j        |d                   |d<   t+          j        |d                   |d<   t+          j        |d                   |d<   |
                    d          rFd| _        |d         dk    r|d         dk    rd|d<   |d         dk    r|d         dk    rd|d<   ||d<   	 |d                             d1          |d<   n# t2          t4          f$ r Y nw xY w	 |d                             d1          |d<   n# t2          t4          f$ r Y nw xY w	 |d                             d1          |d<   n# t2          t4          f$ r Y nw xY w|| j        v r!| j        |                             |           n|g| j        |<   dS )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.
        Tr7  N>$   rH  iconsrl  rY   rc  rd  bar_onlyrN  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_lengthrl  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_samerq  z' in conditional_format()rN  rH  z4Parameter 'type' is required in conditional_format()r/  cellIsrC  rD  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)ri  icon_setzUnknown value 'z.' for parameter 'type' in conditional_format()	directionry  rz  r{  r|  r}  r(  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
containingcontainsTextnotContains
beginsWithendsWith	yesterdaytoday	last7DayslastWeekthisWeeknextWeek	lastMonth	thisMonth	nextMonth)znot containingzbegins withz	ends withr  r  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthrN  rl  r  z5Conditional format 'value' must be a datetime object.r  rd  z7Conditional format 'minimum' must be a datetime object.rc  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().rh   total_icons4rV  5r%  r  rl  r  rg   rY   priorityr   r  r  r  r  r  r  r  r  r  r  r  is_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))ri  notContainsTextzISERROR(SEARCH("z))zLEFT(ra  z)="r  zRIGHT(zInvalid text criteria 'zFLOOR(z,1)=TODAY()-1z,1)=TODAY()tomorrowz,1)=TODAY()+1zAND(TODAY()-FLOOR(z,1)<=6,FLOOR(z,1)<=TODAY())zAND(TODAY()-ROUNDDOWN(z*,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(z,0)<(WEEKDAY(TODAY())+7))z",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(z ,0)-TODAY()<=7-WEEKDAY(TODAY()))zAND(ROUNDDOWN(z+,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(z",0)-TODAY()<(15-WEEKDAY(TODAY())))z
AND(MONTH(z)=MONTH(TODAY())-1,OR(YEAR(z)=YEAR(TODAY()),AND(MONTH(z)=1,YEAR(A1)=YEAR(TODAY())-1)))z)=MONTH(TODAY()),YEAR(z)=YEAR(TODAY()))z)=MONTH(TODAY())+1,OR(YEAR(z
)=12,YEAR(z)=YEAR(TODAY())+1)))zInvalid time_period criteria 'z	LEN(TRIM(z))=0z))>0zISERROR(rU  zNOT(ISERROR(
colorScaler  r  r  r  r  r  r  r   r  r  z#FF7128r  z#FFEF9C
percentilez#F8696Bz#FFEB84z#63BE7Br  2   autoMinx14_min_typeautoMaxx14_max_typer  z#638EC6r  Fz#FF0000#000000  r  )rS  r  r  r   rG  r?  rA  upperr'   r  r  r+  _set_icon_propsr,   r-   r  _get_dxf_indexr	  r  rT  
setdefaultr   _from_valuer   lstripKeyErrorAttributeErrorr  r  )r5   rv  rw  rx  ry  r  valid_parameterr  
valid_typecriteria_typer  valid_iconsr  
start_cellrl  r1  rN  s                    r;   conditional_formatzWorksheet.conditional_format   s   2 !!)YdCC 	2!!(HdDAA 	2?GG llnnG%
 %
 %
P ! 	 	I//O9OOOPPPrr 0
   GHHH2
H
F
 F
 ~	

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

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

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

 	
 m
  0
 ]
 +
 ]
  0
 x
 
 ]
 
  	!
" #
* 6?i'';;|,, D   r |$K7707<+@ 0 0 0   r$/0E$FGL! &'GM"|$//44 +)*&&&11#66 +)*&#33M**GKK,@,@   GG
 x"*IxIx"*IxI iHhGG
&y)<<
 G## /J#++C44J w78#4 ' 1 @ @ B BGH #/
Q
 #	/{{?++	/ {{;''	/ {{-..		/
 {{/00	/ {{455	/ {{677	/ {{;<<	/ {{?++	/ {{.//	/ {{+,,	/ {{?++	/ +/G&' 6?f$$G$EZZFz*Hz"n44"0%TE%T%TZ%T%T%T	""$55"3%O%O%O%O%O%O	""$44".%MZ%M%M&%M%MU%M%M%M	""$
22",%Nj%N%N6%N%Ne%N%N%N	""RxRRRSSS 6?l**z"k11%Gj%G%G%G	""$//%Ej%E%E%E	""$
22%Gj%G%G%G	"" $337 7 7'7 7 7 	"" $
22OZ O O)3O O O 	""
 $
22NZ N N!+N N N 	""
 $
22PZ P P!+P P P 	""
 $33V V V)V V*4V V V 	"" $339 9 9&9 9 9 	"" $33= = =)= =*4= = '= = = 	"" /WZ5H / / /   6?...!=Z!=!=!=GI6?111!=Z!=!=!=GI6?...!9J!9!9!9GI6?111!>
!>!>!>GI 6?o--*GFO !%GH #'GJ#'GK z5111z5111{A...{A...{E),<,<==={E),<,<===#(#4W[5I#J#JGK #(#4W[5I#J#JGK  6?o--*GFO !%GHz5111z<888z5111{A...{A...{E),<,<==={E),<,<==={E),<,<===#(#4W[5I#J#JGK #(#4W[5I#J#JGK #(#4W[5I#J#JGK  '))')$ 6?i'' $GH;;z** >&+
#*3''*1**=';;z** >&+
#*3''*1**='{A...{A...{E),<,<===17;3GHHHz5111666{E2223333U95E5EFFF:E)<L<LMMM8%@@@?GGG2B777/y1A1ABBB#(#4W[5I#J#JGK */*;GDV<W*X*XG&'(-(9'BR:S(T(TG$%,1,=,-- -G() 493D344 4G/0
 ;;)** 		*!%Dz"e++0D0I0I'+$z"e++0D0I0I'+$)GG	#*;#7#>#>s#C#CGK  .) 	 	 	D		#*;#7#>#>s#C#CGK  .) 	 	 	D		#*;#7#>#>s#C#CGK  .) 	 	 	D	 ***j)009999-4IDj)qs6   #s sss9 9ttt0 0uu)r   r7  rN  r  c                    i }i }|i }n|                                 }| j        rt          d           dS |                     ||dd          rdS |                     ||dd          rdS ||k    r||}}||k    r||}}t	          ||||          }t          ||dz             D ]}	t          ||dz             D ]}
| j                            |	|
f          r2| j                            |	|
f          }t          d| d| d	          | j	                            |	|
f          r2| j	                            |	|
f          }t          d| d
| d	          || j        |	|
f<   h d}|
                                D ]}||vrt          d| d            dS |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   ||z
  }|d         r|dz  }|dk     rt          d           dS |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   d|v r|d         }||d<   d |v rt          d!| d"           dS t          j        d#|t          j                  rt          j        d$|          rt          d%| d&           dS t          j        d'|          rt          d(| d&           dS t          j        d)|          st          j        d*|          rt          d+| d,           dS d-|v r8|d-         |d-<   |d-         d.|d-<   |d-                             d d.          |d-<   nd/|d-<   |}|}|                    d          r|dz  }|                    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 rF|t!          |d2                   k    r|d2         |dz
           }nd}|r|                    d5d          }|                    d6          r|d6         |d<   |d         }|                                }||v rt          d7| d&            dS d||<   |                    d8          |d9<   d:|v rj|d:         rb|d:         }|                    d;          r|                    d;          }|                     |          }|                     |d          }||d:<   |                    d<          r|d<         }|d=k    rd>}|d?k    rd@}t-          g dA          }||v r|                     ||d                   }n|                     |d          }||dB<   dC}||d<<   |                    dDd          }|                     |||||           nM|                    dE          r8|dE         }||dE<   |                     ||||                    d5                     ||                                |d5<   |||dz
  <   |d2                             |           |d         r$|                     |||d         |d9                    |dz  }dF|v r|dF         }d}t          ||dz             D ]}	d} t          ||dz             D ]|}
|t!          |          k     rb| t!          ||                   k     rI||         |          }!| |v r|                     |	|
|!||                     n|                     |	|
|!d           | dz  } }|dz  }t;          t          ||dz                       D ]h\  }}|d2         |         }"|"rS|"d:         rK|                    |          }#|"d:         }t          ||dz             D ]}	|                     |	|||#           i| j                            |           |d         r{t          ||dz             D ]g}
| j                            ||
f          r;| j                            ||
f          \  }$}%|$dGk    rt          dH| dI|% d	          dJ|f| j        ||
f<   hdS )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  Tr7  r   zTable range 'rE  rD  rC  >   r  rv   stylecolumns	total_rowrM  
header_rowbanded_rowslast_columnfirst_columnbanded_columnsrq  ' in add_table()rN  r0  r/  rM  r   z1Must have at least one data row in in add_table()r2  Fshow_first_colr1  show_last_colshow_row_stripesr3  show_col_stripesheader_row_countr.  totals_row_shownrv    zName 'z&' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz*Invalid Excel characters in add_table(): 'rR  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,  rg   TableStyleMedium9r  a_ranger-  Column)	idrv   total_stringtotal_functioncustom_totaltotal_valueri  rY   name_formatrY   r   z'Duplicate header name in add_table(): 'header_formatrD  ri  r(  rA  
count_nums	countNumsstd_devstdDevr  rG  countr  r  rI  sumvarrB  rv  rC  r@  r  rI  zTable autofilter range 'z0' overlaps previous Worksheet autofilter range 'r   ) r  rz   r   rS  r,   r  r   r  r!   r   r  r.  r/  UNICODEr  rA  rT  lowerr+  r"  r  rt  set_table_function_to_formular,  r3  r  r  r:  	enumerater   r   )&r5   rv  rw  rx  ry  r  r   col_formatsr  r&  rS   rF  r%  r  num_rowsrv   first_data_rowlast_data_rowcol_id
seen_namesr.  col_data	user_dataxformatheader_nameri  function	subtotalsrl  r@  r  ijr4  column_dataformula_formatr   r   s&                                         r;   	add_tablezWorksheet.add_table  s   2 ?GG llnnG 	HIII2 !!)YdCC 	2!!(HdDAA 	2 x%-yYx%-yY iHhGG
HqL11 	: 	:CY155 : :#''c
33 %)%5%9%93*%E%EN*;
 ; ;(6; ; ;  
 $((#s44 %)%6%:%:C:%F%FN*;
 ; ;(6; ; ;  
 0: #s,,:$
 
 
 ! 	 	I//F9FFFGGGrr 0
 ")]D!A!A 'L$ ? ? 'L$ ? ? i'<  	MHa<<DEEE2 #*++ne"D"D!(]E!B!Bo$+KKu$E$E !$+KK0@%$H$H !$+KKa$@$@ !$+KKU$C$C ! W6?D E&Md{{JdJJJKKKr 8/rzBB bhG G  I$IIIJJJr x:DAA LTLLLMMMr xT** bh7NPT.U.U OdOOOPPPr g$W-E'NW~%!#g #7^33C<<E'NN0E'N # ;;|$$ 	 aN;;{## 	QM ")Y(KKg#Iy-RRi |$ 	&$%GL! <  	3"'	"2E, i
Y155 x	 x	G  3v;;. ""$ " #
 
H G##S!34444 '	 26A: >II $I W6'mmHd;;G !}}X.. ?+4X+>( #+6"2K&,,..Dz))NtNNNOOO!rr'+Jt$.7mmO.L.LH]+ !I--)I2F-"+I"6 #--c22 :&-nnS&9&9G #'"="=g"F"F #'"7"7"F"F.5+ !}}%566 *#,-=#>#|33'2H#y00'/H$'	 	 	% %	 $y00&*&E&E ((6*:' 'GG '+&;&;Hd&K&KG7>H^4'/H5=!12 )mQ ? ?++HgwQVWWWW"~66 '0'@3?0**$g|Y]]8=T=T  
 *-4-C-C-E-E* /6K
+ )##H--- |$ ""w(8(=:Q   aKFF W6?DA^]Q->?? 
 
 HqL99  C3t99}}Sa\\)9)9 $Q
++ KKS%QHHHH KKS%>>>FAAQ  )y(Q,)G)GHH 	O 	OOFG	*62K O{95 O!,!8!8%i0 1BCC O OC''Wg~NNNN 	5!!! <  	LY155 
L 
L$(()S)9:: 040A0E0EyRUFV0W0W-K"k11.Lz L L;GL L L  
 8?
6K!9c"233qr?   c                 	   |                      ||dd          rdS dt          ||          gi}|i }h d}|                                D ]}||vrt          d| d            dS d|vrt          d	           d
S |                    dd          }|dvrt          d           d
S |dk    rd}||d<   d|v r3t          |d         t                    r|d         |d<   n|d         g|d<   t          |d         t                    r|d         |d<   n|d         g|d<   t          |d                   }t          |d                   }	||	k    rt          d           d
S t          |d                   |d<   t          | j	                  }
g }|d         D ]N}|
                    dd          }|                    d          }d|vr|
dz   |z   }|                    |           O||d<   g }|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,k    rd-|d.<   n|d/k    rd0|d.<   nd1|d.<   |                    d2          }|rd|vr|
dz   |z   }||d2<   |                    d3d-          }t          |          }|d4         |d5<   |d         |d6<   |d#         |d7<   |d          |d8<   |d"         |d9<   |d         |d:<   |d         |d;<   |                     ||d5           |                     ||d6           |                     ||d7           |                     ||d8           |                     ||d9           |                     ||d:           |                     ||d;           | j                            |           d-S )<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.

        Tr7  	locationsN>   r  r  axisrH  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_pointsrq  z' in add_sparkline()r  z0Parameter 'range' is required in add_sparkline()rN  rH  line)r{  columnwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()r}  stackedrj  rangeszMMust have the same number of location and range parameters in add_sparkline()rK  r  rg   r(  !ro  highrm  lowrz  negativert  firstrq  lastrh  r  r  rf  ri  rv  r   rg  rr  zeror   emptyconnectspangaprk  r,  seriesrw  ry  rx  rs  rp  rn  rl  )rS  r-   r  r   r  rG  r  rT  r(   rv   r  r"  r  r%   _set_spark_colorr   )r5   r&  rS   r  	sparkliner  r  
spark_typerange_countlocation_count	sheetname
new_rangesspark_rangenew_locationsrj  r  
date_rangestyle_idr,  s                      r;   add_sparklinezWorksheet.add_sparkline[  s   ( !!#sD$77 	2 #4S##>#>"?@	?G
 
 
< ! 	 	I 000J9JJJKKKrr 1
 '!!CDDD2 [[00
;;;3   2##"J&	&   '*-t44 ?)0)<	+&&*1**=)>	+&gg&-- 	5")'"2Ih#*7#3"4Ih)H-..Y{344 .((0   2 !;!788	' $DI..	 
$X. 	+ 	+K%--c266K &,,S11K +%%'#o;k****(	( !+. 	+ 	+H''R00H  ****!.	+ $KK55	&";;{33	% ',= > >	*$[[77	'#KK55	&&{{955	)";;u--	%";;u--	%#KK//	&&{{955	)%kk-88	(%kk(33	( M2..F??!"Igi!'Ig!&Ig [[--
 	6#Z//"S:5J!+	+ ;;w**$X..$)(O	.!&+J&7	"#%*9%5	/"#(>	- "'-	,"'-	,!&u	+ 	i.AAAi2BCCCi/BBBi-@@@i,???i,???i+>>>y)))qr?   c                     d}t          ||          }||k    r||}}||k    r||}}t          ||||          }|dk    rdS |||gg| _        dS )a  
        Set the selected cell or cells in a worksheet

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

        Returns:
            0:  Nothing.
        NA1)r-   r,   r   )r5   rv  rw  rx  ry  paneactive_cellsqrefs           r;   set_selectionzWorksheet.set_selection  s|       (	9== x%-yYx%-yYIxBB D==F +u56r?   c                 L    |dk    r|dk    rdS t          ||          | _        dS )z
        Set the first visible cell at the top left of a worksheet.

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

        Returns:
            0:  Nothing.
        r   N)r-   r   )r5   r&  rS   s      r;   set_top_left_cellzWorksheet.set_top_left_cellB  s2     !88qF.sC88r?   r   visiblesymbols_belowsymbols_right
auto_stylec                 L    || _         || _        || _        || _        d| _        dS )a  
        Control outline settings.

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

        Returns:
            0:  Nothing.
        TN)r   r   r   r   r   )r5   r  r  r  r  s        r;   outline_settingszWorksheet.outline_settingsT  s1    * "**'#r?   top_rowleft_col	pane_typec                 .    ||}||}|||||g| _         dS )at  
        Create worksheet panes and mark them as frozen.

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

        Returns:
            0:  Nothing.

        N)r   )r5   r&  rS   r  r  r  s         r;   freeze_paneszWorksheet.freeze_panesp  s/    , ?GH39=


r?   xyc                 8    |                      ||||d           dS )a  
        Create worksheet panes and mark them as split.

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

        Returns:
            0:  Nothing.

        r  N)r  )r5   r  r  r  r  s        r;   split_paneszWorksheet.split_panes  s&    , 	!Q155555r?   rl   r   c                 p    |dk     s|dk    rt          d| d           d}t          |          | _        dS )z
        Set the worksheet zoom factor.

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

        Returns:
            Nothing.

        
     zZoom factor 'z"' outside range: 10 <= zoom <= 400rl   N)r   r3   r   )r5   r   s     r;   set_zoomzWorksheet.set_zoom  sE     "99s

IIIIJJJDII			r?   c                     d| _         dS )z
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   r!  r   r5   r  s     r;   set_tab_colorzWorksheet.set_tab_color  s     *511r?   rg   passwordc                 :   |dk    r|                      |          }|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}|                                D ]%}||v r||         ||<   t          d| d           &||d<   || _        dS )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.

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

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

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

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

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

        )checkboxset_checkboxr  r  r@  r  s        r;   insert_checkboxzWorksheet.insert_checkboxa  s    &  	'{3 	'$$&&&  	7/ </3/G/G/I/I,,99;;;6K""3WkBBBr?   c                 "    d| _         d| _        dS )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr   r   r  s    r;   set_landscapezWorksheet.set_landscape       "&r?   c                 "    d| _         d| _        dS )z
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr  r  s    r;   set_portraitzWorksheet.set_portrait  r  r?   view)r   r   r  c                     || _         dS )z
        Set the page view mode.

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

        Returns:
            Nothing.

        Nr
  )r5   r  s     r;   set_page_viewzWorksheet.set_page_view  s     r?   c                     d| _         dS )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)r   r   )r5   r   s     r;   	set_paperzWorksheet.set_paper  s+      	+(DO&*D###	+ 	+r?   c                 "    d| _         d| _        dS )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r   r   r  s    r;   center_verticallyzWorksheet.center_vertically  r  r?   ri   rj   leftrightr  r  c                 >    || _         || _        || _        || _        dS )z
        Set all the page margins in inches.

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

        Returns:
            Nothing.

        N)r   r   r   r   )r5   r  r  r  r  s        r;   set_marginszWorksheet.set_margins  s)    (  !#r?   r   c                    |}|                     dd          }t          |          dk    rt          d           dS |t          |t                    sd|i}ni }|                                }|||d<   g | _        |                    d          rb|                    d          |d	<   |                     |                    d          |          }d
|_	        | j        
                    |           |                    d          rb|                    d          |d	<   |                     |                    d          |          }d|_	        | j        
                    |           |                    d          rb|                    d          |d	<   |                     |                    d          |          }d|_	        | j        
                    |           |                    d          }t          | j                  }||k    r!t          d| d| d|            g | _        dS d|v r|d         | _        d|v r|d         | _        || _        |                    dd          | _        d| _        |r	d| _        dS dS )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_docrk   T)r  rT  r   rG  r   r  r   r  r  _header_positionr  rK  r   r   r   r   r   r   )r5   r   r  r  header_origr  placeholder_countimage_counts           r;   
set_headerzWorksheet.set_header      d33v;;VWWWFgt,, .#W-G ,,..  &GH  ;;|$$ 	-$+KK0A$B$BGL!++GKK,E,EwOOE%)E"%%e,,,;;~&& 	-$+KK0C$D$DGL!++GKK,G,GQQE%)E"%%e,,,;;}%% 	-$+KK0B$C$CGL!++GKK,F,FPPE%)E"%%e,,,"LL..$,--++HK H H+H H:EH H   "$DF7**(/0D(ED%w&&(/0@(AD%$[[377%)" 	'"&D	' 	'r?   r   c                    |}|                     dd          }t          |          dk    rt          d           dS |t          |t                    sd|i}ni }|                                }|||d<   g | _        |                    d          rb|                    d          |d	<   |                     |                    d          |          }d
|_	        | j        
                    |           |                    d          rb|                    d          |d	<   |                     |                    d          |          }d|_	        | j        
                    |           |                    d          rb|                    d          |d	<   |                     |                    d          |          }d|_	        | j        
                    |           |                    d          }t          | j                  }||k    r!t          d| d| d|            g | _        dS d|v r|d         | _        d|v r|d         | _        || _        |                    dd          | _        d| _        |r	d| _        dS dS )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  rk   T)r  rT  r   rG  r   r  r   r  r  r  r  rK  r   r   r   r   r   r   )r5   r   r  r  footer_origr  r	  r
  s           r;   
set_footerzWorksheet.set_footerT  r  r?   c                 t    ||}|dz  }|dz  }d| d| }t          | j                  }|dz   |z   | _        dS )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:$r  )r(   rv   r   )r5   rv  rx  rK  r  s        r;   repeat_rowszWorksheet.repeat_rows  sb      H 	Q	A +9**** $DI..	 )C$ 6r?   c                     ||}t          |d          }t          |d          }|dz   |z   }t          | j                  }|dz   |z   | _        dS )z
        Set the columns to repeat at the left hand side of each printed page.

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

        Returns:
            Nothing.

        Nr   rB   r  )r*   r(   rv   r   )r5   rw  ry  rK  r  s        r;   repeat_columnszWorksheet.repeat_columns  sg      H #9a00	!(A.. 3) $DI..	 )C$ 6r?   optionc                     |dk    rd| _         d| _        d| _        dS |dk    rd| _         d| _        dS d| _         d| _        dS )a1  
        Set the option to hide gridlines on the screen and the printed page.

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

        Returns:
            Nothing.

        r   r   TN)r   r   r   )r5   r  s     r;   hide_gridlineszWorksheet.hide_gridlines  s`     Q;;#$D $%D!)-D&&&q[[#$D $%D!!!#$D $%D!!!r?   c                 "    d| _         d| _        dS )z
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

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

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r  s    r;   hide_row_col_headerszWorksheet.hide_row_col_headers   s      $r?   c                     |dk    r$|dk    r|| j         dz
  k    r|| j        dz
  k    rdS |                     ||||          }|| _        dS )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   r7  )r   r   rJ  r   )r5   rv  rw  rx  ry  rK  s         r;   
print_areazWorksheet.print_area  sg    , NNQDOa///DOa///2 &&y)XxPP $qr?   c                 "    d| _         d| _        dS )z
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)r   r   r  s    r;   print_acrosszWorksheet.print_across0  s     "&r?   c                 >    d| _         || _        || _        d| _        dS )a  
        Fit the printed area to a specific number of pages both vertically and
        horizontally.

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

        Returns:
            Nothing.

        r   TN)r   r   r   r   )r5   r  r8  s      r;   fit_to_pageszWorksheet.fit_to_pages>  s'      "&r?   
start_pagec                     || _         dS )z
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r   )r5   r$  s     r;   set_start_pagezWorksheet.set_start_pageP  s     %r?   scalec                     |dk     s|dk    rt          d| d           dS d| _        t          |          | _        d| _        dS )z
        Set the scale factor for the printed page.

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

        Returns:
            Nothing.

        r  r  zPrint scale 'z#' outside range: 10 <= scale <= 400Nr   T)r   r   r3   r   r   )r5   r'  s     r;   set_print_scalezWorksheet.set_print_scale]  sY     2::KKKKLLLF u::"&r?   c                 "    d| _         d| _        dS )z
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r   r  s    r;   print_black_and_whitezWorksheet.print_black_and_whites  s      "&r?   breaksc                     || _         dS )z
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r   r5   r,  s     r;   set_h_pagebreakszWorksheet.set_h_pagebreaks       r?   c                     || _         dS )z
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r   r.  s     r;   set_v_pagebreakszWorksheet.set_v_pagebreaks  r0  r?   rv   c                 Z    |	|| _         dS dt          | j        dz             z   | _         dS )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  rA  rw   )r5   rv   s     r;   set_vba_namezWorksheet.set_vba_name  s9      $D '#dj1n*=*= =Dr?   c                     |dS |                                 }h d}|                                D ]}||vrt          d| d            dS || _        dS )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.

        Nr7  >	   
eval_errorformula_rangeformula_differsformula_unlockedcalculated_columntwo_digit_text_yearempty_cell_referencelist_data_validationnumber_stored_as_textrq  z' in ignore_errors()r   )r  r  r   r   )r5   r  r  r  s       r;   ignore_errorszWorksheet.ignore_errors  s     ?2 ,,..

 

 

 ! 	 	I 000J9JJJKKKrr 1 &qr?   c                 V   |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        r]t;          j        | j                  \  }}t?          j         |           || _!        tE          |dd          | _#        | j#        | _$        d S d S )Nrv   rw   rx   r  rz   r{   r  r  r  r  r  r  r  r  r   r  r  r"  r$  g     )@   rj   r         ?F)dirzw+utf-8modeencoding)%rv   rw   rx   r  rz   r{   r  r  r  r  r  r  r  r  r   r  r  r"  r$  r   r   r   r   r   r   r   r   r   r   tempfilemkstemposcloser  openr  r  )r5   	init_datafdfilenames       r;   _initializezWorksheet._initialize  s   f%	w'
";/'(89():;)";/"+,@"A#,-B#C ():;!*+>!?#,-B#C "+,@"A#,-B#C ():;():;'(89$-.D$E!():; 
	.',D$&+D#&(D##D $DDO!"D!$D!$D(-D%  
	' &-$+>>>NRHRLLL%-D"#H4'JJJD &DGGG
	' 
	'r?   c                 &   |                                   |                                  |                                  |                                  |                                  |                                  |                                  | j        s|                                  n| 	                                 | 
                                 |                                  | j        r|                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                      d           | !                                 d S )NrI  )"_xml_declaration_write_worksheet_write_sheet_pr_write_dimension_write_sheet_views_write_sheet_format_pr_write_colsrz   _write_sheet_data_write_optimized_sheet_data_write_sheet_protection_write_protected_rangesr   _write_phonetic_pr_write_auto_filter_write_merge_cells_write_conditional_formats_write_data_validations_write_hyperlinks_write_print_options_write_page_margins_write_page_setup_write_header_footer_write_row_breaks_write_col_breaks_write_ignored_errors_write_drawings_write_legacy_drawing_write_legacy_drawing_hf_write_picture_write_table_parts_write_ext_listr  
_xml_closer  s    r;   _assemble_xml_filezWorksheet._assemble_xml_file	  s    	 	 	 	 	!!! 	##%%% 	 # 	/""$$$$,,... 	$$&&& 	$$&&&  	&##%%% 	!!! 	!!! 	''))) 	$$&&& 	    	!!### 	  """ 	    	!!### 	    	    	""$$$ 	 	""$$$ 	%%''' 	 	!!! 	 	+&&& 	r?   c                 R   |dk     s|dk     rdS || j         k    s|| j        k    rdS |s|s| j        r|| j        k     rdS |s2| j        || j        k     r|| _        | j        || j        k    r|| _        |s2| j        || j        k     r|| _        | j        || j        k    r|| _        dS rR  )r   r   rz   r  r   r   r   r   )r5   r&  rS   r  r  s        r;   rS  zWorksheet._check_dimensionsm  s     77cAgg2$/!!SDO%;%;2  	* 	1E 	T&&&r 	&&#*?*?"%&#*?*?"% 	&&#*?*?"%&#*?*?"%qr?   c                 8    t          || j        | j                  S N)r$   r  r  )r5   dt_objs     r;   r  zWorksheet._convert_date_time  s    *64>4CWXXXr?   c                    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 )Nrg   r   r   r  rB   r  )r*   rA  r   r   r(   rv   )r5   	row_num_1	col_num_1	row_num_2	col_num_2range1range2rK  row_col_only
col_char_1
col_char_2
row_char_1
row_char_2r  s                 r;   rJ  zWorksheet._convert_name_area  s     $Iq11
#Iq11
3y1}---
3y1}---
 >>i4?Q+>>>FFLL!^^	T_q-@ @ @FFLL*,F*,F VLDDC<&(D $DI..	3%r?   c                     |sg S t          |          }d|v r|                    d           t          |          }|                                 d}t	          |          |k    r
|d |         }|S )Nr   i  )rP  remover  r  rT  )r5   r,  
breaks_setbreaks_listmax_num_breakss        r;   _sort_pagebreakszWorksheet._sort_pagebreaks  s      	I[[

??a   :&& {n,,%o~o6Kr?   c                 @   |sg S t          j        d          }|                    |          }g }|D ]k}|                    d          r
|dd          }|                    d          r
|d d         }|                    dd          }|                    |           l|S )Nz"(?:[^"]|"")*"|\S+r  r   r7  z"")r.  compilefindallr+  r-  r  r  )r5   r  token_rer  
new_tokensr4  s         r;   rW  z Worksheet._extract_filter_tokens  s      	I:344!!*--
 		% 		%E$$ "abb	~~c"" #crc
MM$,,Ee$$$$r?   c                 z   t          |          dk    r|d         }t          j        d|          rd}n.t          j        d|          rd}nt          d| d| d	           |                     ||dd                   }|                     ||d
d                   }||gz   |z   S |                     ||          S )Nr  rh   z(and|&&)r   z	(or|\|\|)r   Token 'z3' is not a valid conditional in filter expression 'rR  rV  )rT  r.  r/  r   _parse_filter_tokens)r5   r  r  conditionalexpression_1expression_2s         r;   rX  z"Worksheet._parse_filter_expression  s     v;;! !)Kx
K00 ,44 ;k ; ;-7; ; ;  
  44Z!MML44Z!MML;-/,>>((V<<<r?   c                    ddddddddddddd}|                     |d         d           }|d         }t          j        d|d	                                                   rt	          |d                   }|dk     s|d
k    rt          d| d| d           |                                }|dvrt          d| d| d           |d	                                         dk    rd}nd}|d         dk    r|dz  }t          |          }|s$|d	         rt          d|d	          d| d           t          j        d|                                          rR|dvrt          d|d          d| d           |                                }|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   rh   rV     )r~  r(  z=~eqr  z!~ner  r  r  r  r  z
top|bottomr   i  zThe value 'z' in expression 'z' must be in the range 1 to 500)r*  %z
The type 'z ' must be either 'items' or '%%'r     r  r  r  z0' is not a valid operator in filter expression 'rD  zblanks|nonblanks)r  r%  zThe operator 'z0' is not valid in relation to Blanks/NonBlanks'.r  r;  z[*?]   )r  r.  r/  rO  r3   r   rA  rq  )r5   r  r  	operatorsoperatorr4  rl  s          r;   r  zWorksheet._parse_filter_tokens  s   
 
 
	 ==D11q	 8L&)//"3"344 	q	NNEqyyECKK5% 5 5* 5 5 5  
 KKMMEN**6 6 6 6 6 6  
 ay  E))ayCAJJE 	F1I 	8%( 8 8)38 8 8   8&66 	 v%%FVAY F F F F F  
 KKMME   q==Eq== H$EE HE q==RYvu55=H%  r?   c                     d}|d d d         D ]%}|dz	  dz  |dz  dz  z  }|t          |          z  }&|dz	  dz  |dz  dz  z  }|t          |          z  }|dz  }|dS )Nr   r7     r   rf   iK  X)ordrT  )r5   r  digestr  s       r;   r  zWorksheet._encode_passwordk  s    
 TTrTN 	  	 D|t+10FGFc$iiFFR<4'Vq[F,BC#h--&}}r?   c                     t          |t                    r|}nC|2|                    d          rt          |d                   }||_        nt          |          }|S )Nr  )rG  r   r  
image_name)r5   r  r  r  s       r;   r  zWorksheet._image_from_source|  sa     fe$$ 	"EE W[[%>%> ',/00E%E&MMEr?   r  image_id
drawing_idc           	         |j         |j        z  }|j        |j        z  }|d|j        z  z  }|d|j        z  z  }|                     |j        |j        |j	        |j
        |||j                  }t          d|dz  z             }t          d|dz  z             }| j        sMt                      }d|_        || _        | j                            ddt%          |          z   dz   d g           n| j        }t'                      }t(          j        |_        ||_        |j        |_        ||_         ||_        d |_        |j        |_        d|_        |j        |_        |j        |j        |_        |j        r|j        }	|	                                }
|	                                 }| j!        "                    |	j#                  s| j$                            d	|
|g           | %                    |	j#                  |	_        |	|_        | j!        "                    |j&                  s7| j$                            d
dt%          |          z   dz   |j'        z   g           | %                    |j&                  |_        |(                    |           d S )Ng      X@rC  5%  r   /drawing../drawings/drawing.xmlr   
/hyperlink/image../media/image.))_width_x_scale_height_y_scale_x_dpi_y_dpi_position_object_emusr  r  	_x_offset	_y_offset_anchorr3   r   r   embeddedr   r  rA  r   r   IMAGE_drawing_type_dimensionsr  _description_shape
_rel_index_decorativer  _url_target_target_moder   r  _linkr   _get_drawing_rel_index_digest_image_extension_add_drawing_object)r5   r  r  r  r  r8  
dimensionsr   drawing_objectr  targettarget_modes               r;   _prepare_imagezWorksheet._prepare_image  s    u~-/ 	$$$%%//JJOOM
 

 C54<())SFTM*++ | 		#iiG G"DL'..2S__DvMtT    lG$'3'9$%/"&+&6# %!' $!&$%!%*%6"(*/*;N': 		&*C[[]]F**,,K$((33 O"))<*MNNN!88CCCN"%N $$U]33 	%%$s8}}4s:U=SS   %)$?$?$N$N!##N33333r?   c                 L   | j         |         \  }}}}}}}	}
}}}|                    d| j        dz            }|                    d| j        dz            }||z  }||z  }|                     |||||||
          }t          d|dz  z             }t          d|dz  z             }| j        sMt                      }d|_        || _        | j	        
                    dd	t          |          z   d
z   d g           n| j        }t          dd|          }|	|_        t                      }t          j        |_        ||_        ||_        ||_        ||_        ||_        |
|_        d|_        ||_        t5          j        |          }|r|                                }|                                }| j                            |j                  s| j         
                    d||g           | !                    |j                  |_        ||_"        |#                    |           d S )Nr  rh   r8  r  rC  r  r   r  r  r  rectTextBoxr   r  )$r   r  r   r   r  r3   r   r   r  r   r  rA  r#   r  r   r   SHAPEr  r  r  r  r  r  r  r  r  r   from_optionsr  r  r   r  r   r  r  r  )r5   rw   r  r&  rS   r  r  r  r  r  r  r  r  r  r  r8  r  r   shaper  r  r  r  s                          r;   _prepare_shapezWorksheet._prepare_shape  sO    K	
 GT%<q%@AAXt'>'BCC'//h%
 


 C54<())SFTM*++ | 		#iiG G"DL'..2S__DvMtT    lGfi11
$'3'9$%/" %!'&1# %!'$%!%/"w'' 	&[[]]F**,,K$((33 O"))<*MNNN!88CCCN"%N##N33333r?   c                 d   t          j        dd|j                  |_        | j                            |j                  s7| j                            ddt          |          z   dz   |j	        z   g           | 
                    |j                  |_        | j                            |           d S )Nz\..*$rg   r  r  r  )r.  r  r  r   r  r  r   r  rA  r  _get_vml_drawing_rel_index_ref_idr   )r5   r  r  s      r;   _prepare_header_imagezWorksheet._prepare_header_image  s     6(B0@AA$((77 	"))$s8}}4s:U=SS   77FF&&u-----r?   c                 j    | j                             ddt          |          z   dz   |z   g           d S )Nr  r  r  )r   r  rA  )r5   r  image_extensions      r;   _prepare_backgroundzWorksheet._prepare_background/  sE    &--'#h--7#=OP	
 	
 	
 	
 	
r?   c           
         | j         |         \
  }}}}}}	}
}}}|dz
  |_        t          d|j        |	z  z             }t          d|j        |
z  z             }|                     |||||||          }|j        }| j        sLt                      }d|_	        || _        | j
                            ddt          |          z   dz   g           n| j        }t                      }t          j        |_        ||_        ||_        ||_        ||_        d |_        ||_        |                                 |_        ||_        ||_        |                    |           | j                            ddt          |          z   dz   g           d S )Nr   rC  r  r  r  z/chartz../charts/chart)r   r?  r3   r  r8  r  
chart_namer   r   r  r   r  rA  r   r   CHARTr  r  r  r  _namer  r  r  r  r  r  r  r   )r5   rw   chart_idr  r&  rS   r  r  r  r  r  r  r  r  r  r8  r  rv   r   r  s                       r;   _prepare_chartzWorksheet._prepare_chart5  s    K	
 a< C5;0122SEL72344//h%
 


  | 		#iiG G"DL'..2S__DvMN    lG$'3'9$%/" %!'# $!'$($?$?$A$A!&1#%/"##N333!!(3x==86AB	
 	
 	
 	
 	
r?   c           
      b   |                      |||||||          \
  }}}}}}	}
}}}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 )NrC  r  )_position_object_pixelsr3   )r5   	col_start	row_startx1y1r  r8  r  col_endrow_endx2y2x_absy_abss                 r;   r  zWorksheet._position_object_emuso  s    ( ((y"b%
 
	
 tby!!tby!!tby!!tby!!C$,&''C$,&''9b"gwBuUUr?   c           
      j   d}d}	|dk     r2|dk    r,||                      |dz
            z  }|dz  }|dk     r|dk    ,|dk     r2|dk    r,||                     |dz
            z  }|dz  }|dk     r|dk    ,t          d|          }t          d|          }| j        r+t	          |          D ]}
||                      |
          z  }n|| j        |z  z  }||z  }| j        r+t	          |          D ]}|	|                     |          z  }	n|	| j        |z  z  }	|	|z  }	||                      ||          k    r7||                      |          z  }|dz  }||                      ||          k    7||                     ||          k    r7||                     |          z  }|dz  }||                     ||          k    7|}|}|                      ||          dk    r||z   }|                     ||          dk    r||z   }||                      ||          k    r8||                      ||          z  }|dz  }||                      ||          k    8||                     ||          k    r8||                     ||          z  }|dz  }||                     ||          k    8|}|}||||||||||	g
S r2   )	_size_col	_size_rowr  r   r  r   r   r   )r5   r  r  r  r  r  r8  r  r  r  rW  row_idr  r  r  r  s                   r;   r  z!Worksheet._position_object_pixels  sI   (  1ffQ$..Q///BNI 1ffQ
 1ffQ$..Q///BNI 1ffQ
 BZZBZZ   	9	** 0 0///0 T,y88E   	9	** 0 0///0 T,y88E DNN9f5555$..+++BNI DNN9f5555
 DNN9f5555$..+++BNI DNN9f5555
  >>)V,,q00BJE>>)V,,q00b[F t~~gv6666T^^GV444EqLG t~~gv6666
 w7777dnnWf555FqLG w7777
 9b"gwBuUUr?   c                    d}d}d}|| j         v rr| j         |         d         }| j         |         d         }|| j        }|r	|dk    rd}n?|dk     rt          |||z   z  dz             }n t          ||z  dz             |z   }n| j        }|S )Nr  r%  r   r  rV  r   rC  )r   r   r3   r   )r5   rS   r  max_digit_widthpaddingpixelsr  r   s           r;   r  zWorksheet._size_col  s      $-M#&q)E]3'*F}.  F&A++Uo&?@3FGGU_4s:;;gE,Fr?   c                     d}|| j         v rD| j         |         d         }| j         |         d         }|r	|dk    rd}n*t          d|z            }nt          d| j        z            }|S )Nr   r   rV  gUUUUUU?)r   r3   r   )r5   r&  r  r  r8  r   s         r;   r  zWorksheet._size_row/  s    
  $.  ^C(+F^C(+F 1&A++Y/00T%<<==Fr?   c                 <    d}d}|dk    r	|||z   z  }n||z
  |z  }|S )Ng      @g      @   rQ   )r5   r  r  r  r  s        r;   r  zWorksheet._pixels_to_widthD  s:    R<<o78EEg%8Er?   c                     d|z  S )Nrj   rQ   )r5   r  s     r;   r=  zWorksheet._pixels_to_heightP  s    f}r?   c           	          d}|                      |j        |j        |j        |j        |j        |j        |          }|                    |j                   |                    |j                   |S Nr   )r  	start_col	start_rowr  r  r  r8  r  )r5   r  r  verticess       r;   _comment_verticeszWorksheet._comment_verticesT  sp    //MN
 
 	&&&'''r?   r  c           	          d}|                      |j        |j        |j        |j        |j        |j        |          }|                    |j                   |                    |j                   |S r  )r  rS   r&  r  r  r  r8  r  )r5   r  r  r  s       r;   _button_verticeszWorksheet._button_verticesg  sl    //JJOOLM
 
 	%%%&&&r?   c                 R   g }t          | j                                                  }|D ]}t          | j        |                                                   }|D ]j}	| j        |         |	         }
|                     |
          |
_        |
j        | j        |
_        |
j        | j        |
_        |	                    |
           k| j
        D ]}|                     |          |_        | j        	                    ddt          |          z   dz   g           | j        r6|| _        | 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  rr   r   ra  )r&  r   r  r  r  
is_visibler   r  r   r  r   r  r   rA  r   r   r   rT  r  r3   r  r   )r5   r  r   vml_drawing_id
comment_idr   row_numsr&  col_numsrS   r  r  rK  start_data_idr_  data_ids                   r;   _prepare_vml_objectszWorksheet._prepare_vml_objectsz  s     $-,,..// 	) 	)CdmC0557788H ) )-,S1#'#9#9'#B#B  %-)-)>G& >)%)%9GN(((() ' 	< 	<F"33F;;FOO&&4s>7J7JJVST	
 	
 	
  	!)D'..mc*oo=FG   H# s54<(()) 	5 	5A#a'!+G(44744KK&(r?   c                 r    || _         | j                            ddt          |          z   dz   g           d S )Nr  r  r  )r   r   r  rA  )r5   r   r  s      r;   _prepare_header_vml_objectsz%Worksheet._prepare_header_vml_objects  sL     +&&4s>7J7JJVST	
 	
 	
 	
 	
r?   c                 X   | j         D ]}||d<   |                    d          dt          |          z   |d<   |d                                         }||v rt	          d|d          d          d||<   | j                            ddt          |          z   d	z   g           |d
z  }d S )Nr?  rv   TablezDuplicate name 'z ' used in worksheet.add_table().Tz/tablez../tables/tabler  r   )r   r  rA  rO  r    r   r  )r5   table_idseenr   rv   s        r;   _prepare_tableszWorksheet._prepare_tables  s    [ 	 	E"E$Kyy  ( '#h-- 7f =&&((Dt||(VuV}VVV   DJ %,,,s8}}<vEF   MHH+	 	r?   c           	      "   d}|                     dd          }|                     dd          }|                     dd          }|                     dd	          }d
dddddddd}||v r||         }d| d| d}nt          d| d           |S )Nrg   rR  z''r  z'#]z'][z'[e   f   g   h   i   k   m   n   rJ  z	SUBTOTAL(z,[z])zUnsupported function 'r4  )r  r   )r5   r]  col_nameri  r^  func_nums         r;   rQ  z$Worksheet._table_function_to_formula  s     ##C..##C..##C..##C.. 	
 	
	 y   *H:(::h:::GGD(DDDEEEr?   c                 L    ||vrd S t          j        ||                   ||<   d S ru  )r   r!  )r5   r  r  
user_colors       r;   r  zWorksheet._set_spark_color  s2    W$$F % 1'*2E F F	*r?   c                 z   | j         rdS g }t          ||dz             D ]}|| j        vr|                    d            "t          ||dz             D ]}|| j        |         v r| j        |         |         }|j        j        }	|	dv r|                    |j        d           Q|	dk    r7|j        }
| j        	                    |
          }|                    |           |	dv r!|j
        }|d}|                    |           |	dk    r|                    d	           |                    d            |S )
NrQ   r   r[   r_   r  r\   r#  r   rX   rg   )rz   r  r   r  r%  r)  rZ  rL  rx   _get_shared_stringrl  )r5   r  r  r  r  r  r-  r.  r/  r0  rw   rL  rl  s                r;   _get_range_datazWorksheet._get_range_data  sz     	2 Y!44 %	& %	&Gdj((D!!! GaK88 & &dj111:g.w7D $ 7I $:::t{$9$9::::"h.. $!%!B!B5!I!IF++++"&AAA $
 =$%EE****"g--B KK%%%%?&B r?   c                 D    d |D             }d                     |          S )Nc                 Z    g | ](}t          |t                    st          |          n|)S rQ   )rG  rA  )rR   items     r;   rT   z'Worksheet._csv_join.<locals>.<listcomp>.  s1    TTTd*T3"7"7ATTTTTr?   ra  )r  )r5   r*  s     r;   r  zWorksheet._csv_join*  s(     UTeTTTxxr?   c                    t          j        d|          r|S |                    dd          }|                    dd          }|                    dd          }|                    dd	          }|                    d
d          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|S )Nz%[0-9a-fA-F]{2}r  z%25r  z%22r;  z%20r  z%3cr  z%3er  z%5br  z%5d^z%5e`z%60ro  z%7br)  z%7d)r.  rq  r  )r5   r  s     r;   _escape_urlzWorksheet._escape_url2  s    9&,, 	J kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%
r?   c                     || xj         dz  c_         | j         S | j                            |          r| j        |         S | xj         dz  c_         | j         | j        |<   | j         S Nr   )r   r   r  r5   r  s     r;   r  z Worksheet._get_drawing_rel_indexF  sx    >  A%  ''  (( 	-$V,,!$($8&!##r?   c                     | j                             |          r| j         |         S | xj        dz  c_        | j        | j         |<   | j        S r0  )r   r  r  r1  s     r;   r  z$Worksheet._get_vml_drawing_rel_indexS  sV     $$V,, 	1(00  A%  (,(@f%''r?   c                    | j         }|                    d           |j        r|                    d           |j        r|                    d           |j        r|                    d           |j        r|                    d           |j        r|                    d           |j        r| 	                    |j                   |j
        dk    r|                     d           |j
        d	k    r|                     d
           |                    dd|j        fg           |j        dk    rn|j        r|                     dd|j        fg           n{|j        r|                     dd|j        fg           nU|j        r7|j        }|j        s(|                     d|                                           n|                     ddg           |                    dd|j        fg           |                    dd|j        fg           |j        dk    r%|j        s|                    dd|j        fg           |                    d           d S )NrPrbr_  strikeoutlineshadowr   superscriptr  	subscriptszvalr7  r  themeindexed)r=  r   rFontfamilyCalibrischeme)r  r  bold_xml_empty_tagitalicfont_strikeoutfont_outlinefont_shadow	underline_write_underlinefont_script_write_vert_align	font_sizer=  _write_rstring_colorcolor_indexed
font_color_is_automatic_attributes	font_namefont_family	hyperlinkfont_schemer  )r5   	xf_format
xml_writerr  s       r;   r  zWorksheet._write_fontb  s   \
!!%((( > 	+%%c*** 	+%%c***# 	0%%h///! 	1%%i000  	0%%h///  	7!!)"5666  A%%""=111 A%%"";/// 	!!$%1D)E(FGGG ?b  _ 		?%%g)/0J/KLLLL$ 	?%%gI<S0T/UVVVV! 	?(E& H))'53D3D3F3FGGG%%g~>>> 	!!'UI4G,H+IJJJ!!(eY5J-K,LMMM)++I4G+%%h%9N1O0PQQQ&&&&&r?   c                 z    g }|dk    rdg}n|dk    rdg}n	|dk    rdg}| j                             d|           d S )Nr  )r<  double!   )r<  singleAccounting"   )r<  doubleAccountingur  rD  )r5   rI  r  s      r;   rJ  zWorksheet._write_underline  s^    
 >>+,JJ"__56JJ"__56J##C44444r?   c                 F    d|fg}| j                             d|           d S )Nr<  	vertAlignr`  r5   r<  r  s      r;   rL  zWorksheet._write_vert_align  s+    cl^
##K<<<<<r?   c                 <    | j                             ||           d S ru  r`  r5   rv   r  s      r;   rN  zWorksheet._write_rstring_color  s     ##D*55555r?   c                 X    | j         s"| j                                         d| _         d S d S )NT)r  r  rL  r  s    r;   
_opt_closezWorksheet._opt_close  s:    & 	+""$$$&*D###	+ 	+r?   c                 z    | j         r3| j        }t          |dd          | _        d| _         | j        | _        d S d S )Nza+rE  rF  F)r  r  rM  r  r  )r5   rP  s     r;   _opt_reopenzWorksheet._opt_reopen  sL    " 	'-H#H4'JJJD&+D#&DGGG	' 	'r?   c                    g }t          |          D ]}|                    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<   |ret          |          }||k    r|d	z
  }t          |          D ]:}||                             d          m||         d         ||         d<   ||         d         }t	          |t
                    r3|                    d          r|                    d          ||         d<   ||                             d          rfd}||         d         |vr t          d||         d          d           n4||         d         ||         d<   ||         d         dk    rd||         d<   ||                             d          }	|	r|	dk    rd||         d<   <|S )NFr   percent)rN  rl  rH  rh   C   rl  r[  r   rV  K   r     r  r%  P   <   (   rn   r(  rH  )rk  r  rZ  ri  zUnknown icon property type 'z2' for sub-property 'type' in conditional_format().rZ  numrN  r  T)	r  r  rT  r  rG  rA  r+  r"  r   )
r5   r  
user_propspropsrU   max_datar_  tmpr  rN  s
             r;   r  zWorksheet._set_icon_props  s    {## 	M 	MALLeaKKLLLL ! "E!HW "E!HW! "E!HW "E!HW "E!HW! "E!HW "E!HW "E!HW "E!HW  "	0:H;&&&?8__ 0 0a=$$W--9(21g(>E!HW%  (7+C!#s++ <s0C0C <,/JJsOOa) a=$$V,, 5"PK!!}V,K??P:a=;P P P P   
 ,6a=+@a( 8F+x77/4E!HV, &a=,,Z88 0C+/E!HZ(r?   c                    d}|dz   }|dz   }|dz   }d}|dz   }d|fd|fg}| j         d	k    rC|                    d
|f           |                    d|f           |                    d           |                     d|           d S )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x14acrI  )r   r  r  )r5   schemarx  xmlns_rxmlns_mc	ms_schemaxmlns_x14acr  s           r;   rT  zWorksheet._write_worksheet  s     622>>773	"BB&G(<=
 %%z84555}k:;;;7888K44444r?   c                    | j         
| j        d}n| j         `| j        Y| j        | j        k    rt          d| j                  }nt          d| j                  }t          d| j                  }|dz   |z   }nw| j         | j        k    r+| j        | j        k    rt          | j         | j                  }n<t          | j         | j                  }t          | j        | j                  }|dz   |z   }|                     dd|fg           d S )Nr  r   rB   	dimensionrL  )r   r   r   r-   r   rD  )r5   rL  rF   rG   s       r;   rV  zWorksheet._write_dimension  s   
 ?"t'> CC_$)D
 $/11'4?;; +1do>>*1do>>slV+_//DOt4V4V#DOT_EECC 'tHHF&tHHF3,'CK5#,88888r?   c                     |                      d           |                                  |                     d           d S )N
sheetViews)r  _write_sheet_viewr  r  s    r;   rW  zWorksheet._write_sheet_views<  sD    L))) 	   ,'''''r?   c                    g }| j         s|                    d           | j        r|                    d           | j        s|                    d           | j        r|                    d           | j        r|                    d           | j        s|                    d           | j        dk    r|                    d           n | j        d	k    r|                    d
           | j        dk    r|                    d| j        f           | j	        dk    r|                    d| j	        f           | j        dk    r#| j
        r|                    d| j	        f           | j        dk    r|                    d| j	        f           | j        d	k    r|                    d| j	        f           |                    d           | j        s| j        rU|                     d|           |                                  |                                  |                     d           d S |                     d|           d S )N)showGridLinesr   )showRowColHeadersr   )	showZerosr   rightToLeftr   )tabSelectedr   showOutlineSymbolsr   r   )r  
pageLayoutr  )r  pageBreakPreviewrg   topLeftCellrl   	zoomScaler   zoomScaleNormalzoomScalePageLayoutViewzoomScaleSheetLayoutView)workbookViewIdr   	sheetView)r   r  r   r   r   r   r   r
  r   r   r   r   r   r  _write_panes_write_selectionsr  rD  r5   r  s     r;   r  zWorksheet._write_sheet_viewE  s   
 $ 	42333  	86777  	0.///   	20111 = 	20111  	97888 >Q45555^q  :;;; ##}d.@ABBB 9{DI6777~""t'="!!#4di"@AAA~""!!#<di"HIII~""!!#=ty"IJJJ/000: 	9 	9Z888""$$$k*****Z88888r?   c                    | j         }| j        }| j        }d|fg}| j         | j        k    r|                    d           | j        r|                    d           |r|                    d|f           |r|                    d|f           | j        dk    r|                    d           |                     d|           d S )	NdefaultRowHeightcustomHeightr   )
zeroHeightr   outlineLevelRowoutlineLevelColr  zx14ac:dyDescentz0.25sheetFormatPr)r   r   r   r   r  r   r   rD  )r5   r   	row_level	col_levelr  s        r;   rX  z Worksheet._write_sheet_format_pr  s    !4*	*	)+=>?
"d&>>>1222" 	1/000 	>0)<=== 	>0)<===%%9:::OZ88888r?   c                    | j         sd S |                     d           t          | j                                                   d         }|}| j         |         }| j         |= |}|}t          | j                                                   D ]>}| j         |         }||dz   k    r	||k    r|}!|                     |||           |}|}|}?|                     |||           || j         |<   |                     d           d S )Ncolsr   r   )r   r  r&  r  _write_col_infor  )r5   rw  ry  prev_col_optionsdeleted_coldeleted_col_optionsrS   col_optionss           r;   rY  zWorksheet._write_cols  s5    } 	FF### DM..001115	=3M)$.$-,,..// 	/ 	/C-,K hl""{6F'F'F $$Y:JKKK	$#.   	Y2BCCC &9k"&!!!!!r?   c                    |\  }}}}}}	d}
d}|r|                                 }|
|sd}d}
nd}n|dk    rd}
|dk    rd}d}|dk     r<t          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|                    d|f           |r|                    d           |	r|                    d           |
r|                    d           |r|                    d|f           |r|                    d           |                     d|           d S )Nr   r   ro   r  r%  rC  g      p@r  r  r  r  r,  )r   rP   )bestFitrP   )customWidthrP   outlineLevel)r  rP   rS   )_get_xf_indexr3   r1  r  rD  )r5   col_mincol_maxr   r  rM  r   r  r  r7  custom_widthxf_indexr  r  r  s                  r;   r  zWorksheet._write_col_info  s'   BJ?VUIw  	3"0022H =  d]]L 199OGqyyUo&?@3FGG001  
   U_4s:;;gE001  
   GaK GaK oo&

  	3w1222 	/o... 	0./// 	42333 	7~u5666 	20111E:.....r?   c                     | j         |                     d           d S |                     d           |                                  |                     d           d S )N	sheetData)r   rD  r  _write_rowsr  r  s    r;   rZ  zWorksheet._write_sheet_data  sd    ?",,,,,,,,k*****r?   c                    | j         |                     d           d S |                     d           d}| j                            d           | j                            |          }|r6| j                            |           | j                            |          }|6| j                                         t          j
        | j                   |                     d           d S )Nr  i   r   )r   rD  r  r  seekreadr  r<  rL  rK  unlinkr  r  )r5   	buff_sizer  s      r;   r[  z%Worksheet._write_optimized_sheet_data  s     ?",,,,,,,, I!!!$$$#((33D 8d###',,Y77  8 ""$$$Id,---k*****r?   c                     d| j         fd| j        fd| j        fd| j        fd| j        fd| j        fg}|                     d|           d S )Nr  r  r  r  r   r   pageMargins)r   r   r   r   r   r   rD  r  s     r;   re  zWorksheet._write_page_margins&  sj     T%&d'(DO$t)*t)*t)*

 	M:66666r?   c                    g }| j         sd S | j        r|                    d| j        f           | j        dk    r|                    d| j        f           | j        r'| j        dk    r|                    d| j        f           | j        r'| j        dk    r|                    d| j        f           | j        r|                    d           | j        dk    r|                    d| j        f           | j	        r|                    d	           n|                    d
           | j
        r|                    d           | j        dk    r|                    d           | j        rG| j        r|                    d| j        f           | j        r|                    d| j        f           nF| j        r|                    d| j        f           | j        r|                    d| j        f           |                     d|           d S )N	paperSizerl   r'  r   
fitToWidthfitToHeight)	pageOrderoverThenDownfirstPageNumber)r   portrait)r   	landscape)blackAndWhiterP   r   )useFirstPageNumberrP   horizontalDpiverticalDpi	pageSetup)r   r   r  r   r   r   r   r   r   r   r   r|   r  r  rD  r  s     r;   rf  zWorksheet._write_page_setup3  sj   & 
 & 	F ? 	>{DO<=== s""w(89::: = 	>T^q00|T^<==== 	@T_11}do>??? ? 	=;<<< ?Q0$/BCCC  	<9:::::;;;  	64555 ?a9:::  	J" J!!?D4G"HIII  F!!=$2C"DEEE  F!!=$2C"DEEE" J!!?D4G"HIIIK44444r?   c                 (   g }| j         sd S | j        r|                    d           | j        r|                    d           | j        r|                    d           | j        r|                    d           |                     d|           d S )N)horizontalCenteredr   )verticalCenteredr   )headingsr   )	gridLinesr   printOptions)r   r   r  r   r   r   rD  r  s     r;   rd  zWorksheet._write_print_options  s    
) 	F < 	97888 < 	75666  	/o...  	0.///NJ77777r?   c                    g }| j         s|                    d           | j        s|                    d           | j        rc|                     d|           | j        r|                                  | j        r|                                  | 	                    d           d S | j
        r|                     d|           d S d S )N)scaleWithDocr   )alignWithMarginsr   headerFooter)r   r  r   r   r  r   _write_odd_headerr   _write_odd_footerr  r   rD  r  s     r;   rg  zWorksheet._write_header_footer  s    
( 	31222( 	75666% 	<
;;;{ )&&((({ )&&(((n-----! 	<
;;;;;	< 	<r?   c                 <    |                      d| j                   d S )N	oddHeader)r  r   r  s    r;   r  zWorksheet._write_odd_header       {DK88888r?   c                 <    |                      d| j                   d S )N	oddFooter)r  r   r  s    r;   r  zWorksheet._write_odd_footer  r  r?   c                 $   |                                   t          | j        | j        dz             D ]\}|| j        v s|| j        v s| j        |         r9t          |dz            }|| j        v r| j        |         }nd }| j        |         r|| j        vr| 	                    ||           n"| 	                    ||| j        |                    t          | j
        | j        dz             D ];}|| j        |         v r*| j        |         |         }|                     |||           <|                     d           || j        v r$|                     ||| j        |                    :|                     ||| j        |                    ^d S )Nr   r$  r&  )_calculate_spansr  r   r   r   r   r   r3   r   
_write_rowr   r   _write_cellr  _write_empty_row)r5   r-  
span_indexr  r.  col_refs         r;   r  zWorksheet._write_rows  s   T_do.ABB "	Q "	QG4=((dm++:g& ,
 !2..
//>*5DDD:g& Qdm336666t}W7MNNN#($/A:M#N#N H H"dj&999&*j&9'&BG ,,WgwGGG%%e,,,,--))'4w9OPPPP ))'4w9OPPPE"	Q "	Qr?   c                 V   | j         }|| _         || j        v s|| j        v s| j        |         rd }| j        |         r|| j        vr|                     ||           n"|                     ||| j        |                    t          | j        | j        dz             D ];}|| j        |         v r*| j        |         |         }|                     |||           <| 	                    d           n"| 
                    ||| j        |                    | j                                         d S )Nr   r&  )r  r   r   r   r  r  r   r   r  r  r  clear)r5   current_row_numr-  r  r.  r  s         r;   rV  zWorksheet._write_single_row  sE    #+dm##w$-'?'?4:gCV'? Dz'" M$-//OOGT2222OOGT4=3IJJJ$T_do6IJJ D DG$*W"555"&*W"5g">(('7CCC!!%(((( %%gtT]75KLLL 	
r?   c                 t   i }d }d }t          | j        | j        dz             D ]}|| j        v rVt          | j        | j        dz             D ]8}|| j        |         v r'||}|}t          ||          }t          ||          }9|| j        v r_t          | j        | j        dz             D ]A}|| j        v r6|| j        |         v r'||}|}!t          ||          }t          ||          }B|dz   dz  dk    s|| j        k    r*t          |dz            }||dz  }|dz  }| d| ||<   d }|| _
        d S )Nr   r$  r   rB   )r  r   r   r   r   r   r  r  r   r3   r   )r5   spansspan_minspan_maxr-  r.  r  s          r;   r  zWorksheet._calculate_spans  s   
 T_do.ABB 	$ 	$G$*$$$T_do6IJJ > >G$*W"555#+'.H'.HH'*8W'='=H'*8W'='=H$-''$T_do6IJJ > >G$-//Gt}W?U4U4U#+'.H'.HH'*8W'='=H'*8W'='=H1"a''Gt,F,F 2..
'MHMH+3(@(@h(@(@E*%#Hr?   c                    d}|r	|\  }}}}	}
nd\  }}}}	}
|| j         }d|dz   fg}|r|                                }|r|                    d|f           |r|                    d|f           |r|                    d           || j        k    s|| j        k    r$|| j         k    r|                    d|d	f           |r|                    d
           || j        k    s|| j        k    r || j         k    r|                    d           |	r|                    d|	f           |
r|                    d           | j        dk    r|                    d           |r|                     d|           d S |                     d|           d S )Nr   )NNr   r   r   r  r   r  s)customFormatr   htg)r   r   r  r  )r  r   r  r  r&  )r   r  r  r   r   _xml_empty_tag_unencoded_xml_start_tag_unencoded)r5   r&  r  
properties	empty_rowr  r8  rM  r   r  r  r  s               r;   r  zWorksheet._write_row.  s    	P<F9FK		<O9FK	>,FC!Gn%
  	3"0022H  	0w./// 	/sHo... 	31222T---d...6T=T3T3Tt]]3444 	-m,,,T---d...6T=T3T3T1222 	7~u5666 	0.///%%9::: 	=))%<<<<<))%<<<<<r?   c                 8    |                      |||d           d S )NT)r  )r  )r5   r&  r  r  s       r;   r  zWorksheet._write_empty_rowe  s"    UJ$?????r?   c                    t          ||          }d|fg}|j        r1|j                                        }|                    d|f           n|| j        v rP| j        |         d         r=| j        |         d         }|                    d|                                f           nG|| j        v r>| j        |         d         }|)|                    d|                                f           |j        j        }	|	dv r|                     |j	        |           d S |	dv r|j
        }
| j        s|                     |
|           d S |                     |
          }
|
                    d          r-|
                    d          r|                     |
|           d S t#          |
          }|                     |
||           d S |	dk    r|j        }t)          |j        t*                    r"|                    d	           |j        rd}n_d
}n\t)          |j        t,                    rBd}|j        dk    rn4|j        |v r|                    d           n|                    d           |                     |j        ||           d S |	dk    r|j        dk    r|                    d           	 t5          |j                   n%# t6          $ r |                    d           Y nw xY w|                     d|           |                     |j        |j                   |                     |j                   |                      d           d S |	dk    r| !                    d|           d S |	dk    r\|                    d	           |                     d|           |                     |j"                   |                      d           d S |	dk    rx|                    d           |                    d|j        f           |                     d|           |                     |j#                   |                      d           d S d S )Nr  r  r   r%  r  z<r>z</r>r^   )r  r5  r   )r`  z#N/Az#NAME?z#NULL!r_  z#REF!r  rg   )r  e)r  rA  ra   r~  )cmr   crX   r]   rZ   vm)$r.   rY   r  r  r   r   r%  r)  _xml_number_elementrZ  rL  rz   _xml_string_element_escape_control_charactersr+  r-  _xml_rich_inline_stringr&   _xml_inline_stringrl  rG  r?  rA  _xml_formula_elementri  r  r1  r4   r  _write_cell_array_formular  _write_cell_valuer  rD  r  r  )r5   r&  rS   r/  r  r  r  row_xfcol_xftype_cell_namerL  r  rl  error_codess                 r;   r  zWorksheet._write_celli  s    ,C55
J'(
; 	A{0022HsHo....DM!!dmC&8&;!]3'*FsF$8$8$:$:;<<<<DM!!]3'*F!!!3(<(<(>(>"?@@@0 333$$T[*=====777[F' J((<<<<<
 88@@ $$U++ J0G0G J00DDDDD  4F;;H++FHjIIIIIy((JE$*d++ 4!!*---: EEEEDJ,, 4 :##Z;..%%j1111%%l333%%dlE:FFFFF~-- zY&&!!),,,0dj!!!! 0 0 0!!,/////0 Z000**4<DDD""4:...c"""""w&&Z00000y((j)))Z000""4<000c"""""w&&j)))tTZ0111Z000""4:...c""""" '&s   .K K%$K%c                 :    |d}|                      d|           d S )Nrg   vr  )r5   rl  s     r;   r  zWorksheet._write_cell_value  s(    =EsE*****r?   c                 @    dd|fg}|                      d||           d S )N)r  arrayrL  r5  r  )r5   ri  r  r  s       r;   r   z#Worksheet._write_cell_array_formula  s/    $uj&9:
sGZ88888r?   c                    g }| j         s| j        s| j        s| j        s	| j        sd S | j        r|                    d| j        f           | j        r|                    d           | j         s| j        s| j        ri|                     d|           |                                  |                                  | 	                                 | 
                    d           d S |                     d|           d S )NcodeName)
filterModer   sheetPr)r   r   r   r   r  r  r  _write_tab_color_write_outline_pr_write_page_set_up_prr  rD  r  s     r;   rU  zWorksheet._write_sheet_pr  s/   
 	N	 N	 (		
 %	 F 	?z4+<=>>>> 	1/000= 	7DN 	7d.B 	7	:666!!###""$$$&&(((i(((((	:66666r?   c                 J    | j         sd S dg}|                     d|           d S )N)	fitToPager   pageSetUpPr)r   rD  r  s     r;   r  zWorksheet._write_page_set_up_pr  s5    } 	F&'
M:66666r?   c                 l    | j         }|sd S |                     d|                                           d S )NtabColor)r   _write_colorrR  r  s     r;   r  zWorksheet._write_tab_color  s>     	F*e&7&7&9&9:::::r?   c                 (   g }| j         sd S | j        r|                    d           | j        s|                    d           | j        s|                    d           | j        s|                    d           |                     d|           d S )N)applyStylesr   )summaryBelowr   )summaryRightr   r  	outlinePr)r   r   r  r   r   r   rD  r  s     r;   r  zWorksheet._write_outline_pr  s    
# 	F 	20111! 	31222! 	31222 	97888K44444r?   c                     |                      | j                  }|sd S t          |          }d|fd|fg}|                     d|           |D ]}|                     |d           |                     d           d S )NrK  manualBreakCount	rowBreaksi?  )r  r   rT  r  
_write_brkr  )r5   page_breaksrK  r  r-  s        r;   rh  zWorksheet._write_row_breaks+  s    ++DL99 	FK   e'


 	K444" 	, 	,GOOGU+++++&&&&&r?   c                     |                      | j                  }|sd S t          |          }d|fd|fg}|                     d|           |D ]}|                     |d           |                     d           d S )NrK  r  	colBreaksi )r  r   rT  r  r   r  )r5   r!  rK  r  r.  s        r;   ri  zWorksheet._write_col_breaks@  s    ++DL99 	FK   e'


 	K444" 	. 	.GOOGW----+&&&&&r?   c                 D    d|fd|fdg}|                      d|           d S )Nr?  r  )manr   brkrD  )r5   brk_idbrk_maxr  s       r;   r   zWorksheet._write_brkU  s3    Vnug&6
C
E:.....r?   c                     | j         }t          |          }|sd S d|fg}|                     d|           |D ]}|                     |           |                     d           d S )NrK  
mergeCells)r   rT  r  _write_merge_cellr  )r5   r   rK  r  merged_ranges        r;   r`  zWorksheet._write_merge_cells[  s    zL!! 	F&'
L*555( 	1 	1L""<0000,'''''r?   c                     |\  }}}}t          ||          }t          ||          }|dz   |z   }d|fg}	|                     d|	           d S )NrB   rL  	mergeCell)r-   rD  )
r5   r-  row_minr  row_maxr  rF   rG   rL  r  s
             r;   r,  zWorksheet._write_merge_cellm  se    /;,'7G #7G44"7G44slV#cl^
K44444r?   c                    t          | j                                                  }|sd S |                     d           |D ]+}t          | j        |                                                   }|D ]}| j        |         |         }| j        rJ| j        |         r=| j        |         |         r*| j        |         |         }|j        j        dk    rd|_        |j        t          j
        t          j        fv r]| xj        dz  c_        |                     ||| j        |           | j                            d|                                dg           |                     |||           -|                     d           d S )Nr  r\   Tr   r  External)r&  r  r  r  r   r%  r)  _is_object_link
_link_typer   URLEXTERNALr   _write_hyperlink_externalr   r  r  _write_hyperlink_internalr  )r5   r	  r-  r
  r.  r  r/  s          r;   rc  zWorksheet._write_hyperlinksz  s    $/..0011  	F 	L)))   	J 	JGdog6;;==>>H $ J Jog.w7 : 3$*W"5 3$*W:Mg:V 3:g.w7D~.(::.2+>hlH4E%FFFNNa'NN22$.#  
 -44%s{{}}jA   
 227GSIIII3J6 	,'''''r?   id_numc                 X   t          ||          }dt          |          z   }d|fd|fg}|j        r|                    d|j        f           |j        r|                    d|j        f           |j        r|                    d|j        f           |                     d|           d S )NrIdrL  r:idrj  displaytooltiprU  )r-   rA  r  r  r4  r  r  rD  )r5   r&  rS   r:  r  rL  r_idr  s           r;   r8  z#Worksheet._write_hyperlink_external  s      S))s6{{"clVTN3
; 	9z3;7888 	6y#)45558 	5y#(3444K44444r?   c                     t          ||          }d|fd|j        fg}|j        r|                    d|j        f           |                    d|j        f           |                     d|           d S )NrL  rj  r?  r>  rU  )r-   r  r  r  r  rD  )r5   r&  rS   r  rL  r  s         r;   r9  z#Worksheet._write_hyperlink_internal  s    S))clZ$;<
8 	5y#(34449ci0111K44444r?   c                     | j         sd S d| j         fg}| j        rA|                     d|           |                                  |                     d           d S |                     d|           d S )NrL  
autoFilter)r   r   r  _write_autofiltersr  rD  r  s     r;   r_  zWorksheet._write_auto_filter  s    " 	Fd123
> 	:j999##%%%l+++++ j99999r?   c                     | j         \  }}t          ||dz             D ]@}|| j        vr| j        |         }| j        |         }|                     ||z
  ||           Ad S r0  )r   r  r   r   _write_filter_column)r5   col1col2rS   r  r   s         r;   rD  zWorksheet._write_autofilters  s     (ttax(( 
	G 
	GC$*** %c*F*3/K %%cDj+vFFFF
	G 
	Gr?   c                     d|fg}|                      d|           |dk    r|                     |           n|                     |           |                     d           d S )NcolIdfilterColumnr   )r  _write_filters_write_custom_filtersr  )r5   rW  r   r_  r  s        r;   rF  zWorksheet._write_filter_column  sw    '(
NJ777!(((( &&w///.)))))r?   c                    d |D             }g }t          |          t          |          k    rdg}t          |          dk    r+t          |          dk    r|                     d|           d S |                     d|           t          |          D ]}|                     |           |                     d           d S )Nc                 \    g | ])}t          |                                          d k    '|*S )r  )rA  rO  )rR   filters     r;   rT   z,Worksheet._write_filters.<locals>.<listcomp>   s4    VVVc&kk6G6G6I6IX6U6Uf6U6U6Ur?   )rd  r   r   r   r_  )rT  rD  r  r&  _write_filterr  )r5   r_  
non_blanksr  rM  s        r;   rL  zWorksheet._write_filters  s    VV7VVV

w<<3z??**&Jw<<1ZA!5!5	:66666 	:666$Z00 / /
"":....i(((((r?   c                 <    d|fg}|                      d|           d S )Nr<  rP  r'  rc  s      r;   rQ  zWorksheet._write_filter  s)    cl^
Hj11111r?   c                    t          |          dk    r6|                     d            | j        |  |                     d           d S g }|d         dk    rdg}ndg}|                     d|           |                     |d         |d                    |                     |d         |d                    |                     d           d S )	Nr  customFiltersr   )andr   )rV  r   r   rh   rV  )rT  r  _write_custom_filterr  )r5   r  r  s      r;   rM  zWorksheet._write_custom_filters  s    v;;!000%D%v..o..... J ayA~~(\

(\
 <<<%%fQi;;;%%fQi;;;o.....r?   c                     g }dddddddd}||         	||         }nt          d|            |dk    r|                    d	|f           |                    d
|f           |                     d|           d S )Nr  r}  r  r  r  r  )r   r  rh   rV  r%  r  r  zUnknown operator = r  r<  customFilter)r   r  rD  )r5   r  r<  r  r  s        r;   rW  zWorksheet._write_custom_filter/  s    
  #
 
	 X* *HH1x11222 wz845555#,'''NJ77777r?   c                 z   g }| j         sd S | j         }|d         r|                    d|d         f           |d         r|                    d           |d         r|                    d           |d         s|                    d           |d         s|                    d	           |d
         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         s|                    d           |d         r|                    d           |d         r|                    d           |d          r|                    d!           |d"         s|                    d#           |                     d$|           d S )%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   rM  )rC  r   r  )pivotTablesr   r  )selectUnlockedCellsr   sheetProtection)r   r  rD  )r5   r  r  s      r;   r\  z!Worksheet._write_sheet_protectionJ  s   
# 	F&: 	Az7:+>?@@@7 	,l+++9 	.n---y! 	.n---{# 	0.///>" 	20111#$ 	42333=! 	1/000#$ 	42333=! 	1/000&' 	75666#$ 	42333=! 	1/000,- 	867776? 	+k***<  	1/000>" 	20111./ 	:8999-z:::::r?   c                     | j         dk    rd S |                     d           | j        D ]\  }}}|                     |||           |                     d           d S )Nr   protectedRanges)r   r  r   _write_protected_ranger  r  s       r;   r]  z!Worksheet._write_protected_rangesz  s{    $))F-...040E 	J 	J,J
H''
JIIII+,,,,,r?   c                     g }|r|                     d|f           |                     d|f           |                     d|f           |                     d|           d S )Nr  r  rv   protectedRanger  rD  )r5   r  r  r  r  s        r;   ri  z Worksheet._write_protected_range  sw    
 	6z845557J/0006:.///,j99999r?   c                 l    | j         sd S | xj        dz  c_        |                     | j                   d S r0  )r   r   _write_drawingr  s    r;   rk  zWorksheet._write_drawings  s=    | 	F!DN+++++r?   c                 `    dt          |          z   }d|fg}|                     d|           d S )Nr<  r=  r   rA  rD  )r5   r  r@  r  s       r;   rn  zWorksheet._write_drawing  s:    s:&tn%
Iz22222r?   c                     | j         sd S | xj        dz  c_        dt          | j                  z   }d|fg}|                     d|           d S )Nr   r<  r=  legacyDrawing)r   r   rA  rD  r5   r@  r  s      r;   rl  zWorksheet._write_legacy_drawing  s_    | 	F 	!s4>***tn%
OZ88888r?   c                     | j         sd S | xj        dz  c_        dt          | j                  z   }d|fg}|                     d|           d S )Nr   r<  r=  legacyDrawingHF)r   r   rA  rD  rs  s      r;   rm  z"Worksheet._write_legacy_drawing_hf  sa    " 	F 	!s4>***tn%
-z:::::r?   c                     | j         sd S | xj        dz  c_        dt          | j                  z   }d|fg}|                     d|           d S )Nr   r<  r=  picture)r  r   rA  rD  rs  s      r;   rn  zWorksheet._write_picture  s`    $ 	F 	!s4>***tn%
Iz22222r?   c                     | j         }t          |          }|sd S d|fg}|                     d|           |D ]}|                     |           |                     d           d S )NrK  dataValidations)r  rT  r  _write_data_validationr  )r5   r  rK  r  
validations        r;   rb  z!Worksheet._write_data_validations  s    &K   	F&'
-z:::% 	4 	4J''
3333+,,,,,r?   c                 <   d}g }|d         D ]=}|dk    r|dz  }|\  }}}}||k    r||}}||k    r||}}|t          ||||          z  }>|                    d          r|d         }|d         dk    rF|                    d|d         f           |d         d	k    r|                    d
|d         f           d|v rB|d         dk    r|                    d           |d         dk    r|                    d           |d         r|                    d           |d         s|                    d           |d         r|                    d           |d         r|                    d           d|v r|                    d|d         f           d|v r|                    d|d         f           d|v r|                    d|d         f           d|v r|                    d|d         f           |                    d |f           |d         dk    r|                     d!|           d S |                     d!|           |                     |d"                    |d#         |                     |d#                    |                     d!           d S )$Nrg   r  r;  rl  rf  rr  rH  rN  ry  r  rg  r   )
errorStyler  r  )r}  r  rn  )
allowBlankr   re  )showDropDownr   ri  )showInputMessager   rh  )showErrorMessager   rj  
errorTitlero  r  rk  promptTitlerp  promptr  dataValidationrl  rc  )r,   r  r  rD  r  _write_formula_1_write_formula_2r  )	r5   r  r  r  r  	row_firstr[  row_lastr\  s	            r;   rz  z Worksheet._write_data_validation  s<   
 W% 	H 	HE{{9>6Y	8X 8##)19H8##)19HXiHhGGGEE;;}%% 	+M*E:&((vwz':;<<<z"i//!!:wz/B"CDDD7""|$))!!";<<<|$))!!"?@@@>" 	1/000z" 	31222<  	75666<  	75666G##|W]-CDEEEg%%w(@ABBBG##}gm.DEFFFg%%x)ABCCC7E*+++:&(( 0*===== 0*=== !!''"2333 y!-%%gi&8999./////r?   c                    t          |t                    r | j        | }d| d}nK	 t          |           n:# t          $ r- |                    d          r|                    d          }Y nw xY w|                     d|           d S )Nr  r(  formula1)rG  r  r  r1  r4   r+  r"  r  r5   ri  s     r;   r  zWorksheet._write_formula_1(  s     gt$$ 
	2$dng.G$'nnnGG2g 2 2 2%%c** 2%nnS11G2
 	z733333s   8 4A/.A/c                     	 t          |           n:# t          $ r- |                    d          r|                    d          }Y nw xY w|                     d|           d S )Nr(  formula2r1  r4   r+  r"  r  r  s     r;   r  zWorksheet._write_formula_29  sv    	.'NNNN 	. 	. 	.!!#&& .!..--	.
 	z733333    4A	A	c                     t          | j                                                  }|sd S |D ]#}|                     || j        |                    $d S ru  )r&  r  r  _write_conditional_formatting)r5   r  
cond_ranges      r;   ra  z$Worksheet._write_conditional_formatsF  sn    )..0011 	F  	 	J..D-j9   	 	r?   c                     d|fg}|                      d|           |D ]}|                     |           |                     d           d S )Nr  conditionalFormatting)r  _write_cf_ruler  )r5   r  paramsr  params        r;   r  z'Worksheet._write_conditional_formattingR  sg    
+,
3Z@@@ 	' 	'E&&&&122222r?   c                    d|d         fg}d|v r%|d         |                     d|d         f           |                     d|d         f           |                    d          r|                     d           |d         dk    r|                     d|d	         f           |                     d
|           d|v r;d|v r7|                     |d                    |                     |d                    n|                     |d                    |                     d
           d S |d         dk    rt          j        d|d	                   r|                     d           t          j        d|d	                   r|                     d           t          j        d|d	                   rEt          j        d|d	                   }|                     d|                    d          f           |                     d
|           d S |d         dk    rwd	|v r!|d	         dk    r|                     d           d|v r|                     d           |d         pd}|                     d|f           |                     d
|           d S |d         dk    r|                     d
|           d S |d         dk    r|                     d
|           d S |d         d k    s$|d         d!k    s|d         d"k    s|d         d#k    r|                     d|d	         f           |                     d$|d         f           |                     d
|           |                     |d%                    |                     d
           d S |d         d&k    re|                     d&|d	         f           |                     d
|           |                     |d%                    |                     d
           d S |d         d'k    s$|d         d(k    s|d         d)k    s|d         d*k    rH|                     d
|           |                     |d%                    |                     d
           d S |d         d+k    rB|                     d
|           | 	                    |           |                     d
           d S |d         d,k    rl|                     d
|           | 
                    |           |                    d-          r|                     |           |                     d
           d S |d         d.k    rH|                     d
|           |                     |d	                    |                     d
           d S |d         d/k    rB|                     d
|           |                     |           |                     d
           d S d S )0NrH  rY   dxfIdr  r  )
stopIfTruer   r  r  rN  cfRulerd  rc  rl  r  below)r  r   r}  )equalAverager   z[123] std devz([123]) std devrI  r   r  r  )rk  r   r  )r  r   r  rankr  r  r  r  r  r  r  ri  r  r  r  r  r  r  r  r  r  r  )r  r  r  _write_formula_elementr  r.  rq  grouprD  _write_color_scale_write_data_bar_write_data_bar_ext_write_icon_set)r5   r  r  r/  r  s        r;   r  zWorksheet._write_cf_rule[  sa   vf~./
v&"2">wx(89::::vj'9:;;;::n%% 	1/000&>X%%z6*+=>???*555F""yF':':++F9,=>>>++F9,=>>>>++F7O<<<h'''''F^~--y&"455 7!!"5666y&"455 7!!"5666y&*<== >	"3VJ5GHH!!8U[[^^"<===*55555F^w&&V##z(:c(A(A!!.111f$$!!-000'?(bDvtn---*55555F^000*55555F^~--*55555 6Nn,,f~!222f~--f~++z6*+=>???vvg7888*555''y(9:::h'''''F^|++|VJ-?@AAA*555''y(9:::h''''' 6N...f~!444f~!111f~!444*555''y(9:::h'''''F^|++*555##F+++h'''''F^y((*555  (((zz,-- 1((000h'''''F^|++*555''z(:;;;h'''''F^y((*555  (((h''''' )(r?   c                     	 t          |           n:# t          $ r- |                    d          r|                    d          }Y nw xY w|                     d|           d S )Nr(  ri  r  r  s     r;   r  z Worksheet._write_formula_element  sv    	.'NNNN 	. 	. 	.!!#&& .!..--	.
 	y'22222r  c                 Z   |                      d           |                     |d         |d                    |d         "|                     |d         |d                    |                     |d         |d                    |                     d|d	                                                    |d
         .|                     d|d
                                                    |                     d|d                                                    |                     d           d S )Nr  r  r  r  r  r  r  r  r  r  r  )r  _write_cfvor  rR  r  )r5   r  s     r;   r  zWorksheet._write_color_scale  s    	L)))z*E+,>???(U:.k0BCCCz*E+,>???'5#5#A#A#C#CDDD)gu['9'E'E'G'GHHH'5#5#A#A#C#CDDD,'''''r?   c                    g }d|v r|                     d|d         f           d|v r|                     d|d         f           |                    d          r|                     d           |                     d|           |                     |d         |d	                    |                     |d
         |d                    |                     d|d                                                    |                     d           d S )Nr  	minLengthr  	maxLengthr  	showValuer   r  r  r  r  r  r  r  )r  r  r  r  r  rR  r  )r5   r  r  s      r;   r  zWorksheet._write_data_bar  s   
 5  {E,,?@AAA5  {E,,?@AAA99Z   	0.///Iz222z*E+,>???z*E+,>???'5#5#A#A#C#CDDD)$$$$$r?   c                 h   | j         dz   }t          | j                  dz   }d||fz  }||d<   | j                            |           |                     d           |                     d           |                     d|           |                     d           |                     d           d S )Nr   z{DA7ABA51-AAAA-BBBB-%04X-%012X}guidextLstz&{B025F937-C7B1-47D3-B67F-A62EFF666E3E}zx14:idext)rw   rT  r  r  r  
_write_extr  r  )r5   r  worksheet_countdata_bar_countr  s        r;   r  zWorksheet._write_data_bar_ext   s     *q.T011A50O^3TT f""5)))H%%%@AAAx...%   (#####r?   c                    g }|d         dk    rd|d         fg}|                     d          r|                    d           |                     d          r|                    d           |                     d|           t          |d                   D ]+}|                     |d	         |d
         |d                    ,|                     d           d S )Nr  r   r  r  r  r  )ri  r   r  rH  rl  rN  )r  r  r  reversedr  r  )r5   r  r  icons       r;   r  zWorksheet._write_icon_set  s    
 "222$eL&9:;J99\"" 	0.///99_%% 	.n---Iz222 U7^,, 	L 	LDT&\4=$z:JKKKK)$$$$$r?   c                     d|fg}||                     d|f           |r|                     d           |                     d|           d S )NrH  r<  )gter   cfvorl  )r5   cf_typer<  rN  r  s        r;   r  zWorksheet._write_cfvo(  sd    w'(
?ucl+++ 	*j)))FJ/////r?   c                 2    |                      ||           d S ru  r'  re  s      r;   r  zWorksheet._write_color4  s    D*-----r?   c                 .    | j         D ]} | j        |  d S ru  )r   _write_selection)r5   	selections     r;   r  zWorksheet._write_selections8  s0     	. 	.I!D!9---	. 	.r?   c                     g }|r|                     d|f           |r|                     d|f           |r|                     d|f           |                     d|           d S )Nr  
activeCellr  r  rl  )r5   r  r  r  r  s        r;   r  zWorksheet._write_selection=  s    
 	.vtn--- 	;|[9::: 	0w.///K44444r?   c                 `    | j         }|sd S |d         dk    r | j        |  d S  | j        |  d S )NrV  r  )r   _write_split_panes_write_freeze_panes)r5   r   s     r;   r  zWorksheet._write_panesL  sO    
 	F8q==#D#U++++$D$e,,,,r?   c                 @   g }|}|}t          ||          }	d}
d}d}d}| j        r| j        d         \  }}}g | _        |r||rzd}
t          |d          }t          d|          }| j                            d||g           | j                            d||g           | j                            d||g           nA|r d}
| j                            d||g           nd}
| j                            d||g           |dk    rd}n|dk    rd}nd	}|r|                    d
|f           |r|                    d|f           |                    d|	f           |                    d|
f           |                    d|f           |                     d|           d S )Nrg   r   bottomRighttopRight
bottomLeftfrozenr   frozenSplitrD   xSplitySplitr  
activePanestater  )r-   r   r  rD  )r5   r&  rS   r  r  r  r  y_splitx_splitr   r   r  r  r  rU   row_cellcol_cells                    r;   r  zWorksheet._write_freeze_panesX  s    
)'8<< ? 	!&*oa&8#QU DO  	G3 	G'K(a00H(C00HO""J(#CDDDO""L(H#EFFFO""M;#FGGGG 	G$KO""JU#CDDDD 'KO""L+u#EFFF >>EE!^^!EEE 	3x1222 	3x1222=-8999<56667E*+++FJ/////r?   c                    g }d}d}d}	d}
|}|}| j         r| j         d         \  }}	}
g | _         d}|rt          d|z  dz             }|r|                     |          }||k    rB||k    r<t          d|dz
  dz  dz  z             }t          d|d	z
  dz  d
z  dz  dz  z             }t          ||          }|s|}	|}
|r||rzd}t          |d          }t          d|          }| j                             d||g           | j                             d||g           | j                             d|	|
g           nA|r d}| j                             d|	|
g           nd}| j                             d|	|
g           |r|                    d|df           |r|                    d|df           |                    d|f           |r|                    d|f           |                     d|           d S )NFrg   r   Trn   i,  rC  rm     rh   rV  rp   r  r  r  r  r  r  r  r  r  )r   r3   _calculate_x_split_widthr-   r  rD  )r5   r&  rS   r  r  rU   r  has_selectionr   r  r  r  r  r   r  r  s                   r;   r  zWorksheet._write_split_panes  s   
 ? 	!&*oa&8#QU DO M  	."w,,--G 	=33G<<G
 c>>h#oo#3" 4r 99::G3'C-2!5!9A!=!BBCCH)'8<<  	"'K!E  	G3 	G'K(!44H(H55HO""J(#CDDDO""L(H#EFFFO""M;#FGGGG 	G$KO""JU#CDDDD 'KO""L+u#EFFF  	=xG):):;<<< 	=xG):):;<<<=-8999 	;|[9:::FJ/////r?   c                     d}d}|dk     rt          |||z   z  dz             }nt          ||z  dz             |z   }|dz  dz  }|dz  }|dz   }|S )	Nr  r%  r   rC  rh   rV  rn   r  )r3   )r5   r  r  r  r  pointstwipss          r;   r  z"Worksheet._calculate_x_split_width  s}      199/G";<sBCCFF03677'AF !a  r?   c                     | j         }t          |          }|sd S d|fg}|                     d|           |D ],}| xj        dz  c_        |                     | j                   -|                     d           d S )NrK  
tablePartsr   )r   rT  r  r   _write_table_partr  )r5   r   rK  r  rU   s        r;   ro  zWorksheet._write_table_parts  s    F  	F 

 	L*555 	3 	3ANNaNN""4>2222,'''''r?   c                 `    dt          |          z   }d|fg}|                     d|           d S )Nr<  r=  	tablePartrp  rs  s      r;   r  zWorksheet._write_table_part	  sF     s4yy  

 	K44444r?   c                    t          | j                  }t          | j                  }|s|sd S |                     d           |r|                                  |r|                                  |                     d           d S )Nr  )rT  r  r   r  _write_ext_list_data_bars_write_ext_list_sparklinesr  )r5   has_data_barshas_sparkliness      r;   rp  zWorksheet._write_ext_list  s    D/00T_-- 	^ 	F 	H%%% 	-**,,, 	.++---(#####r?   c                     |                      d           |                     d           | j        D ]}|                     |           |                     d           |                     d           d S )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsr  )r  r  r  "_write_conditional_formatting_2010r  )r5   r  s     r;   r  z#Worksheet._write_ext_list_data_bars*  s    @AAA8999 + 	> 	>H33H====6777%     r?   c                    d}d|fg}|                      d|           |                     |           |                     |           |                     |d         |d                    |                     |d         |d                    |d         s|                     |d	                    |d
         s|                     |d                    |d         s#|d         s|                     |d                    |d         dk    r|                     |d                    |                     d           |                     d           | 	                    d|d                    |                     d           d S )N3http://schemas.microsoft.com/office/excel/2006/mainxmlns:xmzx14:conditionalFormattingr  r  r  r  r  r  r  r  r  r  r  rr  r  x14:dataBar
x14:cfRulexm:sqrefr  )
r  _write_x14_cf_rule_write_x14_data_bar_write_x14_cfvo_write_x14_border_color_write_x14_negative_fill_color _write_x14_negative_border_color_write_x14_axis_colorr  r  )r5   r  xmlns_xmr  s       r;   r  z,Worksheet._write_conditional_formatting_20108  s   H!8,-
7DDD 	))) 	  *** 	Xn5x7LMMMXn5x7LMMM( 	G((2D)EFFF 12 	P//9M0NOOO )	Y=>	Y 11(;V2WXXX '(F22&&x0@'ABBB-(((,''' 	z8G+<===566666r?   c                 V    d}|d         }d|fd|fg}|                      d|           d S )Nr  r  rH  r?  r  r  )r5   r  	rule_typer  r  s        r;   r  zWorksheet._write_x14_cf_rulee  s@    	y)D$<8
L*55555r?   c                 J   d}d}d|fd|fg}|d         s|                     d           |d         r|                     d           |d	         d
k    r|                     d           |d	         dk    r|                     d           |d         r|                     d           |d         s|d         s|                     d           |d         dk    r|                     d           |d         dk    r|                     d           |                     d|           d S )Nr   rl   r  r  r  )borderr   r  )gradientr   r  r  )r  leftToRightr  )r  r  r  )negativeBarColorSameAsPositiver   r  )$negativeBarBorderColorSameAsPositiver   r  middle)axisPositionr  rr  )r  rr  r  )r  r  )r5   r  r  r  r  s        r;   r  zWorksheet._write_x14_data_barm  su   

 *%*%


 ( 	-m,,,K  	/o...O$..:;;;O$//:;;;-. 	ECDDD )	K=>	K IJJJ'(H448999'(F226777M:66666r?   c                     d|fg}|dv r|                      d|           d S |                     d|           |                     d|           |                     d           d S )NrH  )r  r  r  r  zx14:cfvoxm:f)rD  r  r  r  )r5   r  rl  r  s       r;   r  zWorksheet._write_x14_cfvo  s}    y)*
<<<
J77777
J777""65111j)))))r?   c                 V    |                      d|                                           d S )Nzx14:borderColorr  rR  r  s     r;   r  z!Worksheet._write_x14_border_color  s+    +U->->-@-@AAAAAr?   c                 V    |                      d|                                           d S )Nzx14:negativeFillColorrD  rR  r  s     r;   r  z(Worksheet._write_x14_negative_fill_color  s+    3U5F5F5H5HIIIIIr?   c                 V    |                      d|                                           d S )Nzx14:negativeBorderColorr  r  s     r;   r  z*Worksheet._write_x14_negative_border_color  s+    5u7H7H7J7JKKKKKr?   c                 V    |                      d|                                           d S )Nzx14:axisColorr  r  s     r;   r  zWorksheet._write_x14_axis_color  s*    OU->->-@-@AAAAAr?   c                 F   |                      d           |                                  t          | j                  D ]7}|                     |           |                     |d                    |                     |d                    |                                  |                     |d                    | 	                    |d                    | 
                    |d                    |                     |d                    |                     |d                    |d	         r|                     d
|d	                    |                     |           |                     d           9|                     d           |                     d           d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}rw  ry  rx  rs  rp  rn  rl  rk  r   x14:sparklineGroupx14:sparklineGroupsr  )r  _write_sparkline_groupsr  r   _write_sparkline_group_write_color_series_write_color_negative_write_color_axis_write_color_markers_write_color_first_write_color_last_write_color_high_write_color_lowr  _write_sparklinesr  )r5   r  s     r;   r  z$Worksheet._write_ext_list_sparklines  s   @AAA 	$$&&& "$/22 !	4 !	4I''	222 $$Y~%>??? &&y1A'BCCC ""$$$ %%i&@AAA ##Im$<=== ""9\#:;;; ""9\#:;;; !!)K"8999% G&&vy/EFFF""9---23333/000%     r?   c                 n   |                      d           t          |d                   D ]t}|d         |         }|d         |         }|                      d           |                     d|           |                     d|           |                     d           u|                     d           d S )Nzx14:sparklinesrK  r  re  zx14:sparkliner   r  )r  r  r  r  )r5   r  r_  r  rj  s        r;   r  zWorksheet._write_sparklines  s     	,---y)** 	/ 	/A#H-a0K -a0H000""6;777"":x888o....*+++++r?   c                 P    d}|dz   }d|fd|fg}|                      d|           d S )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14urir  r  )r5   r  rz  	xmlns_x14r  s        r;   r  zWorksheet._write_ext  sH    788	 )$CL


 	E:.....r?   c                 @    d}d|fg}|                      d|           d S )Nr  r  r	  r  )r5   r  r  s      r;   r
  z!Worksheet._write_sparkline_groups  s1    H!8,-
1:>>>>>r?   c                 |   |                     d          }g }|                     d          4|d         dk    rd|d<   n"|                    d|d         f           d|d<   |                     d          4|d         dk    rd|d<   n"|                    d	|d         f           d|d<   |d
         dk    r|                    d
|d
         f           |                     d          r|                    d|d         f           |                     d          r|                    d           |r|                    d|f           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d            |                     d          r|                    d!|d         f           |                     d          r|                    d"|d         f           |                     d#          r|                    d$           |                     d%|           d S )&Nr  r  r  cust_max	manualMaxrv  r  cust_min	manualMinrH  r{  rg  
lineWeightrk  )dateAxisr   displayEmptyCellsAsrh  )rh  r   r  )r  r   r  )r  r   r  )r  r   r  )r  r   r  )r  r   rf  )displayXAxisr   r   )displayHiddenr   minAxisTypemaxAxisTyperi  r  r  )r  r  r  )r5   r  r  r  s       r;   r  z Worksheet._write_sparkline_group   s]   0 G$$
;;u)u~((&-
##!!;"?@@@&.
#;;u)u~((&-
##!!;"?@@@&.
# 6?f$$vwv7888;;x   	A|WX->?@@@;;{## 	/o... 	>4e<===;;y!! 	.n---;;v 	+k***;;u 	*j)));;w 	,l+++;;v 	+k***;;z"" 	/o...;;v 	31222;;x   	42333;;z"" 	D}gj.ABCCC;;z"" 	D}gj.ABCCC;;y!! 	201110*=====r?   c                 ^    |r*|                      ||                                           d S d S ru  r  )r5   tagr  s      r;   _write_spark_colorzWorksheet._write_spark_color[   s<     	8c5#4#4#6#677777	8 	8r?   c                 2    |                      d|           d S )Nzx14:colorSeriesr(  r  s     r;   r  zWorksheet._write_color_series`   s     1599999r?   c                 2    |                      d|           d S )Nzx14:colorNegativer*  r  s     r;   r  zWorksheet._write_color_negatived   s     3U;;;;;r?   c                 L    |                      dt          d                     d S )Nzx14:colorAxisr  )r(  r   r  s    r;   r  zWorksheet._write_color_axish   s&    y1A1ABBBBBr?   c                 2    |                      d|           d S )Nzx14:colorMarkersr*  r  s     r;   r  zWorksheet._write_color_markersl   s     2E:::::r?   c                 2    |                      d|           d S )Nzx14:colorFirstr*  r  s     r;   r  zWorksheet._write_color_firstp   s     0%88888r?   c                 2    |                      d|           d S )Nzx14:colorLastr*  r  s     r;   r  zWorksheet._write_color_lastt       77777r?   c                 2    |                      d|           d S )Nzx14:colorHighr*  r  s     r;   r  zWorksheet._write_color_highx   r0  r?   c                 2    |                      d|           d S )Nzx14:colorLowr*  r  s     r;   r  zWorksheet._write_color_low|   s    66666r?   c                 :    ddg}|                      d|           d S )N)fontId0)rH  noConversion
phoneticPrr'  r  s     r;   r^  zWorksheet._write_phonetic_pr   s/     $


 	L*55555r?   c                    | j         sd S |                     d           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d	|           | j                             d
          r#| j         d
         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           |                     d           d S )NignoredErrorsr?  numberStoredAsTextr7  	evalErrorr9  ri  r8  formulaRanger:  unlockedFormular=  emptyCellReferencer>  listDataValidationr;  calculatedColumnr<  twoDigitTextYear)r   r  r  _write_ignored_errorr  )r5   ignored_ranges     r;   rj  zWorksheet._write_ignored_errors   sy   " 	FO,,,""#:;; 	K /0GHM%%&:MJJJ""<00 	B /=M%%k=AAA""#455 	@ /0ABM%%i???""?33 	E /@M%%nmDDD""#566 	H /0BCM%%&7GGG""#9:: 	K /0FGM%%&:MJJJ""#9:: 	K /0FGM%%&:MJJJ""#677 	I /0CDM%%&8-HHH""#899 	I /0EFM%%&8-HHH/*****r?   c                 B    d|f|dfg}|                      d|           d S )Nr  r   ignoredErrorr'  )r5   rg  rC  r  s       r;   rB  zWorksheet._write_ignored_error   s8     m$O


 	NJ77777r?   )rd   Nru  r  )F)Nr   r{  )NNN)r  )NF)r   r   )r   r   r   r   )NNr   )NN)rl   )rg   N)r   )ri   ri   rj   rj   )rg   NN)FF)r   (  r)  
__module____qualname____doc__ru   r3   r6  r>   r   r   r   r<  r:  rA  r   r"   rP  r3  r1  r   r]  r2  rf  r*  rm  r,  rL   r|  rr  rt  staticmethodr  rs  rB  r  rF  r?  r  r@  r  r0  r  r  r  r  r  r	   r   r   r  r  r  r   r  r  r  r  r  r  r  r  r  r
  r  rW   r  r  r7  r;  r>  rA  rG  rM  r]  r   rY  r  r*  rc  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r&  r)  r+  r/  r2  r5  r@  rQ  rr  rS  r  rJ  r  rW  rX  r  r  r  r  r  r  r  r  r  r  r  r  r  r=  r   r  r   r  r  r  r  rQ  r  r'  r  r.  r  r  r  rJ  rL  rN  rg  ri  r  rT  rV  rW  r  rX  rY  r  rZ  r[  re  rf  rd  rg  r  r  r  rV  r  r  r  r  r  r   rU  r  r  r  rh  ri  r   r`  r,  rc  r   r8  r9  r_  rD  rF  rL  rQ  rM  rW  r\  r]  ri  rk  rn  rl  rm  rn  rb  rz  r  r  ra  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ro  r  rp  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  rB  __classcell__)r%  s   @r;   rc   rc      s$        Y$ Y$ Y$ Y$ Y$ Y$x$3 $33 $3 $3 $3 $3L , ,3 ,%8K2L , , , ,&SJ# SJC SJ SJ SJ SJj OSA AA A*-A<DV<LA		A A A A, PT  *-<DV<L		   :  )-A AA A c5(*+	A
 f%A 
A A A A: )-% %% % c5(*+	%
 f%% 
% % % %N NR? ?? ?),?;CF;K? ? ? ?, FJ  2:62B	   (  )-J JJ J 	J
 f%J 
	J J J JB )-% %% % 	%
 f%% 
	% % % %N  )-*
 *
*
 *
 	*

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