o
    ]’i¦Z ã                   @   s  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 CdejD¡ZEdd„ ZFdd„ ZGdd„ ZHedd ƒZIed!d"ƒZJed#d$ƒZKed%d&ƒZLed'd(ƒZMed)d*ƒZNed+d$ƒZOed,d-ƒZPed.d/ƒZQG d0d1„ d1e*jBƒZRdS )2é    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d„ƒ}|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                    sZ   z|r|d }t |ƒ W n ty!   t|ƒ}||dd …  }Y nw ˆ | g|¢R i |¤ŽS ©Nr   r   )ÚintÚ
ValueErrorr(   )ÚselfÚargsÚkwargsÚ	first_argÚnew_args©Úmethod© úY/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/xlsxwriter/worksheet.pyÚcell_wrapperf   s   €ýz'convert_cell_args.<locals>.cell_wrapperr   ©r9   r<   r:   r8   r;   Úconvert_cell_args_   s   r>   c                    r/   )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c           
         s²   z
|r	t |d ƒ W nC tyM   d|d v r-|d  d¡\}}t|ƒ\}}t|ƒ\}}nt|d ƒ\}}||}}||||g}	|	 |dd … ¡ |	}Y nw ˆ | g|¢R i |¤ŽS )Nr   ú:r   ©r1   r2   Úsplitr(   Úextend)
r3   r4   r5   Úcell_1Úcell_2Úrow_1Úcol_1Úrow_2Úcol_2r7   r8   r:   r;   r<   ~   s    €
ôz(convert_range_args.<locals>.cell_wrapperr   r=   r:   r8   r;   Úconvert_range_argsw   s   rI   c                    r/   )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c           	         s   z
|r	t |d ƒ W n2 ty<   dd„ |d  d¡D ƒ\}}t|ƒ\}}t|ƒ\}}||g}| |dd … ¡ |}Y nw ˆ | g|¢R i |¤ŽS )Nr   c                 S   s   g | ]}|d  ‘qS )Ú1r:   )Ú.0Úcolr:   r:   r;   Ú
<listcomp>¦   s    z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>r?   r   r@   )	r3   r4   r5   rC   rD   Ú_rF   rH   r7   r8   r:   r;   Úcolumn_wrapperž   s   €ù	z+convert_column_args.<locals>.column_wrapperr   )r9   rO   r:   r8   r;   Úconvert_column_args—   s   rP   Ú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                       sâ  e Zd ZdZd$‡ fdd„Zdedefdd	„Zedededee	d
 e
f fdd„ƒZdedefdd„Ze	d%dedededee de	d f
dd„ƒZ	d%dedededee de	d f
dd„Ze	d%dededeeeef dee de	d
 f
dd„ƒZ	d%dededeeeef dee de	d
 f
dd„Ze	d%dedede
dee fdd„ƒZ	d%dededee de	d
 fdd„Ze		 d&deded!edee de	d f
d"d#„ƒZ		 d&deded!edee de	d f
d$d%„Ze		 d&d&ed'ed(ed)ed!edee de	d
 fd*d+„ƒZe		 d&d&ed'ed(ed)ed!edee de	d
 fd,d-„ƒZd'd/d0„Zed1d2„ ƒZ		 	3d(de	d
 fd4d5„Z e	d%deded6e!j!dee de	d
 f
d7d8„ƒZ"d%dededefd9d:„Z#e	d%deded;e$dee fd<d=„ƒZ%d%dededefd>d?„Z&e			d)deded@edee dee dAee fdBdC„ƒZ'	d)dededefdDdE„Z(edededFeeef de	dG fdHdI„ƒZ)dededefdJdK„Z*d$dLdM„Z+e	d%dededee dee	d  e
f fdNdO„ƒZ,e	d%dededee dee	d  e
f fdPdQ„ƒZ-e	d%dededReee.e/f dSee0ee
f  de	d
 f
dTdU„ƒZ1e	d%dededReee.e/f dSee0ee
f  de	d
 f
dVdW„ƒZ2e	d%dededXedSee0ee
f  de	d
 f
dYdZ„ƒZ3e	d%deded[e4dSee0ee
f  de	d f
d\d]„ƒZ5e	d%deded^edSee0ee
f  de	d f
d_d`„ƒZ6d$dadb„Z7	.d'dReee.e/f dce$de	d  fddde„Z8d$dfdg„Z9dhdi„ Z:d$djdk„Z;d$dldm„Z<d$dndo„Z=d$dpdq„Z>d$drds„Z?e@			d)d'ed)edtee dee dSee0ee
f  de	d
 fdudv„ƒZAe@			d)d'ed)edtee dee dSee0ee
f  de	d
 fdwdx„ƒZBd*dzeddfd{d|„ZC			d)ded}ee dee dSee0ee
f  de	d
 f
d~d„ZD			d)ded}ee dee dSee0ee
f  de	d
 f
d€d„ZE	.d+d}ee d‚e$ddfdƒd„„ZFe	d%d&ed'ed(ed)ed…e
dee defd†d‡„ƒZGed&ed'ed(ed)eddf
dˆd‰„ƒZHdedŠeddfd‹dŒ„ZIdedeJe ddfdŽd„ZKe	d%d&ed'ed(ed)edSee0ee
f  de	d fdd‘„ƒZLe	d%d&ed'ed(ed)edSee0ee
f  de	d fd’d“„ƒZMe	d%d&ed'ed(ed)edSee0ee
f  de	d” fd•d–„ƒZNe	d%dededSee0ee
f  de	d fd—d˜„ƒZOed&ed'ed(ed)eddf
d™dš„ƒZPed,dededdfd›dœ„ƒZQ				 d-dže$dŸe$d e$d¡e$ddf
d¢d£„ZRe			 d.deded¤ee d¥ee d¦eddfd§d¨„ƒZSe		d/d©edªed¤ee d¥ee ddf
d«d¬„ƒZTd0d®eddfd¯d°„ZUd$d±d²„ZVd$d³d´„ZWdµeeeXf ddfd¶d·„ZY	d1d¹edSee0ee
f  ddfdºd»„ZZ		d/d¼ed½ee d¹ee defd¾d¿„Z[e	d%dededSee0ee
f  de	d
 fdÀdÁ„ƒZ\e	d%deded;e$dee fdÂdÃ„ƒZ]d$dÄdÅ„Z^d$dÆdÇ„Z_d2dÈe	dÉ ddfdÊdË„Z`d$dÌdÍ„ZadÎee	dÏ ef ddfdÐdÑ„Zbd$dÒdÓ„Zcd$dÔdÕ„Zd	Ö	Ö	×	×d3dØedÙedÚedÛeddf
dÜdÝ„Ze	d4dÞedSee0ee
f  ddfdßdà„Zf	d4dáedSee0ee
f  ddfdâdã„Zgd%d&ed(ee ddfdädå„Zhe@d%d'ed)ee ddfdædç„ƒZid2dèe	dÉ ddfdédê„Zjd$dëdì„Zkd$dídî„Zled&ed'ed(ed)ede	d
 f
dïdð„ƒZmd$dñdò„Zndted}eddfdódô„Zodõeddfdöd÷„Zpdøeddfdùdú„Zqd$dûdü„ZrdýeJe ddfdþdÿ„ZsdýeJe ddfd d„Ztd%dee ddfdd„Zud%dSee0ee
f  de	d
 fdd„Zvd$dd„Zwd$d	d
„Zx	.d5dededefdd„Zydd„ Zzdd„ Z{dd„ Z|dd„ Z}dd„ Z~dd„ Zdefdd„Z€d%dSee0ee
f  fdd„Zde/dededdfd d!„Z‚d$d"d#„Zƒd$d$d%„Z„d$d&d'„Z…d$d(d)„Z†d*d+„ Z‡d,d-„ Zˆd6defd.d/„Z‰d6defd0d1„ZŠd2d3„ Z‹d4d5„ ZŒd^efd6d7„ZŽd8efd9d:„Zd;d<„ Z‘d$d=d>„Z’d$d?d@„Z“dAdB„ Z”d$dCdD„Z•dEdF„ Z–dGdH„ Z—dIdJ„ Z˜d%dKdL„Z™d%dMdN„Zšd$dOdP„Z›d$dQdR„Zœd$dSdT„Zd$dUdV„Zžd$dWdX„ZŸd$dYdZ„Z d%d[d\„Z¡d$d]d^„Z¢d$d_d`„Z£d$dadb„Z¤d$dcdd„Z¥d$dedf„Z¦d$dgdh„Z§d$didj„Z¨d$dkdl„Z©d$dmdn„Zªd$dodp„Z«d$dqdr„Z¬d$dsdt„Z­d$dudv„Z®d$dwdx„Z¯d$dydz„Z°d$d{d|„Z±d6d$d}d~„Z²d$dd€„Z³d+deddfdd‚„Z´d%deddfdƒd„„Zµdededdfd…d†„Z¶d$d‡dˆ„Z·d$d‰dŠ„Z¸d$d‹dŒ„Z¹d$ddŽ„Zºd$dd„Z»d$d‘d’„Z¼d$d“d”„Z½d$d•d–„Z¾d$d—d˜„Z¿d$d™dš„ZÀd$d›dœ„ZÁd$ddž„ZÂdededŸed@eÃddf
d d¡„ZÄdeded@eÃddfd¢d£„ZÅd$d¤d¥„ZÆd$d¦d§„ZÇd$d¨d©„ZÈd$dªd«„ZÉd$d¬d­„ZÊd$d®d¯„ZËd$d°d±„ZÌd$d²d³„ZÍd$d´dµ„ZÎd$d¶d·„ZÏd$d¸d¹„ZÐd$dºd»„ZÑd$d¼d½„ZÒd$d¾d¿„ZÓd$dÀdÁ„ZÔd$dÂdÃ„ZÕd$dÄdÅ„ZÖd$dÆdÇ„Z×d$dÈdÉ„ZØd$dÊdË„ZÙd$dÌdÍ„ZÚd$dÎdÏ„ZÛd$dÐdÑ„ZÜd$dÒdÓ„ZÝd$dÔdÕ„ZÞd$dÖd×„Zßd$dØdÙ„Zàd%d$dÚdÛ„Zád$dÜdÝ„Zâd$dÞdß„Zãd$dàdá„Zäd$dâdã„Zådededdfdädå„Zædededdfdædç„Zçdèdé„ Zèd$dêdë„Zéd$dìdí„Zêd$dîdï„Zëd$dðdñ„Zìd$dòdó„Zíd$dôdõ„Zîd$död÷„Zïd$dødù„Zðd$dúdû„Zñd$düdý„Zòd$dþdÿ„Zód$d d„Zôd$dd„Zõd$dd„Zöd$dd„Z÷d$dd	„Zød$d
d„Zùd$dd„Zúd$dd„Zûd$dd„Züd$dd„Zýd$dd„Zþd$dd„Zÿd$dd„Z d$dd„Zd$dd„Zd$dd„Zd$d d!„Zd$d"d#„Z‡  ZS (7  Ú	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    ÚreturnNc                    sH  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| _0d| _1d| _2d| _3d| _4d| _5d| _6d| _7d| _8d| _9d| _:d| _;d| _<d| _=d| _>d| _?g | _@g | _Ai | _Bg | _Cd| _Di | _EtFtGƒ| _Hd| _Id
| _Jd| _Kd| _Ld
| _Md| _Nd| _Od| _Pd| _Qd
| _Rd
| _Sd
| _Td| _Ud| _Vd| _Wd| _Xd| _Yd| _Zd| _[d| _\i | _]g | _^tFtGƒ| __g | _`i | _ai | _bi | _cd| _dd| _ed| _ftFtGƒ| _gg | _hd| _id| _jd| _kg | _ld| _md| _nd| _oddg| _pd| _qi | _ri | _si | _ti | _ud| _vd| _wd
| _xd| _yd| _zg | _{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| _™tFtGƒ| _šd| _›d| _œd| _d| _žd| _Ÿd| _ d| _¡d| _¢d| _£d| _¤d| _¥d| _¦d| _§d| _¨d| _kd| _¥d| _¦d| _©d| _ªd| _«i | _¬d| _­d| _®d| _¯d| _°d| _±dS )z
        Constructor.

        Nr   Fi×  i   i @  éÿ  Ú é   r   Tçffffffæ?ç      è?ç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©r3   ©Ú	__class__r:   r;   rl   Õ   sd  






zWorksheet.__init__ÚrowrL   c                 G   s>  |dkr| j ||g|¢R Ž S | jr | d¡r | j||g|¢R Ž S | d¡r4| d¡r4| j||g|¢R Ž S d|v r]| jr]t d|¡sSt d|¡sSt d|¡sSt d	|¡r]| j||g|¢R Ž S | j	r•z!t
|ƒ}| jspt|ƒs€t|ƒs€| j|||g|d
d … ¢R Ž W S W n	 tyŠ   Y nw | j||g|¢R Ž S | j||g|¢R Ž S )Nr^   ú=z{=Ú}r?   z(ftp|http)s?://zmailto:z(in|ex)ternal:zfile://r   )Ú_write_blankr  Ú
startswithÚ_write_formulaÚendswithr  ÚreÚmatchÚ
_write_urlr  Úfloatr  r   r
   Ú_write_numberr2   Ú_write_string)r3   Útokenr  rL   r4   Úfr:   r:   r;   Ú_write_token_as_string±  s<   ÿþ
ü
û
ú
ù
 €þz Worksheet._write_token_as_string)r   éÿÿÿÿc                 G   ó   | 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©r3   r  rL   r4   r:   r:   r;   Úwrite×  s   zWorksheet.writec           	      G   s4  |st dƒ‚|d }|j}|| jv r(| j| }|| ||g|¢R Ž }|d u r&n|S |d u r6| j||g|¢R Ž S |tu rD| j||g|¢R Ž S |tttt	fv rV| j
||g|¢R Ž S |tu re| 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 zt|ƒ}| j
|||g|dd … ¢R Ž W S  tyç   Y n t y÷   t dt|ƒ› dƒ‚w zt|ƒ | j||g|¢R Ž W S  ty   t dt|ƒ› dƒ‚w )Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type z in write())Ú	TypeErrorr  r  r"  ÚboolÚ_write_booleanr)  r1   r   r   r*  Ústrr.  ÚdatetimeÚdateÚtimeÚ	timedeltaÚ_write_datetimeÚ
isinstancer&   r   r(  r2   Útyper+  )	r3   r  rL   r4   r,  Ú
token_typeÚwrite_handlerÚfunction_returnr-  r:   r:   r;   r2  ë  sb   

ü


 ÿÿzWorksheet._writeÚstringÚcell_format)r   r/  éþÿÿÿc                 C   ó   |   ||||¡S )a›  
        Write a string to a worksheet cell.

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

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

        )r+  )r3   r  rL   rC  rD  r:   r:   r;   Úwrite_string@  ó   zWorksheet.write_stringc                 C   s~   d}|   ||¡r
dS t|ƒ| jkr|d | j… }d}| js$| j |¡}n|}| jr3|| jkr3|  |¡ t||ƒ| j	| |< |S ©Nr   r/  rE  )
Ú_check_dimensionsÚlenrz   rq   ro   Ú_get_shared_string_indexrû   Ú_write_single_rowÚCellStringTuplerÉ   )r3   r  rL   rC  rD  Ú	str_errorÚstring_indexr:   r:   r;   r+  V  s   
zWorksheet._write_stringÚnumberc                 C   rF  )a„  
        Write a number to a worksheet cell.

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

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

        )r*  ©r3   r  rL   rQ  rD  r:   r:   r;   Úwrite_numbers  ó   zWorksheet.write_numberc                 C   sÈ   t |ƒst|ƒr:| jr6t |ƒr|  ||d|d¡S |tjkr&|  ||d|d¡S |tj kr5|  ||d|d¡S ntdƒ‚|jtu rCt	|ƒ}|  
||¡rKdS | jrX|| jkrX|  |¡ 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() optionr/  r   )r   r
   r  r$  ÚmathÚinfr5  r  r   r)  rJ  rq   rû   rM  ÚCellNumberTuplerÉ   rR  r:   r:   r;   r*  Œ  s(   
ÿÿ

zWorksheet._write_numberÚblankc                 C   rF  )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"  )r3   r  rL   rZ  rD  r:   r:   r;   Úwrite_blank³  rH  zWorksheet.write_blankc                 C   sL   |d u rdS |   ||¡rdS | jr|| jkr|  |¡ t|ƒ| j| |< dS )Nr   r/  )rJ  rq   rû   rM  ÚCellBlankTuplerÉ   )r3   r  rL   rN   rD  r:   r:   r;   r"  É  s   
zWorksheet._write_blankr   Úformulac                 C   s   |   |||||¡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$  ©r3   r  rL   r]  rD  Úvaluer:   r:   r;   Úwrite_formulaÝ  s   zWorksheet.write_formulac              	   C   s´   |   ||¡rdS |d u s|dkrtdƒ dS t |¡r&|  |||||||¡S | d¡r;| d¡r;|  |||||||¡S |  |¡}| j	rM|| j
krM|  |¡ t|||ƒ| j| |< dS )Nr/  r^   zFormula can't be None or emptyÚ{r!  r   )rJ  r   Úre_dynamic_functionÚsearchÚwrite_dynamic_array_formular#  r%  Ú_write_array_formulaÚ_prepare_formularq   rû   rM  ÚCellFormulaTuplerÉ   r^  r:   r:   r;   r$  ú  s$   
ÿÿ

zWorksheet._write_formulaÚ	first_rowÚ	first_colÚlast_rowÚlast_colc              
   C   s8   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)rb  rc  rd  re  )r3   rh  ri  rj  rk  r]  rD  r_  r:   r:   r;   Úwrite_array_formula!  s   
ÿøzWorksheet.write_array_formulac           	   
   C   s*   |   |||||||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)re  r  )	r3   rh  ri  rj  rk  r]  rD  r_  Úerrorr:   r:   r;   rd  N  s   øz%Worksheet.write_dynamic_array_formulaFc                 C   sT	  |  d¡r|dd … }|  d¡r|dd … }| d¡r!|d d… }d|v r'|S t dd|¡}t d	d
|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd |¡}t d!d"|¡}t d#d$|¡}t d%d&|¡}t d'd(|¡}t d)d*|¡}t d+d,|¡}t d-d.|¡}t d/d0|¡}t d1d2|¡}t d3d4|¡}t d5d6|¡}t d7d8|¡}t d9d:|¡}t d;d<|¡}t d=d>|¡}t d?d@|¡}| jsù|sù|S t dAdB|¡}t dCdD|¡}t dEdF|¡}t dGdH|¡}t dIdJ|¡}t dKdL|¡}t dMdN|¡}t dOdP|¡}t dQdR|¡}t dSdT|¡}t dUdV|¡}t dWdX|¡}t dYdZ|¡}t d[d\|¡}t d]d^|¡}t d_d`|¡}t dadb|¡}t dcdd|¡}t dedf|¡}t dgdh|¡}t didj|¡}t dkdl|¡}t dmdn|¡}t dodp|¡}t dqdr|¡}t dsdt|¡}t dudv|¡}t dwdx|¡}t dydz|¡}t d{d||¡}t d}d~|¡}t dd€|¡}t dd‚|¡}t dƒd„|¡}t d…d†|¡}t d‡dˆ|¡}t d‰dŠ|¡}t d‹dŒ|¡}t ddŽ|¡}t dd|¡}t d‘d’|¡}t d“d”|¡}t d•d–|¡}t d—d˜|¡}t d™dš|¡}t d›dœ|¡}t ddž|¡}t dŸd |¡}t d¡d¢|¡}t d£d¤|¡}t d¥d¦|¡}t d§d¨|¡}t d©dª|¡}t d«d¬|¡}t d­d®|¡}t d¯d°|¡}t d±d²|¡}t d³d´|¡}t dµd¶|¡}t d·d¸|¡}t d¹dº|¡}t d»d¼|¡}t d½d¾|¡}t d¿dÀ|¡}t dÁdÂ|¡}t dÃdÄ|¡}t dÅdÆ|¡}t dÇdÈ|¡}t dÉdÊ|¡}t dËdÌ|¡}t dÍdÎ|¡}t dÏdÐ|¡}t dÑdÒ|¡}t dÓdÔ|¡}t dÕdÖ|¡}t d×dØ|¡}t dÙdÚ|¡}t dÛdÜ|¡}t dÝdÞ|¡}t dßdà|¡}t dádâ|¡}t dãdä|¡}t dådæ|¡}t dçdè|¡}t dédê|¡}t dëdì|¡}t dídî|¡}t dïdð|¡}t dñdò|¡}t dódô|¡}t dõdö|¡}t d÷dø|¡}t dùdú|¡}t dûdü|¡}t dýdþ|¡}t dÿd |¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t d	d
|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd |¡}t d!d"|¡}t d#d$|¡}t d%d&|¡}t d'd(|¡}t d)d*|¡}t d+d,|¡}t d-d.|¡}t d/d0|¡}t d1d2|¡}t d3d4|¡}t d5d6|¡}t d7d8|¡}t d9d:|¡}t d;d<|¡}|S (=  Nra  r   r   r!  r/  z_xlfn.z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z	\bBYCOL\(z_xlfn.BYCOL(z	\bBYROW\(z_xlfn.BYROW(z\bCHOOSECOLS\(z_xlfn.CHOOSECOLS(z\bCHOOSEROWS\(z_xlfn.CHOOSEROWS(z\bDROP\(z_xlfn.DROP(z
\bEXPAND\(z_xlfn.EXPAND(z
\bFILTER\(z_xlfn._xlws.FILTER(z
\bHSTACK\(z_xlfn.HSTACK(z
\bLAMBDA\(z_xlfn.LAMBDA(z\bMAKEARRAY\(z_xlfn.MAKEARRAY(z\bMAP\(z
_xlfn.MAP(z\bRANDARRAY\(z_xlfn.RANDARRAY(z
\bREDUCE\(z_xlfn.REDUCE(z\bSCAN\(z_xlfn.SCAN(z	\SINGLE\(z_xlfn.SINGLE(z\bSEQUENCE\(z_xlfn.SEQUENCE(z\bSORT\(z_xlfn._xlws.SORT(z
\bSORTBY\(z_xlfn.SORTBY(z
\bSWITCH\(z_xlfn.SWITCH(z\bTAKE\(z_xlfn.TAKE(z\bTEXTSPLIT\(z_xlfn.TEXTSPLIT(z	\bTOCOL\(z_xlfn.TOCOL(z	\bTOROW\(z_xlfn.TOROW(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bVSTACK\(z_xlfn.VSTACK(z\bWRAPCOLS\(z_xlfn.WRAPCOLS(z\bWRAPROWS\(z_xlfn.WRAPROWS(z\bXLOOKUP\(z_xlfn.XLOOKUP(z	\bACOTH\(z_xlfn.ACOTH(z\bACOT\(z_xlfn.ACOT(z\bAGGREGATE\(z_xlfn.AGGREGATE(z
\bARABIC\(z_xlfn.ARABIC(z\bARRAYTOTEXT\(z_xlfn.ARRAYTOTEXT(z\bBASE\(z_xlfn.BASE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBETA.INV\(z_xlfn.BETA.INV(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z
\bBITAND\(z_xlfn.BITAND(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z	\bBITOR\(z_xlfn.BITOR(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z
\bBITXOR\(z_xlfn.BITXOR(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z
\bCONCAT\(z_xlfn.CONCAT(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOTH\(z_xlfn.COTH(z\bCOT\(z
_xlfn.COT(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bCSCH\(z_xlfn.CSCH(z\bCSC\(z
_xlfn.CSC(z\bDAYS\(z_xlfn.DAYS(z\bDECIMAL\(z_xlfn.DECIMAL(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z
\bF.DIST\(z_xlfn.F.DIST(z\bF.INV.RT\(z_xlfn.F.INV.RT(z	\bF.INV\(z_xlfn.F.INV(z
\bF.TEST\(z_xlfn.F.TEST(z\bFILTERXML\(z_xlfn.FILTERXML(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bIFNA\(z_xlfn.IFNA(z\bIFS\(z
_xlfn.IFS(z	\bIMAGE\(z_xlfn.IMAGE(z
\bIMCOSH\(z_xlfn.IMCOSH(z	\bIMCOT\(z_xlfn.IMCOT(z
\bIMCSCH\(z_xlfn.IMCSCH(z	\bIMCSC\(z_xlfn.IMCSC(z
\bIMSECH\(z_xlfn.IMSECH(z	\bIMSEC\(z_xlfn.IMSEC(z
\bIMSINH\(z_xlfn.IMSINH(z	\bIMTAN\(z_xlfn.IMTAN(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bISOMITTED\(z_xlfn.ISOMITTED(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bLET\(z
_xlfn.LET(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z	\bMUNIT\(z_xlfn.MUNIT(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bNORM.INV\(z_xlfn.NORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bPDURATION\(z_xlfn.PDURATION(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPHI\(z
_xlfn.PHI(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bRRI\(z
_xlfn.RRI(z\bSECH\(z_xlfn.SECH(z\bSEC\(z
_xlfn.SEC(z
\bSHEETS\(z_xlfn.SHEETS(z	\bSHEET\(z_xlfn.SHEET(z
\bSKEW.P\(z_xlfn.SKEW.P(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z
\bT.DIST\(z_xlfn.T.DIST(z\bT.INV.2T\(z_xlfn.T.INV.2T(z	\bT.INV\(z_xlfn.T.INV(z
\bT.TEST\(z_xlfn.T.TEST(z\bTEXTAFTER\(z_xlfn.TEXTAFTER(z\bTEXTBEFORE\(z_xlfn.TEXTBEFORE(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bVALUETOTEXT\(z_xlfn.VALUETOTEXT(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z
\bXMATCH\(z_xlfn.XMATCH(z\bXOR\(z
_xlfn.XOR(z
\bZ.TEST\(z_xlfn.Z.TEST()r#  r%  r&  Úsubr  )r3   r]  Úexpand_future_functionsr:   r:   r;   rf  |  sT  



ÿÿzWorksheet._prepare_formulac                 C   sd   d| vr| S g }d}| D ] }|dkr| }|r|  |¡ q|dkr'|  d¡ q|  |¡ qd |¡S )Nú@Fú"z[#This Row],r^   )ÚappendÚjoin)r]  Úescaped_formulaÚin_string_literalÚcharr:   r:   r;   Ú_prepare_table_formula3  s   

z Worksheet._prepare_table_formularl  c	                 C   s  ||kr	||}}||kr||}}|   ||¡rdS |   ||¡r"dS ||kr0||kr0t||ƒ}	nt||ƒd t||ƒ }	|  |¡}| jrN|| jkrN|  |¡ t||||	|ƒ| j| |< | js‚t||d ƒD ]}
t||d ƒD ]}|
|ksx||kr€|  	|
|d|¡ qnqedS )Nr/  r?   r   r   )
rJ  r,   rf  rq   rû   rM  ÚCellArrayFormulaTuplerÉ   Úranger*  )r3   rh  ri  rj  rk  r]  rD  r_  ÚatypeÚ
cell_ranger  rL   r:   r:   r;   re  Q  s<   

ÿþÿ


ÿ€þzWorksheet._write_array_formular:  c                 C   rF  )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.

        )r=  )r3   r  rL   r:  rD  r:   r:   r;   Úwrite_datetime‡  rT  zWorksheet.write_datetimec                 C   sZ   |   ||¡rdS | jr|| jkr|  |¡ |  |¡}|d u r!| j}t||ƒ| j| |< dS )Nr/  r   )rJ  rq   rû   rM  Ú_convert_date_timer	  ÚCellDatetimeTuplerÉ   )r3   r  rL   r:  rD  rQ  r:   r:   r;   r=     s   

zWorksheet._write_datetimeÚbooleanc                 C   rF  )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.

        )r7  ©r3   r  rL   r  rD  r:   r:   r;   Úwrite_booleanµ  s   zWorksheet.write_booleanc                 C   sP   |   ||¡rdS | jr|| jkr|  |¡ |rd}nd}t||ƒ| j| |< dS )Nr/  r   r   )rJ  rq   rû   rM  ÚCellBooleanTuplerÉ   )r3   r  rL   r  rD  r_  r:   r:   r;   r7  Ê  s   
zWorksheet._write_booleanÚurlÚtipc                 C   s   |   ||||||¡S )aˆ  
        Write a hyperlink to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )r(  )r3   r  rL   r…  rD  rC  r†  r:   r:   r;   Ú	write_urlå  s   zWorksheet.write_urlc           
      C   s  |   ||¡rdS t|tƒsL| j}d|v r| dd¡\}}	n|}d}	t|ƒ|ks-t|	ƒ|kr:td|› d|› dƒ dS t|ƒ}|d urE||_|d urL||_|  j	d7  _	| j	d	krctd|j
› d
ƒ dS |d u rj| j}| jsƒ| jrz|| jkrz|  |¡ |  |||j|¡ || j| |< dS )Nr/  ú#r   r^   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   )rJ  r>  r   r  rA   rK  r   Ú_textÚ_tiprä   Ú_original_urlr
  r  rq   rû   rM  r+  Útextr  )
r3   r  rL   r…  rD  rC  r†  Úmax_urlÚurl_strÚ
anchor_strr:   r:   r;   r(    s@   
ÿ
ÿ
zWorksheet._write_urlr4   )r   r/  rE  r‰  rŠ  éûÿÿÿc                 G   r0  )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_stringr3  r:   r:   r;   Úwrite_rich_string@  s   zWorksheet.write_rich_stringc                 G   sü  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 ]G}t|tƒsn|dkrW|
 |	¡ |
 |¡ n|
 |¡ |dkrgt
dƒ  d	S ||7 }d
}n|dkr}|dkr}t
dƒ  dS |
 |¡ d}|d7 }qAt|
d tƒs–| j d¡ |
D ],}t|tƒr«| j d¡ |  |¡ q˜g }t|ƒr¶| d¡ | j d||¡ | j d¡ q˜| jj ¡ }t	|ƒ| jkrØt
dƒ dS | jsâ| j |¡}n|}| jrñ|| jkrñ|  |¡ t|||ƒ| j| |< dS )Nr   r^   r/  rR   é   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Š  rC  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().rE  )ÚlistrJ  r>  r!   Úpopr	   r.   rú   Ú_set_filehandlerK  r   rt  Ú_xml_start_tagÚ_write_fontr%   Ú_xml_data_elementÚ_xml_end_tagÚfhÚgetvaluerz   rq   ro   rL  rû   rM  ÚCellRichStringTuplerÉ   )r3   r  rL   r4   ÚtokensrD  rP  Ú
raw_stringr   ÚdefaultÚ	fragmentsÚpreviousÚposr,  Ú
attributesrC  r:   r:   r;   r“  Z  s†   ÿ


ÿÿ



ÿ
ÿzWorksheet._write_rich_stringc                 C   s   || 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  )r3   Ú	user_typeÚuser_functionr:   r:   r;   Úadd_write_handlerÓ  s   zWorksheet.add_write_handlerc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }q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   r1  ©r3   r  rL   ÚdatarD  r,  ro  r:   r:   r;   Ú	write_rowâ  ó   
zWorksheet.write_rowc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }q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   r1  r­  r:   r:   r;   Úwrite_columnû  r°  zWorksheet.write_columnÚsourceÚoptionsc                 C   s\   |   ||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 (ú, ú).r/  r   )rJ  r   Ú_image_from_sourceÚ_rowÚ_colÚ_set_user_optionsrï   rt  )r3   r  rL   r²  r³  Úimager:   r:   r;   Úinsert_image  s   
zWorksheet.insert_imagec                 C   s¬   |   ||¡rtd|› d|› dƒ dS |du ri }|  ||¡}| |¡ | dd¡}|jrC|du 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µ  r/  NrD  TFú#VALUE!r   )rJ  r   r¶  r¹  Úgetr…  r
  r  r‡  r  Úget_image_indexÚCellErrorTuplerÉ   )r3   r  rL   r²  r³  rº  rD  Úimage_indexr:   r:   r;   Úembed_image:  s"   
zWorksheet.embed_imagerŽ  c                 C   s¼   |   ||dd¡rtd|› d|› dƒ dS |du rd}|du r!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µ  r/  Nr^   Úx_offsetr   Úy_offsetÚx_scaler   Úy_scaleÚobject_positionÚdescriptionÚ
decorativeF)rJ  r   r½  rò   rt  )r3   r  rL   rŽ  r³  rÂ  rÃ  rÄ  rÅ  ÚanchorrÇ  rÈ  r:   r:   r;   Úinsert_textboxm  s:   õÿzWorksheet.insert_textboxÚchartc                 C   s  |   ||dd¡rtd|› d|› dƒ dS |du ri }|js%|jr+|jjr+tdƒ dS d|_|jr5d|j_| d	d
¡}| dd
¡}| dd¡}| dd¡}| dd¡}	| dd¡}
| dd¡}|jdkrg|j}|jdkro|j}|jru|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µ  r/  Nz7Chart cannot be inserted in a worksheet more than once.rE  rÂ  r   rÃ  rÄ  r   rÅ  rÆ  rÇ  rÈ  F)rJ  r   Úalready_insertedÚcombinedr½  rÄ  rÅ  rÂ  rÃ  rî   rt  )r3   r  rL   rË  r³  rÂ  rÃ  rÄ  rÅ  rÉ  rÇ  rÈ  r:   r:   r;   Úinsert_chart£  sP   

öÿzWorksheet.insert_chartÚcommentc                 C   sN   |   ||¡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.

        r/  rE  Tr   )rJ  rK  rz   rÎ   rÐ   r   rÑ   )r3   r  rL   rÏ  r³  r:   r:   r;   Úwrite_commentì  s   zWorksheet.write_commentc                 C   ó
   d| _ dS )z†
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        TN)rÔ   r  r:   r:   r;   Úshow_comments  ó   
zWorksheet.show_commentsÚis_byte_streamc                 C   s    |   |¡}|| _|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.

        zƒThe `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   )r3   r²  rÔ  rº  r:   r:   r;   Úset_background  s   
ÿzWorksheet.set_backgroundc                 C   ó
   || _ dS )z¦
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)rÓ   )r3   Úauthorr:   r:   r;   Úset_comments_author8  rÓ  zWorksheet.set_comments_authorc                 C   s   | j S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rm   r  r:   r:   r;   Úget_nameE  s   zWorksheet.get_namec                 C   s   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‡   rn   r  Úactivesheetr  r:   r:   r;   ÚactivateS  s   zWorksheet.activatec                 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  r:   r:   r;   Úselecte  s   
zWorksheet.selectc                 C   rÜ  )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N©r   r‡   r  r:   r:   r;   Úhidev  ó   
zWorksheet.hidec                 C   rÜ  )z˜
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        r•  r   NrÞ  r  r:   r:   r;   Úvery_hidden†  rà  zWorksheet.very_hiddenc                 C   s   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   rn   r  Ú
firstsheetr  r:   r:   r;   Úset_first_sheet–  s   zWorksheet.set_first_sheetÚwidthc                 C   sÚ   |du ri }||kr||}}d}|  dd¡}|  dd¡}|  dd¡}	|s)|r,|r,d}
nd}
|  d|||
¡r8dS |  d|||
¡rBdS t|	dƒ}	t|	d	ƒ}	t| j|	ƒ| _t||d
 ƒD ]}||||	|dg| j|< qZd| _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   r/  é   r   )r½  rJ  ÚmaxÚminrº   r{  r   rà   )r3   ri  rk  rä  rD  r³  Ú
ignore_rowr   rå  ræ  Ú
ignore_colrL   r:   r:   r;   Ú
set_column¨  s,   


zWorksheet.set_columnc                 C   s$   |dur	|   |¡}|  |||||¡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.

        N)Ú_pixels_to_widthrì  )r3   ri  rk  rä  rD  r³  r:   r:   r;   Úset_column_pixelsë  s   
zWorksheet.set_column_pixelséþ  Ú	max_widthc                 C   sÂ  | j r	tdƒ dS | jdu rdS i }t|  |¡dƒ}t| jj| jjjd}t	| j
| jd ƒD ]Í}| j |¡s7q.t	| j| jd ƒD ]º}|| j| v rú| j| | }|jj}d}|dv r„|dkrf|j}	||	 }
n|j}
d	|
vrrt|
ƒ}nj|
 d	¡D ]}
t|
ƒ}t||ƒ}qwnX|d
kr’dtt|jƒƒ }nJ|dkrš| j}nB|dkr§|jr¤d}n8d}n5|dv rÜt|jttfƒrÂ|jdkrÁdtt|jƒƒ }nt|jtƒrÎt|jƒ}nt|jtƒrÜ|jrÚd}nd}| j  ||f¡rì|dkrì|d7 }| |d¡}||krú|||< q@q.| !¡ D ]^\}}|  |d ¡}t||ƒ}| j" |¡rR| j" |¡}|d }|d }|durB|sB||kr@|| j"| d< d| j"| d< q || j"| d< d| j"| d< q |dddddg| j"|< q 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   ©rU   rY   rU   Ú
rT   rç  rX   rV   é   é$   ©rW   rZ   é   é   TF)#rq   r   r|   ré  rí  Úsortedro   Ústring_tableÚ__getitem__r{  r{   rÉ   r½  r}   r~   r  Ú__name__rC  r¤  r*   rA   rè  rK  r8  rQ  rÅ   r  r>  r_  r)  r1   r6  rÞ   Úitemsr   )r3   rð  Úcol_width_maxÚstringsÚrow_numÚcol_numÚcellÚ	cell_typeÚlengthÚ	string_idrC  Ú
seg_lengthÚ	width_maxÚpixel_widthrä  r   Ú
user_widthr   r:   r:   r;   Úautofit	  sŽ   
ÿ

þ
€€®U

€çzWorksheet.autofitÚheightc           	      C   sÄ   |du ri }| j dur| j }nd}|  ||¡rdS |du r | 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   r/  r   Frå  ræ  r   rç  T)
r}   rJ  rÁ   r½  rè  ré  r¹   r²   rá   rß   )	r3   r  r  rD  r³  Úmin_colr   rå  ræ  r:   r:   r;   Úset_rowž  s,   


zWorksheet.set_rowc                 C   s"   |dur	|   |¡}|  ||||¡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.

        N)Ú_pixels_to_heightr  )r3   r  r  rD  r³  r:   r:   r;   Úset_row_pixelsÞ  s   
zWorksheet.set_row_pixelsÚhide_unused_rowsc                 C   s6   |du r| 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Æ   )r3   r  r  r:   r:   r;   Úset_default_rowø  s   

ÿzWorksheet.set_default_rowr®  c                 C   s‚  ||kr||krt dƒ dS ||kr||}}||kr ||}}|  ||¡r(dS |  ||¡r0dS t||||ƒ}t||d ƒD ]I}t||d ƒD ]?}	| j ||	f¡rd| j ||	f¡}
td|› d|
› dƒ‚| j ||	f¡r| j ||	f¡}
td|› d|
› dƒ‚|| j||	f< qGq>| j 	||||g¡ |  
||||¡ t||d ƒD ]}t||d ƒD ]}	||krµ|	|krµqª|  ||	d|¡ qªq¡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 cellr/  r   zMerge range 'ú!' overlaps previous merge range 'ú'.ú!' overlaps previous table range 'r^   r   )r   rJ  r+   r{  rË   r½  r    rÌ   rÊ   rt  r2  r"  )r3   rh  ri  rj  rk  r®  rD  r}  r  rL   Úprevious_ranger:   r:   r;   Úmerge_range	  sN   

ÿÿÿÿñýzWorksheet.merge_rangec           
      C   sÄ   ||k r	||}}||k r||}}|   ||||¡}t||||ƒ}|| _|| _||g| _t||d ƒD ],}| j ||f¡rV| j ||f¡\}}	|dkrVtd|› d|	› dƒ‚d|f| j||f< q3d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 'r  Ú	worksheetN)	Ú_convert_name_arear+   rØ   rÙ   rÚ   r{  rÞ   r½  r    )
r3   rh  ri  rj  rk  ÚareaÚrefrL   rÝ   rÚ   r:   r:   r;   Ú
autofilterd	  s(   


ÿÿözWorksheet.autofilterÚcriteriac                 C   sf  | j s	tdƒ dS zt|ƒ W n# ty2   |}t|d ƒ\}}|| jkr0td|› dƒ Y dS Y nw | j\}}||k s@||krPtd|› d|› d|› d	ƒ dS |  |¡}t|ƒd
vrctd|› dƒ |  	||¡}t|ƒdkr|d dkr|  
||d g¡ n/t|ƒdkr¤|d dkr¤|d dkr¤|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()NrJ   úInvalid column 'ú'úColumn 'ú%' outside autofilter() column range (r´  ú))r_   rç  z(Incorrect number of tokens in criteria 'r•  r   r   rø  r_   é   )rØ   r   r1   r2   r(   ry   rÚ   Ú_extract_filter_tokensrK  Ú_parse_filter_expressionÚfilter_column_listrÜ   rÝ   rÛ   )r3   rL   r  Ú
col_letterrN   Ú	col_firstÚcol_lastr£  r:   r:   r;   Úfilter_column	  sD   
þû
	ÿÿÿ
0


zWorksheet.filter_columnÚfiltersc                 C   s¾   | j s	tdƒ dS zt|ƒ W n# ty2   |}t|d ƒ\}}|| jkr0td|› dƒ Y dS Y nw | j\}}||k s@||krPt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.

        r  NrJ   r  r  r   r!  ú,r"  r   )
rØ   r   r1   r2   r(   ry   rÚ   rÜ   rÝ   rÛ   )r3   rL   r+  r'  rN   r(  r)  r:   r:   r;   r&  Ì	  s4   
þû
	ÿÿÿ


zWorksheet.filter_column_listc                 C   sÚ  |   ||dd¡r
dS |   ||dd¡rdS |du ri }n| ¡ }h d£}| ¡ D ]}||vr8td|› dƒ  dS q'd|v rC|d |d	< d
|v rM|d
 |d	< d|vrWtdƒ dS dddddddddddddœ}|d |vrxtd|d › dƒ dS ||d  |d< |d dkr–| d¡du r–| d¡du r–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r4d7|d;< n|d; |
vrGtd4|d; › d<ƒ dS |
|d;  |d;< |d d=v rˆ|d	 rˆt|d	 ƒrˆ|  |d	 ¡}|d>›|d	< |d rˆt|d ƒrˆ|  |d ¡}|d>›|d< | d¡r£t|d ƒd?kr£td@|d › dAƒ dS | dB¡r¾t|dB ƒd?kr¾tdC|dB › dAƒ dS | d¡rÙt|d ƒdDkrÙtdE|d › dFƒ dS | dG¡rôt|dG ƒdDkrôtdH|dG › dFƒ dS |d dkrt|d	 t	ƒr| j
|d	 Ž }t|ƒdDkrtdI|› dJƒ dS dK|vr$d8|dK< dL|vr-d8|dL< dM|vr6d8|dM< dN|vr?d8|dN< ||||gg|dO< dP|v rV|dO  |dP ¡ dQ|v re|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.
        Tr/  N>   r_  r²  ÚmaximumÚminimumr  ÚdropdownÚvalidateÚ
error_typeÚ
show_errorÚ
show_inputÚerror_titleÚinput_titleÚmulti_rangeÚother_cellsÚignore_blankÚerror_messageÚinput_messageúUnknown parameter 'z' in data_validation()rE  r²  r_  r.  r0  z5Parameter 'validate' is required in data_validation()ÚnoneÚwholeÚdecimalr™  r:  r;  Ú
textLengthÚcustom)Úanyz	any valuezwhole numberr=  Úintegerr>  r™  r:  r;  ztext lengthr  r@  zUnknown validation type 'z/' for parameter 'validate' in data_validation()r5  r:  Úbetweenr  r-  z5Parameter 'criteria' is required in data_validation()únot betweenÚ
notBetweenúequal toÚequalr   ú==únot equal toÚnotEqualú!=ú<>úgreater thanÚgreaterThanú>ú	less thanÚlessThanú<úgreater than or equal toÚgreaterThanOrEqualú>=úless than or equal toÚlessThanOrEqualú<=zUnknown criteria type 'z/' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   r•  )ÚstopÚwarningÚinformationr1  z' for parameter 'error_type'.©r:  r;  ú.16gé    zLength of input title 'z' exceeds Excel's limit of 32r4  zLength of error title 'éÿ   zLength of input message 'z' exceeds Excel's limit of 255r9  zLength of error message 'zLength of list items 'z;' exceeds Excel's limit of 255, use a formula range insteadr8  r/  r3  r2  Úcellsr7  r6  ú$r^   )rJ  ÚcopyÚkeysr   r½  r&   r  rK  r>  r™  Ú	_csv_joinrB   Úreplacerü   rt  )r3   rh  ri  rj  rk  r³  Úvalid_parametersÚ	param_keyÚvalid_typesÚcriteria_typesÚerror_typesÚ	date_timer]  r:   r:   r;   Údata_validationö	  sR  þôÿ
ÿþý
ÿ
þ
ýÿþýüûúùø	÷
öõôóòñðÿ
ÿûý

ÿ
ÿþ
ýÿÿÿÿ
ÿ





zWorksheet.data_validationc                 C   s`  |   ||dd¡r
dS |   ||dd¡rdS |du ri }n| ¡ }h d£}| ¡ D ]}||vr8td|› dƒ  dS q'd|vrCt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rt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 rt|dS tƒrt|dS ƒ ¡ |dS< |d dTv rxd|d< dS|v r:t|dS ƒs-tdUƒ dS |  	|dS ¡}
|
dV›|dS< dW|v rYt|dW ƒsLtdXƒ dS |  	|dW ¡}
|
dV›|dW< dY|v rxt|dY ƒskt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 r5|d‰ }| dŠd‹¡}dŒ|v rG|dŒ rG|dŒ  ¡ |dŒ< | j|d< |  jdŽ7  _| js™| 
d¡s™| 
d¡s™| 
d‘¡s™| 
d’¡s™| 
d“¡s™| 
d”¡s™| 
d•¡s™| 
d–¡s™| 
d—¡s™| 
d˜¡s™| 
d™¡rd|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ž< n<|dR dFkrødF|d< d¢|› d£|› d¤|› d¥|dž< n"|dR dGkrdG|d< d¦|› d£|› d¤|› d¥|dž< ntd§|› dƒ |d dkré|dR dHkr1d¨|› d©|dž< n¸|dR dIkrAd¨|› dª|dž< n¨|dR d«krQd¨|› d¬|dž< n˜|dR dJkrdd­|› d®|› d¯|dž< n…|dR dKkrwd°|› d±|› d²|dž< nr|dR dLkrŠd°|› d³|› d´|dž< n_|dR dMkrdµ|› d¶|› d·|dž< nL|dR dNkr³d¸|› d¹|› dº|› d»|dž< n6|dR dOkrÆd¸|› d¼|› d½|dž< n#|dR dPkrßd¸|› d¾|› dº|› d¿|› dÀ	|dž< n
tdÁ|dR › dƒ |d dkrødÂ|› dÃ|dž< |d dkrdÂ|› dÄ|dž< |d dkrdÅ|› dÆ|dž< |d d!kr%dÇ|› d¡|dž< |d d"krvdÈ|d< d|dŒ< d|dÉ< d|dÊ< | dËdÌ¡ | dÍdÎ¡ | dÏdÐ¡ | dÑdÐ¡ | dÒtdÓƒ¡ | dÔtdÕƒ¡ t |dÒ ¡|dÒ< t |dÔ ¡|dÔ< |d d#krßdÈ|d< d|dŒ< | dËdÌ¡ | dÉdÖ¡ | dÍdÎ¡ | dÏdÐ¡ | dÑdÐ¡ | dÒtd×ƒ¡ | dÊtdØƒ¡ | dÔtdÙƒ¡ t |dÒ ¡|dÒ< t |dÊ ¡|dÊ< t |dÔ ¡|dÔ< dÚ|vrßdÛ|dÚ< |d d%krŸd|dŒ< | 
dË¡sùdÌ|dË< dÜ|dÝ< n|dË |dÝ< | 
dÍ¡sdÎ|dÍ< dÞ|dß< n|dÍ |dß< | dÏdÐ¡ | dÑdÐ¡ | dàtdáƒ¡ | d‘|dà ¡ | dâdã¡ | d–dã¡ | ddã¡ | d™d‹¡ | d’tdäƒ¡ | d”tdäƒ¡ | d“dã¡ | d•dã¡ | d—d‹¡ | d˜tdåƒ¡ t |dà ¡|dà< t |d‘ ¡|d‘< t |d˜ ¡|d˜< t |d’ ¡|d’< t |d” ¡|d”< | 
dš¡rÐdæ| _|dË dÌkrº|dÏ dÐkrºd|dÏ< |dÍ dÎkrÌ|dÑ dÐkrÌd|dÑ< ||dç< z|dÏ  d1¡|dÏ< W n ttfyç   Y nw z|dÚ  d1¡|dÚ< W n ttfyÿ   Y nw z|dÑ  d1¡|dÑ< W n ttfy   Y nw || jv r(| j|  |¡ dÐS |g| j|< dÐS )èa#  
        Add a conditional format to a worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr/  N>$   r?  Úiconsr_  rR   r-  r.  Úbar_onlyr  Úmax_typeÚmid_typeÚmin_typeÚ	bar_colorÚ	bar_solidÚ	max_colorÚ	max_valueÚ	mid_colorÚ	mid_valueÚ	min_colorÚ	min_valueÚ
icon_styleÚ
icons_onlyÚ
max_lengthÚ
min_lengthr6  Ústop_if_trueÚbar_directionÚbar_no_borderÚdata_bar_2010Úreverse_iconsÚbar_axis_colorÚbar_border_colorÚbar_axis_positionÚbar_negative_colorÚbar_negative_color_sameÚbar_negative_border_colorÚbar_negative_border_color_samer;  z' in conditional_format()rE  r?  z4Parameter 'type' is required in conditional_format()r  ÚcellIsr:  r;  ÚaverageÚaboveAverageÚ	duplicateÚduplicateValuesÚuniqueÚuniqueValuesÚtopÚtop10ÚbottomrŽ  Útime_periodÚ
timePeriodÚblanksÚcontainsBlanksÚ	no_blanksÚnotContainsBlanksÚerrorsÚcontainsErrorsÚ	no_errorsÚnotContainsErrorsÚ2_color_scaleÚ3_color_scaleÚdata_barÚdataBarÚ
expressionÚiconSet)r]  Úicon_setzUnknown value 'z.' for parameter 'type' in conditional_format()Ú	directionrC  rD  rE  rF  rG  r   rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  Ú
containingÚcontainsTextÚnotContainsÚ
beginsWithÚendsWithÚ	yesterdayÚtodayÚ	last7DaysÚlastWeekÚthisWeekÚnextWeekÚ	lastMonthÚ	thisMonthÚ	nextMonth)znot containingzbegins withz	ends withr«  r¬  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthr  r_  r\  z5Conditional format 'value' must be a datetime object.r]  r.  z7Conditional format 'minimum' must be a datetime object.r-  z7Conditional format 'maximum' must be a datetime object.Ú3_arrowsÚ3ArrowsÚ3_flagsÚ3FlagsÚ3_traffic_lights_rimmedÚ3TrafficLights2Ú3_symbols_circledÚ3SymbolsÚ4_arrowsÚ4ArrowsÚ4_red_to_blackÚ4RedToBlackÚ4_traffic_lightsÚ4TrafficLightsÚ5_arrows_grayÚ5ArrowsGrayÚ
5_quartersÚ	5QuartersÚ3_arrows_grayÚ3ArrowsGrayÚ3_traffic_lightsÚ3TrafficLightsÚ3_signsÚ3SignsÚ	3_symbolsÚ	3Symbols2Ú4_arrows_grayÚ4ArrowsGrayÚ	4_ratingsÚ4RatingÚ5_arrowsÚ5ArrowsÚ	5_ratingsÚ5Ratingrz  z_The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format().r‰  zUnknown icon_style 'z' in conditional_format().r_   Útotal_iconsÚ4r#  Ú5rø  rm  r6  ra  r^   rR   Úpriorityr   r  rs  r„  r†  r‡  rˆ  r‰  r€  r…  rƒ  r  Úis_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))r]  ÚnotContainsTextzISERROR(SEARCH("z))zLEFT(r,  z)="rs  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(r"  zNOT(ISERROR(Ú
colorScalerp  rv  rq  ré  ro  rè  ry  r   ru  rx  z#FF7128rt  z#FFEF9CÚ
percentilez#F8696Bz#FFEB84z#63BE7Brw  é2   ÚautoMinÚx14_min_typeÚautoMaxÚx14_max_typerr  z#638EC6rn  Fz#FF0000ú#000000éÚ  r{  )rJ  rb  rc  r   r>  r6  r8  Úupperr&   r  r½  r#  Ú_set_icon_propsr+   r,   re  Ú_get_dxf_indexr   rÿ   rK  Ú
setdefaultr   Ú_from_valuerv   ÚlstripÚKeyErrorÚAttributeErrorrý   rt  )r3   rh  ri  rj  rk  r³  Úvalid_parameterrg  Ú
valid_typeÚcriteria_typerk  Úvalid_iconsr}  Ú
start_cellr_  r  r  r:   r:   r;   Úconditional_format   s  (þÿþýüûúùø	÷
öõôóòñðïíÿÿþýüûúùø	÷
öõôóòñðïà$


ÿþýüûúùø	÷
öõôóòñðïÿÿ
ÿ






ÿþýüûúùø	÷
öõôÿÿÿÿÿÿÿÿÿþÿÿÿÿþýÿÿ


ÿÿÿÿÿþzWorksheet.conditional_format)r   r/  rE  r‰  c           &      C   sª  i }i }|du ri }n|  ¡ }| jrtdƒ dS |  ||dd¡r"dS |  ||dd¡r,dS ||kr5||}}||kr>||}}t||||ƒ}t||d ƒD ]I}	t||d ƒD ]?}
| j |	|
f¡rr| j |	|
f¡}td|› d|› d	ƒ‚| j	 |	|
f¡r| j	 |	|
f¡}td|› d
|› d	ƒ‚|| j|	|
f< qUqLh d£}| 
¡ D ]}||vr¯td|› dƒ  dS qž| dd¡|d< | dd¡|d< | dd¡|d< || }|d rÔ|d8 }|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 rm|d }||d< d |v r*td!|› d"ƒ dS t d#|tj¡r:t d$|¡rDtd%|› d&ƒ dS t d'|¡rUtd(|› d&ƒ dS t d)|¡sct d*|¡rmtd+|› d,ƒ dS d-|v rŽ|d- |d-< |d- du rƒd.|d-< |d-  d d.¡|d-< nd/|d-< |}|}| d¡r |d7 }| d¡rª|d8 }t||||ƒ|d0< t||||ƒ|d1< |d sÅd|d< |d rÐ|d1 |d< d}g |d2< i }t||d ƒD ]}|d3t|ƒ d.d.d.dd.ddd4œ	}d2|v rá|t|d2 ƒkr	|d2 |d  }nd}|rá| d5d¡}| d6¡r |d6 |d< |d }| ¡ }||v r8td7|› d&ƒ  dS d||< | d8¡|d9< d:|v rk|d: rk|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¡}|  |||||¡ n| dE¡rÐ|dE }||dE< |  |||| d5¡¡ |durÛ| ¡ |d5< |||d < |d2  |¡ |d rù|  |||d |d9 ¡ |d7 }qßdF|v rX|dF }d}t||d ƒD ]F}	d} t||d ƒD ]5}
|t|ƒk rL| t|| ƒk rL|| |  }!| |v rD|  |	|
|!||  ¡ n|  |	|
|!d¡ | d7 } q|d7 }qtt||d ƒƒD ]/\}}|d2 | }"|"r|"d: r| |¡}#|"d: }t||d ƒD ]}	|  |	|||#¡ qƒqa| j |¡ |d rÓt||d ƒD ]/}
| j ||
f¡rÈ| j ||
f¡\}$}%|$dGkrÈtdH|› dI|%› d	ƒ‚dJ|f| j||
f< q£d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‰  Tr/  r   zTable range 'r  r  r  >   r®  rm   ÚstyleÚcolumnsÚ	total_rowr  Ú
header_rowÚbanded_rowsÚlast_columnÚfirst_columnÚbanded_columnsr;  ú' in add_table()rE  rø  r÷  r  r   z1Must have at least one data row in in add_table()rú  FÚshow_first_colrù  Úshow_last_colÚshow_row_stripesrû  Úshow_col_stripesÚheader_row_countrö  Útotals_row_shownrm   ú zName 'z&' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz*Invalid Excel characters in add_table(): 'r  z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z-Name looks like a cell name in add_table(): 'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$zInvalid name 'z#' like a RC cell ref in add_table()rô  r^   ÚTableStyleMedium9r{  Úa_rangerõ  ÚColumn)	Úidrm   Útotal_stringÚtotal_functionÚcustom_totalÚtotal_valuer]  rR   Úname_formatrR   r“   z'Duplicate header name in add_table(): 'Úheader_formatr  r]  r   r	  Ú
count_numsÚ	countNumsÚstd_devÚstdDev©r‹  r  Úcountrè  ré  r  ÚsumÚvarr
  r@  r  r  r®  r  zTable autofilter range 'z0' overlaps previous Worksheet autofilter range 'rÉ   ) rb  rq   r   rJ  r+   r{  rÌ   r½  r    rË   rc  r&  r'  ÚUNICODEre  r8  rK  Úlowerr#  rë  ry  rf  ÚsetÚ_table_function_to_formular$  r+  rè  rt  r2  Ú	enumeraterð   rÞ   )&r3   rh  ri  rj  rk  r³  rÉ   Úcol_formatsr}  r  rL   r  rî  rg  Únum_rowsrm   Úfirst_data_rowÚlast_data_rowÚcol_idÚ
seen_namesr  Úcol_dataÚ	user_dataÚxformatÚheader_namer]  ÚfunctionÚ	subtotalsr_  r  r®  ÚiÚjr,  Úcolumn_dataÚformula_formatrÝ   rÚ   r:   r:   r;   Ú	add_tableþ  s†  

ÿÿÿÿñþ

ÿ



÷





ÿ
ÿÿ

ÿ
 

€

ÿÿzWorksheet.add_tablec                 C   s¸  |   ||dd¡r
dS dt||ƒgi}|du ri }h d£}| ¡ D ]}||vr1td|› dƒ  dS q d|vr<td	ƒ d
S | dd¡}|dvrLtdƒ d
S |dkrRd}||d< d|v rot|d tƒrh|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 ]}| 
dd¡}| d¡}d|vrÄ|
d | }| |¡ q­||d< g }|d D ]}| 
dd¡}| |¡ qÔ||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rJd-|d.< n|d/krTd0|d.< nd1|d.< | d2¡}|rkd|vrk|
d | }||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.

        Tr/  Ú	locationsN>   rè  ré  Úaxisr?  r{  rô  ÚweightÚmarkersÚreverseÚlocationÚ	date_axisÚ	low_colorÚ	low_pointÚ
high_colorÚ
high_pointÚ
last_colorÚ
last_pointÚempty_cellsÚfirst_colorÚfirst_pointÚplot_hiddenÚshow_hiddenÚseries_colorÚmarkers_colorÚnegative_colorÚnegative_pointsr;  z' in add_sparkline()r{  z0Parameter 'range' is required in add_sparkline()rE  r?  Úline)rB  ÚcolumnÚwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()rD  Ústackedr1  ÚrangeszMMust have the same number of location and range parameters in add_sparkline()r  ra  r^   r   ú!r6  Úhighr4  ÚlowrA  Únegativer;  Úfirstr8  Úlastr/  ré  rè  r-  r0  r=  r   r.  r9  Úzeror   ÚemptyÚconnectÚspanÚgapr2  rô  Úseriesr>  r@  r?  r:  r7  r5  r3  )rJ  r,   rc  r   r½  r>  r™  rK  r'   rm   re  rë  rt  r$   Ú_set_spark_colorrñ   )r3   r  rL   r³  Ú	sparklinerf  rg  Ú
spark_typeÚrange_countÚlocation_countÚ	sheetnameÚ
new_rangesÚspark_rangeÚnew_locationsr1  rN  Ú
date_rangeÚstyle_idrô  r:   r:   r;   Úadd_sparkline[  s¸   þÿÿ






zWorksheet.add_sparklinec                 C   s^   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€   )r3   rh  ri  rj  rk  ÚpaneÚactive_cellÚsqrefr:   r:   r;   Úset_selection  s   


zWorksheet.set_selectionc                 C   s$   |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„   )r3   r  rL   r:   r:   r;   Úset_top_left_cellB  s   zWorksheet.set_top_left_cellr   ÚvisibleÚsymbols_belowÚsymbols_rightÚ
auto_stylec                 C   s"   || _ || _|| _|| _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¿   )r3   re  rf  rg  rh  r:   r:   r;   Úoutline_settingsT  s
   
zWorksheet.outline_settingsÚtop_rowÚleft_colÚ	pane_typec                 C   s,   |du r|}|du r|}|||||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…   )r3   r  rL   rj  rk  rl  r:   r:   r;   Úfreeze_panesp  s
   zWorksheet.freeze_panesÚxÚyc                 C   s   |   ||||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)rm  )r3   rn  ro  rj  rk  r:   r:   r;   Úsplit_panesŽ  s   zWorksheet.split_panesrc   r³   c                 C   s2   |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 <= 400rc   N)r   r1   r³   )r3   r³   r:   r:   r;   Úset_zoom¦  s   zWorksheet.set_zoomc                 C   rÑ  )zš
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        TN)r¶   r  r:   r:   r;   Úright_to_left¸  rÓ  zWorksheet.right_to_leftc                 C   rÑ  )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r·   r  r:   r:   r;   Ú	hide_zeroÅ  rÓ  zWorksheet.hide_zeroÚcolorc                 C   s   t  |¡| _dS )z“
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   rê  rƒ   ©r3   rv  r:   r:   r;   Úset_tab_colorÒ  s   zWorksheet.set_tab_colorr^   Úpasswordc                 C   sÊ   |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 rS|| ||< qFtd|› dƒ qF||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.

        r^   ÚsheetTÚcontentFÚobjectsÚ	scenariosÚformat_cellsÚformat_columnsÚformat_rowsÚinsert_columnsÚinsert_rowsÚinsert_hyperlinksÚdelete_columnsÚdelete_rowsÚselect_locked_cellsÚsortr  Úpivot_tablesÚselect_unlocked_cellszUnknown protection object: 'r  ry  N)Ú_encode_passwordrc  r   r­   )r3   ry  r³  Údefaultsrñ  r:   r:   r;   Úprotectß  sZ   
ÿþýüûúùø	÷
öõôóòñðï
zWorksheet.protectr}  Ú
range_namec                 C   sr   |du r
t dƒ dS | d¡}| dd¡}|  jd7  _|du r'dt| jƒ }|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()r/  r   ra  r^   r   ÚRanger   )r   rë  re  r¯   r8  rŠ  r®   rt  ©r3   r}  r  ry  r:   r:   r;   Úunprotect_range  s   

zWorksheet.unprotect_rangec                 C   sx   |   ||dd¡rtd|› d|› dƒ dS |du ri }| j}| j}dt| jƒ }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µ  r/  Nr   r   )	rJ  r   rÂ   rÄ   rK  rÖ   r   rt  rÎ   )r3   r  rL   r³  r  rä  Úbutton_numberÚbuttonr:   r:   r;   Úinsert_button;  s   zWorksheet.insert_buttonc                 C   sF   |r	|j s	| ¡  |s| js|  ¡ | _| 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  r7  r‚  r:   r:   r;   Úinsert_checkboxa  s   


zWorksheet.insert_checkboxc                 C   rÜ  )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TN©rŠ   rˆ   r  r:   r:   r;   Úset_landscape‡  ó   
zWorksheet.set_landscapec                 C   rÜ  )z€
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr—  r  r:   r:   r;   Úset_portrait•  r™  zWorksheet.set_portraitÚview)r   r   r•  c                 C   rÖ  )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  )r3   r›  r:   r:   r;   Úset_page_view£  s   
zWorksheet.set_page_viewc                 C   rÑ  )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        r•  Nrœ  r  r:   r:   r;   Úset_pagebreak_view²  rÓ  zWorksheet.set_pagebreak_viewr‰   )r   rj   c                 C   s   |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ˆ   )r3   r‰   r:   r:   r;   Ú	set_paper¿  s   
þzWorksheet.set_paperc                 C   rÜ  )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r‹   rŒ   r  r:   r:   r;   Úcenter_horizontallyÎ  r™  zWorksheet.center_horizontallyc                 C   rÜ  )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r‹   r   r  r:   r:   r;   Úcenter_verticallyÜ  r™  zWorksheet.center_verticallyr`   ra   ÚleftÚrightr‘  r“  c                 C   s   || _ || _|| _|| _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   )r3   r¢  r£  r‘  r“  r:   r:   r;   Úset_marginsê  s   
zWorksheet.set_marginsr“   c                 C   óª  |}|  dd¡}t|ƒdkrtdƒ dS |dur"t|tƒs!d|i}ni }| ¡ }|dur0||d< g | _| d¡rQ| d¡|d	< |  | d¡|¡}d
|_	| j 
|¡ | d¡ro| d¡|d	< |  | d¡|¡}d|_	| j 
|¡ | d¡r| 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_docrb   T)re  rK  r   r>  r±   rb  r—   r½  r¶  Ú_header_positionrt  r  r•   r–   r“   rž   r’   rÏ   )r3   r“   r³  r¨  Úheader_origrº  Úplaceholder_countÚimage_countr:   r:   r;   Ú
set_header  óf   
€




ÿÿÿ


ÿzWorksheet.set_headerr”   c                 C   r¥  )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·  rb   T)re  rK  r   r>  r±   rb  r˜   r½  r¶  r¸  rt  r  r•   r–   r”   rŸ   r’   rÏ   )r3   r”   r³  r¨  Úfooter_origrº  rº  r»  r:   r:   r;   Ú
set_footerT  r½  zWorksheet.set_footerc                 C   sH   |du r|}|d7 }|d7 }d|› d|› }t | jƒ}|d | | _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   ra  z:$rG  )r'   rm   r    )r3   rh  rj  r  rX  r:   r:   r;   Úrepeat_rows¥  s   
zWorksheet.repeat_rowsc                 C   sH   |du r|}t |dƒ}t |dƒ}|d | }t| jƒ}|d | | _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   r?   rG  )r)   r'   rm   r¡   )r3   ri  rk  r  rX  r:   r:   r;   Úrepeat_columns¿  s   


zWorksheet.repeat_columnsÚoptionc                 C   sF   |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‹   )r3   rÅ  r:   r:   r;   Úhide_gridlinesÚ  s   


zWorksheet.hide_gridlinesc                 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  r:   r:   r;   Úprint_row_col_headersò  r™  zWorksheet.print_row_col_headersc                 C   rÑ  )zž
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)r‘   r  r:   r:   r;   Úhide_row_col_headers   rÓ  zWorksheet.hide_row_col_headersc                 C   sJ   |dkr|dkr|| j d kr|| jd 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   r/  )rx   ry   r  r¢   )r3   rh  ri  rj  rk  r  r:   r:   r;   Ú
print_area  s   ÿþýüzWorksheet.print_areac                 C   rÜ  )z„
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)r£   rˆ   r  r:   r:   r;   Úprint_across0  r™  zWorksheet.print_acrossc                 C   s   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ˆ   )r3   rä  r  r:   r:   r;   Úfit_to_pages>  s   
zWorksheet.fit_to_pagesÚ
start_pagec                 C   rÖ  )zœ
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r§   )r3   rÍ  r:   r:   r;   Úset_start_pageP  rÓ  zWorksheet.set_start_pageÚscalec                 C   s>   |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.

        rq  rr  zPrint scale 'z#' outside range: 10 <= scale <= 400Nr   T)r   r¨   r1   rµ   rˆ   )r3   rÏ  r:   r:   r;   Úset_print_scale]  s   

zWorksheet.set_print_scalec                 C   rÇ  )z”
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r¤   rˆ   r  r:   r:   r;   Úprint_black_and_whites  r™  zWorksheet.print_black_and_whiteÚbreaksc                 C   rÖ  )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«   ©r3   rÒ  r:   r:   r;   Úset_h_pagebreaks  rÓ  zWorksheet.set_h_pagebreaksc                 C   rÖ  )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Ó  r:   r:   r;   Úset_v_pagebreaksŽ  rÓ  zWorksheet.set_v_pagebreaksrm   c                 C   s*   |dur	|| _ dS dt| jd ƒ | _ 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  r8  rn   )r3   rm   r:   r:   r;   Úset_vba_name›  s   
zWorksheet.set_vba_namec                 C   sR   |du rdS |  ¡ }h d£}| ¡ D ]}||vr#td|› dƒ  dS q|| _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.

        Nr/  >	   Ú
eval_errorÚformula_rangeÚformula_differsÚformula_unlockedÚcalculated_columnÚtwo_digit_text_yearÚempty_cell_referenceÚlist_data_validationÚnumber_stored_as_textr;  z' in ignore_errors()r   )rb  rc  r   r  )r3   r³  rf  rg  r:   r:   r;   Úignore_errors¬  s   þzWorksheet.ignore_errorsc                 C   sH  |d | _ |d | _|d | _|d | _|d | _|d | _|d | _|d | _|d	 | _|d
 | _	|d | _
|d | _|d | _|d | _|d | _|d | _|d | _|d | _|d | _| jr€d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _| jr¢tj| jd\}}t  |¡ || _!t"|ddd| _#| j#| _$d S d S )Nrm   rn   ro   r  rq   rr   r  r  r  r  r  r	  r
  r  rw   r  r  r  r  g     €)@é   ra   r   ç      à?F)Údirzw+úutf-8©ÚmodeÚencoding)%rm   rn   ro   r  rq   rr   r  r  r  r  r  r	  r
  r  rw   r  r  r  r  rÀ   rÁ   rÂ   rš   r›   rœ   r   rž   rŸ   r•   ÚtempfileÚmkstempÚosÚcloser  Úopenr  r   )r3   Ú	init_dataÚfdÚfilenamer:   r:   r;   Ú_initializeÛ  sJ   



















özWorksheet._initializec                 C   s  |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | js$|  ¡  n|  	¡  |  
¡  |  ¡  | jr7|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |   d¡ |  !¡  d S )Nr  )"Ú_xml_declarationÚ_write_worksheetÚ_write_sheet_prÚ_write_dimensionÚ_write_sheet_viewsÚ_write_sheet_format_prÚ_write_colsrq   Ú_write_sheet_dataÚ_write_optimized_sheet_dataÚ_write_sheet_protectionÚ_write_protected_rangesrw   Ú_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  r:   r:   r;   Ú_assemble_xml_file	  sD   

zWorksheet._assemble_xml_filec                 C   s¼   |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 |s@| jd u s0|| jk r3|| _| jd u s=|| jkr@|| _|s\| jd u sL|| jk rO|| _| jd u sY|| jkr\|| _dS rI  )rx   ry   rq   rû   r{   r|   r}   r~   )r3   r  rL   rê  rë  r:   r:   r;   rJ  m  s$   

zWorksheet._check_dimensionsc                 C   s   t || j| jƒS ©N)r#   r  r  )r3   Údt_objr:   r:   r;   r    ó   zWorksheet._convert_date_timec                 C   sÔ   d}d}d}d}t |dƒ}	t |dƒ}
dt|d ƒ }dt|d ƒ }|dkr4|| jd kr4|	}|
}d}n|dkrF|| jd krF|}|}d}n|	| }|
| }||krW|sW|}n|d | }t| jƒ}|d | }|S )Nr^   r   r   ra  r?   rG  )r)   r8  rx   ry   r'   rm   )r3   Ú	row_num_1Ú	col_num_1Ú	row_num_2Ú	col_num_2Úrange1Úrange2r  Úrow_col_onlyÚ
col_char_1Ú
col_char_2Ú
row_char_1Ú
row_char_2rX  r:   r:   r;   r  ”  s0   


zWorksheet._convert_name_areac                 C   sR   |sg S t |ƒ}d|v r| d¡ t|ƒ}| ¡  d}t|ƒ|kr'|d |… }|S )Nr   iÿ  )r  Úremover™  r‡  rK  )r3   rÒ  Ú
breaks_setÚbreaks_listÚmax_num_breaksr:   r:   r;   Ú_sort_pagebreaks¼  s   
zWorksheet._sort_pagebreaksc                 C   sp   |sg S t  d¡}| |¡}g }|D ]#}| d¡r|dd … }| d¡r*|d d… }| dd¡}| |¡ q|S )Nz"(?:[^"]|"")*"|\S+rs  r   r/  z"")r&  ÚcompileÚfindallr#  r%  re  rt  )r3   r¢  Útoken_rer£  Ú
new_tokensr,  r:   r:   r;   r$  Ö  s   



z Worksheet._extract_filter_tokensc                 C   s   t |ƒdkrB|d }t d|¡rd}nt d|¡rd}ntd|› d|› d	ƒ |  ||dd… ¡}|  ||d
d… ¡}||g | S |  ||¡S )Nrç  r_   z(and|&&)r   z	(or|\|\|)r   úToken 'z3' is not a valid conditional in filter expression 'r  r#  )rK  r&  r'  r   Ú_parse_filter_tokens)r3   r¢  r£  ÚconditionalÚexpression_1Úexpression_2r:   r:   r;   r%  ÷  s   ÿÿz"Worksheet._parse_filter_expressionc                 C   sˆ  dddddddddddddœ}|  |d d ¡}|d }t d|d	  ¡ ¡rlt|d ƒ}|dk s3|d
kr>td|› d|› dƒ | ¡ }|dvrQtd|› d|› dƒ |d	  ¡ dkr\d}nd}|d dkrh|d7 }t|ƒ}|s|d	 rtd|d	 › d|› dƒ t d| ¡ ¡r´|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 d|¡rÀd}||gS ) Nr•  rø  r   r_   r#  é   )rH  r   z=~ÚeqrK  z!~ÚnerL  rR  rX  rO  rU  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^  r1  r)  z0' is not a valid operator in filter expression 'r  zblanks|nonblanks)r•  rø  zThe operator 'z0' is not valid in relation to Blanks/NonBlanks'.r–  r  z[*?]é   )r½  r&  r'  r  r1   r   r8  rc  )r3   r¢  r£  Ú	operatorsÚoperatorr,  r_  r:   r:   r;   r*    sp   ôÿÿÿÿÿ€zWorksheet._parse_filter_tokensc                 C   sp   d}|d d d… D ]}|d? d@ |d> d@ B }|t |ƒN }q	|d? d@ |d> d@ B }|t|ƒN }|dN }|d›S )Nr   r/  é   r   r]   iKÎ  ÚX)ÚordrK  )r3   ry  Údigestrx  r:   r:   r;   rŠ  k  s   zWorksheet._encode_passwordc                 C   sF   t |tƒr	|}|S |d ur| d¡rt|d ƒ}||_|S t|ƒ}|S )Nr«  )r>  r   r½  Ú
image_name)r3   r²  r³  rº  r:   r:   r;   r¶  |  s   
úþzWorksheet._image_from_sourcerº  Úimage_idÚ
drawing_idc              	   C   s¤  |j |j }|j|j }|d|j 9 }|d|j 9 }|  |j|j|j	|j
|||j¡}td|d  ƒ}td|d  ƒ}| jsVtƒ }d|_|| _| j ddt|ƒ d d g¡ n| j}tƒ }tj|_||_|j|_||_ ||_d |_|j|_d|_|j|_|jd ur„|j|_|jr¬|j}	|	 ¡ }
|	  ¡ }| j! "|	j#¡s¢| j$ d	|
|g¡ |  %|	j#¡|	_|	|_| j! "|j&¡sÄ| j$ d
dt|ƒ d |j' g¡ |  %|j&¡|_| (|¡ d S )Ng      X@rã  é5%  r   ú/drawingú../drawings/drawingú.xmlr   ú
/hyperlinkú/imageú../media/imageÚ.))Ú_widthÚ_x_scaleÚ_heightÚ_y_scaleÚ_x_dpiÚ_y_dpiÚ_position_object_emusr¸  r·  Ú	_x_offsetÚ	_y_offsetÚ_anchorr1   rô   r   Úembeddedrç   rt  r8  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)r3   rº  r;  r<  rä  r  Ú
dimensionsrô   Údrawing_objectr…  ÚtargetÚtarget_moder:   r:   r;   Ú_prepare_imageŠ  sf   	ùÿ
þÿzWorksheet._prepare_imagec                 C   sx  | j | \}}}}}}}	}
}}}| d| jd ¡}| d| jd ¡}||9 }||9 }|  |||||||
¡}td|d  ƒ}td|d  ƒ}| jsatƒ }d|_|| _| j	 
dd	t|ƒ d
 d g¡ n| j}tdd|ƒ}|	|_tƒ }tj|_||_||_||_||_||_|
|_d|_||_t |¡}|rµ| ¡ }| ¡ }| j |j¡s«| j  
d||g¡ |  !|j¡|_||_"| #|¡ d S )Nrä  r_   r  r.  rã  r=  r   r>  r?  r@  ÚrectÚTextBoxr   rA  )$rò   r½  rÄ   rÂ   rK  r1   rô   r   rO  rç   rt  r8  r"   rŽ  r   r   ÚSHAPErQ  rR  rE  rG  rS  rT  rN  rU  rV  r   Úfrom_optionsrX  rY  rõ   rZ  rì   r[  rW  r^  )r3   rn   r<  r  rL   rÂ  rÃ  rÄ  rÅ  rŽ  rÉ  r³  rÇ  rÈ  rä  r  r_  rô   Úshaper`  r…  ra  rb  r:   r:   r;   Ú_prepare_shapeØ  sf   ôÿÿ
zWorksheet._prepare_shapec                 C   s`   t  dd|j¡|_| j |j¡s!| j ddt|ƒ d |j	 g¡ |  
|j¡|_| j |¡ d S )Nz\..*$r^   rB  rC  rD  )r&  rp  r:  r÷   r½  r\  rí   rt  r8  r]  Ú_get_vml_drawing_rel_indexÚ_ref_idr™   )r3   r;  rº  r:   r:   r;   Ú_prepare_header_image  s   þÿzWorksheet._prepare_header_imagec                 C   s$   | j  ddt|ƒ d | g¡ d S )NrB  rC  rD  )rë   rt  r8  )r3   r;  Úimage_extensionr:   r:   r;   Ú_prepare_background/  s   ÿzWorksheet._prepare_backgroundc              
   C   s  | j | \
}}}}}}	}
}}}|d |_td|j|	  ƒ}td|j|
  ƒ}|  |||||||¡}|j}| jsOtƒ }d|_	|| _| j
 ddt|ƒ d g¡ n| j}tƒ }tj|_||_||_||_||_d |_||_|  ¡ |_||_||_| |¡ | j ddt|ƒ d g¡ d S )Nr   rã  r>  r?  r@  z/chartz../charts/chart)rî   r  r1   rä  r  rK  Ú
chart_namerô   r   rO  rç   rt  r8  r   r   ÚCHARTrQ  rR  rE  rG  Ú_namerT  rN  r[  rU  rS  rV  r^  rì   )r3   rn   Úchart_idr<  r  rL   rË  rÂ  rÃ  rÄ  rÅ  rÉ  rÇ  rÈ  rä  r  r_  rm   rô   r`  r:   r:   r;   Ú_prepare_chart5  sT   õ
ÿÿ

ÿzWorksheet._prepare_chartc              
   C   s¢   |   |||||||¡\
}}}}}}	}
}}}tdd|  ƒ}tdd|  ƒ}tdd|
  ƒ}
tdd|  ƒ}tdd|  ƒ}tdd|  ƒ}||||||	|
|||f
S )Nrã  r=  )Ú_position_object_pixelsr1   )r3   Ú	col_startÚ	row_startÚx1Úy1rä  r  rÉ  Úcol_endÚrow_endÚx2Úy2Úx_absÚy_absr:   r:   r;   rK  o  s*   ÿõzWorksheet._position_object_emusc              
   C   s:  d}d}	|dk r!|dkr!||   |d ¡7 }|d8 }|dk r!|dks|dk r>|dkr>||  |d ¡7 }|d8 }|dk r>|dks)td|ƒ}td|ƒ}| jrZt|ƒD ]	}
||   |
¡7 }qOn|| j| 7 }||7 }| jrwt|ƒD ]	}|	|  |¡7 }	qln|	| j| 7 }	|	|7 }	||   ||¡kr||   |¡8 }|d7 }||   ||¡ksŠ||  ||¡kr¸||  |¡8 }|d7 }||  ||¡ks¥|}|}|   ||¡dkrÈ|| }|  ||¡dkrÔ|| }||   ||¡krð||   ||¡8 }|d7 }||   ||¡ksÜ||  ||¡kr||  ||¡8 }|d7 }||  ||¡ksù|}|}||||||||||	g
S r0   )Ú	_size_colÚ	_size_rowrè  rà   r{  rÄ   rá   rÂ   )r3   ru  rv  rw  rx  rä  r  rÉ  r}  r~  r  Úrow_idry  rz  r{  r|  r:   r:   r;   rt  ³  sb   þþ

ÿÿþþþþz!Worksheet._position_object_pixelsc                 C   s–   d}d}d}|| j v rF| j | d }| j | d }|d u r | j}|r*|dkr*d}|S |dk r:t|||  d ƒ}|S t|| d ƒ| }|S | j}|S )Nrç  rø  r   r•  r#  r   rã  )r   rÃ   r1   rÄ   )r3   rL   rÉ  Úmax_digit_widthÚpaddingÚpixelsrä  r   r:   r:   r;   r    s$   
ùüþzWorksheet._size_colc                 C   s`   d}|| j v r'| j | d }| j | d }|r|dkrd}|S td| ƒ}|S td| j ƒ}|S )Nr   r   r#  gUUUUUUõ?)rß   r1   rÁ   )r3   r  rÉ  r„  r  r   r:   r:   r;   r€  /  s   
üþzWorksheet._size_rowc                 C   s0   d}d}|dkr|||  }|S || | }|S )Ng      @g      @é   r:   )r3   r„  r‚  rƒ  rä  r:   r:   r;   rí  D  s   þzWorksheet._pixels_to_widthc                 C   s   d| S )Nra   r:   )r3   r„  r:   r:   r;   r  P  s   zWorksheet._pixels_to_heightc              	   C   óB   d}|   |j|j|j|j|j|j|¡}| |j¡ | |j¡ |S ©Nr   )rt  Ú	start_colÚ	start_rowrÂ  rÃ  rä  r  rt  )r3   rÏ  rÉ  Úverticesr:   r:   r;   Ú_comment_verticesT  ó   ùzWorksheet._comment_verticesr’  c              	   C   r†  r‡  )rt  rL   r  rÂ  rÃ  rä  r  rt  )r3   r’  rÉ  rŠ  r:   r:   r;   Ú_button_verticesg  rŒ  zWorksheet._button_verticesc                 C   s(  g }t | j ¡ ƒ}|D ]4}t | j|  ¡ ƒ}|D ]&}	| j| |	 }
|  |
¡|
_|
jd u r0| j|
_|
jd u r9| j|
_| 	|
¡ qq| j
D ]}|  |¡|_qC| j 	ddt|ƒ d g¡ | jrn|| _| j 	ddt|ƒ d g¡ t|ƒ}|}tt|d ƒƒD ]}|| d }|› d	|› }q||| _|| _|S )
Nú/vmlDrawingú../drawings/vmlDrawingú.vmlz	/commentsz../commentsr@  ri   r   r,  )rù  rÑ   rc  r‹  rŠ  Ú
is_visiblerÔ   r×  rÓ   rt  rÖ   r  ré   r8  rÐ   rÒ   rè   rK  r{  r1   r  rÕ   )r3   r  rÕ   Úvml_drawing_idÚ
comment_idrÑ   Úrow_numsr  Úcol_numsrL   rÏ  r’  r  Ústart_data_idr'  Údata_idr:   r:   r;   Ú_prepare_vml_objectsz  s>   

ô
ÿÿzWorksheet._prepare_vml_objectsc                 C   s&   || _ | j ddt|ƒ d g¡ d S )NrŽ  r  r  )r×   ré   rt  r8  )r3   r×   r’  r:   r:   r;   Ú_prepare_header_vml_objects¯  s   ÿz%Worksheet._prepare_header_vml_objectsc                 C   sŠ   | j D ]?}||d< | d¡d u rdt|ƒ |d< |d  ¡ }||v r,td|d › dƒ‚d||< | j ddt|ƒ d	 g¡ |d
7 }qd S )Nr  rm   ÚTablezDuplicate name 'z ' used in worksheet.add_table().Tz/tablez../tables/tabler@  r   )rð   r½  r8  r  r   rê   rt  )r3   Útable_idÚseenrÉ   rm   r:   r:   r;   Ú_prepare_tables¸  s   
ÿÿ
ëzWorksheet._prepare_tablesc              	   C   s„   d}|  dd¡}|  dd¡}|  dd¡}|  dd	¡}d
ddddddddœ}||v r8|| }d|› d|› d}|S td|› dƒ |S )Nr^   r  z''rˆ  z'#ú]z']ú[z'[ée   éf   ég   éh   éi   ék   ém   én   r  z	SUBTOTAL(z,[z])zUnsupported function 'rü  )re  r   )r3   r%  Úcol_namer]  r&  Úfunc_numr:   r:   r;   r  Ñ  s(   øþz$Worksheet._table_function_to_formulac                 C   s"   ||vrd S t  || ¡||< d S r  )r   rê  )r3   rT  r³  Ú
user_colorr:   r:   r;   rS  î  s   zWorksheet._set_spark_colorc                 C   sø   | j rdS g }t||d ƒD ]k}|| jvr| d ¡ qt||d ƒD ]V}|| j| v rs| j| | }|jj}	|	dv rC| |jd›¡ q"|	dkrV|j}
| j 	|
¡}| |¡ q"|	dv ri|j
}|d u rcd}| |¡ q"|	dkrr| d	¡ q"| d ¡ q"q|S )
Nr:   r   ©rT   rX   r]  rU   rö  r   rQ   r^   )rq   r{  rÉ   rt  r  rü  rQ  rC  ro   Ú_get_shared_stringr_  )r3   rv  ru  rz  ry  r®  r   r  r  r  rn   rC  r_  r:   r:   r;   Ú_get_range_dataõ  s8   


€á!zWorksheet._get_range_datac                 G   s   dd„ |D ƒ}d  |¡S )Nc                 S   s"   g | ]}t |tƒst|ƒn|‘qS r:   )r>  r8  )rK   Úitemr:   r:   r;   rM   .  s   " z'Worksheet._csv_join.<locals>.<listcomp>r,  )ru  )r3   rý  r:   r:   r;   rd  *  s   
zWorksheet._csv_joinc                 C   s˜   t  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}r1  z%25rs  z%22r  z%20rR  z%3crO  z%3erŸ  z%5brž  z%5dú^z%5eú`z%60ra  z%7br!  z%7d)r&  rc  re  )r3   r…  r:   r:   r;   Ú_escape_url2  s   zWorksheet._escape_urlc                 C   sR   |d u r|  j d7  _ | j S | j |¡r| j| S |  j d7  _ | j | j|< | j S ©Nr   )rö   rõ   r½  ©r3   ra  r:   r:   r;   r[  F  s   
z Worksheet._get_drawing_rel_indexc                 C   s6   | j  |¡r| j | S |  jd7  _| j| j |< | jS r²  )r÷   r½  rø   r³  r:   r:   r;   rj  S  s
   
z$Worksheet._get_vml_drawing_rel_indexc                 C   s~  | j }| d¡ |jr| d¡ |jr| d¡ |jr | d¡ |jr(| d¡ |jr0| d¡ |jr9|  	|j¡ |j
dkrC|  d¡ |j
d	krM|  d
¡ | dd|jfg¡ |jdkr]n5|jrk|  dd|jfg¡ n'|jry|  dd|jfg¡ n|jr‹|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Úvalr/  rv  Ú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Ÿ  )r3   Ú	xf_formatÚ
xml_writerrv  r:   r:   r;   r  b  sH   










€zWorksheet._write_fontc                 C   sD   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ú   rÄ  )r3   rÉ  r©  r:   r:   r;   rÊ  ™  s   zWorksheet._write_underlinec                 C   s   d|fg}| j  d|¡ d S )Nr¼  Ú	vertAlignrß  ©r3   r¼  r©  r:   r:   r;   rÌ  §  s   
zWorksheet._write_vert_alignc                 C   s   | j  ||¡ d S r  rß  ©r3   rm   r©  r:   r:   r;   rÎ  ­  ó   zWorksheet._write_rstring_colorc                 C   s   | j s| j ¡  d| _ d S d S )NT)r  r  rì  r  r:   r:   r;   Ú
_opt_close±  s   

þzWorksheet._opt_closec                 C   s2   | j r| j}t|ddd| _d| _ | j| _d S d S )Nza+rå  ræ  F)r  r  rí  r  r   )r3   rð  r:   r:   r;   Ú_opt_reopen·  s   ûzWorksheet._opt_reopenc           
      C   sÀ  g }t |ƒD ]}| ddddœ¡ q|dkr"d|d d< d|d	 d< |d
kr8d|d d< d|d	 d< d|d d< |dkrTd|d d< d|d	 d< d|d d< d|d d< |rÞt|ƒ}||krb|d	 }t |ƒD ]w}||  d¡d ur”|| d || d< || d }t|tƒr”| d¡r”| d¡|| d< ||  d¡rÊd}|| d |vr²td|| d › dƒ n|| d || d< || d dkrÊd|| d< ||  d¡}	|	rÝ|	dkrÝd|| d< qf|S )NFr   Úpercent)r  r_  r?  r_   éC   r_  rÚ  r   r#  éK   rß  é   r•  rø  éP   é<   é(   re   r   r?  )ræ  rÞ  rQ  r]  zUnknown icon property type 'z2' for sub-property 'type' in conditional_format().rQ  Únumr  rO  T)	r{  rt  rK  r½  r>  r8  r#  rë  r   )
r3   rÖ  Ú
user_propsÚpropsrN   Úmax_datar'  Útmprh  r  r:   r:   r;   rç  À  sN   ÿ€zWorksheet._set_icon_propsc                 C   sx   d}|d }|d }|d }d}|d }d|fd|fg}| j d	kr4| 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Úx14acr  )rv   rt  rœ  )r3   Úschemarò  Úxmlns_rÚxmlns_mcÚ	ms_schemaÚxmlns_x14acr©  r:   r:   r;   ró    s   

zWorksheet._write_worksheetc                 C   sÔ   | j d u r| jd u rd}nR| j d u r7| jd ur7| j| jkr$td| jƒ}n;td| jƒ}td| jƒ}|d | }n(| j | jkrK| j| jkrKt| j | jƒ}nt| j | jƒ}t| j| jƒ}|d | }|  dd|fg¡ d S )Nr_  r   r?   Ú	dimensionr  )r{   r}   r~   r,   r|   rÄ  )r3   r  rC   rD   r:   r:   r;   rõ    s   zWorksheet._write_dimensionc                 C   s    |   d¡ |  ¡  |  d¡ d S )NÚ
sheetViews)rœ  Ú_write_sheet_viewrŸ  r  r:   r:   r;   rö  <  s   
zWorksheet._write_sheet_viewsc                 C   sf  g }| j s
| d¡ | jr| d¡ | js| d¡ | jr"| d¡ | jr*| d¡ | js2| d¡ | jdkr=| d¡ n
| jd	krG| d
¡ | jdkrT| d| jf¡ | j	dkr‹| d| j	f¡ | jdkrq| j
rq| d| j	f¡ | jdkr~| d| j	f¡ | jd	kr‹| d| j	f¡ | d¡ | js–| jr«|  d|¡ |  ¡  |  ¡  |  d¡ d S |  d|¡ d S )N)ÚshowGridLinesr   )ÚshowRowColHeadersr   )Ú	showZerosr   ©ÚrightToLeftr   )ÚtabSelectedr   ©ÚshowOutlineSymbolsr   r   )r›  Ú
pageLayoutr•  )r›  ÚpageBreakPreviewr^   ÚtopLeftCellrc   Ú	zoomScaler   ÚzoomScaleNormalÚzoomScalePageLayoutViewÚzoomScaleSheetLayoutView)ÚworkbookViewIdr   Ú	sheetView)r   rt  r‘   r·   r¶   r‡   r¾   r  r„   r³   r´   r…   r€   rœ  Ú_write_panesÚ_write_selectionsrŸ  rÄ  ©r3   r©  r:   r:   r;   rû  E  sD   













zWorksheet._write_sheet_viewc                 C   sŠ   | j }| j}| j}d|fg}| j | jkr| d¡ | jr!| d¡ |r*| d|f¡ |r3| 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À   rt  rÆ   rv   rÄ  )r3   rÁ   Ú	row_levelÚ	col_levelr©  r:   r:   r;   r÷  €  s   




z Worksheet._write_sheet_format_prc                 C   s¼   | j sd S |  d¡ t| j  ¡ ƒd }|}| j | }| j |= |}|}t| j  ¡ ƒD ]!}| j | }||d kr=||kr=|}q)|  |||¡ |}|}|}q)|  |||¡ || j |< |  d¡ d S )NÚcolsr   r   )r   rœ  rù  rc  Ú_write_col_inforŸ  )r3   ri  rk  Úprev_col_optionsÚdeleted_colÚdeleted_col_optionsrL   Úcol_optionsr:   r:   r;   rø  ˜  s(   



zWorksheet._write_colsc                 C   sD  |\}}}}}}	d}
d}|r|  ¡ }|d u r |sd}d}
n	d}n|dkr&d}
|dkr[d}d}|dk rGtt|||  d ƒt|ƒ d ƒd }ntt|| d ƒ| t|ƒ d ƒd }d|d fd	|d fd
|d›fg}|ru| d|f¡ |r|| d¡ |	rƒ| d¡ |
rŠ| d¡ |r“| d|f¡ |rš| d¡ |  d|¡ d S )Nr   r   rf   rç  rø  rã  g      p@ré  rè  rä  r]  rô  )r   rJ   )ÚbestFitrJ   )ÚcustomWidthrJ   ÚoutlineLevel)rå  rJ   rL   )Ú_get_xf_indexr1   r)  rt  rÄ  )r3   Úcol_minÚcol_maxr   rä  rD  r   ræ  rå  r
  Úcustom_widthÚxf_indexr‚  rƒ  r©  r:   r:   r;   r  À  sj   ÿþÿûÿ
ÿþÿûÿ



ý



zWorksheet._write_col_infoc                 C   s8   | j d u r|  d¡ d S |  d¡ |  ¡  |  d¡ d S )NÚ	sheetData)r{   rÄ  rœ  Ú_write_rowsrŸ  r  r:   r:   r;   rù    s
   

zWorksheet._write_sheet_datac                 C   s‚   | j d u r|  d¡ d S |  d¡ d}| j d¡ | j |¡}|r/| j |¡ | j |¡}|s!| j ¡  t	 
| j¡ |  d¡ d S )Nr(  i   r   )r{   rÄ  rœ  r  ÚseekÚreadr   r4  rì  rë  Úunlinkr  rŸ  )r3   Ú	buff_sizer®  r:   r:   r;   rú    s   

þ
z%Worksheet._write_optimized_sheet_datac                 C   sD   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Ÿ   rÄ  r  r:   r:   r;   r  &  s   ú	zWorksheet._write_page_marginsc                 C   sX  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rG| d¡ | jdkrT| d| jf¡ | j	r]| d	¡ n| d
¡ | j
rj| d¡ | jdkrt| d¡ | jrŽ| jr‚| d| jf¡ | jr| d| jf¡ n| jr™| d| jf¡ | jr¤| d| jf¡ |  d|¡ d S )NÚ	paperSizerc   rÏ  r   Ú
fitToWidthÚfitToHeight)Ú	pageOrderÚoverThenDownÚfirstPageNumber)rŠ   Úportrait)rŠ   Ú	landscape)ÚblackAndWhiterJ   r   )ÚuseFirstPageNumberrJ   ÚhorizontalDpiÚverticalDpiÚ	pageSetup)rˆ   r‰   rt  rµ   r¨   r©   rª   r£   r§   rŠ   r¤   rs   r  r  rÄ  r  r:   r:   r;   r  3  sB   






€zWorksheet._write_page_setupc                 C   s^   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Œ   rt  r   r   rŽ   rÄ  r  r:   r:   r;   r    s   



zWorksheet._write_print_optionsc                 C   sz   g }| j s
| d¡ | js| d¡ | jr0|  d|¡ | jr"|  ¡  | jr)|  ¡  |  	d¡ d S | j
r;|  d|¡ d S d S )N)ÚscaleWithDocr   )ÚalignWithMarginsr   ÚheaderFooter)r–   rt  r•   r’   rœ  r“   Ú_write_odd_headerr”   Ú_write_odd_footerrŸ  rw   rÄ  r  r:   r:   r;   r  š  s   

ÿzWorksheet._write_header_footerc                 C   ó   |   d| j¡ d S )NÚ	oddHeader)rž  r“   r  r:   r:   r;   rD  ®  rã  zWorksheet._write_odd_headerc                 C   rF  )NÚ	oddFooter)rž  r”   r  r:   r:   r;   rE  ²  rã  zWorksheet._write_odd_footerc                 C   s   |   ¡  t| j| jd ƒD ]€}|| jv s|| jv s| j| rt|d ƒ}|| jv r/| j| }nd }| j| rs|| jvrB|  	||¡ n
|  	||| j| ¡ t| j
| jd ƒD ]}|| j| v rl| j| | }|  |||¡ qU|  d¡ q|| jv rƒ|  ||| j| ¡ q|  ||| j| ¡ qd S )Nr   r÷  r  )Ú_calculate_spansr{  r{   r|   r²   rÑ   rÉ   r1   rÍ   Ú
_write_rowr}   r~   Ú_write_cellrŸ  Ú_write_empty_row)r3   r   Ú
span_indexrP  r  Úcol_refr:   r:   r;   r)  ¶  s6   ÿþý


€
€ÞzWorksheet._write_rowsc                 C   sÔ   | j }|| _ || jv s|| jv s| j| rcd }| j| rY|| jvr(|  ||¡ n
|  ||| j| ¡ t| j| jd ƒD ]}|| j| v rR| j| | }|  |||¡ q;|  	d¡ n
|  
||| j| ¡ | j ¡  d S )Nr   r  )rû   r²   rÑ   rÉ   rJ  r{  r}   r~   rK  rŸ  rL  Úclear)r3   Úcurrent_row_numr   rP  r  rN  r:   r:   r;   rM  Þ  s    

€zWorksheet._write_single_rowc                 C   s8  i }d }d }t | j| jd ƒD ]‡}|| jv r<t | j| jd ƒD ]}|| j| v r;|d u r1|}|}qt||ƒ}t||ƒ}q|| jv rlt | j| jd ƒD ]!}|| jv rk|| j| v rk|d u ra|}|}qJt||ƒ}t||ƒ}qJ|d d dksy|| jkr–t	|d ƒ}|d ur–|d7 }|d7 }|› d|› ||< d }q|| _
d S )Nr   r÷  r   r?   )r{  r{   r|   rÉ   r}   r~   ré  rè  rÑ   r1   rÍ   )r3   ÚspansÚspan_minÚspan_maxr   r  rM  r:   r:   r;   rI    s>   


€


€€
zWorksheet._calculate_spansc                 C   s>  d}|r|\}}}}	}
nd\}}}}	}
|d u r| j }d|d fg}|r'| ¡ }|r0| d|f¡ |r9| d|f¡ |r@| d¡ || jksO|| jkrX|| j krX| d|d	›f¡ |r_| d
¡ || jksn|| jkrs|| j krs| d¡ |	r|| d|	f¡ |
rƒ| d¡ | jdkr| d¡ |r—|  d|¡ d S |  d|¡ d S )Nr   )NNr   r   r   r–  r   rQ  Ús)ÚcustomFormatr   ÚhtÚg)r   r   r  r"  )rå  r   rå  r  r  )rÁ   r#  rt  rÀ   rv   Ú_xml_empty_tag_unencodedÚ_xml_start_tag_unencoded)r3   r  rQ  Ú
propertiesÚ	empty_rowr'  r  rD  r   ræ  rå  r©  r:   r:   r;   rJ  .  sL   

ÿÿ

ÿÿ



zWorksheet._write_rowc                 C   s   | j |||dd d S )NT)r[  )rJ  )r3   r  rQ  rZ  r:   r:   r;   rL  e  s   zWorksheet._write_empty_rowc                 C   sÖ  t ||ƒ}d|fg}|jr|j ¡ }| d|f¡ n6|| jv r7| j| d r7| j| d }| d| ¡ f¡ n|| jv rP| j| d }|d urP| d| ¡ f¡ |jj}	|	dv ra|  |j	|¡ d S |	dv r—|j
}
| jss|  |
|¡ 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ƒrÐd}|jdkrÀn|j|v rË| d¡ n| d¡ |  |j||¡ d S |	dkr|jdkré| d¡ zt|jƒ W n tyþ   | d¡ Y nw |  d|¡ |  |j|j¡ |  |j¡ |   d¡ d S |	dkr'|  !d|¡ d S |	dkrD| d	¡ |  d|¡ |  |j"¡ |   d¡ d S |	dkri| d¡ | d|jf¡ |  d|¡ |  |j#¡ |   d¡ d S d S )Nr–  rT  r   r«  rò  z<r>z</r>rW   )r˜  rµ  r   )rV  z#N/Az#NAME?z#NULL!rU  z#REF!r¼  r^   )r˜  Úe)r˜  r8  rZ   rn  )Úcmr   ÚcrQ   rV   rS   Úvm)$r-   rR   r#  rt  r²   r   r  rü  Ú_xml_number_elementrQ  rC  rq   Ú_xml_string_elementÚ_escape_control_charactersr#  r%  Ú_xml_rich_inline_stringr%   Ú_xml_inline_stringr_  r>  r6  r8  Ú_xml_formula_elementr]  r|  r)  r2   rœ  Ú_write_cell_array_formular{  Ú_write_cell_valuerŸ  rÄ  r  ro  )r3   r  rL   r  r}  r©  r'  Úrow_xfÚcol_xfÚtype_cell_namerC  r—  r_  Úerror_codesr:   r:   r;   rK  i  s‚   












ÿ




úzWorksheet._write_cellc                 C   s   |d u rd}|   d|¡ d S )Nr^   Úv©rž  )r3   r_  r:   r:   r;   rg  ß  s   zWorksheet._write_cell_valuec                 C   s   dd|fg}|   d||¡ d S )N)r˜  Úarrayr  r-  rm  )r3   r]  r}  r©  r:   r:   r;   rf  æ  s   z#Worksheet._write_cell_array_formulac                 C   s    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rH|  d|¡ |  ¡  |  ¡  |  	¡  |  
d¡ d S |  d|¡ d S )NÚcodeName)Ú
filterModer   ÚsheetPr)r¨   rÛ   rƒ   r¿   r  rt  rœ  Ú_write_tab_colorÚ_write_outline_prÚ_write_page_set_up_prrŸ  rÄ  r  r:   r:   r;   rô  ì  s.   ÿþýüû
zWorksheet._write_sheet_prc                 C   s    | j sd S dg}|  d|¡ d S )N)Ú	fitToPager   ÚpageSetUpPr)r¨   rÄ  r  r:   r:   r;   rt    s   zWorksheet._write_page_set_up_prc                 C   s"   | j }|sd S |  d| ¡ ¡ d S )NÚtabColor)rƒ   Ú_write_colorrÒ  rw  r:   r:   r;   rr    s   zWorksheet._write_tab_colorc                 C   s^   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»   rt  r¼   r½   r¾   rÄ  r  r:   r:   r;   rs    s   



zWorksheet._write_outline_prc                 C   ó\   |   | j¡}|s
d S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q|  d¡ d S )Nr  ÚmanualBreakCountÚ	rowBreaksiÿ?  )r$  r«   rK  rœ  Ú
_write_brkrŸ  )r3   Úpage_breaksr  r©  r   r:   r:   r;   r  +  ó   þzWorksheet._write_row_breaksc                 C   r}  )Nr  r~  Ú	colBreaksiÿÿ )r$  r¬   rK  rœ  r€  rŸ  )r3   r  r  r©  r  r:   r:   r;   r  @  r‚  zWorksheet._write_col_breaksc                 C   s"   d|fd|fdg}|   d|¡ d S )Nr  rè  )Úmanr   Úbrk©rÄ  )r3   Úbrk_idÚbrk_maxr©  r:   r:   r;   r€  U  s   zWorksheet._write_brkc                 C   óN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q|  d¡ d S )Nr  Ú
mergeCells)rÊ   rK  rœ  Ú_write_merge_cellrŸ  )r3   rË   r  r©  Úmerged_ranger:   r:   r;   rÿ  [  ó   
zWorksheet._write_merge_cellsc           
      C   sF   |\}}}}t ||ƒ}t ||ƒ}|d | }d|fg}	|  d|	¡ d S )Nr?   r  Ú	mergeCell)r,   rÄ  )
r3   rŒ  Úrow_minr$  Úrow_maxr%  rC   rD   r  r©  r:   r:   r;   r‹  m  s   


zWorksheet._write_merge_cellc                 C   sø   t | j ¡ ƒ}|sd S |  d¡ |D ]b}t | j|  ¡ ƒ}|D ]T}| j| | }| jrG| j| rG| j| | rG| j| | }|jjdkrGd|_|jt	j
t	jfv rl|  jd7  _|  ||| j|¡ | j d| ¡ dg¡ q|  |||¡ qq|  d¡ d S )Nr  rU   Tr   rA  ÚExternal)rù  r  rc  rœ  rÉ   r  rü  Ú_is_object_linkÚ
_link_typer   ÚURLÚEXTERNALrã   Ú_write_hyperlink_externalræ   rt  rX  Ú_write_hyperlink_internalrŸ  )r3   r”  r   r•  r  r…  r  r:   r:   r;   r  z  s.   

ÿÿçzWorksheet._write_hyperlinksÚid_numc                 C   sx   t ||ƒ}dt|ƒ }d|fd|fg}|jr| d|jf¡ |jr)| d|jf¡ |jr4| d|jf¡ |  d|¡ d S )NÚrIdr  úr:idr1  ÚdisplayÚtooltiprÕ  )r,   r8  rN  rt  r’  r‹  rŒ  rÄ  )r3   r  rL   r˜  r…  r  Úr_idr©  r:   r:   r;   r–  ¬  s   
z#Worksheet._write_hyperlink_externalc                 C   sR   t ||ƒ}d|fd|jfg}|jr| d|jf¡ | d|jf¡ |  d|¡ d S )Nr  r1  rœ  r›  rÕ  )r,   rZ  rŒ  rt  r‹  rÄ  )r3   r  rL   r…  r  r©  r:   r:   r;   r—  À  s   
z#Worksheet._write_hyperlink_internalc                 C   sN   | j sd S d| j fg}| jr|  d|¡ |  ¡  |  d¡ d S |  d|¡ d S )Nr  Ú
autoFilter)rÙ   rÛ   rœ  Ú_write_autofiltersrŸ  rÄ  r  r:   r:   r;   rþ  Í  s   zWorksheet._write_auto_filterc                 C   sT   | j \}}t||d ƒD ]}|| jvrq| j| }| j| }|  || ||¡ qd S r²  )rÚ   r{  rÜ   rÝ   Ú_write_filter_column)r3   Úcol1Úcol2rL   r£  rÝ   r:   r:   r;   rŸ  Þ  s   



özWorksheet._write_autofiltersc                 C   sB   d|fg}|   d|¡ |dkr|  |¡ n|  |¡ |  d¡ d S )NÚcolIdÚfilterColumnr   )rœ  Ú_write_filtersÚ_write_custom_filtersrŸ  )r3   r  rÝ   r+  r©  r:   r:   r;   r   ï  s   

zWorksheet._write_filter_columnc                 C   s‚   dd„ |D ƒ}g }t |ƒt |ƒkrdg}t |ƒdkr(t |ƒdkr(|  d|¡ d S |  d|¡ t|ƒD ]}|  |¡ q2|  d¡ d S )Nc                 S   s    g | ]}t |ƒ ¡ d kr|‘qS )r–  )r8  r  )rK   Úfilterr:   r:   r;   rM      s     z,Worksheet._write_filters.<locals>.<listcomp>)rZ  r   r   r   r+  )rK  rÄ  rœ  rù  Ú_write_filterrŸ  )r3   r+  Ú
non_blanksr©  r  r:   r:   r;   r¥  þ  s   zWorksheet._write_filtersc                 C   s   d|fg}|   d|¡ d S )Nr¼  r§  r†  rá  r:   r:   r;   r¨    s   
zWorksheet._write_filterc                 C   sŽ   t |ƒdkr|  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   )r«  r   r   r_   r#  )rK  rœ  Ú_write_custom_filterrŸ  )r3   r£  r©  r:   r:   r;   r¦    s   

zWorksheet._write_custom_filtersc                 C   sp   g }ddddddddœ}|| d ur|| }nt d|› ƒ |dkr)| d	|f¡ | d
|f¡ |  d|¡ d S )NrQ  rG  rW  rN  rJ  rT  )r   r•  r_   r#  rø  r.  r3  zUnknown operator = r5  r¼  ÚcustomFilter)r   rt  rÄ  )r3   r5  r¼  r©  r4  r:   r:   r;   r¬  /  s    ù
zWorksheet._write_custom_filterc                 C   sp  g }| j sd S | j }|d r| d|d f¡ |d r | d¡ |d r)| d¡ |d s2| d¡ |d s;| d	¡ |d
 rD| d¡ |d rM| d¡ |d rV| d¡ |d r_| d¡ |d rh| d¡ |d rq| d¡ |d rz| d¡ |d rƒ| d¡ |d sŒ| d¡ |d r•| d¡ |d rž| d¡ |d  r§| d!¡ |d" s°| d#¡ |  d$|¡ d S )%Nry  rz  )rz  r   r{  )r{  r   r|  )r|  r   r}  )r}  r   r~  )ÚformatCellsr   r  )ÚformatColumnsr   r€  )Ú
formatRowsr   r  )ÚinsertColumnsr   r‚  )Ú
insertRowsr   rƒ  )ÚinsertHyperlinksr   r„  )ÚdeleteColumnsr   r…  )Ú
deleteRowsr   r†  )ÚselectLockedCellsr   r‡  )r‡  r   r  )rž  r   rˆ  )ÚpivotTablesr   r‰  )ÚselectUnlockedCellsr   ÚsheetProtection)r­   rt  rÄ  )r3   r©  r³  r:   r:   r;   rû  J  sR   
















z!Worksheet._write_sheet_protectionc                 C   sF   | j dkrd S |  d¡ | jD ]\}}}|  |||¡ q|  d¡ d S )Nr   ÚprotectedRanges)r¯   rœ  r®   Ú_write_protected_rangerŸ  r  r:   r:   r;   rü  z  s   

z!Worksheet._write_protected_rangesc                 C   sB   g }|r|  d|f¡ |  d|f¡ |  d|f¡ |  d|¡ d S )Nry  rb  rm   ÚprotectedRange©rt  rÄ  )r3   r}  r  ry  r©  r:   r:   r;   r»  †  s   z Worksheet._write_protected_rangec                 C   s(   | j sd S |  jd7  _|  | j¡ d S r²  )rô   rã   Ú_write_drawingr  r:   r:   r;   r
  ’  s   zWorksheet._write_drawingsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr™  rš  rô   ©r8  rÄ  )r3   r<  r  r©  r:   r:   r;   r¾  š  s   
zWorksheet._write_drawingc                 C   ó@   | j sd S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   r™  rš  ÚlegacyDrawing)rÎ   rã   r8  rÄ  ©r3   r  r©  r:   r:   r;   r  ¢  ó   
zWorksheet._write_legacy_drawingc                 C   rÀ  )Nr   r™  rš  ÚlegacyDrawingHF)rÏ   rã   r8  rÄ  rÂ  r:   r:   r;   r  ¯  rÃ  z"Worksheet._write_legacy_drawing_hfc                 C   rÀ  )Nr   r™  rš  Úpicture)rù   rã   r8  rÄ  rÂ  r:   r:   r;   r  ¼  rÃ  zWorksheet._write_picturec                 C   r‰  )Nr  ÚdataValidations)rü   rK  rœ  Ú_write_data_validationrŸ  )r3   rü   r  r©  Ú
validationr:   r:   r;   r  É  r  z!Worksheet._write_data_validationsc           	      C   s  d}g }|d D ]+}|dkr|d7 }|\}}}}||kr!||}}||kr*||}}|t ||||ƒ7 }q| d¡r=|d }|d dkr[| d|d f¡ |d d	kr[| d
|d f¡ d|v ru|d dkrj| d¡ |d dkru| 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 urü|  |d# ¡ |  d!¡ d S )$Nr^   r`  r  r6  r0  r<  r?  r  rC  r5  r1  r   )Ú
errorStylerZ  r•  )rÉ  r[  r8  )Ú
allowBlankr   r/  )ÚshowDropDownr   r3  )ÚshowInputMessager   r2  )ÚshowErrorMessager   r4  Ú
errorTitler9  ro  r5  ÚpromptTitler:  Úpromptrb  ÚdataValidationr_  r-  )r+   r½  rt  rÄ  rœ  Ú_write_formula_1Ú_write_formula_2rŸ  )	r3   r³  rb  r©  r`  Ú	row_firstr(  Úrow_lastr)  r:   r:   r;   rÇ  Û  s\   








z Worksheet._write_data_validationc                 C   sf   t |tƒr| j|Ž }d|› d}nzt|ƒ W n ty*   | d¡r(| d¡}Y nw |  d|¡ d S )Nrs  r   Úformula1)r>  r™  rd  r)  r2   r#  rë  rž  ©r3   r]  r:   r:   r;   rÒ  (  s   



€ýzWorksheet._write_formula_1c                 C   óD   zt |ƒ W n ty   | d¡r| d¡}Y nw |  d|¡ d S )Nr   Úformula2©r)  r2   r#  rë  rž  r×  r:   r:   r;   rÓ  9  ó   

€ýzWorksheet._write_formula_2c                 C   s6   t | j ¡ ƒ}|sd S |D ]}|  || j| ¡ qd S r  )rù  rý   rc  Ú_write_conditional_formatting)r3   rF  Ú
cond_ranger:   r:   r;   r   F  s   
ÿÿz$Worksheet._write_conditional_formatsc                 C   s8   d|fg}|   d|¡ |D ]}|  |¡ q|  d¡ d S )Nrb  ÚconditionalFormatting)rœ  Ú_write_cf_rulerŸ  )r3   rÝ  Úparamsr©  Úparamr:   r:   r;   rÜ  R  s
   
z'Worksheet._write_conditional_formattingc                 C   s  d|d fg}d|v r|d d ur|  d|d f¡ |  d|d f¡ | d¡r-|  d¡ |d dkrg|  d|d	 f¡ |  d
|¡ d|v rYd|v rY|  |d ¡ |  |d ¡ n|  |d ¡ |  d
¡ d S |d dkr©t d|d	 ¡rz|  d¡ t d|d	 ¡r‡|  d¡ t d|d	 ¡r¡t d|d	 ¡}|  d| d¡f¡ |  d
|¡ d S |d dkrÜd	|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r^|  d&|d	 f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d'ksz|d d(ksz|d d)ksz|d d*krŽ|  d
|¡ |  |d% ¡ |  d
¡ d S |d d+kr§|  d
|¡ |  	|¡ |  d
¡ d S |d d,krË|  d
|¡ |  
|¡ | d-¡rÄ|  |¡ |  d
¡ d S |d d.kræ|  d
|¡ |  |d	 ¡ |  d
¡ d S |d d/krÿ|  d
|¡ |  |¡ |  d
¡ d S d S )0Nr?  rR   ÚdxfIdrÙ  r~  )Ú
stopIfTruer   rŠ  r5  r  ÚcfRuler.  r-  r_  rŒ  Úbelow)rŒ  r   rG  )ÚequalAverager   z[123] std devz([123]) std devr  r   r’  r1  )ræ  r   r¥  )r“  r   rq  ÚrankrŽ  r  r§  rÛ  r©  rª  rŽ  r]  r•  r—  r™  r›  r  rÝ  r¡  rÚ  r¢  r£  )rt  r½  rœ  Ú_write_formula_elementrŸ  r&  rc  ÚgrouprÄ  Ú_write_color_scaleÚ_write_data_barÚ_write_data_bar_extÚ_write_icon_set)r3   rà  r©  r'  rç  r:   r:   r;   rß  [  s¦   






ÿ
þ
ý
ü
ÿ
þ
ý
ü



ýzWorksheet._write_cf_rulec                 C   rØ  )Nr   r]  rÚ  r×  r:   r:   r;   rè  Ç  rÛ  z Worksheet._write_formula_elementc                 C   s¨   |   d¡ |  |d |d ¡ |d d ur|  |d |d ¡ |  |d |d ¡ |  d|d	  ¡ ¡ |d
 d urC|  d|d
  ¡ ¡ |  d|d  ¡ ¡ |  d¡ d S )NrÝ  rq  ry  rp  rw  ro  ru  rv  rx  rv  rt  )rœ  Ú_write_cfvorx  rÒ  rŸ  )r3   rá  r:   r:   r;   rê  Ô  s   
zWorksheet._write_color_scalec                 C   s¢   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|  Ú	maxLengthrn  ©Ú	showValuer   r¡  rq  ry  ro  ru  rv  rr  )rt  r½  rœ  rî  rx  rÒ  rŸ  )r3   rá  r©  r:   r:   r;   rë  é  s   

zWorksheet._write_data_barc                 C   sp   | j d }t| jƒd }d||f }||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)rn   rK  rþ   rt  rœ  Ú
_write_extrž  rŸ  )r3   rá  Úworksheet_countÚdata_bar_countró  r:   r:   r;   rì     s   



zWorksheet._write_data_bar_extc                 C   sŒ   g }|d dkrd|d fg}|  d¡r| d¡ |  d¡r#| d¡ |  d|¡ t|d ƒD ]}|  |d	 |d
 |d ¡ q/|  d¡ d S )Nrz  rÉ  r£  r{  rñ  r‚  )r0  r   rm  r?  r_  r  )r½  rt  rœ  Úreversedrî  rŸ  )r3   rá  r©  Úiconr:   r:   r;   rí    s   



zWorksheet._write_icon_setc                 C   s>   d|fg}|d ur|  d|f¡ |r|  d¡ |  d|¡ d S )Nr?  r¼  )Úgter   Úcfvor½  )r3   Úcf_typer¼  r  r©  r:   r:   r;   rî  (  s   

zWorksheet._write_cfvoc                 C   s   |   ||¡ d S r  r†  râ  r:   r:   r;   rx  4  r  zWorksheet._write_colorc                 C   s   | j D ]}| j|Ž  qd S r  )r€   Ú_write_selection)r3   Ú	selectionr:   r:   r;   r  8  s   
ÿzWorksheet._write_selectionsc                 C   sJ   g }|r|  d|f¡ |r|  d|f¡ |r|  d|f¡ |  d|¡ d S )Nr`  Ú
activeCellrb  rÿ  r½  )r3   r`  ra  rb  r©  r:   r:   r;   rþ  =  s   zWorksheet._write_selectionc                 C   s6   | j }|sd S |d dkr| j|Ž  d S | j|Ž  d S )Nr#  r•  )r…   Ú_write_split_panesÚ_write_freeze_panes)r3   r…   r:   r:   r;   r  L  s   zWorksheet._write_panesc                 C   sJ  g }|}|}t ||ƒ}	d}
d}d}d}| jr!| jd \}}}g | _|rM|rMd}
t |dƒ}t d|ƒ}| j d||g¡ | j d||g¡ | j d||g¡ n|r[d}
| j d||g¡ nd}
| j d||g¡ |dkrmd}n	|dkrtd}nd	}|r| d
|f¡ |rˆ| d|f¡ | d|	f¡ | d|
f¡ | d|f¡ |  d|¡ d S )Nr^   r   ÚbottomRightÚtopRightÚ
bottomLeftÚfrozenr   ÚfrozenSplitrA   ÚxSplitÚySplitr  Ú
activePaneÚstater`  )r,   r€   rt  rÄ  )r3   r  rL   rj  rk  rl  r©  Úy_splitÚx_splitr„   r†   r  ra  rb  rN   Úrow_cellÚcol_cellr:   r:   r;   r  X  sH   


zWorksheet._write_freeze_panesc                 C   s¢  g }d}d}d}	d}
|}|}| j r| j d \}}	}
g | _ d}|r(td| d ƒ}|r/|  |¡}||krS||krStd|d d d  ƒ}td|d	 d d
 d d  ƒ}t||ƒ}|s^|}	|}
|rŠ|rŠd}t|dƒ}td|ƒ}| j  d||g¡ | j  d||g¡ | j  d|	|
g¡ n|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 )NFr^   r   Tre   i,  rã  rd   é†  r_   r#  rg   r  r  r  r  r]  r	  r  r
  r`  )r€   r1   Ú_calculate_x_split_widthr,   rt  rÄ  )r3   r  rL   rj  rk  rN   r©  Úhas_selectionr†   ra  rb  r  r  r„   r  r  r:   r:   r;   r  ’  sT   
 


zWorksheet._write_split_panesc                 C   sZ   d}d}|dk rt |||  d ƒ}n
t || d ƒ| }|d d }|d }|d }|S )	Nrç  rø  r   rã  r_   r#  re   r  )r1   )r3   rä  r‚  rƒ  r„  ÚpointsÚtwipsr:   r:   r;   r  Ù  s   z"Worksheet._calculate_x_split_widthc                 C   s^   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  jd7  _|  | j¡ q|  d¡ d S )Nr  Ú
tablePartsr   )rð   rK  rœ  rã   Ú_write_table_partrŸ  )r3   rð   r  r©  rN   r:   r:   r;   r  ð  s   þÿzWorksheet._write_table_partsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr™  rš  Ú	tablePartr¿  rÂ  r:   r:   r;   r  	  s   þÿzWorksheet._write_table_partc                 C   sP   t | jƒ}t | jƒ}|s|sd S |  d¡ |r|  ¡  |r!|  ¡  |  d¡ d S )Nrô  )rK  rþ   rñ   rœ  Ú_write_ext_list_data_barsÚ_write_ext_list_sparklinesrŸ  )r3   Úhas_data_barsÚhas_sparklinesr:   r:   r;   r    s   


zWorksheet._write_ext_listc                 C   sB   |   d¡ |  d¡ | jD ]}|  |¡ q|  d¡ |  d¡ d S )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsrõ  )rö  rœ  rþ   Ú"_write_conditional_formatting_2010rŸ  )r3   r   r:   r:   r;   r  *  s   



z#Worksheet._write_ext_list_data_barsc                 C   sì   d}d|fg}|   d|¡ |  |¡ |  |¡ |  |d |d ¡ |  |d |d ¡ |d s6|  |d	 ¡ |d
 sA|  |d ¡ |d sP|d sP|  |d ¡ |d dkr]|  |d ¡ |  d¡ |  d¡ |  	d|d ¡ |  d¡ d S )Nú3http://schemas.microsoft.com/office/excel/2006/mainúxmlns:xmzx14:conditionalFormattingrá  ry  rã  ru  r€  r„  r‡  r†  r‰  rˆ  r…  r<  rƒ  úx14:dataBarú
x14:cfRuleúxm:sqrefr{  )
rœ  Ú_write_x14_cf_ruleÚ_write_x14_data_barÚ_write_x14_cfvoÚ_write_x14_border_colorÚ_write_x14_negative_fill_colorÚ _write_x14_negative_border_colorÚ_write_x14_axis_colorrŸ  rž  )r3   r   Úxmlns_xmr©  r:   r:   r;   r  8  s,   


ÿþ

z,Worksheet._write_conditional_formatting_2010c                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nr¡  ró  r?  r  r   ©rœ  )r3   r   Ú	rule_typeró  r©  r:   r:   r;   r"  e  s   zWorksheet._write_x14_cf_rulec                 C   sÐ   d}d}d|fd|fg}|d s|  d¡ |d r|  d¡ |d	 d
kr)|  d¡ |d	 dkr4|  d¡ |d r=|  d¡ |d sJ|d sJ|  d¡ |d dkrU|  d¡ |d dkr`|  d¡ |  d|¡ d S )Nr   rc   rï  rð  r€  )Úborderr   rs  )Úgradientr   r  r¢  )r¥  ÚleftToRightr£  )r¥  r   r‡  )ÚnegativeBarColorSameAsPositiver   r‰  )Ú$negativeBarBorderColorSameAsPositiver   r…  Úmiddle)ÚaxisPositionr1  r<  )r2  r<  r  )rt  rœ  )r3   r   r}  r|  r©  r:   r:   r;   r#  m  s2   þ




ÿþ


zWorksheet._write_x14_data_barc                 C   sH   d|fg}|dv r|   d|¡ d S |  d|¡ |  d|¡ |  d¡ d S )Nr?  )ré  rè  rà  râ  zx14:cfvoúxm:f)rÄ  rœ  rž  rŸ  )r3   r+  r_  r©  r:   r:   r;   r$  ”  s   
zWorksheet._write_x14_cfvoc                 C   ó   |   d| ¡ ¡ d S )Nzx14:borderColor©rx  rÒ  rw  r:   r:   r;   r%  Ÿ  ó   z!Worksheet._write_x14_border_colorc                 C   r4  )Nzx14:negativeFillColor©rÄ  rÒ  rw  r:   r:   r;   r&  £  r6  z(Worksheet._write_x14_negative_fill_colorc                 C   r4  )Nzx14:negativeBorderColorr7  rw  r:   r:   r;   r'  §  r6  z*Worksheet._write_x14_negative_border_colorc                 C   r4  )Nzx14:axisColorr7  rw  r:   r:   r;   r(  «  r6  zWorksheet._write_x14_axis_colorc                 C   sÚ   |   d¡ |  ¡  t| jƒD ]R}|  |¡ |  |d ¡ |  |d ¡ |  ¡  |  |d ¡ |  	|d ¡ |  
|d ¡ |  |d ¡ |  |d ¡ |d	 rV|  d
|d	 ¡ |  |¡ |  d¡ q|  d¡ |  d¡ d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}r>  r@  r?  r:  r7  r5  r3  r2  r3  ú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Ÿ  )r3   rT  r:   r:   r;   r  ¯  s$   



z$Worksheet._write_ext_list_sparklinesc                 C   sn   |   d¡ t|d ƒD ]$}|d | }|d | }|   d¡ |  d|¡ |  d|¡ |  d¡ q|  d¡ d S )Nzx14:sparklinesr  rF  r,  zx14:sparkliner3  r!  )rœ  r{  rž  rŸ  )r3   rT  r'  rZ  r1  r:   r:   r;   rD  Ý  s   

zWorksheet._write_sparklinesc                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14Úurirõ  r*  )r3   rE  rô  Ú	xmlns_x14r©  r:   r:   r;   rö  î  s   þzWorksheet._write_extc                 C   s   d}d|fg}|   d|¡ d S )Nr  r  r9  r*  )r3   r)  r©  r:   r:   r;   r:  ú  s   
z!Worksheet._write_sparkline_groupsc                 C   sæ  |  d¡}g }|  d¡d ur&|d dkrd|d< n| d|d f¡ d|d< |  d¡d urE|d dkr8d|d< n| d	|d f¡ d|d< |d
 dkrT| d
|d
 f¡ |  d¡rb| d|d f¡ |  d¡rl| d¡ |ru| 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 )&NrN  rè  ré  Úcust_maxÚ	manualMaxr@  ré  Úcust_minÚ	manualMinr?  rB  r.  Ú
lineWeightr2  )ÚdateAxisr   ÚdisplayEmptyCellsAsr/  )r/  r   rH  )rH  r   rI  )rI  r   rK  )rK  r   rL  )rL  r   rJ  )rJ  r   r-  )ÚdisplayXAxisr   r   )ÚdisplayHiddenr   ÚminAxisTypeÚmaxAxisTyper0  rÿ  r8  )r½  rt  rœ  )r3   r³  rN  r©  r:   r:   r;   r;     sV   

























z Worksheet._write_sparkline_groupc                 C   s   |r|   || ¡ ¡ d S d S r  r5  )r3   Útagrv  r:   r:   r;   Ú_write_spark_color[   s   ÿzWorksheet._write_spark_colorc                 C   ó   |   d|¡ d S )Nzx14:colorSeries©rS  rw  r:   r:   r;   r<  `   r  zWorksheet._write_color_seriesc                 C   rT  )Nzx14:colorNegativerU  rw  r:   r:   r;   r=  d   r  zWorksheet._write_color_negativec                 C   s   |   dtdƒ¡ d S )Nzx14:colorAxisrä  )rS  r   r  r:   r:   r;   r>  h   r6  zWorksheet._write_color_axisc                 C   rT  )Nzx14:colorMarkersrU  rw  r:   r:   r;   r?  l   r  zWorksheet._write_color_markersc                 C   rT  )Nzx14:colorFirstrU  rw  r:   r:   r;   r@  p   r  zWorksheet._write_color_firstc                 C   rT  )Nzx14:colorLastrU  rw  r:   r:   r;   rA  t   r  zWorksheet._write_color_lastc                 C   rT  )Nzx14:colorHighrU  rw  r:   r:   r;   rB  x   r  zWorksheet._write_color_highc                 C   rT  )Nzx14:colorLowrU  rw  r:   r:   r;   rC  |   r  zWorksheet._write_color_lowc                 C   s   ddg}|   d|¡ d S )N)ÚfontIdÚ0)r?  ÚnoConversionÚ
phoneticPrr†  r  r:   r:   r;   rý  €   s   þzWorksheet._write_phonetic_prc                 C   sT  | 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¡rN| j d }|  d	|¡ | j  d
¡r_| j d
 }|  d|¡ | j  d¡rp| 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à  ÚnumberStoredAsTextrØ  Ú	evalErrorrÚ  r]  rÙ  ÚformulaRangerÛ  ÚunlockedFormularÞ  ÚemptyCellReferencerß  ÚlistDataValidationrÜ  ÚcalculatedColumnrÝ  ÚtwoDigitTextYear)r  rœ  r½  Ú_write_ignored_errorrŸ  )r3   Úignored_ranger:   r:   r;   r	  ‰   s>   









zWorksheet._write_ignored_errorsc                 C   s    d|f|dfg}|   d|¡ d S )Nrb  r   ÚignoredErrorr†  )r3   r1  rd  r©  r:   r:   r;   rc  ¶   s   þzWorksheet._write_ignored_error)r\   Nr  r‡  )F)Nr   rl  )NNN)rï  )NF)r   r   )r   r   r   r   )NNr   )NN)rc   )r^   N)r   )r`   r`   ra   ra   )r^   NN)FF)r   (  rü  Ú
__module__Ú__qualname__Ú__doc__rl   r1   r.  r>   r   r   r   r4  r2  r8  r   r!   rG  r+  r)  r   rS  r*  r[  r"  r`  r$  rI   rm  rd  rf  Ústaticmethodry  re  r9  r~  r=  r6  rƒ  r7  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ã  rP   rì  rî  r
  r  r  r  r  r  r*  r   r&  rl  ró  r+  r^  rc  rd  ri  rm  rp  rs  rt  ru  r   rx  rŒ  r  r“  r–  r˜  rš  r  rž  rŸ  r   r¡  r¤  r¼  rÂ  rÃ  rÄ  rÆ  rÈ  rÉ  rÊ  rË  rÌ  rÎ  rÐ  rÑ  rÔ  rÕ  r×  rá  rñ  r  rJ  r  r  r$  r$  r%  r*  rŠ  r¶  rc  ri  rl  rn  rs  rK  rt  r  r€  rí  r  r   r‹  r   r  r˜  r™  r  r  rS  r­  rd  r±  r[  rj  r  rÊ  rÌ  rÎ  rä  rå  rç  ró  rõ  rö  rû  r÷  rø  r  rù  rú  r  r  r  r  rD  rE  r)  rM  rI  rJ  rL  rK  rg  rf  rô  rt  rr  rs  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î  rx  r  rþ  r  r  r  r  r  r  r  r  r  r"  r#  r$  r%  r&  r'  r(  r  rD  rö  r:  r;  rS  r<  r=  r>  r?  r@  rA  rB  rC  rý  r	  rc  Ú__classcell__r:   r:   r  r;   r[   É   sv    ]&$Uÿÿÿÿÿþÿÿÿÿÿ
þûþýüûúûþýüû
ú'ÿÿÿÿÿÿÿÿÿ
þúþýüûù!úþýüû
ù'øþýüûúù	÷,øþýüûúù	÷- 8
$÷

ö6ûþýüûúÿÿÿÿÿùþýüûúùÿÿÿ
þ=ÿÿ
ÿþyÿÿÿÿþÿÿÿÿþûþýüûú%ûþýüûú2ÿÿÿÿÿþ5ÿÿÿÿÿþHÿÿÿÿÿþ#ÿÿÿ
þúþýüûúùBúþýüûúù ûþýüû
úCûþýüû
úÿÿÿ
þùþýüûúùøRÿÿÿÿþ+<*úþýüûúù  úþýüûúù    úþýüûúù  ^ÿÿÿÿþ Bÿÿÿÿþ$ûþýüû
úúþýüûúùûþýüûúÿÿÿ
þ8üþýü
û'ÿÿÿÿþ%ÿÿÿÿÿ%ûþýüû
úÿÿÿ
þRÿÿÿ
þQ ÿÿÿÿþ" */.eÿÿÿþ#(!W"þýüûNE:D^5	57	E#	;(D
N(%+7v	2ÿÿÿÿþ0M	lÿÿþ:G-'.Y	-r[   )Sr9  rW  rë  r&  ré  Úcollectionsr   r   r>  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   r^   r   rô   r   r   r   Ú
exceptionsr   r    rR   r!   rh  r"   Úutilityr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r%  ÚVERBOSErb  r>   rI   rP   r\  r¿  rY  rN  r„  rg  r€  r¢  rz  r[   r:   r:   r:   r;   Ú<module>   sZ    4á( 
 






ÿ
