U
    ª…7h^B ã                   @   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 d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZ ddlmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddlm7Z7 e 8dej9¡Z:dd„ Z;dd„ Z<dd„ Z=eddƒZ>eddƒZ?ed d!ƒZ@ed"d#ƒZAed$d%ƒZBed&d'ƒZCed(d!ƒZDed)d*ƒZEed+d,ƒZFG d-d.„ d.ej7ƒZGdS )/é    N)ÚdefaultdictÚ
namedtuple)ÚDecimal)ÚFraction©Úwraps)ÚStringIO)ÚisinfÚisnan)Úwarn)ÚCommentType)ÚImage)ÚUrlÚUrlTypes)Ú
ButtonTypeé   )Ú	xmlwriter)ÚDrawingÚDrawingInfoÚDrawingTypes)ÚDuplicateTableNameÚOverlappingRange)ÚFormat)ÚShape)Ú_datetime_to_excel_datetimeÚ_get_sparkline_styleÚ_preserve_whitespaceÚ_supported_datetimeÚ	_xl_colorÚquote_sheetnameÚxl_cell_to_rowcolÚxl_col_to_nameÚxl_pixel_widthÚxl_rangeÚxl_rowcol_to_cellÚxl_rowcol_to_cell_fast)Ú	XMLwriteraÌ  
    \bANCHORARRAY\(    |
    \bBYCOL\(          |
    \bBYROW\(          |
    \bCHOOSECOLS\(     |
    \bCHOOSEROWS\(     |
    \bDROP\(           |
    \bEXPAND\(         |
    \bFILTER\(         |
    \bHSTACK\(         |
    \bLAMBDA\(         |
    \bMAKEARRAY\(      |
    \bMAP\(            |
    \bRANDARRAY\(      |
    \bREDUCE\(         |
    \bSCAN\(           |
    \bSEQUENCE\(       |
    \bSINGLE\(         |
    \bSORT\(           |
    \bSORTBY\(         |
    \bSWITCH\(         |
    \bTAKE\(           |
    \bTEXTSPLIT\(      |
    \bTOCOL\(          |
    \bTOROW\(          |
    \bUNIQUE\(         |
    \bVSTACK\(         |
    \bWRAPCOLS\(       |
    \bWRAPROWS\(       |
    \bXLOOKUP\(c                    s   t ˆ ƒ‡ fdd„ƒ}|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                    sV   z|r|d }t |ƒ W n, tk
rD   t|ƒ}||dd …  }Y nX ˆ | f|ž|ŽS ©Nr   r   )ÚintÚ
ValueErrorr    )ÚselfÚargsÚkwargsZ	first_argÚnew_args©Úmethod© úN/var/www/formularioweb/env/lib/python3.8/site-packages/xlsxwriter/worksheet.pyÚcell_wrapperd   s    z'convert_cell_args.<locals>.cell_wrapperr   ©r/   r2   r0   r.   r1   Úconvert_cell_args]   s    r4   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c           
         s®   z|rt |d ƒ W nˆ tk
rœ   d|d kr\|d  d¡\}}t|ƒ\}}t|ƒ\}}nt|d ƒ\}}|| }}||||g}	|	 |dd … ¡ |	}Y nX ˆ | f|ž|ŽS )Nr   ú:r   ©r(   r)   Úsplitr    Úextend)
r*   r+   r,   Úcell_1Úcell_2Zrow_1Úcol_1Zrow_2Úcol_2r-   r.   r0   r1   r2   |   s    

z(convert_range_args.<locals>.cell_wrapperr   r3   r0   r.   r1   Úconvert_range_argsu   s    r=   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c           	         sŒ   z|rt |d ƒ W nf tk
rz   dd„ |d  d¡D ƒ\}}t|ƒ\}}t|ƒ\}}||g}| |dd … ¡ |}Y nX ˆ | f|ž|ŽS )Nr   c                 S   s   g | ]}|d  ‘qS )Ú1r0   )Ú.0Úcolr0   r0   r1   Ú
<listcomp>¤   s     z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>r5   r   r6   )	r*   r+   r,   r9   r:   Ú_r;   r<   r-   r.   r0   r1   Úcolumn_wrapperœ   s    
z+convert_column_args.<locals>.column_wrapperr   )r/   rC   r0   r.   r1   Úconvert_column_args•   s    rD   Ú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‡ fdd„Zdd„ Zedd„ ƒZdd	„ Zedçdd„ƒZ	dèdd„Z
edédd„ƒZdêdd„Zedëdd„ƒZdìdd„Zedídd„ƒZdîdd„Zedïdd„ƒZedðdd„ƒZdñd!d"„Zed#d$„ ƒZdòd&d'„Zedód(d)„ƒZdôd*d+„Zedõd,d-„ƒZdöd.d/„Zed÷d0d1„ƒZdød2d3„Zed4d5„ ƒZd6d7„ Zd8d9„ Z edùd:d;„ƒZ!edúd<d=„ƒZ"edûd>d?„ƒZ#edüd@dA„ƒZ$edýdBdC„ƒZ%edþdDdE„ƒZ&edÿdFdG„ƒZ'dHdI„ Z(d dJdK„Z)dLdM„ Z*dNdO„ Z+dPdQ„ Z,dRdS„ Z-dTdU„ Z.dVdW„ Z/dXdY„ Z0e1ddZd[„ƒZ2e1dd\d]„ƒZ3dd_d`„Z4ddadb„Z5ddcdd„Z6ddedf„Z7eddgdh„ƒZ8edidj„ ƒZ9dkdl„ Z:dmdn„ Z;eddodp„ƒZ<ed	dqdr„ƒZ=ed
dsdt„ƒZ>eddudv„ƒZ?edwdx„ ƒZ@eddydz„ƒZAdd|d}„ZBedd~d„ƒZCedd€d„ƒZDddƒd„„ZEd…d†„ ZFd‡dˆ„ ZGd‰dŠ„ ZHddŒd„ZIddŽd„ZJeddd‘„ƒZKedd’d“„ƒZLd”d•„ ZMd–d—„ ZNdd˜d™„ZOdšd›„ ZPdœd„ ZQdždŸ„ ZRd d¡„ ZSdd¤d¥„ZTdd¦d§„ZUdd¨d©„ZVddªd«„ZWe1dd¬d­„ƒZXdd®d¯„ZYd°d±„ ZZd²d³„ Z[ed´dµ„ ƒZ\d¶d·„ Z]d¸d¹„ Z^dºd»„ Z_d¼d½„ Z`d¾d¿„ ZadÀdÁ„ ZbdÂdÃ„ ZcddÄdÅ„ZdddÆdÇ„ZedÈdÉ„ ZfdÊdË„ ZgddÌdÍ„ZhdÎdÏ„ ZidÐdÑ„ ZjdÒdÓ„ ZkdÔdÕ„ ZldÖd×„ ZmdØdÙ„ ZndÚdÛ„ ZoddÜdÝ„ZpeqererdÞœdßdà„Zsdádâ„ Ztdãdä„ Zudådæ„ Zvdçdè„ Zwdédê„ Zxdëdì„ Zyd dídî„Zzd!dïdð„Z{dñdò„ Z|dódô„ Z}e~dõœdöd÷„Ze€døœdùdú„Zdûdü„ Z‚dýdþ„ Zƒdÿd „ Z„dd„ Z…dd„ Z†dd„ Z‡dd„ Zˆd	d
„ Z‰d"dd„ZŠd#dd„Z‹dd„ ZŒdd„ Zdd„ ZŽdd„ Zdd„ Zdd„ Z‘dd„ Z’d$dd„Z“dd „ Z”d!d"„ Z•d#d$„ Z–d%d&„ Z—d'd(„ Z˜d)d*„ Z™d+d,„ Zšd-d.„ Z›d/d0„ Zœd1d2„ Zd3d4„ Zžd5d6„ ZŸd7d8„ Z d9d:„ Z¡d;d<„ Z¢d=d>„ Z£d%d?d@„Z¤dAdB„ Z¥d&dCdD„Z¦d'dEdF„Z§dGdH„ Z¨dIdJ„ Z©dKdL„ ZªdMdN„ Z«dOdP„ Z¬dQdR„ Z­dSdT„ Z®dUdV„ Z¯dWdX„ Z°dYdZ„ Z±d[d\„ Z²d]d^„ Z³d_d`„ Z´ererereµdaœdbdc„Z¶erereµddœdedf„Z·dgdh„ Z¸didj„ Z¹dkdl„ Zºdmdn„ Z»dodp„ Z¼dqdr„ Z½dsdt„ Z¾dudv„ Z¿dwdx„ ZÀdydz„ ZÁd{d|„ ZÂd}d~„ ZÃdd€„ ZÄdd‚„ ZÅdƒd„„ ZÆd…d†„ ZÇd‡dˆ„ ZÈd‰dŠ„ ZÉd‹dŒ„ ZÊddŽ„ ZËdd„ ZÌd‘d’„ ZÍd“d”„ ZÎd•d–„ ZÏd—d˜„ ZÐd™dš„ ZÑd›dœ„ ZÒd(ddž„ZÓdŸd „ ZÔd¡d¢„ ZÕd£d¤„ ZÖd¥d¦„ Z×d§d¨„ ZØd©dª„ ZÙd«d¬„ ZÚd­d®„ ZÛd¯d°„ ZÜd±d²„ ZÝd³d´„ ZÞdµd¶„ Zßd·d¸„ Zàd¹dº„ Zád»d¼„ Zâd½d¾„ Zãd¿dÀ„ ZädÁdÂ„ ZådÃdÄ„ ZædÅdÆ„ ZçdÇdÈ„ ZèdÉdÊ„ ZédËdÌ„ ZêdÍdÎ„ ZëdÏdÐ„ ZìdÑdÒ„ ZídÓdÔ„ ZîdÕdÖ„ Zïd×dØ„ ZðdÙdÚ„ ZñdÛdÜ„ ZòdÝdÞ„ Zódßdà„ Zôdádâ„ Zõdãdä„ Zödådæ„ Z÷‡  ZøS ()  Ú	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    c                    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_chartsheetZ
ext_sheetsZ
fileclosedÚexcel_versionÚexcel2003_styleÚ
xls_rowmaxÚ
xls_colmaxÚ
xls_strmaxÚ
dim_rowminÚ
dim_rowmaxÚ
dim_colminÚ
dim_colmaxÚcol_infoÚ
selectionsÚhiddenZ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_whiteZdraft_qualityZprint_commentsÚ
page_startÚfit_pageÚ	fit_widthÚ
fit_heightÚhbreaksÚvbreaksÚprotect_optionsÚprotected_rangesÚnum_protected_rangesZset_colsr   ÚdictÚset_rowsÚzoomÚzoom_scale_normalÚprint_scaleÚis_right_to_leftÚ
show_zerosZ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ÚnamesZ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_changedZlast_shape_idÚ	rel_countÚhlink_countZ
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ÚshapesZ
shape_hashÚdrawingÚdrawing_relsÚdrawing_rels_idÚvml_drawing_relsÚvml_drawing_rels_idÚbackground_imageÚrstringÚprevious_rowÚvalidationsÚcond_formatsÚdata_bars_2010Úuse_data_bars_2010Údxf_priorityÚ	page_viewÚvba_codenameÚ	date_1904Ú
hyperlinksÚstrings_to_numbersÚstrings_to_urlsÚnan_inf_to_errorsÚstrings_to_formulasÚdefault_date_formatÚdefault_url_formatÚdefault_checkbox_formatÚworkbook_add_formatÚremove_timezoneÚmax_url_lengthÚrow_data_filenameÚrow_data_fhÚworksheet_metaÚvml_data_idÚrow_data_fh_closedÚvertical_dpiÚhorizontal_dpiÚwrite_handlersÚignored_errorsÚhas_dynamic_arraysÚuse_future_functionsÚignore_write_stringÚembedded_images©r*   ©Ú	__class__r0   r1   r_   Ó   sd   





zWorksheet.__init__c                 G   s6  |dkr| j ||f|žŽ S | jr<| d¡r<| j||f|žŽ S | d¡rb| d¡rb| j||f|žŽ S d|kr²| jr²t d|¡s t d|¡s t d|¡s t d	|¡r²| j||f|žŽ S | j	r$z@t
|ƒ}| jsÚt|ƒsøt|ƒsø| j|||f|d
d … žŽ W S W n tk
r   Y nX | j||f|žŽ S | j||f|žŽ S )NrQ   ú=z{=Ú}r5   z(ftp|http)s?://zmailto:z(in|ex)ternal:zfile://r   )Ú_write_blankrð   Ú
startswithÚ_write_formulaÚendswithrî   ÚreÚmatchÚ
_write_urlrí   Úfloatrï   r
   r	   Ú_write_numberr)   Ú_write_string)r*   ÚtokenÚrowr@   r+   Úfr0   r0   r1   Ú_write_token_as_string¯  s8    ÿþ
ü
û
ú
ù
"z Worksheet._write_token_as_stringc                 G   s   | j ||f|žŽ S )aÎ  
        Write data to a worksheet cell by calling the appropriate write_*()
        method based on the type of data being passed.

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

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

        ©Ú_write©r*   r  r@   r+   r0   r0   r1   ÚwriteÕ  s    zWorksheet.writec           	      G   s:  |st dƒ‚|d }|j}|| jkrN| j| }|| ||f|žŽ }|d krJn|S |d krh| j||f|žŽ S |tkr‚| j||f|žŽ S |tttt	fkr¤| j
||f|žŽ S |tkrÀ| j|||f|žŽ S |tjtjtjtjfkrê| j||f|žŽ S t|tttt	fƒr| j
||f|žŽ S t|tƒr0| j|||f|žŽ S t|tƒrN| j||f|žŽ S t|ƒrj| j||f|žŽ S t|tƒrˆ| j||f|žŽ S z&t|ƒ}| j
|||f|dd … žŽ W S  tk
rÄ   Y n* t k
rì   t dt|ƒ› dƒ‚Y nX zt|ƒ | j||f|žŽ W S  tk
r4   t dt|ƒ› dƒ‚Y nX d S )Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type z in write())Ú	TypeErrorr  rþ   r	  ÚboolÚ_write_booleanr  r(   r   r   r  Ústrr  ÚdatetimeÚdateÚtimeÚ	timedeltaÚ_write_datetimeÚ
isinstancer   r   r  r)   Útyper  )	r*   r  r@   r+   r  Ú
token_typeZwrite_handlerZfunction_returnr  r0   r0   r1   r  é  s^    

ü
zWorksheet._writeNc                 C   s   |   ||||¡S )a›  
        Write a string to a worksheet cell.

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

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

        )r  )r*   r  r@   ÚstringÚcell_formatr0   r0   r1   Úwrite_string>  s    zWorksheet.write_stringc                 C   s~   d}|   ||¡rdS t|ƒ| jkr4|d | j… }d}| jsH| j |¡}n|}| jrf|| jkrf|  |¡ t||ƒ| j	| |< |S ©Nr   éÿÿÿÿéþÿÿÿ)
Ú_check_dimensionsÚlenrk   rd   rb   Ú_get_shared_string_indexrã   Ú_write_single_rowÚCellStringTupler´   )r*   r  r@   r'  r(  Z	str_errorÚstring_indexr0   r0   r1   r  R  s    
zWorksheet._write_stringc                 C   s   |   ||||¡S )a„  
        Write a number to a worksheet cell.

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

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

        )r  ©r*   r  r@   Únumberr(  r0   r0   r1   Úwrite_numberm  s    zWorksheet.write_numberc                 C   sÈ   t |ƒst|ƒrt| jrlt |ƒr0|  ||d|d¡S |tjkrL|  ||d|d¡S |tj krt|  ||d|d¡S ntdƒ‚|jtkr†t	|ƒ}|  
||¡r–dS | jr°|| jkr°|  |¡ t||ƒ| j| |< dS )Nú#NUM!z1/0ú#DIV/0!z-1/0zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr+  r   )r
   r	   rï   r  ÚmathÚinfr  r  r   r  r-  rd   rã   r0  ÚCellNumberTupler´   r3  r0   r0   r1   r  €  s&    
ÿ

zWorksheet._write_numberc                 C   s   |   ||||¡S )aè  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

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

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

        )r	  )r*   r  r@   Úblankr(  r0   r0   r1   Úwrite_blank¡  s    zWorksheet.write_blankc                 C   sL   |d krdS |   ||¡rdS | jr6|| jkr6|  |¡ t|ƒ| j| |< dS )Nr   r+  )r-  rd   rã   r0  ÚCellBlankTupler´   )r*   r  r@   rB   r(  r0   r0   r1   r	  µ  s    
zWorksheet._write_blankr   c                 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  ©r*   r  r@   Úformular(  Úvaluer0   r0   r1   Úwrite_formulaÇ  s    zWorksheet.write_formulac              	   C   s´   |   ||¡rdS |d ks |dkr,tdƒ dS t |¡rL|  |||||||¡S | d¡rv| d¡rv|  |||||||¡S |  |¡}| j	rš|| j
krš|  |¡ t|||ƒ| j| |< dS )Nr+  rQ   zFormula can't be None or emptyÚ{r  r   )r-  r   Úre_dynamic_functionÚsearchÚwrite_dynamic_array_formular
  r  Ú_write_array_formulaÚ_prepare_formulard   rã   r0  ÚCellFormulaTupler´   r>  r0   r0   r1   r  Ý  s<    
      ÿ      ÿ

zWorksheet._write_formulac              
   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)rC  rD  rE  rF  )r*   Ú	first_rowÚ	first_colÚlast_rowÚlast_colr?  r(  r@  r0   r0   r1   Ú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)rF  r   )	r*   rJ  rK  rL  rM  r?  r(  r@  Úerrorr0   r0   r1   rE  *  s    øz%Worksheet.write_dynamic_array_formulaFc                 C   sX	  |  d¡r|dd … }|  d¡r,|dd … }| d¡rB|d d… }d|krN|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 (=  NrB  r   r  r  r+  z_xlfn.z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z	\bBYCOL\(z_xlfn.BYCOL(z	\bBYROW\(z_xlfn.BYROW(z\bCHOOSECOLS\(z_xlfn.CHOOSECOLS(z\bCHOOSEROWS\(z_xlfn.CHOOSEROWS(z\bDROP\(z_xlfn.DROP(z
\bEXPAND\(z_xlfn.EXPAND(z
\bFILTER\(z_xlfn._xlws.FILTER(z
\bHSTACK\(z_xlfn.HSTACK(z
\bLAMBDA\(z_xlfn.LAMBDA(z\bMAKEARRAY\(z_xlfn.MAKEARRAY(z\bMAP\(z
_xlfn.MAP(z\bRANDARRAY\(z_xlfn.RANDARRAY(z
\bREDUCE\(z_xlfn.REDUCE(z\bSCAN\(z_xlfn.SCAN(z	\SINGLE\(z_xlfn.SINGLE(z\bSEQUENCE\(z_xlfn.SEQUENCE(z\bSORT\(z_xlfn._xlws.SORT(z
\bSORTBY\(z_xlfn.SORTBY(z
\bSWITCH\(z_xlfn.SWITCH(z\bTAKE\(z_xlfn.TAKE(z\bTEXTSPLIT\(z_xlfn.TEXTSPLIT(z	\bTOCOL\(z_xlfn.TOCOL(z	\bTOROW\(z_xlfn.TOROW(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bVSTACK\(z_xlfn.VSTACK(z\bWRAPCOLS\(z_xlfn.WRAPCOLS(z\bWRAPROWS\(z_xlfn.WRAPROWS(z\bXLOOKUP\(z_xlfn.XLOOKUP(z	\bACOTH\(z_xlfn.ACOTH(z\bACOT\(z_xlfn.ACOT(z\bAGGREGATE\(z_xlfn.AGGREGATE(z
\bARABIC\(z_xlfn.ARABIC(z\bARRAYTOTEXT\(z_xlfn.ARRAYTOTEXT(z\bBASE\(z_xlfn.BASE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBETA.INV\(z_xlfn.BETA.INV(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z
\bBITAND\(z_xlfn.BITAND(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z	\bBITOR\(z_xlfn.BITOR(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z
\bBITXOR\(z_xlfn.BITXOR(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z
\bCONCAT\(z_xlfn.CONCAT(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOTH\(z_xlfn.COTH(z\bCOT\(z
_xlfn.COT(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bCSCH\(z_xlfn.CSCH(z\bCSC\(z
_xlfn.CSC(z\bDAYS\(z_xlfn.DAYS(z\bDECIMAL\(z_xlfn.DECIMAL(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z
\bF.DIST\(z_xlfn.F.DIST(z\bF.INV.RT\(z_xlfn.F.INV.RT(z	\bF.INV\(z_xlfn.F.INV(z
\bF.TEST\(z_xlfn.F.TEST(z\bFILTERXML\(z_xlfn.FILTERXML(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bIFNA\(z_xlfn.IFNA(z\bIFS\(z
_xlfn.IFS(z	\bIMAGE\(z_xlfn.IMAGE(z
\bIMCOSH\(z_xlfn.IMCOSH(z	\bIMCOT\(z_xlfn.IMCOT(z
\bIMCSCH\(z_xlfn.IMCSCH(z	\bIMCSC\(z_xlfn.IMCSC(z
\bIMSECH\(z_xlfn.IMSECH(z	\bIMSEC\(z_xlfn.IMSEC(z
\bIMSINH\(z_xlfn.IMSINH(z	\bIMTAN\(z_xlfn.IMTAN(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bISOMITTED\(z_xlfn.ISOMITTED(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bLET\(z
_xlfn.LET(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z	\bMUNIT\(z_xlfn.MUNIT(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bNORM.INV\(z_xlfn.NORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bPDURATION\(z_xlfn.PDURATION(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPHI\(z
_xlfn.PHI(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bRRI\(z
_xlfn.RRI(z\bSECH\(z_xlfn.SECH(z\bSEC\(z
_xlfn.SEC(z
\bSHEETS\(z_xlfn.SHEETS(z	\bSHEET\(z_xlfn.SHEET(z
\bSKEW.P\(z_xlfn.SKEW.P(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z
\bT.DIST\(z_xlfn.T.DIST(z\bT.INV.2T\(z_xlfn.T.INV.2T(z	\bT.INV\(z_xlfn.T.INV(z
\bT.TEST\(z_xlfn.T.TEST(z\bTEXTAFTER\(z_xlfn.TEXTAFTER(z\bTEXTBEFORE\(z_xlfn.TEXTBEFORE(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bVALUETOTEXT\(z_xlfn.VALUETOTEXT(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z
\bXMATCH\(z_xlfn.XMATCH(z\bXOR\(z
_xlfn.XOR(z
\bZ.TEST\(z_xlfn.Z.TEST()r
  r  r  Úsubr  )r*   r?  Zexpand_future_functionsr0   r0   r1   rG  X  s\   


  ÿ  ÿzWorksheet._prepare_formulac                 C   sd   d| kr| S g }d}| D ]@}|dkr*| }|r:|  |¡ q|dkrN|  d¡ q|  |¡ qd |¡S )Nú@Fú"z[#This Row],rQ   )ÚappendÚjoin)r?  Zescaped_formulaZin_string_literalÚcharr0   r0   r1   Ú_prepare_table_formula  s    
z Worksheet._prepare_table_formularI  c	                 C   s
  ||kr|| }}||kr$|| }}|   ||¡r4dS |   ||¡rDdS ||kr`||kr`t||ƒ}	nt||ƒd t||ƒ }	|  |¡}| jrœ|| jkrœ|  |¡ t||||	|ƒ| j| |< | jst||d ƒD ]8}
t||d ƒD ]$}|
|ksò||krÞ|  	|
|d|¡ qÞqÌdS )Nr+  r5   r   r   )
r-  r$   rG  rd   rã   r0  ÚCellArrayFormulaTupler´   Úranger  )r*   rJ  rK  rL  rM  r?  r(  r@  ÚatypeÚ
cell_ranger  r@   r0   r0   r1   rF  -  s@    

ÿþÿ

    ÿzWorksheet._write_array_formulac                 C   s   |   ||||¡S )aŽ  
        Write a date or time to a worksheet cell.

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

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

        )r#  )r*   r  r@   r   r(  r0   r0   r1   Úwrite_datetimec  s    zWorksheet.write_datetimec                 C   sZ   |   ||¡rdS | jr*|| jkr*|  |¡ |  |¡}|d krB| j}t||ƒ| j| |< dS )Nr+  r   )r-  rd   rã   r0  Ú_convert_date_timerñ   ÚCellDatetimeTupler´   )r*   r  r@   r   r(  r4  r0   r0   r1   r#  v  s    

zWorksheet._write_datetimec                 C   s   |   ||||¡S )aˆ  
        Write a boolean value to a worksheet cell.

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

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

        )r  ©r*   r  r@   Úbooleanr(  r0   r0   r1   Úwrite_boolean‹  s    zWorksheet.write_booleanc                 C   sP   |   ||¡rdS | jr*|| jkr*|  |¡ |r4d}nd}t||ƒ| j| |< dS )Nr+  r   r   )r-  rd   rã   r0  ÚCellBooleanTupler´   )r*   r  r@   r`  r(  r@  r0   r0   r1   r  ž  s    
zWorksheet._write_booleanc                 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  ©r*   r  r@   Úurlr(  r'  Ztipr0   r0   r1   Ú	write_url¹  s    zWorksheet.write_urlc                 C   s¾   |   ||¡rdS t|tƒs>t|ƒ}|d k	r0||_|d k	r>||_|  jd7  _| jdkrltd|j› dƒ dS |d krz| j}| j	s¬| j
rš|| jkrš|  |¡ |  |||j|¡ || j| |< dS )Nr+  r   iúÿ  zIgnoring URL 'z>' since it exceeds Excel's limit of 65,530 URLs per worksheet.éüÿÿÿr   )r-  r$  r   Ú_textÚ_tiprÎ   r   Z_original_urlrò   r  rd   rã   r0  r  Útextrì   rc  r0   r0   r1   r  Ï  s,    

ÿ
zWorksheet._write_urlc                 G   s   | j ||f|žŽ S )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

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

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

        )Ú_write_rich_stringr  r0   r0   r1   Ú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 ]Ž}t|tƒsÜ|dkr®|
 |	¡ |
 |¡ n
|
 |¡ |dkrÎt
dƒ  d	S ||7 }d
}n,|dkrú|dkrút
dƒ  dS |
 |¡ d}|d7 }q‚t|
d tƒs.| j d¡ |
D ]^}t|tƒrZ| j d¡ |  |¡ n4g }t|ƒrr| d¡ | j d||¡ | j d¡ q2| jj ¡ }t	|ƒ| jkrºt
dƒ dS | jsÐ| j |¡}n|}| jrò|| jkrò|  |¡ t|||ƒ| j| |< dS )Nr   rQ   r+  rF   é   zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().éûÿÿÿzYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().rf  r'  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().éýÿÿÿr   Úr)z	xml:spaceÚpreserveÚtzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().r,  )Úlistr-  r$  r   Úpopr   r&   râ   Z_set_filehandler.  r   rT  Ú_xml_start_tagÚ_write_fontr   Ú_xml_data_elementÚ_xml_end_tagÚfhÚgetvaluerk   rd   rb   r/  rã   r0  ÚCellRichStringTupler´   )r*   r  r@   r+   Útokensr(  r2  Ú
raw_stringrx  ÚdefaultÚ	fragmentsÚpreviousÚposr  Ú
attributesr'  r0   r0   r1   rj    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þ   )r*   Z	user_typeÚuser_functionr0   r0   r1   Ú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   r  ©r*   r  r@   Údatar(  r  rP  r0   r0   r1   Ú	write_row™  s    
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   r  r„  r0   r0   r1   Úwrite_column°  s    
zWorksheet.write_columnc                 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   )r-  r   Ú_image_from_sourceÚ_rowÚ_colÚ_set_user_optionsrØ   rT  )r*   r  r@   ÚsourceÚoptionsÚimager0   r0   r1   Úinsert_imageÇ  s    
zWorksheet.insert_imagec                 C   s¬   |   ||¡r&td|› d|› dƒ dS |dkr2i }|  ||¡}| |¡ | dd¡}|jr†|dkrh| 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+  Nr(  TFú#VALUE!r   )r-  r   rŠ  r  Úgetrd  rò   r  re  r  Zget_image_indexÚCellErrorTupler´   )r*   r  r@   rŽ  r  r  r(  Zimage_indexr0   r0   r1   Úembed_imageç  s"    
zWorksheet.embed_imagec                 C   s¼   |   ||dd¡r*td|› d|› dƒ dS |dkr6d}|dkrBi }| 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+  NrQ   Úx_offsetr   Úy_offsetÚx_scaler   Úy_scaleÚobject_positionÚdescriptionÚ
decorativeF)r-  r   r“  rÛ   rT  )r*   r  r@   ri  r  r–  r—  r˜  r™  Úanchorr›  rœ  r0   r0   r1   Úinsert_textbox  s:    õÿzWorksheet.insert_textboxc                 C   s  |   ||dd¡r*td|› d|› dƒ dS |dkr6i }|jsJ|jrV|jjrVtdƒ dS d|_|jrjd|j_| d	d
¡}| dd
¡}| dd¡}| dd¡}| dd¡}	| dd¡}
| dd¡}|jdkrÎ|j}|jdkrÞ|j}|jrê|j}|jrö|j}| j	 
||||||||	|
|g
¡ d
S )a„  
        Insert an chart with its top-left corner in a worksheet cell.

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

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

        TzCannot insert chart at (rˆ  r‰  r+  Nz7Chart cannot be inserted in a worksheet more than once.r,  r–  r   r—  r˜  r   r™  rš  r›  rœ  F)r-  r   Zalready_insertedÚcombinedr“  r˜  r™  r–  r—  r×   rT  )r*   r  r@   Úchartr  r–  r—  r˜  r™  r  r›  rœ  r0   r0   r1   Úinsert_chartH  sP    

öÿzWorksheet.insert_chartc                 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+  r,  Tr   )r-  r.  rk   r¹   r»   r   r¼   )r*   r  r@   Úcommentr  r0   r0   r1   Úwrite_comment  s    zWorksheet.write_commentc                 C   s
   d| _ dS )z†
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        TN)r¿   r  r0   r0   r1   Úshow_comments±  s    zWorksheet.show_commentsc                 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   )r*   rŽ  Zis_byte_streamr  r0   r0   r1   Úset_background¾  s    
ÿzWorksheet.set_backgroundc                 C   s
   || _ dS )z¦
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)r¾   )r*   Úauthorr0   r0   r1   Úset_comments_author×  s    zWorksheet.set_comments_authorc                 C   s   | j S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )r`   r  r0   r0   r1   Úget_nameä  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)rr   rw   ra   rù   Zactivesheetr  r0   r0   r1   Úactivateò  s    zWorksheet.activatec                 C   s   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)rw   rr   r  r0   r0   r1   Úselect  s    zWorksheet.selectc                 C   s   d| _ d| _dS )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N©rr   rw   r  r0   r0   r1   Úhide  s    zWorksheet.hidec                 C   s   d| _ d| _dS )z˜
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        rl  r   Nr«  r  r0   r0   r1   Úvery_hidden%  s    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)rr   ra   rù   Z
firstsheetr  r0   r0   r1   Úset_first_sheet5  s    zWorksheet.set_first_sheetc                 C   sÚ   |dkri }||kr|| }}d}|  dd¡}|  dd¡}|  dd¡}	|sR|rX|rXd}
nd}
|  d|||
¡rpdS |  d|||
¡r„dS t|	dƒ}	t|	d	ƒ}	t| j|	ƒ| _t||d
 ƒD ]}||||	|dg| j|< q´d| _dS )a  
        Set the width, and other properties of a single column or a
        range of columns.

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

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

        NTrr   FÚ	collapsedÚlevelr   r+  é   r   )r“  r-  ÚmaxÚminr¦   rY  rp   rË   )r*   rK  rM  Úwidthr(  r  Ú
ignore_rowrr   r¯  r°  Ú
ignore_colr@   r0   r0   r1   Ú
set_columnG  s,    


zWorksheet.set_columnc                 C   s$   |dk	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·  )r*   rK  rM  r´  r(  r  r0   r0   r1   Úset_column_pixels…  s    
zWorksheet.set_column_pixelséþ  c                 C   sÜ  | j rtdƒ dS | jdkr dS i }t|  |¡dƒ}t| jj| jjjd}t	| j
| jd ƒD ]¶}| j |¡spq\t	| j| jd ƒD ]Ž}|| j| kr‚| j| | }|jj}d}|dkr|dkrÒ|j}	||	 }
n|j}
d	|
krêt|
ƒ}n"|
 d	¡D ]}
t|
ƒ}t||ƒ}qônÄ|d
kr,dtt|jƒƒ }n¦|dkr>| j}n”|dkr\|jrVd}nd}nv|dk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" |¡r¾| j" |¡}|d }|d }|dk	r |s ||kr¼|| j"| d< d| j"| d< n|| j"| d< d| j"| d< n|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   ©rI   rM   rI   Ú
rH   r±  rL   rJ   é   é$   ©rK   rN   é   é   TF)#rd   r   rm   r³  r¸  Úsortedrb   Zstring_tableÚ__getitem__rY  rl   r´   r“  rn   ro   r  Ú__name__r'  r|  r"   r7   r²  r.  r  r4  r±   r`  r$  r@  r  r(   r  rÉ   Úitemsrp   )r*   Ú	max_widthZcol_width_maxÚstringsÚrow_numÚcol_numÚcellÚ	cell_typeÚlengthZ	string_idr'  Z
seg_lengthZ	width_maxZpixel_widthr´  rp   Z
user_widthrr   r0   r0   r1   Úautofitž  s„    
 ÿ








zWorksheet.autofitc           	      C   sÄ   |dkri }| j dk	r| j }nd}|  ||¡r2dS |dkr@| j}| dd¡}| dd¡}| dd¡}|dkrvd}| 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+  rr   Fr¯  r°  r   r±  T)
rn   r-  r­   r“  r²  r³  r¥   rŸ   rÌ   rÊ   )	r*   r  Úheightr(  r  Zmin_colrr   r¯  r°  r0   r0   r1   Úset_row3  s,    


zWorksheet.set_rowc                 C   s"   |dk	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Ð  )r*   r  rÏ  r(  r  r0   r0   r1   Úset_row_pixelsm  s    
zWorksheet.set_row_pixelsc                 C   s2   |dkr| j }|| jkr$d| _|| _ |r.d| _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²   )r*   rÏ  Zhide_unused_rowsr0   r0   r1   Úset_default_row  s    
zWorksheet.set_default_rowc                 C   sŽ  ||kr||krt dƒ dS ||kr.|| }}||kr@|| }}|  ||¡rPdS |  ||¡r`dS t||||ƒ}t||d ƒD ]”}t||d ƒD ]€}	| j ||	f¡rÈ| j ||	f¡}
td|› d|
› dƒ‚| j ||	f¡r | j ||	f¡}
td|› d|
› dƒ‚|| j||	f< qŽq|| j 	||||g¡ |  
||||¡ t||d ƒD ]D}t||d ƒD ].}	||krr|	|krrqV|  ||	d|¡ qVqDd	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 'rQ   r   )r   r-  r#   rY  r¶   r“  r   r·   rµ   rT  r  r	  )r*   rJ  rK  rL  rM  r…  r(  r[  r  r@   Úprevious_ranger0   r0   r1   Úmerge_range˜  sB    

ÿÿzWorksheet.merge_rangec           
      C   sÄ   ||k r|| }}||k r$|| }}|   ||||¡}t||||ƒ}|| _|| _||g| _t||d ƒD ]X}| j ||f¡r¬| j ||f¡\}}	|dkr¬td|› d|	› dƒ‚d|f| j||f< qfd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Å   rY  rÉ   r“  r   )
r*   rJ  rK  rL  rM  ÚareaÚrefr@   rÈ   rÅ   r0   r0   r1   Ú
autofilterå  s"    


ÿzWorksheet.autofilterc                 C   st  | j stdƒ dS zt|ƒ W nH tk
rf   |}t|d ƒ\}}|| jkrbtd|› dƒ Y dS Y nX | j\}}||k s‚||kr¢td|› d|› d|› d	ƒ dS |  |¡}t|ƒd
krÈtd|› dƒ |  	||¡}t|ƒdkr|d dkr|  
||d g¡ nft|ƒdkrV|d dkrV|d dkrV|d dkrV|  
||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()Nr>   úInvalid column 'ú'úColumn 'ú%' outside autofilter() column range (rˆ  ú))rR   r±  z(Incorrect number of tokens in criteria 'rl  r   r   rÂ  rR   é   )rÃ   r   r(   r)   r    rj   rÅ   Ú_extract_filter_tokensr.  Ú_parse_filter_expressionÚfilter_column_listrÇ   rÈ   rÆ   )r*   r@   ÚcriteriaÚ
col_letterrB   Ú	col_firstÚcol_lastr{  r0   r0   r1   Úfilter_column	  s8    

ÿ
8

zWorksheet.filter_columnc                 C   sÀ   | j stdƒ dS zt|ƒ W nH tk
rf   |}t|d ƒ\}}|| jkrbtd|› dƒ Y dS Y nX | j\}}||k s‚||kr¢td|› d|› d|› d	ƒ dS || j|< d
| j|< d
| _	dS )zî
        Set the column filter criteria in Excel 2007 list style.

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

        Returns:
             Nothing.

        rÞ  Nr>   rß  rà  rá  râ  ú,rã  r   )
rÃ   r   r(   r)   r    rj   rÅ   rÇ   rÈ   rÆ   )r*   r@   Úfiltersré  rB   rê  rë  r0   r0   r1   rç  K	  s(    

ÿ

zWorksheet.filter_column_listc                 C   sÌ  |   ||dd¡rdS |   ||dd¡r(dS |dkr6i }n| ¡ }dddddd	d
ddddddddddh}| ¡ D ]"}||krltd|› dƒ  dS qld|kr¤|d |d< d|kr¸|d |d< d|krÌtdƒ dS dddddddddddd d!œ}|d |krtd"|d › d#ƒ dS ||d  |d< |d dkrR| d¡dkrR| d¡dkrRdS |d dks||d dks||d d krŒd$|d< d|d	< 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 |	krîtd.|d › d/ƒ dS |	|d  |d< |d d$ks|d d&kr2d	|kr:td0ƒ dS nd|d	< d1d2d3d4œ}
d|krZd1|d< n6|d |
kr€td.|d › d5ƒ dS |
|d  |d< |d d6kr|d rt|d ƒr|  |d ¡}|d7›|d< |d	 rt|d	 ƒr|  |d	 ¡}|d7›|d	< | d¡r8t|d ƒd8kr8td9|d › d:ƒ dS | d¡rnt|d ƒd8krntd;|d › d:ƒ dS | d¡r¤t|d ƒd<kr¤td=|d › d>ƒ dS | d¡rÚt|d ƒd<krÚtd?|d › d>ƒ dS |d dkr(t|d t	ƒr(| j
|d Ž }t|ƒd<kr(td@|› dAƒ dS d
|kr:d2|d
< d|krLd2|d< d|kr^d2|d< d|krpd2|d< ||||gg|dB< d|krž|dB  |d ¡ d|kr¼|d  dCdD¡|d< | j |¡ d1S )Ea  
        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Úvalidaterè  r@  rŽ  ÚminimumÚmaximumÚignore_blankÚdropdownÚ
show_inputÚinput_titleÚinput_messageÚ
show_errorÚerror_titleÚerror_messageÚ
error_typeZother_cellsÚmulti_rangeúUnknown parameter 'z' in data_validation()r,  z5Parameter 'validate' is required in data_validation()ÚnoneÚwholeÚdecimalrr  r   r!  Ú
textLengthÚcustom)Úanyz	any valuezwhole numberrþ  Úintegerrÿ  rr  r   r!  ztext lengthrÍ  r  zUnknown validation type 'z/' for parameter 'validate' in data_validation()Úbetweenz5Parameter 'criteria' is required in data_validation()Ú
notBetweenÚequalÚnotEqualÚgreaterThanÚlessThanÚgreaterThanOrEqualÚlessThanOrEqual)r  únot betweenúequal tor  ú==únot equal toú!=ú<>úgreater thanú>ú	less thanú<úgreater than or equal toú>=úless than or equal toú<=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   rl  )ÚstopÚwarningÚinformationz' for parameter 'error_type'.©r   r!  ú.16gé    zLength of input title 'z' exceeds Excel's limit of 32zLength of error title 'éÿ   zLength of input message 'z' exceeds Excel's limit of 255zLength of error message 'zLength of list items 'z;' exceeds Excel's limit of 255, use a formula range insteadÚcellsú$rQ   )r-  ÚcopyÚkeysr   r“  r   r]  r.  r$  rr  Ú	_csv_joinr8   Úreplacerä   rT  )r*   rJ  rK  rL  rM  r  Úvalid_parametersÚ	param_keyÚvalid_typesZcriteria_typesZerror_typesÚ	date_timer?  r0   r0   r1   Údata_validationu	  sP   ïôÿ
ÿþý
ÿ
þ
ý
ðÿ
ÿý

ÿ
ÿþ
ýÿÿÿÿ
ÿ





zWorksheet.data_validationc              $   C   s®  |   ||dd¡rdS |   ||dd¡r(dS |dkr6i }n| ¡ }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'h$}| ¡ D ]"}||kr’td(|› d)ƒ  d*S q’d|krÊtd+ƒ d*S d,d-d.d/d0d1d2d2d3d4d5d6d7d8d9d:d;d<d=d>œ}|d |krtd?|d › d@ƒ d*S |d dAkr2dA|dB< ||d  |d< dCdDdEdEdEdFdFdFdGdGdHdHdIdIdJdJdKdLdMdNdOdPdQdRdSdTdUdVdWdTdWdXœ}	d|kr®|d |	kr®|	|d  |d< d|krÜt|d tƒrÜt|d ƒ ¡ |d< |d dYkr¬d,|d< d|kr0t|d ƒstdZƒ d*S |  	|d ¡}
|
d[›|d< d|krnt|d ƒsTtd\ƒ d*S |  	|d ¡}
|
d[›|d< d	|kr¬t|d	 ƒs’td]ƒ d*S |  	|d	 ¡}
|
d[›|d	< d^d_d`dadbdcdddedfdgdhdidjdkdldmdndoœ}|d d=kr†| 
d$¡sútdpƒ dqS |d$ |kr tdr|d$ › dsƒ d*S ||d$  |d$< dt|du< |d$  dv¡rRdw|du< n|d$  dx¡rjdy|du< |  | 
du¡| 
d'¡¡|d'< ||krš|| }}||kr®|| }}t||||ƒ}t||ƒ}d|krä|d }| dzd{¡}d|kr|d r|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¡r´d|d~< |d d3kr®|d }t|ƒ}|d }|d dKkrdK|d< d|› d€|› d|d‚< n¦|d dLkr6dƒ|d< d„|› d€|› d…|d‚< nx|d dMkrjdM|d< d†|› d‡|› dˆ|› d‰|d‚< nD|d dNkrždN|d< dŠ|› d‡|› dˆ|› d‰|d‚< ntd‹|› d)ƒ |d d4krT|d dOkrÞdŒ|› d|d‚< nv|d dPkr dŒ|› dŽ|d‚< nT|d dkr"dŒ|› d|d‚< n2|d dQkrJd‘|› d’|› d“|d‚< n
|d dRkrpd”|› d•|› d–|d‚< nä|d dSkr–d”|› d—|› d˜|d‚< n¾|d dTkr¼d™|› dš|› d›|d‚< n˜|d dUkrèdœ|› d|› dž|› dŸ|d‚< nl|d dVkrdœ|› d |› d¡|d‚< nF|d dWkr@dœ|› d¢|› dž|› d£|› d¤	|d‚< ntd¥|d › d)ƒ |d d5krrd¦|› d§|d‚< |d d6krd¦|› d¨|d‚< |d d7kr®d©|› dª|d‚< |d d8krÌd«|› d…|d‚< |d d9krbd¬|d< d|d< d|d< d|d< | dd­¡ | dd®¡ | dd¯¡ | dd¯¡ | dd°¡ | d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d³¡ | dd´¡ | ddµ¡ t|d ƒ|d< t|d ƒ|d< t|d ƒ|d< d|k	r"d¶|d< |d d;k
rˆd|d< | 
d¡	sVd­|d< d·|d¸< n|d |d¸< | 
d¡	s€d®|d< d¹|dº< n|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¾¡ 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  dÁ¡|d< W n ttfk
r   Y nX z|d  dÁ¡|d< W n ttfk
rL   Y nX z|d  dÁ¡|d< W n ttfk
r~   Y nX || jkrž| j|  |¡ n|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+  Nr%  rF   rè  r@  rð  rñ  Ústop_if_trueÚmin_typeÚmid_typeÚmax_typeÚ	min_valueÚ	mid_valueÚ	max_valueÚ	min_colorÚ	mid_colorÚ	max_colorÚ
min_lengthÚ
max_lengthrû  Ú	bar_colorÚbar_negative_colorÚbar_negative_color_sameÚ	bar_solidÚbar_border_colorÚbar_negative_border_colorÚbar_negative_border_color_sameÚbar_no_borderÚbar_directionÚbar_axis_positionÚbar_axis_colorÚbar_onlyZdata_bar_2010Ú
icon_styleÚreverse_iconsÚ
icons_onlyÚiconsrü  z' in conditional_format()r,  z4Parameter 'type' is required in conditional_format()ÚcellIsr   r!  ÚaboveAverageÚduplicateValuesÚuniqueValuesÚtop10ri  Ú
timePeriodÚcontainsBlanksÚnotContainsBlanksÚcontainsErrorsÚnotContainsErrorsÚ2_color_scaleÚ3_color_scaleÚdataBarÚ
expressionÚiconSet)rË  r   r!  ÚaverageZ	duplicateÚuniqueÚtopÚbottomri  Ztime_periodÚblanksZ	no_blanksÚerrorsZ	no_errorsrR  rS  Údata_barr?  Zicon_setzUnknown value 'z.' for parameter 'type' in conditional_format()rZ  Ú	directionr  r  r  r  r  r	  r
  r  ÚcontainsTextZnotContainsÚ
beginsWithÚendsWithÚ	yesterdayÚtodayZ	last7DaysZlastWeekZthisWeekZnextWeekZ	lastMonthZ	thisMonthZ	nextMonth)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Z
containingznot containingzbegins withz	ends withrb  rc  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthr  z5Conditional format 'value' must be a datetime object.r  z7Conditional format 'minimum' must be a datetime object.z7Conditional format 'maximum' must be a datetime object.Z3ArrowsZ3FlagsZ3TrafficLights2Z3SymbolsZ4ArrowsZ4RedToBlackZ4TrafficLightsZ5ArrowsGrayZ	5QuartersZ3ArrowsGrayÚ3TrafficLightsZ3SignsZ	3Symbols2Z4ArrowsGrayZ4RatingZ5ArrowsZ5Rating)Z3_arrowsZ3_flagsZ3_traffic_lights_rimmedZ3_symbols_circledZ4_arrowsZ4_red_to_blackZ4_traffic_lightsZ5_arrows_grayZ
5_quartersZ3_arrows_grayZ3_traffic_lightsZ3_signsZ	3_symbolsZ4_arrows_grayZ	4_ratingsZ5_arrowsZ	5_ratingsz_The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format().rn  zUnknown icon_style 'z' in conditional_format().rR   Útotal_iconsÚ4rä  Ú5rÂ  r"  rQ   Úpriorityr   Ú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()Z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(Ú
colorScaler³  r²  r   z#FF7128z#FFEF9CÚ
percentilez#F8696Bz#FFEB84z#63BE7Bé2   ÚautoMinÚx14_min_typeÚautoMaxÚx14_max_typez#638EC6Fz#FF0000z#000000éÚ  rY  r  )r-  r#  r$  r   r$  r  r  Úupperr   r]  r“  r
  Ú_set_icon_propsr#   r$   r&  Ú_get_dxf_indexrè   rç   r.  Ú
setdefaultr   rg   ÚlstripÚKeyErrorÚAttributeErrorrå   rT  )r*   rJ  rK  rL  rM  r  Úvalid_parameterr(  Z
valid_typeZcriteria_typer*  Zvalid_iconsr[  Z
start_cellr@  rÍ  rè  r0   r0   r1   Úconditional_formatx
  s¾   Ü(íÿà$


ïÿÿ
 ÿ






ÿþýüûúùø	÷
öõôÿ
ÿÿÿÿÿÿÿ


ÿzWorksheet.conditional_formatc           &      C   sÒ  i }i }|dkri }n|  ¡ }| jr0tdƒ dS |  ||dd¡rDdS |  ||dd¡rXdS ||krj|| }}||kr||| }}t||||ƒ}t||d ƒD ]”}	t||d ƒD ]€}
| j |	|
f¡rä| j |	|
f¡}td|› d|› d	ƒ‚| j	 |	|
f¡r| j	 |	|
f¡}td|› d
|› d	ƒ‚|| j|	|
f< qªq˜dddddddddddh}| 
¡ D ]&}||krPtd|› dƒ  dS qP| 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|krö|d }||d< d"|krptd#|› d$ƒ dS t d%|tj¡rt d&|¡r¤td'|› d(ƒ dS t d)|¡rÆtd*|› d(ƒ dS t d+|¡sât d,|¡rötd-|› d.ƒ dS d|kr8|d |d< |d dkr"d/|d< |d  d"d/¡|d< nd0|d< |}|}| d¡r\|d7 }| d¡rp|d8 }t||||ƒ|d1< t||||ƒ|d2< |d s¦d|d< |d r¼|d2 |d< d}g |d< i }t||d ƒD ]H}|d3t|ƒ d/d/d/dd/ddd4œ	}d|krê|t|d ƒkr.|d |d  }nd}|rê| d5d¡}| d6¡r\|d6 |d< |d }| ¡ }||krŒtd7|› d(ƒ  dS d||< | d8¡|d9< d:|krò|d: rò|d: }| d;¡rÔ| d;¡}|  |¡}|  |d¡}||d:< | d<¡r–|d< }|d=krd>}|d?kr"d@}tdAd>dBdCdDd@dEdFgƒ}||krV|  ||d ¡}n|  |d¡}||dG< dH}||d<< | dId¡}|  |||||¡ n2| dJ¡rÈ|dJ }||dJ< |  |||| d5¡¡ |dk	rÞ| ¡ |d5< |||d < |d  |¡ |d r|  |||d |d9 ¡ |d7 }qÚd|krØ|d }d}t||d ƒD ]Œ}	d} t||d ƒD ]j}
|t|ƒk rÀ| t|| ƒk rÀ|| |  }!| |kr°|  |	|
|!||  ¡ n|  |	|
|!d¡ | d7 } q`|d7 }qJtt||d ƒƒD ]^\}}|d | }"|"rê|"d: rê| |¡}#|"d: }t||d ƒD ]}	|  |	|||#¡ q.qê| j |¡ |d rÎt||d ƒD ]^}
| j ||
f¡r¸| j ||
f¡\}$}%|$dKkr¸tdL|› dM|%› d	ƒ‚dN|f| j||
f< qndS )OaY  
        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' modern  Tr+  r   zTable range 'rÖ  rÕ  rÔ  rÝ  Zbanded_columnsZbanded_rowsÚcolumnsr…  Úfirst_columnÚ
header_rowÚlast_columnr`   ÚstyleZ	total_rowrü  ú' in add_table()r,  r   z1Must have at least one data row in in add_table()FZshow_first_colZshow_last_colZshow_row_stripesZshow_col_stripesZheader_row_countZtotals_row_shownú 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()rQ   ZTableStyleMedium9rY  Za_rangeÚColumn)	Úidr`   Útotal_stringÚtotal_functionÚcustom_totalÚtotal_valuer?  rF   Úname_formatrF   rƒ   z'Duplicate header name in add_table(): 'Zheader_formatr‰  r?  r  r†  Z
count_numsÚ	countNumsZstd_devÚstdDevrW  Úcountr²  r³  ÚsumÚvarr‡  r  rˆ  r…  rÙ  zTable autofilter range 'z0' overlaps previous Worksheet autofilter range 'r´   ) r#  rd   r   r-  r#   rY  r·   r“  r   r¶   r$  r  r  ÚUNICODEr&  r  r.  Úlowerr
  rw  rW  rG  ÚsetÚ_table_function_to_formular  r  ru  rT  r  Ú	enumeraterÙ   rÉ   )&r*   rJ  rK  rL  rM  r  r´   Zcol_formatsr[  r  r@   r×  rz  r(  Znum_rowsr`   Zfirst_data_rowZlast_data_rowÚcol_idZ
seen_namesrÊ  Zcol_dataÚ	user_dataZxformatÚheader_namer?  ÚfunctionÚ	subtotalsr@  r…  r…  ÚiÚjr  Zcolumn_dataZformula_formatrÈ   rÅ   r0   r0   r1   Ú	add_tableo  sª   

ÿÿõ





 ÿ



÷





øÿ
 ÿ   ÿ

   ÿ
 



ÿzWorksheet.add_tablec                 C   sö  |   ||dd¡rdS dt||ƒgi}|dkr0i }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h}| ¡ D ]"}||krptd|› d ƒ  dS qpd|kr¨td!ƒ d"S | dd#¡}|d$krÈtd%ƒ d"S |d&krÔd'}||d< d|krt|d tƒr|d |d< n|d g|d< t|d tƒr0|d |d(< n|d g|d(< t|d( ƒ}t|d ƒ}	||	krltd)ƒ d"S t|d ƒ|d*< t| j	ƒ}
g }|d( D ]<}| 
d+d,¡}| d-¡}d.|krÂ|
d. | }| |¡ q’||d(< g }|d D ]}| 
d+d,¡}| |¡ qä||d< | d¡|d/< | d	¡|d0< | d
¡|d1< | d¡|d2< | d¡|d3< | d¡|d< | d¡|d< | d¡|d< | d¡|d< | d¡|d< | d¡|d4< | d¡|d< | dd,¡}|d5krÒd6|d7< n|d8kræd9|d7< nd:|d7< | d¡}|rd.|kr|
d. | }||d< | dd6¡}t|ƒ}|d; |d< |d1 |d< |d |d< |d2 |d< |d3 |d< |d/ |d< |d0 |d< |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ | j |¡ d6S )<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ÚlocationrY  r%  Z
high_pointZ	low_pointZnegative_pointsZfirst_pointZ
last_pointÚmarkersr€  Úseries_colorÚnegative_colorÚmarkers_colorÚfirst_colorÚ
last_colorÚ
high_colorÚ	low_colorr²  r³  ÚaxisÚreverseZempty_cellsZshow_hiddenZplot_hiddenÚ	date_axisÚweightrü  z' in add_sparkline()z0Parameter 'range' is required in add_sparkline()r,  Úline)rª  ÚcolumnÚwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()r¬  ZstackedÚrangeszMMust have the same number of location and range parameters in add_sparkline()rŒ  r"  rQ   r  ú!ÚhighÚlowÚnegativeÚfirstÚlastrr   Úzeror   ÚemptyÚconnectÚspanÚgapZseries)r-  r$   r$  r   r“  r$  rr  r.  r   r`   r&  rw  rT  r   Ú_set_spark_colorrÚ   )r*   r  r@   r  Ú	sparkliner'  r(  Z
spark_typeZrange_countZlocation_countÚ	sheetnameZ
new_rangesÚspark_rangeZnew_locationsr  rµ  Z
date_rangeÚstyle_idr€  r0   r0   r1   Úadd_sparklineÅ  sê    æÿ

ÿ







zWorksheet.add_sparklinec                 C   s^   d}t ||ƒ}||kr || }}||kr2|| }}t||||ƒ}|dkrLd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#   rq   )r*   rJ  rK  rL  rM  ÚpaneÚactive_cellÚsqrefr0   r0   r1   Ú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$   rt   )r*   r  r@   r0   r0   r1   Úset_top_left_cell¨  s    zWorksheet.set_top_left_cellr   c                 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«   )r*   ÚvisibleZsymbols_belowZsymbols_rightZ
auto_styler0   r0   r1   Úoutline_settingsº  s
    zWorksheet.outline_settingsc                 C   s,   |dkr|}|dk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)ru   )r*   r  r@   Útop_rowÚleft_colÚ	pane_typer0   r0   r1   Úfreeze_panesÒ  s
    zWorksheet.freeze_panesc                 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.

        rl  N)rÊ  )r*   ÚxÚyrÇ  rÈ  r0   r0   r1   Úsplit_panesé  s    zWorksheet.split_panesrV   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 <= 400rV   N)r   r(   r    )r*   r    r0   r0   r1   Úset_zoomû  s    zWorksheet.set_zoomc                 C   s
   d| _ dS )zš
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        TN)r£   r  r0   r0   r1   Úright_to_left  s    zWorksheet.right_to_leftc                 C   s
   d| _ dS )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r¤   r  r0   r0   r1   Ú	hide_zero  s    zWorksheet.hide_zeroc                 C   s   t |ƒ| _dS )z“
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   rs   ©r*   Úcolorr0   r0   r1   Úset_tab_color'  s    zWorksheet.set_tab_colorrQ   c                 C   sˆ   |dkr|   |¡}|si }ddddddddddddddddddœ}| ¡ D ]*}||krd|| ||< qJtd|› dƒ qJ||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.

        rQ   TF)ÚsheetÚcontentÚobjectsÚ	scenariosÚformat_cellsÚformat_columnsÚformat_rowsÚinsert_columnsÚinsert_rowsÚinsert_hyperlinksÚdelete_columnsÚdelete_rowsÚselect_locked_cellsÚsortrÝ  Úpivot_tablesÚselect_unlocked_cellszUnknown protection object: 'rà  ÚpasswordN)Ú_encode_passwordr$  r   r›   )r*   ræ  r  Údefaultsr»  r0   r0   r1   Úprotect4  s8    
ïzWorksheet.protectc                 C   sr   |dkrt dƒ dS | d¡}| dd¡}|  jd7  _|dkrNd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  r"  rQ   r   ÚRanger   )r   rw  r&  r   r  rç  rœ   rT  ©r*   r[  Ú
range_nameræ  r0   r0   r1   Úunprotect_rangeg  s    

zWorksheet.unprotect_rangec                 C   sx   |   ||dd¡r*td|› d|› dƒ dS |dkr6i }| 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   )	r-  r   r®   r°   r.  rÁ   r   rT  r¹   )r*   r  r@   r  rÏ  r´  Zbutton_numberÚbuttonr0   r0   r1   Úinsert_button‰  s    zWorksheet.insert_buttonc                 C   sF   |r|j s| ¡  |s6| js0|  ¡ | _| 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.

        )ZcheckboxZset_checkboxró   rô   r  r_  r0   r0   r1   Úinsert_checkbox­  s    


zWorksheet.insert_checkboxc                 C   s   d| _ d| _dS )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TN©rz   rx   r  r0   r0   r1   Úset_landscapeÑ  s    zWorksheet.set_landscapec                 C   s   d| _ d| _dS )z€
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNrñ  r  r0   r0   r1   Úset_portraitß  s    zWorksheet.set_portraitc                 C   s
   || _ dS )zÐ
        Set the page view mode.

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

        Returns:
            Nothing.

        N©ré   )r*   Úviewr0   r0   r1   Úset_page_viewí  s    zWorksheet.set_page_viewc                 C   s
   d| _ dS )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        rl  Nrô  r  r0   r0   r1   Úset_pagebreak_viewü  s    zWorksheet.set_pagebreak_viewc                 C   s   |r|| _ d| _dS )z˜
        Set the paper type. US Letter = 1, A4 = 9.

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)ry   rx   )r*   ry   r0   r0   r1   Ú	set_paper	  s    zWorksheet.set_paperc                 C   s   d| _ d| _dS )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r{   r|   r  r0   r0   r1   Úcenter_horizontally  s    zWorksheet.center_horizontallyc                 C   s   d| _ d| _dS )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r{   r}   r  r0   r0   r1   Úcenter_vertically&  s    zWorksheet.center_verticallyrS   rT   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   )r*   ÚleftÚrightrY  rZ  r0   r0   r1   Úset_margins4  s    zWorksheet.set_marginsc                 C   s°  |}|  dd¡}t|ƒdkr(tdƒ dS |dk	rDt|tƒsHd|i}ni }| ¡ }|dk	r`||d< g | _| d¡r¢| d¡|d	< |  | d¡|¡}d
|_	| j 
|¡ | d¡rÞ| 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|krr|d | _d|kr†|d | _|| _| dd¡| _d| _|r¬d| _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_dataZLHÚimage_centerÚimage_data_centerZCHÚimage_rightÚimage_data_rightZRHúNumber of footer images 'ú#' doesn't match placeholder count 'ú' in string: Úalign_with_marginsÚscale_with_docrU   T)r&  r.  r   r$  rž   r#  r‡   r“  rŠ  Ú_header_positionrT  rŒ  r…   r†   rƒ   rŽ   r‚   rº   )r*   rƒ   r  r   Zheader_origr  Úplaceholder_countÚimage_countr0   r0   r1   Ú
set_headerG  sZ    






ÿ



zWorksheet.set_headerc                 C   s°  |}|  dd¡}t|ƒdkr(tdƒ dS |dk	rDt|tƒsHd|i}ni }| ¡ }|dk	r`||d< g | _| d¡r¢| d¡|d	< |  | d¡|¡}d
|_	| j 
|¡ | d¡rÞ| 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|krr|d | _d|kr†|d | _|| _| dd¡| _d| _|r¬d| _dS )zù
        Set the page footer caption and optional margin.

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

        Returns:
            Nothing.

        rþ  rÿ  r   zCFooter string cannot be longer than Excel's limit of 255 charactersNr   r  r  r  ZLFr  r  ZCFr  r  ZRFr  r	  r
  r  r  rU   T)r&  r.  r   r$  rž   r#  rˆ   r“  rŠ  r  rT  rŒ  r…   r†   r„   r   r‚   rº   )r*   r„   r  r   Zfooter_origr  r  r  r0   r0   r1   Ú
set_footer–  sZ    






ÿ



zWorksheet.set_footerc                 C   sH   |dk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   r"  z:$r®  )r   r`   r   )r*   rJ  rL  rÛ  r»  r0   r0   r1   Úrepeat_rowså  s    
zWorksheet.repeat_rowsc                 C   sH   |dk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   r5   r®  )r!   r   r`   r‘   )r*   rK  rM  rÛ  r»  r0   r0   r1   Úrepeat_columnsÿ  s    


zWorksheet.repeat_columnsc                 C   sB   |dkrd| _ d| _d| _n"|dkr2d| _ d| _n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{   )r*   Úoptionr0   r0   r1   Úhide_gridlines  s    zWorksheet.hide_gridlinesc                 C   s   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  r0   r0   r1   Úprint_row_col_headers2  s    zWorksheet.print_row_col_headersc                 C   s
   d| _ dS )zž
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r  r0   r0   r1   Úhide_row_col_headers@  s    zWorksheet.hide_row_col_headersc                 C   sJ   |dkr0|dkr0|| j d kr0|| jd kr0d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+  )ri   rj   rÚ  r’   )r*   rJ  rK  rL  rM  rÛ  r0   r0   r1   Ú
print_areaM  s    ÿþýüzWorksheet.print_areac                 C   s   d| _ d| _dS )z„
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)r“   rx   r  r0   r0   r1   Úprint_acrossn  s    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˜   rx   )r*   r´  rÏ  r0   r0   r1   Úfit_to_pages|  s    zWorksheet.fit_to_pagesc                 C   s
   || _ dS )zœ
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r•   )r*   Z
start_pager0   r0   r1   Úset_start_pageŽ  s    zWorksheet.set_start_pagec                 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.

        rÎ  rÏ  zPrint scale 'z#' outside range: 10 <= scale <= 400Nr   T)r   r–   r(   r¢   rx   )r*   Úscaler0   r0   r1   Úset_print_scale›  s    
zWorksheet.set_print_scalec                 C   s   d| _ d| _dS )z”
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r”   rx   r  r0   r0   r1   Úprint_black_and_white±  s    zWorksheet.print_black_and_whitec                 C   s
   || _ dS )z¿
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r™   ©r*   Úbreaksr0   r0   r1   Úset_h_pagebreaks¿  s    zWorksheet.set_h_pagebreaksc                 C   s
   || _ dS )zÂ
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)rš   r  r0   r0   r1   Úset_v_pagebreaksÌ  s    zWorksheet.set_v_pagebreaksc                 C   s(   |dk	r|| _ n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.

        NZSheetr   )rê   r  ra   )r*   r`   r0   r0   r1   Úset_vba_nameÙ  s    zWorksheet.set_vba_namec              	   C   s`   |dkrdS |  ¡ }ddddddd	d
dh	}| ¡ D ]"}||kr2td|› dƒ  dS q2|| _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+  Únumber_stored_as_textÚ
eval_errorÚformula_differsÚformula_rangeÚformula_unlockedÚempty_cell_referenceÚlist_data_validationÚcalculated_columnÚtwo_digit_text_yearrü  z' in ignore_errors()r   )r#  r$  r   rÿ   )r*   r  r'  r(  r0   r0   r1   Ú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rDtj| jd\}}t  |¡ || _!t"|ddd| _#| j#| _$d S )Nr`   ra   rb   rù   rd   re   rë   rí   rð   rî   rï   rñ   rò   rô   rh   rõ   rö   r  r  g     €)@é   rT   r   ç      à?F)Údirzw+úutf-8©ÚmodeÚencoding)%r`   ra   rb   rù   rd   re   rë   rí   rð   rî   rï   rñ   rò   rô   rh   rõ   rö   r  r  r¬   r­   r®   rŠ   r‹   rŒ   r   rŽ   r   r…   ÚtempfileÚmkstempÚosÚcloser÷   Úopenrø   rx  )r*   Z	init_dataÚfdÚfilenamer0   r0   r1   Ú_initialize  sH    



















zWorksheet._initializec                 C   s  |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | jsH|  ¡  n|  	¡  |  
¡  |  ¡  | jrn|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |   d¡ |  !¡  d S )NrÙ  )"Z_xml_declarationÚ_write_worksheetÚ_write_sheet_prÚ_write_dimensionÚ_write_sheet_viewsÚ_write_sheet_format_prÚ_write_colsrd   Ú_write_sheet_dataÚ_write_optimized_sheet_dataÚ_write_sheet_protectionÚ_write_protected_rangesrh   Ú_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_listrw  Z
_xml_closer  r0   r0   r1   Ú_assemble_xml_fileG  sD    

zWorksheet._assemble_xml_filec                 C   s¼   |dk s|dk rdS || j ks(|| jkr,dS |sH|sH| jrH|| jk rHdS |s€| jd ks`|| jk rf|| _| jd ksz|| jkr€|| _|s¸| jd ks˜|| jk rž|| _| jd ks²|| jkr¸|| _dS r*  )ri   rj   rd   rã   rl   rm   rn   ro   )r*   r  r@   rµ  r¶  r0   r0   r1   r-  «  s$    
zWorksheet._check_dimensionsc                 C   s   t || j| jƒS ©N)r   rë   rõ   )r*   Zdt_objr0   r0   r1   r]  Ì  s    zWorksheet._convert_date_timec                 C   sÔ   d}d}d}d}t |dƒ}	t |dƒ}
dt|d ƒ }dt|d ƒ }|dkrh|| jd krh|	}|
}d}n4|dkrŒ|| jd krŒ|}|}d}n|	| }|
| }||kr®|s®|}n|d | }t| jƒ}|d | }|S )NrQ   r   r   r"  r5   r®  )r!   r  ri   rj   r   r`   )r*   Z	row_num_1Z	col_num_1Z	row_num_2Z	col_num_2Zrange1Zrange2rÛ  Zrow_col_onlyZ
col_char_1Z
col_char_2Z
row_char_1Z
row_char_2r»  r0   r0   r1   rÚ  Ð  s0    


zWorksheet._convert_name_areac                 C   sR   |sg S t |ƒ}d|kr"| d¡ t|ƒ}| ¡  d}t|ƒ|krN|d |… }|S )Nr   iÿ  )r‘  Úremoverr  rã  r.  )r*   r   Z
breaks_setZbreaks_listZmax_num_breaksr0   r0   r1   Ú_sort_pagebreaksø  s    
zWorksheet._sort_pagebreaksc                 C   sp   |sg S t  d¡}| |¡}g }|D ]F}| d¡r>|dd … }| d¡rT|d d… }| dd¡}| |¡ q$|S )Nz"(?:[^"]|"")*"|\S+rS  r   r+  z"")r  ÚcompileÚfindallr
  r  r&  rT  )r*   rU  Ztoken_rer{  Z
new_tokensr  r0   r0   r1   rå    s    



z Worksheet._extract_filter_tokensc                 C   s   t |ƒdkr„|d }t d|¡r&d}n(t d|¡r8d}ntd|› d|› d	ƒ |  ||dd… ¡}|  ||d
d… ¡}||g | S |  ||¡S )Nr±  rR   z(and|&&)r   z	(or|\|\|)r   úToken 'z3' is not a valid conditional in filter expression 'rà  rä  )r.  r  r  r   Ú_parse_filter_tokens)r*   rU  r{  ZconditionalZexpression_1Zexpression_2r0   r0   r1   ræ  3  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	  ¡ ¡rØt|d ƒ}|dk sf|d
kr|td|› d|› dƒ | ¡ }|dkr¢td|› d|› dƒ |d	  ¡ dkr¸d}nd}|d dkrÐ|d7 }t|ƒ}|sþ|d	 rþtd|d	 › d|› dƒ t d| ¡ ¡rr|dkr4td|d › d|› dƒ | ¡ }|dkrV|dkrrd}n|dkrjd}d}nd}d}|dkrŽt d|¡rŽd}||gS ) Nrl  rÂ  r   rR   rä  é   )r  r  z=~Úeqr  z!~Úner  r  r  r  r  z
top|bottomr   iô  zThe value 'z' in expression 'z' must be in the range 1 to 500)rÆ  ú%z
The type 'z ' must be either 'items' or '%%'rY  é   r  re  r`  z0' is not a valid operator in filter expression 'rÕ  zblanks|nonblanks)rl  rÂ  zThe operator 'z0' is not valid in relation to Blanks/NonBlanks'.r[  r‚  z[*?]é   )r“  r  r  r  r(   r   r  rD  )r*   rU  r{  Ú	operatorsÚoperatorr  r@  r0   r0   r1   ra  P  sj    ôÿÿÿ
ÿ


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   rP   iKÎ  ÚX)Úordr.  )r*   ræ  ÚdigestrV  r0   r0   r1   rç  §  s    zWorksheet._encode_passwordc                 C   sB   t |tƒr|}n.|d k	r6| d¡r6t|d ƒ}||_nt|ƒ}|S )Nr  )r$  r   r“  Ú
image_name)r*   rŽ  r  r  r0   r0   r1   rŠ  ¸  s    
zWorksheet._image_from_source)r  Ú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s¬tƒ }d|_|| _| j ddt|ƒ d d g¡ n| j}tƒ }tj|_||_|j|_||_ ||_d |_|j|_d|_|j|_|jd k	r
|j|_|jr^|j}	|	 ¡ }
|	  ¡ }| j! "|	j#¡sJ| 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Ú.))Ú_widthZ_x_scaleÚ_heightZ_y_scaleZ_x_dpiZ_y_dpiÚ_position_object_emusrŒ  r‹  Z	_x_offsetZ	_y_offsetÚ_anchorr(   rÜ   r   ÚembeddedrÐ   rT  r  r   r   ZIMAGEÚ_drawing_typeÚ_dimensionsrn  Ú_descriptionÚ_shapeÚ
_rel_indexÚ_decorativer›  Ú_urlÚ_targetÚ_target_moderÝ   r“  Ú_linkrÕ   Ú_get_drawing_rel_indexÚ_digestÚ_image_extensionÚ_add_drawing_object)r*   r  ro  rp  r´  rÏ  Ú
dimensionsrÜ   Údrawing_objectrd  ÚtargetÚtarget_moder0   r0   r1   Ú_prepare_imageÆ  sf    	ùÿþÿzWorksheet._prepare_imagec                 C   s|  | j | \}}}}}}}	}
}}}| d| jd ¡}| d| jd ¡}||9 }||9 }|  |||||||
¡}td|d  ƒ}td|d  ƒ}| jsÂtƒ }d|_|| _| j	 
dd	t|ƒ d
 d g¡ n| j}tdd|ƒ}|	|_tƒ }tj|_||_||_||_||_||_|
|_d|_||_t |¡}|rn| ¡ }| ¡ }| j |j¡sZ| j  
d||g¡ |  !|j¡|_||_"| #|¡ d S )Nr´  rR   rÏ  rb  r/  rq  r   rr  rs  rt  ÚrectZTextBoxr   ru  )$rÛ   r“  r°   r®   r{  r(   rÜ   r   r}  rÐ   rT  r  r   ri  r   r   ZSHAPEr~  r  ry  rz  r€  r  r|  r‚  rƒ  r   Zfrom_optionsr…  r†  rÝ   r‡  rÕ   rˆ  r„  r‹  )r*   ra   rp  r  r@   r–  r—  r˜  r™  ri  r  r  r›  rœ  r´  rÏ  rŒ  rÜ   Úshaper  rd  rŽ  r  r0   r0   r1   Ú_prepare_shape  sr    ô      ÿÿ
zWorksheet._prepare_shapec                 C   s`   t  dd|j¡|_| j |j¡sB| j ddt|ƒ d |j	 g¡ |  
|j¡|_| j |¡ d S )Nz\..*$rQ   rv  rw  rx  )r  rQ  rn  rß   r“  r‰  rÖ   rT  r  rŠ  Ú_get_vml_drawing_rel_indexZ_ref_idr‰   )r*   ro  r  r0   r0   r1   Ú_prepare_header_imageY  s    þÿzWorksheet._prepare_header_imagec                 C   s$   | j  ddt|ƒ d | g¡ d S )Nrv  rw  rx  )rÔ   rT  r  )r*   ro  Zimage_extensionr0   r0   r1   Ú_prepare_backgroundk  s    ÿzWorksheet._prepare_backgroundc              
   C   s  | j | \
}}}}}}	}
}}}|d |_td|j|	  ƒ}td|j|
  ƒ}|  |||||||¡}|j}| jsžtƒ }d|_	|| _| j
 ddt|ƒ d g¡ n| j}tƒ }tj|_||_||_||_||_d |_||_|  ¡ |_||_||_| |¡ | j ddt|ƒ d g¡ d S )Nr   r/  rr  rs  rt  z/chartz../charts/chart)r×   r„  r(   r´  rÏ  r{  Z
chart_namerÜ   r   r}  rÐ   rT  r  r   r   ZCHARTr~  r  ry  rz  Ú_namer  r|  rˆ  r‚  r€  rƒ  r‹  rÕ   )r*   ra   Zchart_idrp  r  r@   r   r–  r—  r˜  r™  r  r›  rœ  r´  rÏ  rŒ  r`   rÜ   r  r0   r0   r1   Ú_prepare_chartq  s`    õ
      ÿÿ

ÿ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/  rq  )Ú_position_object_pixelsr(   )r*   Ú	col_startÚ	row_startÚx1Úy1r´  rÏ  r  Úcol_endÚrow_endÚx2Úy2Úx_absÚy_absr0   r0   r1   r{  «  s6          ÿõzWorksheet._position_object_emusc              
   C   sö  d}d}	|dk r4|dkr4||   |d ¡7 }|d8 }q|dk r`|dkr`||  |d ¡7 }|d8 }q4td|ƒ}td|ƒ}| jr˜t|ƒD ]}
||   |
¡7 }q‚n|| j| 7 }||7 }| jrÒt|ƒD ]}|	|  |¡7 }	q¼n|	| j| 7 }	|	|7 }	||   ||¡kr||   |¡8 }|d7 }qè||  ||¡kr>||  |¡8 }|d7 }q|}|}|   ||¡dkr`|| }|  ||¡dkrz|| }||   ||¡kr¨||   ||¡8 }|d7 }qz||  ||¡krÖ||  ||¡8 }|d7 }q¨|}|}||||||||||	g
S r'   )Ú	_size_colÚ	_size_rowr²  rË   rY  r°   rÌ   r®   )r*   rš  r›  rœ  r  r´  rÏ  r  r¢  r£  r”  Zrow_idrž  rŸ  r   r¡  r0   r0   r1   r™  ï  sR    




z!Worksheet._position_object_pixelsc                 C   s   d}d}d}|| j kr†| j | d }| j | d }|d kr@| j}|rR|dkrRd}qŒ|dk rpt|||  d ƒ}qŒt|| d ƒ| }n| j}|S )Nr±  rÂ  r   rl  rä  r   r/  )rp   r¯   r(   r°   )r*   r@   r  Úmax_digit_widthÚpaddingÚpixelsr´  rr   r0   r0   r1   r¤  M  s    
zWorksheet._size_colc                 C   s\   d}|| j krJ| j | d }| j | d }|r<|dkr<d}qXtd| ƒ}ntd| j ƒ}|S )Nr   r   rä  gUUUUUUõ?)rÊ   r(   r­   )r*   r  r  r¨  rÏ  rr   r0   r0   r1   r¥  k  s    
zWorksheet._size_rowc                 C   s.   d}d}|dkr|||  }n|| | }|S )Ng      @g      @é   r0   )r*   r¨  r¦  r§  r´  r0   r0   r1   r¸  €  s    zWorksheet._pixels_to_widthc                 C   s   d| S )NrT   r0   )r*   r¨  r0   r0   r1   rÑ  Œ  s    zWorksheet._pixels_to_height)r¢  c              	   C   sB   d}|   |j|j|j|j|j|j|¡}| |j¡ | |j¡ |S ©Nr   )r™  Z	start_colZ	start_rowr–  r—  r´  rÏ  rT  )r*   r¢  r  Úverticesr0   r0   r1   Ú_comment_vertices  s    ùzWorksheet._comment_vertices)rî  c              	   C   sB   d}|   |j|j|j|j|j|j|¡}| |j¡ | |j¡ |S rª  )r™  r@   r  r–  r—  r´  rÏ  rT  )r*   rî  r  r«  r0   r0   r1   Ú_button_vertices£  s    ùzWorksheet._button_verticesc                 C   s(  g }t | j ¡ ƒ}|D ]h}t | j|  ¡ ƒ}|D ]L}	| j| |	 }
|  |
¡|
_|
jd kr`| j|
_|
jd krr| j|
_| 	|
¡ q0q| j
D ]}|  |¡|_q†| j 	ddt|ƒ d g¡ | jrÜ|| _| j 	ddt|ƒ d g¡ t|ƒ}|}tt|d ƒƒD ]}|| d }|› d	|› }qø|| _|| _|S )
Nú/vmlDrawingú../drawings/vmlDrawingú.vmlz	/commentsz../commentsrt  r\   r   rí  )rÃ  r¼   r$  r¬  r«  Z
is_visibler¿   r¦  r¾   rT  rÁ   r­  rÒ   r  r»   r½   rÑ   r.  rY  r(   rú   rÀ   )r*   rú   rÀ   Úvml_drawing_idZ
comment_idr¼   Úrow_numsr  Úcol_numsr@   r¢  rî  rŒ  Zstart_data_idr™  Zdata_idr0   r0   r1   Ú_prepare_vml_objects¶  s<    


ÿÿzWorksheet._prepare_vml_objectsc                 C   s&   || _ | j ddt|ƒ d g¡ d S )Nr®  r¯  r°  )rÂ   rÒ   rT  r  )r*   rÂ   r±  r0   r0   r1   Ú_prepare_header_vml_objectsë  s    ÿz%Worksheet._prepare_header_vml_objectsc                 C   sŠ   | j D ]~}||d< | d¡d kr0dt|ƒ |d< |d  ¡ }||krXtd|d › dƒ‚d||< | j ddt|ƒ d	 g¡ |d
7 }qd S )Nr„  r`   ÚTablezDuplicate name 'z ' used in worksheet.add_table().Tz/tablez../tables/tablert  r   )rÙ   r“  r  r  r   rÓ   rT  )r*   Ztable_idÚseenr´   r`   r0   r0   r1   Ú_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œ}||krn|| }d|› d|› d}ntd|› dƒ |S )NrQ   rà  z''ú#z'#ú]z']ú[z'[ée   éf   ég   éh   éi   ék   ém   én   )rW  rŠ  rŒ  r²  r³  r‹  r  rŽ  z	SUBTOTAL(z,[z])zUnsupported function 'r  )r&  r   )r*   r—  Zcol_namer?  r˜  Zfunc_numr0   r0   r1   r’    s&    øz$Worksheet._table_function_to_formulac                 C   s$   ||krd S dt || ƒi||< d S )NÚrgb)r   )r*   rº  r  Z
user_colorr0   r0   r1   r¹  *  s    zWorksheet._set_spark_colorc                 C   sø   | j r
dS g }t||d ƒD ]Ö}|| jkr6| d ¡ qt||d ƒD ]¬}|| j| kræ| j| | }|jj}	|	dkr†| |jd›¡ qð|	dkr¬|j}
| j 	|
¡}| |¡ qð|	dkrÒ|j
}|d krÆd}| |¡ qð|	dkrð| d	¡ qD| d ¡ qDq|S )
Nr0   r   ©rH   rL   r  rI   rÀ  r   rE   rQ   )rd   rY  r´   rT  r  rÅ  r4  r'  rb   Z_get_shared_stringr@  )r*   r›  rš  rŸ  rž  r…  rÉ  rÊ  rË  rÌ  ra   r'  r@  r0   r0   r1   Ú_get_range_data1  s4    

zWorksheet._get_range_datac                 G   s   dd„ |D ƒ}d  |¡S )Nc                 S   s"   g | ]}t |tƒst|ƒn|‘qS r0   )r$  r  )r?   Úitemr0   r0   r1   rA   j  s     z'Worksheet._csv_join.<locals>.<listcomp>rí  )rU  )r*   rÆ  r0   r0   r1   r%  f  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}re  z%25rS  z%22r‚  z%20r  z%3cr  z%3er»  z%5brº  z%5dú^z%5eú`z%60rB  z%7br  z%7d)r  rD  r&  )r*   rd  r0   r0   r1   Ú_escape_urln  s    zWorksheet._escape_urlc                 C   sR   |d kr|  j d7  _ | j S | j |¡r2| j| S |  j d7  _ | j | j|< | j S ©Nr   )rÞ   rÝ   r“  ©r*   rŽ  r0   r0   r1   rˆ  ‚  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Ì  r0   r0   r1   r”    s
    
z$Worksheet._get_vml_drawing_rel_indexc                 C   sr  | j }| d¡ |jr | d¡ |jr0| d¡ |jr@| d¡ |jrP| d¡ |jr`| d¡ |jrr|  	|j¡ |j
dkr†|  d¡ |j
d	krš|  d
¡ | dd|jfg¡ |jdkrºnZ|jrÐ|  d|j¡ nD|jræ|  d|j¡ n.|jr|  |j¡}|  d|¡ n|  dd¡ | dd|jfg¡ | dd|jfg¡ |jdkrd|jsd| dd|jfg¡ | d¡ d S )NZrPrÚbr™  ÚstrikeÚoutlineZshadowr   Zsuperscriptrl  Z	subscriptÚszÚvalr+  ÚthemeZindexedrÄ  ZrFontÚfamilyZCalibriÚscheme)râ   rt  ÚboldÚ_xml_empty_tagÚitalicZfont_strikeoutZfont_outlineZfont_shadowÚ	underlineÚ_write_underlineZfont_scriptÚ_write_vert_alignZ	font_sizerÒ  Ú_write_colorZcolor_indexedZ
font_colorÚ_get_palette_colorÚ_write_rstring_colorZ	font_nameZfont_familyÚ	hyperlinkZfont_schemerw  )r*   Z	xf_formatZ
xml_writerrÔ  r0   r0   r1   ru  ž  sD    










zWorksheet._write_fontc                 C   sD   g }|dkrdg}n|dkr$dg}n|dkr2dg}| j  d|¡ d S )Nrl  )rÑ  Údoubleé!   )rÑ  ZsingleAccountingé"   )rÑ  ZdoubleAccountingÚu©râ   rÖ  )r*   rØ  r  r0   r0   r1   rÙ  Ô  s    zWorksheet._write_underlinec                 C   s   d|fg}| j  d|¡ d S )NrÑ  Z	vertAlignrã  ©r*   rÑ  r  r0   r0   r1   rÚ  â  s    
zWorksheet._write_vert_alignc                 C   s   ||fg}| j  d|¡ d S ©NrÔ  rã  ©r*   r`   r@  r  r0   r0   r1   rÝ  è  s    
zWorksheet._write_rstring_colorc                 C   s$   |d dkr|dd … }d|  ¡  S )Nr   r¹  r   ZFF)rs  rÓ  r0   r0   r1   rÜ  î  s    zWorksheet._get_palette_colorc                 C   s   | j s| j ¡  d| _ d S )NT)rû   rø   r8  r  r0   r0   r1   Ú
_opt_closeõ  s    
zWorksheet._opt_closec                 C   s.   | j r*| j}t|ddd| _d| _ | j| _d S )Nza+r1  r2  F)rû   r÷   r9  rø   rx  )r*   r;  r0   r0   r1   Ú_opt_reopenû  s
    zWorksheet._opt_reopenc           
      C   sÎ  g }t |ƒD ]}| ddddœ¡ q|dkrDd|d d< d|d	 d< |d
krpd|d d< d|d	 d< d|d d< |dkr¨d|d d< d|d	 d< d|d d< d|d d< |rÊt|ƒ}||krÆ|d	 }t |ƒD ]ú}||  d¡d k	r0|| d || d< || d }t|tƒr0| d¡r0| d¡|| d< ||  d¡r¢d}|| d |krptd|| d › dƒ n2|| d || d< || d dkr¢d|| d< ||  d¡}	|	rÎ|	dkrÎd|| d< qÎ|S )NFr   Úpercent)rè  r@  r%  rR   éC   r@  rà  r   rä  éK   rm  é   rl  rÂ  éP   é<   é(   rX   r  r%  )ré  rl  r4  r?  zUnknown icon property type 'z2' for sub-property 'type' in conditional_format().r4  Únumrè  r  T)	rY  rT  r.  r“  r$  r  r
  rw  r   )
r*   re  Z
user_propsÚpropsrB   Zmax_datar™  Útmpr)  rè  r0   r0   r1   rt    sL    ÿzWorksheet._set_icon_propsc                 C   sx   d}|d }|d }|d }d}|d }d|fd|fg}| j d	krh| 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:rrr  zxmlns:mczxmlns:x14ac)zmc:IgnorableZx14acrÙ  )rg   rT  rt  )r*   Úschemaró  Zxmlns_rZxmlns_mcZ	ms_schemaZxmlns_x14acr  r0   r0   r1   r=  I  s    

zWorksheet._write_worksheetc                 C   sÔ   | j d kr| jd krd}n¤| j d krn| jd k	rn| j| jkrHtd| jƒ}q¾td| jƒ}td| jƒ}|d | }nP| j | jkr–| j| jkr–t| j | jƒ}n(t| j | jƒ}t| j| jƒ}|d | }|  dd|fg¡ d S )Nr¿  r   r5   Ú	dimensionrÜ  )rl   rn   ro   r$   rm   rÖ  )r*   rÜ  r9   r:   r0   r0   r1   r?  ]  s    zWorksheet._write_dimensionc                 C   s    |   d¡ |  ¡  |  d¡ d S )NZ
sheetViews)rt  Ú_write_sheet_viewrw  r  r0   r0   r1   r@  €  s    
zWorksheet._write_sheet_viewsc                 C   sl  g }| j s| d¡ | jr$| d¡ | js4| d¡ | jrD| d¡ | jrT| d¡ | jsd| d¡ | jdkrz| d¡ n| jd	krŽ| d
¡ | jdkr¨| d| jf¡ | j	dkr| d| j	f¡ | jdkrä| j
rä| d| j	f¡ | jdkrþ| d| j	f¡ | jd	kr| d| j	f¡ | d¡ | js4| jr\|  d|¡ |  ¡  |  ¡  |  d¡ n|  d|¡ d S )N)ZshowGridLinesr   )ZshowRowColHeadersr   )Z	showZerosr   ©ÚrightToLeftr   )ZtabSelectedr   ©ZshowOutlineSymbolsr   r   )rõ  Z
pageLayoutrl  )rõ  ZpageBreakPreviewrQ   ÚtopLeftCellrV   Z	zoomScaler   ZzoomScaleNormalZzoomScalePageLayoutViewZzoomScaleSheetLayoutView)ZworkbookViewIdr   Z	sheetView)r   rT  r   r¤   r£   rw   rª   ré   rt   r    r¡   ru   rq   rt  Ú_write_panesÚ_write_selectionsrw  rÖ  ©r*   r  r0   r0   r1   rö  ‰  sD    











zWorksheet._write_sheet_viewc                 C   sŠ   | j }| j}| j}d|fg}| j | jkr2| d¡ | jrB| d¡ |rT| d|f¡ |rf| d|f¡ | jdkrz| d¡ |  d|¡ d S )	NZdefaultRowHeight©ZcustomHeightr   )Z
zeroHeightr   ZoutlineLevelRowZoutlineLevelColrr  ©zx14ac:dyDescentz0.25ZsheetFormatPr)r­   r¥   r¦   r¬   rT  r²   rg   rÖ  )r*   r­   Z	row_levelZ	col_levelr  r0   r0   r1   rA  Ä  s    




z Worksheet._write_sheet_format_prc                 C   s¼   | j s
d S |  d¡ t| j  ¡ ƒd }|}| j | }| j |= |}|}t| j  ¡ ƒD ]B}| j | }||d krz||krz|}qR|  |||¡ |}|}|}qR|  |||¡ || j |< |  d¡ d S )NÚcolsr   r   )rp   rt  rÃ  r$  Ú_write_col_inforw  )r*   rK  rM  Zprev_col_optionsZdeleted_colZdeleted_col_optionsr@   Zcol_optionsr0   r0   r1   rB  Ü  s(    



zWorksheet._write_colsc                 C   sL  |\}}}}}}	d}
d}|r$|  ¡ }|d kr@|s:d}d}
qLd}n|dkrLd}
|dkr¶d}d}|dk rŽtt|||  d ƒt|ƒ d ƒd }n(tt|| d ƒ| t|ƒ d ƒd }d|d fd	|d fd
|d›fg}|rê| d|f¡ |rø| d¡ |	r| d¡ |
r| d¡ |r,| d|f¡ |r<| d¡ |  d|¡ d S )Nr   r   rY   r±  rÂ  r/  g      p@r³  r²  r´  r  r€  )rr   r>   )ZbestFitr>   )ZcustomWidthr>   ÚoutlineLevel)r¯  r>   r@   )Ú_get_xf_indexr(   r  rT  rÖ  )r*   Úcol_minÚcol_maxrp   r´  r(  rr   r°  r¯  rÎ  Zcustom_widthÚxf_indexr¦  r§  r  r0   r0   r1   r    sj    ÿþÿûÿ
ÿþÿûÿ



ý



zWorksheet._write_col_infoc                 C   s6   | j d kr|  d¡ n|  d¡ |  ¡  |  d¡ d S )NÚ	sheetData)rl   rÖ  rt  Ú_write_rowsrw  r  r0   r0   r1   rC  H  s
    

zWorksheet._write_sheet_datac                 C   s~   | j d kr|  d¡ nd|  d¡ d}| j d¡ | j |¡}|rZ| j |¡ | j |¡}q<| j ¡  t	 
| j¡ |  d¡ d S )Nr  i   r   )rl   rÖ  rt  rø   ÚseekÚreadrx  r  r8  r7  Úunlinkr÷   rw  )r*   Z	buff_sizer…  r0   r0   r1   rD  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ü  rY  rZ  rƒ   r„   ZpageMargins)rŠ   r‹   rŒ   r   rŽ   r   rÖ  rý  r0   r0   r1   rN  j  s    ú	zWorksheet._write_page_marginsc                 C   sb  g }| j sd S | jr$| d| jf¡ | jdkr>| d| jf¡ | jr^| jdkr^| d| jf¡ | jr~| jdkr~| d| jf¡ | jrŽ| d¡ | jdkr¨| d| jf¡ | j	rº| d	¡ n
| d
¡ | j
rÔ| d¡ | jdkrè| d¡ | jr"| jr| d| jf¡ | jrR| d| jf¡ n0| jr:| d| jf¡ | jrR| d| jf¡ |  d|¡ d S )NZ	paperSizerV   r  r   Z
fitToWidthZfitToHeight)Z	pageOrderZoverThenDownZfirstPageNumber)rz   Zportrait)rz   Z	landscape)ZblackAndWhiter>   r   )ZuseFirstPageNumberr>   ZhorizontalDpiZverticalDpiZ	pageSetup)rx   ry   rT  r¢   r–   r—   r˜   r“   r•   rz   r”   rf   rý   rü   rÖ  rý  r0   r0   r1   rO  w  s@    






zWorksheet._write_page_setupc                 C   s^   g }| j sd S | jr| d¡ | jr.| d¡ | jr>| d¡ | jrN| d¡ |  d|¡ d S )N)ZhorizontalCenteredr   )ZverticalCenteredr   )Zheadingsr   )Z	gridLinesr   ZprintOptions)r{   r|   rT  r}   r€   r~   rÖ  rý  r0   r0   r1   rM  Å  s    



zWorksheet._write_print_optionsc                 C   st   g }| j s| d¡ | js$| d¡ | jr^|  d|¡ | jrD|  ¡  | jrR|  ¡  |  	d¡ n| j
rp|  d|¡ d S )N)ZscaleWithDocr   )ZalignWithMarginsr   ZheaderFooter)r†   rT  r…   r‚   rt  rƒ   Ú_write_odd_headerr„   Ú_write_odd_footerrw  rh   rÖ  rý  r0   r0   r1   rP  Þ  s    

zWorksheet._write_header_footerc                 C   s   |   d| j¡ d S )NZ	oddHeader)rv  rƒ   r  r0   r0   r1   r  ò  s    zWorksheet._write_odd_headerc                 C   s   |   d| j¡ d S )NZ	oddFooter)rv  r„   r  r0   r0   r1   r  ö  s    zWorksheet._write_odd_footerc                 C   s$  |   ¡  t| j| jd ƒD ]}|| jks>|| jks>| j| rt|d ƒ}|| jkr`| j| }nd }| j| rè|| jkr†|  	||¡ n|  	||| j| ¡ t| j
| jd ƒD ].}|| j| kr¬| j| | }|  |||¡ q¬|  d¡ q|| jkr
|  ||| j| ¡ q|  ||| j| ¡ qd S )Nr   rÁ  r  )Ú_calculate_spansrY  rl   rm   rŸ   r¼   r´   r(   r¸   Ú
_write_rowrn   ro   Ú_write_cellrw  Ú_write_empty_row)r*   rÉ  Ú
span_indexr·  rÊ  Úcol_refr0   r0   r1   r  ú  s0    ÿþý


zWorksheet._write_rowsc                 C   sÔ   | j }|| _ || jks*|| jks*| j| rÆd }| j| r²|| jkrP|  ||¡ n|  ||| j| ¡ t| j| jd ƒD ].}|| j| krv| j| | }|  |||¡ qv|  	d¡ n|  
||| j| ¡ | j ¡  d S )Nr   r  )rã   rŸ   r¼   r´   r  rY  rn   ro   r  rw  r  Úclear)r*   Zcurrent_row_numrÉ  r·  rÊ  r  r0   r0   r1   r0  "  s    

zWorksheet._write_single_rowc                 C   s:  i }d }d }t | j| jd ƒD ]}|| jkrzt | j| jd ƒD ]8}|| j| kr@|d krd|}|}q@t||ƒ}t||ƒ}q@|| jkrÚt | j| jd ƒD ]B}|| jkr–|| j| kr–|d krÄ|}|}q–t||ƒ}t||ƒ}q–|d d dksô|| jkrt	|d ƒ}|d k	r|d7 }|d7 }|› d|› ||< d }q|| _
d S )Nr   rÁ  r   r5   )rY  rl   rm   r´   rn   ro   r³  r²  r¼   r(   r¸   )r*   ÚspansZspan_minZspan_maxrÉ  rÊ  r  r0   r0   r1   r  G  s8    



zWorksheet._calculate_spansc                 C   sB  d}|r|\}}}}	}
nd\}}}}	}
|d kr4| j }d|d fg}|rN| ¡ }|r`| d|f¡ |rr| d|f¡ |r€| d¡ || jksž|| jkr°|| j kr°| d|d	›f¡ |r¾| d
¡ || jksÜ|| jkræ|| j kræ| d¡ |	rø| d|	f¡ |
r| d¡ | jdkr| d¡ |r2|  d|¡ n|  d|¡ d S )Nr   )NNr   r   r   ro  r   r  Ús)ZcustomFormatr   ZhtÚg)rr   r   rþ  r  )r¯  r   rr  rÿ  r  )r­   r  rT  r¬   rg   Z_xml_empty_tag_unencodedZ_xml_start_tag_unencoded)r*   r  r  Ú
propertiesÚ	empty_rowr  rÏ  r(  rr   r°  r¯  r  r0   r0   r1   r  r  sL    

ÿÿ

ÿÿ


zWorksheet._write_rowc                 C   s   | j |||dd d S )NT)r  )r  )r*   r  r  r  r0   r0   r1   r  ©  s    zWorksheet._write_empty_rowc                 C   sà  t ||ƒ}d|fg}|jr4|j ¡ }| d|f¡ nl|| jkrn| j| d rn| j| d }| d| ¡ f¡ n2|| jkr | j| d }|d k	r | d| ¡ f¡ |jj}	|	dkrÂ|  |j	|¡ n|	dkr0|j
}
| jsæ|  |
|¡ nF|  |
¡}
|
 d¡r|
 d¡r|  |
|¡ nt|
ƒ}|  |
||¡ n¬|	dkrÂ|j}t|jtƒrl| d	¡ |jrfd}nd
}nBt|jtƒr®d}|jdkrŒn"|j|kr¤| d¡ n
| d¡ |  |j||¡ n|	dkrF|jdkrâ| d¡ zt|jƒ W n  tk
r   | d¡ Y nX |  d|¡ |  |j|j¡ |  |j¡ |   d¡ n–|	dkr^|  !d|¡ n~|	dkr–| d	¡ |  d|¡ |  |j"¡ |   d¡ nF|	dkrÜ| d¡ | d|jf¡ |  d|¡ |  |j#¡ |   d¡ d S )Nro  r  r   rÅ  r¼  z<r>z</r>rK   )rq  rÍ  r   )r7  z#N/Az#NAME?z#NULL!r6  z#REF!r’  rQ   )rq  Úe)rq  r  rN   rO  )Úcmr   ÚcrE   rJ   rG   Úvm)$r%   rF   r  rT  rŸ   rp   r  rÅ  Z_xml_number_elementr4  r'  rd   Z_xml_string_elementZ_escape_control_charactersr
  r  Z_xml_rich_inline_stringr   Z_xml_inline_stringr@  r$  r  r  Z_xml_formula_elementr?  rZ  r  r)   rt  Ú_write_cell_array_formularY  Ú_write_cell_valuerw  rÖ  r`  rP  )r*   r  r@   rË  r[  r  r  Zrow_xfZcol_xfZtype_cell_namer'  rp  r@  Zerror_codesr0   r0   r1   r  ­  s~    
















zWorksheet._write_cellc                 C   s   |d krd}|   d|¡ d S )NrQ   Úv©rv  )r*   r@  r0   r0   r1   r  #  s    zWorksheet._write_cell_valuec                 C   s   dd|fg}|   d||¡ d S )N)rq  ÚarrayrÜ  r  r!  )r*   r?  r[  r  r0   r0   r1   r  *  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rL| d¡ | j s^| js^| jrŽ|  d|¡ |  ¡  |  ¡  |  	¡  |  
d¡ n|  d|¡ d S )NZcodeName)Z
filterModer   ZsheetPr)r–   rÆ   rs   r«   rê   rT  rt  Ú_write_tab_colorÚ_write_outline_prÚ_write_page_set_up_prrw  rÖ  rý  r0   r0   r1   r>  0  s.    ÿþýüû
zWorksheet._write_sheet_prc                 C   s    | j s
d S dg}|  d|¡ d S )N)Z	fitToPager   ZpageSetUpPr)r–   rÖ  rý  r0   r0   r1   r%  L  s    zWorksheet._write_page_set_up_prc                 C   s(   | j }|sd S d|fg}|  d|¡ d S )NrÄ  ZtabColor)rs   rÖ  )r*   rÔ  r  r0   r0   r1   r#  T  s
    
zWorksheet._write_tab_colorc                 C   s^   g }| j sd S | jr| d¡ | js.| d¡ | js>| d¡ | jsN| d¡ |  d|¡ d S )N)ZapplyStylesr   )ZsummaryBelowr   )ZsummaryRightr   rù  Z	outlinePr)r«   r§   rT  r¨   r©   rª   rÖ  rý  r0   r0   r1   r$  _  s    



zWorksheet._write_outline_prc                 C   s\   |   | j¡}|sd S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q<|  d¡ d S )NrŒ  ÚmanualBreakCountZ	rowBreaksiÿ?  )r]  r™   r.  rt  Ú
_write_brkrw  )r*   Úpage_breaksrŒ  r  rÉ  r0   r0   r1   rQ  q  s    þzWorksheet._write_row_breaksc                 C   s\   |   | j¡}|sd S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q<|  d¡ d S )NrŒ  r&  Z	colBreaksiÿÿ )r]  rš   r.  rt  r'  rw  )r*   r(  rŒ  r  rÊ  r0   r0   r1   rR  †  s    þzWorksheet._write_col_breaksc                 C   s"   d|fd|fdg}|   d|¡ d S )Nr„  r²  )Úmanr   Zbrk©rÖ  )r*   Zbrk_idZbrk_maxr  r0   r0   r1   r'  ›  s    zWorksheet._write_brkc                 C   sN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q0|  d¡ d S )NrŒ  Z
mergeCells)rµ   r.  rt  Ú_write_merge_cellrw  )r*   r¶   rŒ  r  Úmerged_ranger0   r0   r1   rI  ¡  s    
zWorksheet._write_merge_cellsc           
      C   sF   |\}}}}t ||ƒ}t ||ƒ}|d | }d|fg}	|  d|	¡ d S )Nr5   rÜ  Z	mergeCell)r$   rÖ  )
r*   r,  Zrow_minr  Zrow_maxr  r9   r:   rÜ  r  r0   r0   r1   r+  ³  s    


zWorksheet._write_merge_cellc                 C   sø   t | j ¡ ƒ}|sd S |  d¡ |D ]Ä}t | j|  ¡ ƒ}|D ]¨}| j| | }| jrŽ| j| rŽ| j| | rŽ| j| | }|jjdkrŽd|_|jt	j
t	jfkrØ|  jd7  _|  ||| j|¡ | j d| ¡ dg¡ q>|  |||¡ q>q$|  d¡ d S )Nrì   rI   Tr   ru  ZExternal)rÃ  rì   r$  rt  r´   r  rÅ  Ú_is_object_linkZ
_link_typer   ÚURLZEXTERNALrÍ   Ú_write_hyperlink_externalrÏ   rT  r…  Ú_write_hyperlink_internalrw  )r*   r²  rÉ  r³  rÊ  rd  rË  r0   r0   r1   rL  À  s2    
   ÿÿzWorksheet._write_hyperlinks)r  r@   Úid_numrd  c                 C   sx   t ||ƒ}dt|ƒ }d|fd|fg}|jr<| d|jf¡ |jrR| d|jf¡ |jrh| d|jf¡ |  d|¡ d S )NÚrIdrÜ  úr:idr  ÚdisplayÚtooltiprÞ  )r$   r  r|  rT  r-  rg  rh  rÖ  )r*   r  r@   r1  rd  rÜ  Úr_idr  r0   r0   r1   r/  ò  s    
z#Worksheet._write_hyperlink_external)r  r@   rd  c                 C   sR   t ||ƒ}d|fd|jfg}|jr2| d|jf¡ | d|jf¡ |  d|¡ d S )NrÜ  r  r5  r4  rÞ  )r$   r‡  rh  rT  rg  rÖ  )r*   r  r@   rd  rÜ  r  r0   r0   r1   r0    s    
z#Worksheet._write_hyperlink_internalc                 C   sL   | j s
d S d| j fg}| jr<|  d|¡ |  ¡  |  d¡ n|  d|¡ d S )NrÜ  Ú
autoFilter)rÄ   rÆ   rt  Ú_write_autofiltersrw  rÖ  rý  r0   r0   r1   rH    s    zWorksheet._write_auto_filterc                 C   sT   | j \}}t||d ƒD ]6}|| jkr(q| j| }| j| }|  || ||¡ qd S rË  )rÅ   rY  rÇ   rÈ   Ú_write_filter_column)r*   Zcol1Zcol2r@   r{  rÈ   r0   r0   r1   r8  "  s    



zWorksheet._write_autofiltersc                 C   sB   d|fg}|   d|¡ |dkr*|  |¡ n
|  |¡ |  d¡ d S )NZcolIdZfilterColumnr   )rt  Ú_write_filtersÚ_write_custom_filtersrw  )r*   r”  rÈ   rî  r  r0   r0   r1   r9  3  s    

zWorksheet._write_filter_columnc                 C   s€   dd„ |D ƒ}g }t |ƒt |ƒkr(dg}t |ƒdkrNt |ƒdkrN|  d|¡ n.|  d|¡ t|ƒD ]}|  |¡ qb|  d¡ d S )Nc                 S   s    g | ]}t |ƒ ¡ d kr|‘qS )r[  )r  r  )r?   Úfilterr0   r0   r1   rA   D  s      z,Worksheet._write_filters.<locals>.<listcomp>)r;  r   r   r   rî  )r.  rÖ  rt  rÃ  Ú_write_filterrw  )r*   rî  Z
non_blanksr  rÝ  r0   r0   r1   r:  B  s    zWorksheet._write_filtersc                 C   s   d|fg}|   d|¡ d S )NrÑ  r<  r*  rä  r0   r0   r1   r=  V  s    
zWorksheet._write_filterc                 C   sŒ   t |ƒdkr,|  d¡ | j|Ž  |  d¡ n\g }|d dkrDdg}ndg}|  d|¡ |  |d |d ¡ |  |d |d ¡ |  d¡ d S )	Nrl  ZcustomFiltersr   )Úandr   )r>  r   r   rR   rä  )r.  rt  Ú_write_custom_filterrw  )r*   r{  r  r0   r0   r1   r;  \  s    

zWorksheet._write_custom_filtersc                 C   sp   g }ddddddddœ}|| d k	r.|| }nt d|› ƒ |dkrR| d	|f¡ | d
|f¡ |  d|¡ d S )Nr	  r  r  r  r  r
  )r   rl  rR   rä  rÂ  rb  rg  zUnknown operator = ri  rÑ  ZcustomFilter)r   rT  rÖ  )r*   ri  rÑ  r  rh  r0   r0   r1   r?  s  s     ù
zWorksheet._write_custom_filterc                 C   s|  g }| j sd S | j }|d r.| d|d f¡ |d r@| d¡ |d rR| d¡ |d sd| d¡ |d sv| d	¡ |d
 rˆ| d¡ |d rš| d¡ |d r¬| d¡ |d r¾| d¡ |d rÐ| d¡ |d râ| d¡ |d rô| d¡ |d r| d¡ |d s| d¡ |d r0| d¡ |d rD| d¡ |d  rX| d!¡ |d" sl| d#¡ |  d$|¡ d S )%Nræ  rÖ  )rÖ  r   r×  )r×  r   rØ  )rØ  r   rÙ  )rÙ  r   rÚ  )ZformatCellsr   rÛ  )ZformatColumnsr   rÜ  )Z
formatRowsr   rÝ  )ZinsertColumnsr   rÞ  )Z
insertRowsr   rß  )ZinsertHyperlinksr   rà  )ZdeleteColumnsr   rá  )Z
deleteRowsr   râ  )ZselectLockedCellsr   rã  )rã  r   rÝ  )r7  r   rä  )ZpivotTablesr   rå  )ZselectUnlockedCellsr   ZsheetProtection)r›   rT  rÖ  )r*   r  r  r0   r0   r1   rE  Ž  sR    






















z!Worksheet._write_sheet_protectionc                 C   sF   | j dkrd S |  d¡ | jD ]\}}}|  |||¡ q|  d¡ d S )Nr   ZprotectedRanges)r   rt  rœ   Ú_write_protected_rangerw  rë  r0   r0   r1   rF  ¾  s    

z!Worksheet._write_protected_rangesc                 C   sB   g }|r|  d|f¡ |  d|f¡ |  d|f¡ |  d|¡ d S )Nræ  rÂ  r`   ZprotectedRange©rT  rÖ  )r*   r[  rì  ræ  r  r0   r0   r1   r@  Ê  s    z Worksheet._write_protected_rangec                 C   s(   | j s
d S |  jd7  _|  | j¡ d S rË  )rÜ   rÍ   Ú_write_drawingr  r0   r0   r1   rT  Ö  s    zWorksheet._write_drawingsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr2  r3  rÜ   ©r  rÖ  )r*   rp  r6  r  r0   r0   r1   rB  Þ  s    
zWorksheet._write_drawingc                 C   s@   | j s
d S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   r2  r3  ZlegacyDrawing)r¹   rÍ   r  rÖ  ©r*   r6  r  r0   r0   r1   rU  æ  s    
zWorksheet._write_legacy_drawingc                 C   s@   | j s
d S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   r2  r3  ZlegacyDrawingHF)rº   rÍ   r  rÖ  rD  r0   r0   r1   rV  ó  s    
z"Worksheet._write_legacy_drawing_hfc                 C   s@   | j s
d S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   r2  r3  Zpicture)rá   rÍ   r  rÖ  rD  r0   r0   r1   rW     s    
zWorksheet._write_picturec                 C   sN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q0|  d¡ d S )NrŒ  ZdataValidations)rä   r.  rt  Ú_write_data_validationrw  )r*   rä   rŒ  r  Z
validationr0   r0   r1   rK    s    
z!Worksheet._write_data_validationsc           	      C   s  d}g }|d D ]V}|dkr$|d7 }|\}}}}||krB|| }}||krT|| }}|t ||||ƒ7 }q| d¡rz|d }|d dkr¶| d|d f¡ |d d	kr¶| d
|d f¡ d|krê|d dkrÔ| d¡ |d dkrê| d¡ |d  rþ| d¡ |d s| d¡ |d r&| d¡ |d r:| d¡ d|krV| d|d f¡ d|krr| d|d f¡ d|krŽ| d|d f¡ d|krª| d|d f¡ | d |f¡ |d dkrÔ|  d!|¡ n@|  d!|¡ |  |d" ¡ |d# d k	r
|  |d# ¡ |  d!¡ d S )$NrQ   r!  r‚  rû  rï  rý  r%  rè  r  ri  rú  r   )Ú
errorStyler  rl  )rF  r  rò  )Z
allowBlankr   ró  )ZshowDropDownr   rô  )ZshowInputMessager   r÷  )ZshowErrorMessager   rø  Z
errorTitlerù  rP  rõ  ZpromptTitlerö  ÚpromptrÂ  ZdataValidationr@  rñ  )r#   r“  rT  rÖ  rt  Ú_write_formula_1Ú_write_formula_2rw  )	r*   r  rÂ  r  r!  Z	row_firstrê  Zrow_lastrë  r0   r0   r1   rE    s\    
















z Worksheet._write_data_validationc                 C   sh   t |tƒr"| j|Ž }d|› d}n6zt|ƒ W n( tk
rV   | d¡rR| d¡}Y nX |  d|¡ d S )NrS  r  Zformula1)r$  rr  r%  r  r)   r
  rw  rv  ©r*   r?  r0   r0   r1   rH  l  s    


zWorksheet._write_formula_1c                 C   sF   zt |ƒ W n( tk
r4   | d¡r0| d¡}Y nX |  d|¡ d S )Nr  Zformula2©r  r)   r
  rw  rv  rJ  r0   r0   r1   rI  }  s    
zWorksheet._write_formula_2c                 C   s6   t | j ¡ ƒ}|sd S |D ]}|  || j| ¡ qd S r[  )rÃ  rå   r$  Ú_write_conditional_formatting)r*   r­  Ú
cond_ranger0   r0   r1   rJ  Š  s     ÿz$Worksheet._write_conditional_formatsc                 C   s8   d|fg}|   d|¡ |D ]}|  |¡ q|  d¡ d S )NrÂ  ZconditionalFormatting)rt  Ú_write_cf_rulerw  )r*   rM  Úparamsr  Úparamr0   r0   r1   rL  –  s
    
z'Worksheet._write_conditional_formattingc                 C   s
  d|d fg}d|kr4|d d k	r4|  d|d f¡ |  d|d f¡ | d¡rZ|  d¡ |d dkrÎ|  d|d	 f¡ |  d
|¡ d|kr²d|kr²|  |d ¡ |  |d ¡ n|  |d ¡ |  d
¡ n8|d dkrXt d|d	 ¡rö|  d¡ t d|d	 ¡r|  d¡ t d|d	 ¡rHt d|d	 ¡}|  d| d¡f¡ |  d
|¡ n®|d dkrÈd	|krˆ|d	 dkrˆ|  d¡ d|krœ|  d¡ |d p¨d}|  d|f¡ |  d
|¡ n>|d dkræ|  d
|¡ n |d dkr|  d
|¡ n|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
¡ n~|d d&krÐ|  d&|d	 f¡ |  d
|¡ |  |d% ¡ |  d
¡ n6|d d'ks|d d(ks|d d)ks|d d*kr.|  d
|¡ |  |d% ¡ |  d
¡ nØ|d d+kr^|  d
|¡ |  	|¡ |  d
¡ n¨|d d,kr¤|  d
|¡ |  
|¡ | d-¡r˜|  |¡ |  d
¡ nb|d d.krØ|  d
|¡ |  |d	 ¡ |  d
¡ n.|d d/kr|  d
|¡ |  |¡ |  d
¡ d S )0Nr%  rF   ZdxfIdrh  r,  )Z
stopIfTruer   rH  ri  rè  ZcfRulerð  rñ  r@  rI  Zbelow)rI  r   r  )ZequalAverager   z[123] std devz([123]) std devr‹  r   rL  re  )ré  r   r^  )rZ  r   rÎ  ÚrankrJ  rK  r_  rj  r`  ra  ri  r?  rM  rN  rO  rP  rQ  rk  rT  ri  rU  rV  )rT  r“  rt  Ú_write_formula_elementrw  r  rD  ÚgrouprÖ  Ú_write_color_scaleÚ_write_data_barÚ_write_data_bar_extÚ_write_icon_set)r*   rO  r  r  rQ  r0   r0   r1   rN  Ÿ  s¤    







ÿ
þ
ý
ü
ÿ
þ
ý
ü



zWorksheet._write_cf_rulec                 C   sF   zt |ƒ W n( tk
r4   | d¡r0| d¡}Y nX |  d|¡ d S )Nr  r?  rK  rJ  r0   r0   r1   rR    s    
z Worksheet._write_formula_elementc                 C   sœ   |   d¡ |  |d |d ¡ |d d k	r>|  |d |d ¡ |  |d |d ¡ |  d|d	 ¡ |d
 d k	r~|  d|d
 ¡ |  d|d ¡ |  d¡ d S )Nrk  r-  r0  r.  r1  r/  r2  rÄ  r3  r4  r5  )rt  Ú_write_cfvorÛ  rw  )r*   rP  r0   r0   r1   rT    s    
zWorksheet._write_color_scalec                 C   sž   g }d|kr|  d|d f¡ d|kr8|  d|d f¡ | d¡rL|  d¡ |  d|¡ |  |d |d	 ¡ |  |d
 |d ¡ |  d|d ¡ |  d¡ d S )Nr6  Ú	minLengthr7  Ú	maxLengthrC  ©Z	showValuer   rT  r-  r0  r/  r2  rÄ  r8  )rT  r“  rt  rX  rÛ  rw  )r*   rP  r  r0   r0   r1   rU  -  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)ra   r.  ræ   rT  rt  Ú
_write_extrv  rw  )r*   rP  Zworksheet_countZdata_bar_countr\  r0   r0   r1   rV  D  s    



zWorksheet._write_data_bar_extc                 C   sŒ   g }|d dkrd|d fg}|  d¡r2| d¡ |  d¡rF| d¡ |  d|¡ t|d ƒD ]}|  |d	 |d
 |d ¡ q^|  d¡ d S )NrD  rd  rV  rF  r[  rE  )r§  r   rG  r%  r@  rè  )r“  rT  rt  ÚreversedrX  rw  )r*   rP  r  Úiconr0   r0   r1   rW  V  s    



zWorksheet._write_icon_setc                 C   s>   d|fg}|d k	r |  d|f¡ |r.|  d¡ |  d|¡ d S )Nr%  rÑ  )Zgter   ZcfvorA  )r*   Zcf_typerÑ  rè  r  r0   r0   r1   rX  l  s    

zWorksheet._write_cfvoc                 C   s   ||fg}|   d|¡ d S rå  r*  ræ  r0   r0   r1   rÛ  x  s    
zWorksheet._write_colorc                 C   s   | j D ]}| j|Ž  qd S r[  )rq   Ú_write_selection)r*   Ú	selectionr0   r0   r1   rü  ~  s    
zWorksheet._write_selectionsc                 C   sJ   g }|r|  d|f¡ |r(|  d|f¡ |r:|  d|f¡ |  d|¡ d S )NrÀ  Z
activeCellrÂ  rc  rA  )r*   rÀ  rÁ  rÂ  r  r0   r0   r1   rb  ƒ  s    zWorksheet._write_selectionc                 C   s4   | j }|sd S |d dkr&| j|Ž  n
| j|Ž  d S )Nrä  rl  )ru   Ú_write_split_panesÚ_write_freeze_panes)r*   ru   r0   r0   r1   rû  ’  s    zWorksheet._write_panesc                 C   sL  g }|}|}t ||ƒ}	d}
d}d}d}| jrB| jd \}}}g | _|rš|ršd}
t |dƒ}t d|ƒ}| j d||g¡ | j d||g¡ | j d||g¡ n2|r¶d}
| j d||g¡ nd}
| j d||g¡ |dkrÚd}n|dkrèd}nd	}|rþ| d
|f¡ |r| d|f¡ | d|	f¡ | d|
f¡ | d|f¡ |  d|¡ d S )NrQ   r   ÚbottomRightÚtopRightÚ
bottomLeftÚfrozenr   ZfrozenSplitr7   ÚxSplitÚySplitrú  Ú
activePaneÚstaterÀ  )r$   rq   rT  rÖ  )r*   r  r@   rÇ  rÈ  rÉ  r  Úy_splitÚx_splitrt   rv   rm  rÁ  rÂ  rB   Úrow_cellÚcol_cellr0   r0   r1   re  ž  sH    


zWorksheet._write_freeze_panesc                 C   s®  g }d}d}d}	d}
|}|}| j r<| j d \}}	}
g | _ d}|rPtd| d ƒ}|r^|  |¡}||kr¦||kr¦t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¡ n4|r6d}| j  d|	|
g¡ nd}| j  d|	|
g¡ |rd| d|d›f¡ |r|| d|d›f¡ | d|f¡ |rž| d|f¡ |  d|¡ d S )NFrQ   r   TrX   i,  r/  rW   é†  rR   rä  rZ   rf  rg  rh  rj  r  rk  rú  rl  rÀ  )rq   r(   Ú_calculate_x_split_widthr$   rT  rÖ  )r*   r  r@   rÇ  rÈ  rB   r  Zhas_selectionrv   rÁ  rÂ  rn  ro  rt   rp  rq  r0   r0   r1   rd  Ö  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/  rR   rä  rX   rr  )r(   )r*   r´  r¦  r§  r¨  ZpointsZtwipsr0   r0   r1   rs    s    z"Worksheet._calculate_x_split_widthc                 C   s^   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  jd7  _|  | j¡ q0|  d¡ d S )NrŒ  Z
tablePartsr   )rÙ   r.  rt  rÍ   Ú_write_table_partrw  )r*   rÙ   rŒ  r  rB   r0   r0   r1   rX  4  s    þÿzWorksheet._write_table_partsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr2  r3  Z	tablePartrC  rD  r0   r0   r1   rt  M  s    þÿzWorksheet._write_table_partc                 C   sP   t | jƒ}t | jƒ}|s |s d S |  d¡ |r6|  ¡  |rB|  ¡  |  d¡ d S )Nr]  )r.  ræ   rÚ   rt  Ú_write_ext_list_data_barsÚ_write_ext_list_sparklinesrw  )r*   Zhas_data_barsZhas_sparklinesr0   r0   r1   rY  [  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_  rt  ræ   Ú"_write_conditional_formatting_2010rw  )r*   r]  r0   r0   r1   ru  n  s    



z#Worksheet._write_ext_list_data_barsc                 C   sì   d}d|fg}|   d|¡ |  |¡ |  |¡ |  |d |d ¡ |  |d |d ¡ |d sl|  |d	 ¡ |d
 s‚|  |d ¡ |d s |d s |  |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:conditionalFormattingro  r0  rq  r2  r?  r<  r:  r9  r>  r=  rA  rý  rB  úx14:dataBarú
x14:cfRuleúxm:sqrefrY  )
rt  Ú_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_colorrw  rv  )r*   r]  Úxmlns_xmr  r0   r0   r1   rw  |  s,    


ÿþ

z,Worksheet._write_conditional_formatting_2010c                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )NrT  r\  r%  r„  r{  ©rt  )r*   r]  Ú	rule_typer\  r  r0   r0   r1   r}  ©  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rR|  d¡ |d	 dkrh|  d¡ |d rz|  d¡ |d s”|d s”|  d¡ |d dkrª|  d¡ |d dkrÀ|  d¡ |  d|¡ d S )Nr   rV   rY  rZ  r?  )Úborderr   r;  )Zgradientr   r@  rû  )r^  ZleftToRightrü  )r^  rø  r:  )ZnegativeBarColorSameAsPositiver   r>  )Z$negativeBarBorderColorSameAsPositiver   rA  Úmiddle)ÚaxisPositionrˆ  rý  )r‰  rý  rz  )rT  rt  )r*   r]  r6  r7  r  r0   r0   r1   r~  ±  s2    þ




ÿþ


zWorksheet._write_x14_data_barc                 C   sF   d|fg}|dkr |   d|¡ n"|  d|¡ |  d|¡ |  d¡ d S )Nr%  )r³  r²  rn  rp  zx14:cfvoúxm:f)rÖ  rt  rv  rw  )r*   r†  r@  r  r0   r0   r1   r  Ø  s    
zWorksheet._write_x14_cfvoc                 C   s   d|fg}|   d|¡ d S )NrÄ  zx14:borderColorr*  ©r*   rÄ  r  r0   r0   r1   r€  ã  s    
z!Worksheet._write_x14_border_colorc                 C   s   d|fg}|   d|¡ d S )NrÄ  zx14:negativeFillColorr*  r‹  r0   r0   r1   r  è  s    
z(Worksheet._write_x14_negative_fill_colorc                 C   s   d|fg}|   d|¡ d S )NrÄ  zx14:negativeBorderColorr*  r‹  r0   r0   r1   r‚  í  s    
z*Worksheet._write_x14_negative_border_colorc                 C   s   d|fg}|   d|¡ d S )NrÄ  zx14:axisColorr*  r‹  r0   r0   r1   rƒ  ò  s    
zWorksheet._write_x14_axis_colorc                 C   sÚ   |   d¡ |  ¡  t| jƒD ]¤}|  |¡ |  |d ¡ |  |d ¡ |  ¡  |  |d ¡ |  	|d ¡ |  
|d ¡ |  |d ¡ |  |d ¡ |d	 r¬|  d
|d	 ¡ |  |¡ |  d¡ q|  d¡ |  d¡ d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}rŸ  r   r¡  r¢  r£  r¤  r¥  r¨  rŠ  úx14:sparklineGroupúx14:sparklineGroupsr^  )r_  Ú_write_sparkline_groupsr`  rÚ   Ú_write_sparkline_groupÚ_write_color_seriesÚ_write_color_negativeÚ_write_color_axisÚ_write_color_markersÚ_write_color_firstÚ_write_color_lastÚ_write_color_highÚ_write_color_lowrv  Ú_write_sparklinesrw  )r*   rº  r0   r0   r1   rv  ÷  s$    



z$Worksheet._write_ext_list_sparklinesc                 C   sn   |   d¡ t|d ƒD ]H}|d | }|d | }|   d¡ |  d|¡ |  d|¡ |  d¡ q|  d¡ d S )Nzx14:sparklinesrŒ  r­  rœ  zx14:sparklinerŠ  r|  )rt  rY  rv  rw  )r*   rº  r™  r¼  r  r0   r0   r1   r˜  %  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…  )r*   r™  rô  Z	xmlns_x14r  r0   r0   r1   r_  6  s    þzWorksheet._write_extc                 C   s   d}d|fg}|   d|¡ d S )Nrx  ry  r  r…  )r*   r„  r  r0   r0   r1   rŽ  B  s    
z!Worksheet._write_sparkline_groupsc                 C   sú  |  d¡}g }|  d¡d k	rL|d dkr2d|d< n| d|d f¡ d|d< |  d¡d k	rŠ|d dkrpd|d< n| d	|d f¡ d|d< |d
 dkr¨| d
|d
 f¡ |  d¡rÄ| d|d f¡ |  d¡rØ| d¡ |rê| d|f¡ |  d¡rþ| d¡ |  d¡r| d¡ |  d¡r*| d¡ |  d¡r@| d¡ |  d¡rV| d¡ |  d¡rl| d¡ |  d¡r‚| d¡ |  d¡r˜| d ¡ |  d¡r¶| d!|d f¡ |  d¡rÔ| d"|d f¡ |  d#¡rê| d$¡ |  d%|¡ d S )&Nrµ  r²  rS  Zcust_maxZ	manualMaxr  r³  Zcust_minZ	manualMinr%  rª  r©  Z
lineWeightr¨  )ZdateAxisr   ZdisplayEmptyCellsAsrž  )rž  r   r¯  )r¯  r   r°  )r°  r   r²  )r²  r   r³  )r³  r   r±  )r±  r   r¦  )ZdisplayXAxisr   rr   )ZdisplayHiddenr   ZminAxisTypeZmaxAxisTyper§  r÷  rŒ  )r“  rT  rt  )r*   r  rµ  r  r0   r0   r1   r  J  sV    















z Worksheet._write_sparkline_groupc                 C   sh   g }|  d¡r | d|d f¡ |  d¡r<| d|d f¡ |  d¡rX| d|d f¡ |  ||¡ d S )NrÄ  rÒ  Ztint)r“  rT  rÖ  )r*   ÚelementrÔ  r  r0   r0   r1   Ú_write_spark_color£  s    


zWorksheet._write_spark_colorc                 C   s   |   d|¡ d S )Nzx14:colorSeries©r›  rÓ  r0   r0   r1   r  ²  s    zWorksheet._write_color_seriesc                 C   s   |   d|¡ d S )Nzx14:colorNegativerœ  rÓ  r0   r0   r1   r‘  ¶  s    zWorksheet._write_color_negativec                 C   s   |   dddi¡ d S )Nzx14:colorAxisrÄ  ZFF000000rœ  r  r0   r0   r1   r’  º  s    zWorksheet._write_color_axisc                 C   s   |   d|¡ d S )Nzx14:colorMarkersrœ  rÓ  r0   r0   r1   r“  ¾  s    zWorksheet._write_color_markersc                 C   s   |   d|¡ d S )Nzx14:colorFirstrœ  rÓ  r0   r0   r1   r”  Â  s    zWorksheet._write_color_firstc                 C   s   |   d|¡ d S )Nzx14:colorLastrœ  rÓ  r0   r0   r1   r•  Æ  s    zWorksheet._write_color_lastc                 C   s   |   d|¡ d S )Nzx14:colorHighrœ  rÓ  r0   r0   r1   r–  Ê  s    zWorksheet._write_color_highc                 C   s   |   d|¡ d S )Nzx14:colorLowrœ  rÓ  r0   r0   r1   r—  Î  s    zWorksheet._write_color_lowc                 C   s   ddg}|   d|¡ d S )N)ZfontIdÚ0)r%  ZnoConversionZ
phoneticPrr*  rý  r0   r0   r1   rG  Ò  s    þzWorksheet._write_phonetic_prc                 C   sZ  | j s
d S |  d¡ | j  d¡r6| j d }|  d|¡ | j  d¡rX| j d }|  d|¡ | j  d¡rz| j d }|  d|¡ | j  d¡rœ| j d }|  d	|¡ | j  d
¡r¾| j d
 }|  d|¡ | j  d¡rà| j d }|  d|¡ | j  d¡r| j d }|  d|¡ | j  d¡r(| j d }|  d|¡ | j  d¡rL| j d }|  d|¡ |  d¡ d S )NZignoredErrorsr$  ZnumberStoredAsTextr%  Z	evalErrorr&  r?  r'  ZformulaRanger(  ZunlockedFormular)  ZemptyCellReferencer*  ZlistDataValidationr+  ZcalculatedColumnr,  ZtwoDigitTextYear)rÿ   rt  r“  Ú_write_ignored_errorrw  )r*   Úignored_ranger0   r0   r1   rS  Û  s>    









zWorksheet._write_ignored_errorsc                 C   s    d|f|dfg}|   d|¡ d S )NrÂ  r   ZignoredErrorr*  )r*   rú  rŸ  r  r0   r0   r1   rž     s    þzWorksheet._write_ignored_error)N)N)N)N)N)N)Nr   )Nr   )Nr   )Nr   )F)Nr   rI  )N)N)N)N)NNN)NNN)N)N)N)N)N)N)N)F)NNN)NNN)rº  )NNN)NNN)NF)N)N)N)N)N)r   r   )r   r   r   r   )NNr   )NN)rV   )rQ   N)NN)N)N)r   )rS   rS   rT   rT   )rQ   NN)rQ   NN)N)N)r   )N)N)FF)N)r   )r   )N)N)N)r   )NF)N)N)ùrÅ  Ú
__module__Ú__qualname__Ú__doc__r_   r  r4   r  r  r)  r  r5  r  r<  r	  rA  r  r=   rN  rE  rG  ÚstaticmethodrW  rF  r\  r#  ra  r  re  r  rk  rj  rƒ  r†  r‡  r‘  r•  rž  r¡  r£  r¤  r¥  r§  r¨  r©  rª  r¬  r­  r®  rD   r·  r¹  rÎ  rÐ  rÒ  rÓ  rØ  rÝ  rì  rç  r+  r{  r›  r¾  rÃ  rÄ  rÆ  rÊ  rÍ  rÐ  rÑ  rÒ  rÕ  ré  rí  rï  rð  rò  ró  rö  r÷  rø  rù  rú  rý  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r"  r#  r-  r<  rZ  r-  r]  rÚ  r]  rå  ræ  ra  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”  ru  rÙ  rÚ  rÝ  rÜ  rç  rè  rt  r=  r?  r@  rö  rA  rB  r  rC  rD  rN  rO  rM  rP  r  r  r  r0  r  r  r  r  r  r  r>  r%  r#  r$  rQ  rR  r'  rI  r+  rL  r   r/  r0  rH  r8  r9  r:  r=  r;  r?  rE  rF  r@  rT  rB  rU  rV  rW  rK  rE  rH  rI  rJ  rL  rN  rR  rT  rU  rV  rW  rX  rÛ  rü  rb  rû  re  rd  rs  rX  rt  rY  ru  rw  r}  r~  r  r€  r  r‚  rƒ  rv  r˜  r_  rŽ  r  r›  r  r‘  r’  r“  r”  r•  r–  r—  rG  rS  rž  Ú__classcell__r0   r0   r  r1   rO   Ç   s`   ]&
U!  ø, ø- 8
$  ÷
6*
y,3F!    ÿ=    ÿ :ÿL
)<*  ÿ   y  W @
"      ÿ
3"##OO
 /.d!(!WüNE:D^5	
56	E#	;(D
N(%+7v20M	l8G-'.Y	-rO   )Hr  r8  r7  r  r5  Úcollectionsr   r   rÿ  r   Ú	fractionsr   Ú	functoolsr   Úior   r	   r
   Úwarningsr   Zxlsxwriter.commentsr   Zxlsxwriter.imager   Zxlsxwriter.urlr   r   Zxlsxwriter.vmlr   rQ   r   rÜ   r   r   r   Ú
exceptionsr   r   rF   r   r’  r   Zutilityr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r^  ÚVERBOSErC  r4   r=   rD   r=  r”  r:  r1  rb  rH  r^  rz  rX  rO   r0   r0   r0   r1   Ú<module>   sT   8á(  







 ÿ
