o
    ûÐ,h^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                    ó   t ˆ ƒ‡ fdd„ƒ}|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

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

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

    c           	         s   z
|r	t |d ƒ W n2 ty<   dd„ |d  d¡D ƒ\}}t|ƒ\}}t|ƒ\}}||g}| |dd … ¡ |}Y nw ˆ | g|¢R i |¤ŽS )Nr   c                 S   s   g | ]}|d  ‘qS )Ú1r2   )Ú.0Úcolr2   r2   r3   Ú
<listcomp>¤   s    z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>r7   r   r8   )	r+   r,   r-   r;   r<   Ú_r>   r@   r/   r0   r2   r3   Úcolumn_wrapperœ   s   €ù	z+convert_column_args.<locals>.column_wrapperr   )r1   rG   r2   r0   r3   Úconvert_column_args•   s   rH   Ú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                       s2  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Ý„ZpdÞeqdßerdàerf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}d÷e~fdødù„Zdúe€f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/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@„ Z£düdAdB„Z¤dCdD„ Z¥dñdEdF„Z¦dë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³dadb„ Z´dcerdderdeerdfeµfdgdh„Z¶dcerdderdfeµf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ž„ 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_chartsheetÚ
ext_sheetsÚ
fileclosedÚexcel_versionÚexcel2003_styleÚ
xls_rowmaxÚ
xls_colmaxÚ
xls_strmaxÚ
dim_rowminÚ
dim_rowmaxÚ
dim_colminÚ
dim_colmaxÚcol_infoÚ
selectionsÚhiddenÚactiveÚ	tab_colorÚtop_left_cellÚpanesÚactive_paneÚselectedÚpage_setup_changedÚ
paper_sizeÚorientationÚprint_options_changedÚhcenterÚvcenterÚprint_gridlinesÚscreen_gridlinesÚprint_headersÚrow_col_headersÚheader_footer_changedÚheaderÚfooterÚheader_footer_alignsÚheader_footer_scalesÚheader_imagesÚfooter_imagesÚheader_images_listÚmargin_leftÚmargin_rightÚ
margin_topÚmargin_bottomÚmargin_headerÚmargin_footerÚrepeat_row_rangeÚrepeat_col_rangeÚprint_area_rangeÚ
page_orderÚblack_whiteÚdraft_qualityÚprint_commentsÚ
page_startÚfit_pageÚ	fit_widthÚ
fit_heightÚhbreaksÚvbreaksÚprotect_optionsÚprotected_rangesÚnum_protected_rangesÚset_colsr   ÚdictÚset_rowsÚzoomÚzoom_scale_normalÚprint_scaleÚis_right_to_leftÚ
show_zerosÚleading_zerosÚoutline_row_levelÚoutline_col_levelÚoutline_styleÚoutline_belowÚoutline_rightÚ
outline_onÚoutline_changedÚoriginal_row_heightÚdefault_row_heightÚdefault_row_pixelsÚdefault_col_widthÚdefault_col_pixelsÚdefault_date_pixelsÚdefault_row_zeroedÚnamesÚwrite_matchÚtableÚmergeÚmerged_cellsÚtable_cellsÚ	row_spansÚhas_vmlÚhas_header_vmlÚhas_commentsÚcommentsÚcomments_listÚcomments_authorÚcomments_visibleÚvml_shape_idÚbuttons_listÚvml_header_idÚautofilter_areaÚautofilter_refÚfilter_rangeÚ	filter_onÚfilter_colsÚfilter_typeÚfilter_cellsÚ	row_sizesÚcol_size_changedÚrow_size_changedÚlast_shape_idÚ	rel_countÚhlink_countÚ
hlink_refsÚexternal_hyper_linksÚexternal_drawing_linksÚexternal_comment_linksÚexternal_vml_linksÚexternal_table_linksÚexternal_background_linksÚdrawing_linksÚvml_drawing_linksÚchartsÚimagesÚtablesÚ
sparklinesÚshapesÚ
shape_hashÚdrawingÚdrawing_relsÚdrawing_rels_idÚvml_drawing_relsÚvml_drawing_rels_idÚbackground_imageÚrstringÚprevious_rowÚvalidationsÚcond_formatsÚdata_bars_2010Úuse_data_bars_2010Údxf_priorityÚ	page_viewÚvba_codenameÚ	date_1904Ú
hyperlinksÚstrings_to_numbersÚstrings_to_urlsÚnan_inf_to_errorsÚstrings_to_formulasÚdefault_date_formatÚdefault_url_formatÚdefault_checkbox_formatÚworkbook_add_formatÚremove_timezoneÚmax_url_lengthÚrow_data_filenameÚrow_data_fhÚworksheet_metaÚvml_data_idÚrow_data_fh_closedÚvertical_dpiÚhorizontal_dpiÚwrite_handlersÚignored_errorsÚhas_dynamic_arraysÚuse_future_functionsÚignore_write_stringÚembedded_images©r+   ©Ú	__class__r2   r3   rc   Ó   sd  






zWorksheet.__init__c                 G   s>  |dkr| j ||g|¢R Ž S | jr | d¡r | j||g|¢R Ž S | d¡r4| d¡r4| j||g|¢R Ž S d|v r]| jr]t d|¡sSt d|¡sSt d|¡sSt d	|¡r]| j||g|¢R Ž S | j	r•z!t
|ƒ}| jspt|ƒs€t|ƒs€| j|||g|d
d … ¢R Ž W S W n	 tyŠ   Y nw | j||g|¢R Ž S | j||g|¢R Ž S )NrU   ú=z{=ú}r7   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ÚrowrD   r,   Úfr2   r2   r3   Ú_write_token_as_string¯  s:   ÿ
ý
ü
û
ú	 €þz Worksheet._write_token_as_stringc                 G   ó   | j ||g|¢R Ž S )aÎ  
        Write data to a worksheet cell by calling the appropriate write_*()
        method based on the type of data being passed.

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

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

        ©Ú_write©r+   r#  rD   r,   r2   r2   r3   ÚwriteÕ  s   zWorksheet.writec           	      G   s4  |st dƒ‚|d }|j}|| jv r(| j| }|| ||g|¢R Ž }|d u r&n|S |d u r6| j||g|¢R Ž S |tu rD| j||g|¢R Ž S |tttt	fv rV| j
||g|¢R Ž S |tu re| j|||g|¢R Ž S |tjtjtjtjfv r{| j||g|¢R Ž S t|tttt	fƒrŽ| j
||g|¢R Ž S t|tƒrž| j|||g|¢R Ž S t|tƒr­| j||g|¢R Ž S t|ƒr»| j||g|¢R Ž S t|tƒrÊ| j||g|¢R Ž S zt|ƒ}| j
|||g|dd … ¢R Ž W S  tyç   Y n t y÷   t dt|ƒ› dƒ‚w zt|ƒ | j||g|¢R Ž W S  ty   t dt|ƒ› dƒ‚w )Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type z in write())Ú	TypeErrorr  r  r  ÚboolÚ_write_booleanr  r)   r   r   r   Ústrr%  ÚdatetimeÚdateÚtimeÚ	timedeltaÚ_write_datetimeÚ
isinstancer   r   r  r*   Útyper!  )	r+   r#  rD   r,   r"  Ú
token_typeÚwrite_handlerÚfunction_returnr$  r2   r2   r3   r(  é  sb   

ü


 ÿÿzWorksheet._writeNc                 C   ó   |   ||||¡S )a›  
        Write a string to a worksheet cell.

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

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

        )r!  )r+   r#  rD   ÚstringÚcell_formatr2   r2   r3   Úwrite_string>  ó   zWorksheet.write_stringc                 C   s~   d}|   ||¡r
dS t|ƒ| jkr|d | j… }d}| js$| j |¡}n|}| jr3|| jkr3|  |¡ t||ƒ| j	| |< |S ©Nr   éÿÿÿÿéþÿÿÿ)
Ú_check_dimensionsÚlenrq   rh   rf   Ú_get_shared_string_indexrò   Ú_write_single_rowÚCellStringTuplerÀ   )r+   r#  rD   r:  r;  Ú	str_errorÚstring_indexr2   r2   r3   r!  R  s   
zWorksheet._write_stringc                 C   r9  )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#  rD   Únumberr;  r2   r2   r3   Úwrite_numberm  ó   zWorksheet.write_numberc                 C   sÈ   t |ƒst|ƒr:| jr6t |ƒr|  ||d|d¡S |tjkr&|  ||d|d¡S |tj kr5|  ||d|d¡S ntdƒ‚|jtu rCt	|ƒ}|  
||¡rKdS | jrX|| jkrX|  |¡ t||ƒ| j| |< dS )Nú#NUM!z1/0ú#DIV/0!z-1/0zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr?  r   )r
   r	   rþ   r  ÚmathÚinfr+  r  r   r  rA  rh   rò   rD  ÚCellNumberTuplerÀ   rH  r2   r2   r3   r   €  s(   
ÿÿ

zWorksheet._write_numberc                 C   r9  )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#  rD   Úblankr;  r2   r2   r3   Úwrite_blank¡  r=  zWorksheet.write_blankc                 C   sL   |d u rdS |   ||¡rdS | jr|| jkr|  |¡ t|ƒ| j| |< dS )Nr   r?  )rA  rh   rò   rD  ÚCellBlankTuplerÀ   )r+   r#  rD   rF   r;  r2   r2   r3   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#  rD   Úformular;  Úvaluer2   r2   r3   Úwrite_formulaÇ  s   zWorksheet.write_formulac              	   C   s´   |   ||¡rdS |d u s|dkrtdƒ dS t |¡r&|  |||||||¡S | d¡r;| d¡r;|  |||||||¡S |  |¡}| j	rM|| j
krM|  |¡ t|||ƒ| j| |< dS )Nr?  rU   zFormula can't be None or emptyú{r  r   )rA  r   Úre_dynamic_functionÚsearchÚwrite_dynamic_array_formular  r  Ú_write_array_formulaÚ_prepare_formularh   rò   rD  ÚCellFormulaTuplerÀ   rT  r2   r2   r3   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)rY  rZ  r[  r\  )r+   Ú	first_rowÚ	first_colÚlast_rowÚlast_colrU  r;  rV  r2   r2   r3   Ú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)r\  r  )	r+   r`  ra  rb  rc  rU  r;  rV  Úerrorr2   r2   r3   r[  *  s   øz%Worksheet.write_dynamic_array_formulaFc                 C   sT	  |  d¡r|dd … }|  d¡r|dd … }| d¡r!|d d… }d|v r'|S t dd|¡}t d	d
|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd |¡}t d!d"|¡}t d#d$|¡}t d%d&|¡}t d'd(|¡}t d)d*|¡}t d+d,|¡}t d-d.|¡}t d/d0|¡}t d1d2|¡}t d3d4|¡}t d5d6|¡}t d7d8|¡}t d9d:|¡}t d;d<|¡}t d=d>|¡}t d?d@|¡}| jsù|sù|S t dAdB|¡}t dCdD|¡}t dEdF|¡}t dGdH|¡}t dIdJ|¡}t dKdL|¡}t dMdN|¡}t dOdP|¡}t dQdR|¡}t dSdT|¡}t dUdV|¡}t dWdX|¡}t dYdZ|¡}t d[d\|¡}t d]d^|¡}t d_d`|¡}t dadb|¡}t dcdd|¡}t dedf|¡}t dgdh|¡}t didj|¡}t dkdl|¡}t dmdn|¡}t dodp|¡}t dqdr|¡}t dsdt|¡}t dudv|¡}t dwdx|¡}t dydz|¡}t d{d||¡}t d}d~|¡}t dd€|¡}t dd‚|¡}t dƒd„|¡}t d…d†|¡}t d‡dˆ|¡}t d‰dŠ|¡}t d‹dŒ|¡}t ddŽ|¡}t dd|¡}t d‘d’|¡}t d“d”|¡}t d•d–|¡}t d—d˜|¡}t d™dš|¡}t d›dœ|¡}t ddž|¡}t dŸd |¡}t d¡d¢|¡}t d£d¤|¡}t d¥d¦|¡}t d§d¨|¡}t d©dª|¡}t d«d¬|¡}t d­d®|¡}t d¯d°|¡}t d±d²|¡}t d³d´|¡}t dµd¶|¡}t d·d¸|¡}t d¹dº|¡}t d»d¼|¡}t d½d¾|¡}t d¿dÀ|¡}t dÁdÂ|¡}t dÃdÄ|¡}t dÅdÆ|¡}t dÇdÈ|¡}t dÉdÊ|¡}t dËdÌ|¡}t dÍdÎ|¡}t dÏdÐ|¡}t dÑdÒ|¡}t dÓdÔ|¡}t dÕdÖ|¡}t d×dØ|¡}t dÙdÚ|¡}t dÛdÜ|¡}t dÝdÞ|¡}t dßdà|¡}t dádâ|¡}t dãdä|¡}t dådæ|¡}t dçdè|¡}t dédê|¡}t dëdì|¡}t dídî|¡}t dïdð|¡}t dñdò|¡}t dódô|¡}t dõdö|¡}t d÷dø|¡}t dùdú|¡}t dûdü|¡}t dýdþ|¡}t dÿd |¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t d	d
|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd |¡}t d!d"|¡}t d#d$|¡}t d%d&|¡}t d'd(|¡}t d)d*|¡}t d+d,|¡}t d-d.|¡}t d/d0|¡}t d1d2|¡}t d3d4|¡}t d5d6|¡}t d7d8|¡}t d9d:|¡}t d;d<|¡}|S (=  NrX  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+   rU  Úexpand_future_functionsr2   r2   r3   r]  X  sT  



ÿÿzWorksheet._prepare_formulac                 C   sd   d| vr| S g }d}| D ] }|dkr| }|r|  |¡ q|dkr'|  d¡ q|  |¡ qd |¡S )Nú@Fú"z[#This Row],rU   )ÚappendÚjoin)rU  Úescaped_formulaÚin_string_literalÚcharr2   r2   r3   Ú_prepare_table_formula  s   

z Worksheet._prepare_table_formular_  c	                 C   s  ||kr	||}}||kr||}}|   ||¡rdS |   ||¡r"dS ||kr0||kr0t||ƒ}	nt||ƒd t||ƒ }	|  |¡}| jrN|| jkrN|  |¡ t||||	|ƒ| j| |< | js‚t||d ƒD ]}
t||d ƒD ]}|
|ksx||kr€|  	|
|d|¡ qnqedS )Nr?  r7   r   r   )
rA  r$   r]  rh   rò   rD  ÚCellArrayFormulaTuplerÀ   Úranger   )r+   r`  ra  rb  rc  rU  r;  rV  ÚatypeÚ
cell_ranger#  rD   r2   r2   r3   r\  -  s<   

ÿþÿ


ÿ€þzWorksheet._write_array_formulac                 C   r9  )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.

        )r3  )r+   r#  rD   r0  r;  r2   r2   r3   Úwrite_datetimec  rK  zWorksheet.write_datetimec                 C   sZ   |   ||¡rdS | jr|| jkr|  |¡ |  |¡}|d u r!| j}t||ƒ| j| |< dS )Nr?  r   )rA  rh   rò   rD  Ú_convert_date_timer   ÚCellDatetimeTuplerÀ   )r+   r#  rD   r0  r;  rI  r2   r2   r3   r3  v  s   

zWorksheet._write_datetimec                 C   r9  )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#  rD   Úbooleanr;  r2   r2   r3   Úwrite_boolean‹  rK  zWorksheet.write_booleanc                 C   sP   |   ||¡rdS | jr|| jkr|  |¡ |rd}nd}t||ƒ| j| |< dS )Nr?  r   r   )rA  rh   rò   rD  ÚCellBooleanTuplerÀ   )r+   r#  rD   ry  r;  rV  r2   r2   r3   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#  rD   Úurlr;  r:  Útipr2   r2   r3   Ú	write_url¹  s   zWorksheet.write_urlc                 C   s¾   |   ||¡rdS t|tƒst|ƒ}|d ur||_|d ur||_|  jd7  _| jdkr6td|j› dƒ dS |d u r=| j}| j	sV| j
rM|| jkrM|  |¡ |  |||j|¡ || j| |< dS )Nr?  r   iúÿ  zIgnoring URL 'z>' since it exceeds Excel's limit of 65,530 URLs per worksheet.éüÿÿÿr   )rA  r4  r   Ú_textÚ_tiprÛ   r   Ú_original_urlr  r  rh   rò   rD  r!  Útextrû   r|  r2   r2   r3   r  Ï  s,   

ÿ
zWorksheet._write_urlc                 G   r&  )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)  r2   r2   r3   Úwrite_rich_stringù  s   zWorksheet.write_rich_stringc                 G   sü  t |ƒ}d }d}d}|  ||¡rdS t|d tƒr| ¡ }tƒ }tƒ | _| j |¡ tƒ }	g }
d}d}t	|ƒdkr?t
dƒ dS |D ]G}t|tƒsn|dkrW|
 |	¡ |
 |¡ n|
 |¡ |dkrgt
dƒ  d	S ||7 }d
}n|dkr}|dkr}t
dƒ  dS |
 |¡ d}|d7 }qAt|
d tƒs–| j d¡ |
D ],}t|tƒr«| j d¡ |  |¡ q˜g }t|ƒr¶| d¡ | j d||¡ | j d¡ q˜| jj ¡ }t	|ƒ| jkrØt
dƒ dS | jsâ| j |¡}n|}| jrñ|| jkrñ|  |¡ t|||ƒ| j| |< dS )Nr   rU   r?  rJ   é   zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().éûÿÿÿzYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().r€  r:  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().éýÿÿÿr   Úr)z	xml:spaceÚpreserveÚtzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().r@  )ÚlistrA  r4  r   Úpopr   r&   rñ   Ú_set_filehandlerB  r   rk  Ú_xml_start_tagÚ_write_fontr   Ú_xml_data_elementÚ_xml_end_tagÚfhÚgetvaluerq   rh   rf   rC  rò   rD  ÚCellRichStringTuplerÀ   )r+   r#  rD   r,   Útokensr;  rG  Ú
raw_stringr”  ÚdefaultÚ	fragmentsÚpreviousÚposr"  Ú
attributesr:  r2   r2   r3   r…    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+   Ú	user_typeÚuser_functionr2   r2   r3   Ú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#  rD   Údatar;  r"  rf  r2   r2   r3   Ú	write_row™  ó   
zWorksheet.write_rowc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }qdS )a‰  
        Write a column of data starting from (row, col).

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

        r   r   r'  r¡  r2   r2   r3   Úwrite_column°  r¤  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   )rA  r   Ú_image_from_sourceÚ_rowÚ_colÚ_set_user_optionsræ   rk  )r+   r#  rD   ÚsourceÚoptionsÚimager2   r2   r3   Úinsert_imageÇ  s   
zWorksheet.insert_imagec                 C   s¬   |   ||¡rtd|› d|› dƒ dS |du ri }|  ||¡}| |¡ | dd¡}|jrC|du r4| j}d| _|  |||j|¡ d| _| j	 
|¡}td	||ƒ| j| |< d
S )a…  
        Embed an image in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            source:   Filename, BytesIO, or Image object.
            options:  Url and data stream of the image.

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

        zCannot embed image at (r¦  r§  r?  Nr;  TFú#VALUE!r   )rA  r   r¨  r«  Úgetr}  r  r  r  r  Úget_image_indexÚCellErrorTuplerÀ   )r+   r#  rD   r¬  r­  r®  r;  Úimage_indexr2   r2   r3   Úembed_imageç  s"   
zWorksheet.embed_imagec                 C   s¼   |   ||dd¡rtd|› d|› dƒ dS |du rd}|du r!i }| dd	¡}| d
d	¡}| dd¡}| dd¡}| dd¡}	| dd¡}
| dd¡}| j ||||||||	||
|g¡ d	S )a†  
        Insert an textbox with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            text:     The text for the textbox.
            options:  Textbox options.

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

        TzCannot insert textbox at (r¦  r§  r?  NrU   Úx_offsetr   Úy_offsetÚx_scaler   Úy_scaleÚobject_positionÚdescriptionÚ
decorativeF)rA  r   r±  ré   rk  )r+   r#  rD   r„  r­  r¶  r·  r¸  r¹  Úanchorr»  r¼  r2   r2   r3   Úinsert_textbox  s:   õÿzWorksheet.insert_textboxc                 C   s  |   ||dd¡rtd|› d|› dƒ dS |du ri }|js%|jr+|jjr+tdƒ dS d|_|jr5d|j_| d	d
¡}| dd
¡}| dd¡}| dd¡}| dd¡}	| dd¡}
| dd¡}|jdkrg|j}|jdkro|j}|jru|j}|jr{|j}| j	 
||||||||	|
|g
¡ d
S )a„  
        Insert an chart with its top-left corner in a worksheet cell.

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

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

        TzCannot insert chart at (r¦  r§  r?  Nz7Chart cannot be inserted in a worksheet more than once.r@  r¶  r   r·  r¸  r   r¹  rº  r»  r¼  F)rA  r   Úalready_insertedÚcombinedr±  r¸  r¹  r¶  r·  rå   rk  )r+   r#  rD   Úchartr­  r¶  r·  r¸  r¹  r½  r»  r¼  r2   r2   r3   Ú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   )rA  rB  rq   rÅ   rÇ   r   rÈ   )r+   r#  rD   Úcommentr­  r2   r2   r3   Úwrite_comment  s   zWorksheet.write_commentc                 C   ó
   d| _ dS )z†
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        TN)rË   r  r2   r2   r3   Úshow_comments±  ó   
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¬  Úis_byte_streamr®  r2   r2   r3   Úset_background¾  s   
ÿzWorksheet.set_backgroundc                 C   ó
   || _ dS )z¦
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)rÊ   )r+   Úauthorr2   r2   r3   Úset_comments_author×  rÇ  zWorksheet.set_comments_authorc                 C   s   | j S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rd   r  r2   r2   r3   Ú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)rx   r~   re   r  Úactivesheetr  r2   r2   r3   Úactivateò  s   zWorksheet.activatec                 C   ó   d| _ d| _dS )zó
        Set current worksheet as a selected worksheet, i.e. the worksheet
        has its tab highlighted.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)r~   rx   r  r2   r2   r3   Úselect  s   
zWorksheet.selectc                 C   rÐ  )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N©rx   r~   r  r2   r2   r3   Úhide  ó   
zWorksheet.hidec                 C   rÐ  )z˜
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        r‡  r   NrÒ  r  r2   r2   r3   Úvery_hidden%  rÔ  zWorksheet.very_hiddenc                 C   s   d| _ | j| j_dS )aJ  
        Set current worksheet as the first visible sheet. This is necessary
        when there are a large number of worksheets and the activated
        worksheet is not visible on the screen.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rx   re   r  Ú
firstsheetr  r2   r2   r3   Úset_first_sheet5  s   zWorksheet.set_first_sheetc                 C   sÚ   |du ri }||kr||}}d}|  dd¡}|  dd¡}|  dd¡}	|s)|r,|r,d}
nd}
|  d|||
¡r8dS |  d|||
¡rBdS t|	dƒ}	t|	d	ƒ}	t| j|	ƒ| _t||d
 ƒD ]}||||	|dg| j|< qZd| _dS )a  
        Set the width, and other properties of a single column or a
        range of columns.

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

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

        NTrx   FÚ	collapsedÚlevelr   r?  é   r   )r±  rA  ÚmaxÚminr±   rr  rv   r×   )r+   ra  rc  Úwidthr;  r­  Ú
ignore_rowrx   rØ  rÙ  Ú
ignore_colrD   r2   r2   r3   Ú
set_columnG  s,   


zWorksheet.set_columnc                 C   s$   |dur	|   |¡}|  |||||¡S )a;  
        Set the width, and other properties of a single column or a
        range of columns, where column width is in pixels.

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

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

        N)Ú_pixels_to_widthrà  )r+   ra  rc  rÝ  r;  r­  r2   r2   r3   Úset_column_pixels…  s   
zWorksheet.set_column_pixelséþ  c                 C   sÂ  | j r	tdƒ dS | jdu rdS i }t|  |¡dƒ}t| jj| jjjd}t	| j
| jd ƒD ]Í}| j |¡s7q.t	| j| jd ƒD ]º}|| j| v rú| j| | }|jj}d}|dv r„|dkrf|j}	||	 }
n|j}
d	|
vrrt|
ƒ}nj|
 d	¡D ]}
t|
ƒ}t||ƒ}qwnX|d
kr’dtt|jƒƒ }nJ|dkrš| j}nB|dkr§|jr¤d}n8d}n5|dv rÜt|jttfƒrÂ|jdkrÁdtt|jƒƒ }nt|jtƒrÎt|jƒ}nt|jtƒrÜ|jrÚd}nd}| j  ||f¡rì|dkrì|d7 }| |d¡}||krú|||< q@q.| !¡ D ]^\}}|  |d ¡}t||ƒ}| j" |¡rR| j" |¡}|d }|d }|durB|sB||kr@|| j"| d< d| j"| d< q || j"| d< d| j"| d< q |dddddg| j"|< q dS )zÔ
        Simulate autofit based on the data, and datatypes in each column.

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

        Returns:
            Nothing.

        z1Autofit is not supported in constant_memory mode.Ng     ào@)Úkeyr   r   ©rM   rQ   rM   Ú
rL   rÚ  rP   rN   é   é$   ©rO   rR   é   é   TF)#rh   r   rs   rÜ  rá  Úsortedrf   Ústring_tableÚ__getitem__rr  rr   rÀ   r±  rt   ru   r  Ú__name__r:  r˜  r"   r9   rÛ  rB  r.  rI  r¼   ry  r4  rV  r  r)   r,  rÕ   Úitemsrv   )r+   Ú	max_widthÚcol_width_maxÚstringsÚrow_numÚcol_numÚcellÚ	cell_typeÚlengthÚ	string_idr:  Ú
seg_lengthÚ	width_maxÚpixel_widthrÝ  rv   Ú
user_widthrx   r2   r2   r3   Úautofitž  sŽ   
ÿ

þ
€€®U

€çzWorksheet.autofitc           	      C   sÄ   |du ri }| j dur| j }nd}|  ||¡rdS |du r | j}| dd¡}| dd¡}| dd¡}|dkr;d}| j}t|dƒ}t|d	ƒ}t| j|ƒ| _|||||g| j|< d
| _||g| j	|< dS )aš  
        Set the width, and other properties of a row.

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

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

        Nr   r?  rx   FrØ  rÙ  r   rÚ  T)
rt   rA  r¸   r±  rÛ  rÜ  r°   r©   rØ   rÖ   )	r+   r#  Úheightr;  r­  Úmin_colrx   rØ  rÙ  r2   r2   r3   Úset_row3  s,   


zWorksheet.set_rowc                 C   s"   |dur	|   |¡}|  ||||¡S )a°  
        Set the width (in pixels), and other properties of a row.

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

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

        N)Ú_pixels_to_heightr  )r+   r#  rÿ  r;  r­  r2   r2   r3   Úset_row_pixelsm  s   
zWorksheet.set_row_pixelsc                 C   s6   |du r| j }|| jkrd| _|| _ |rd| _dS dS )zý
        Set the default row properties.

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

        Returns:
            Nothing.

        NTr   )r¸   r·   rØ   r½   )r+   rÿ  Úhide_unused_rowsr2   r2   r3   Úset_default_row  s   

ÿzWorksheet.set_default_rowc                 C   s‚  ||kr||krt dƒ dS ||kr||}}||kr ||}}|  ||¡r(dS |  ||¡r0dS t||||ƒ}t||d ƒD ]I}t||d ƒD ]?}	| j ||	f¡rd| j ||	f¡}
td|› d|
› dƒ‚| j ||	f¡r| j ||	f¡}
td|› d|
› dƒ‚|| j||	f< qGq>| j 	||||g¡ |  
||||¡ t||d ƒD ]}t||d ƒD ]}	||krµ|	|krµqª|  ||	d|¡ qªq¡d	S )
a3  
        Merge a range of cells.

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

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of write().

        zCan't merge single cellr?  r   zMerge range 'ú!' overlaps previous merge range 'ú'.ú!' overlaps previous table range 'rU   r   )r   rA  r#   rr  rÂ   r±  r   rÃ   rÁ   rk  r(  r  )r+   r`  ra  rb  rc  r¢  r;  rt  r#  rD   Úprevious_ranger2   r2   r3   Úmerge_range˜  sN   

ÿÿÿÿñýzWorksheet.merge_rangec           
      C   sÄ   ||k r	||}}||k r||}}|   ||||¡}t||||ƒ}|| _|| _||g| _t||d ƒD ],}| j ||f¡rV| j ||f¡\}}	|dkrVtd|› d|	› dƒ‚d|f| j||f< q3dS )aƒ  
        Set the autofilter area in the worksheet.

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

        Returns:
             Nothing.

        r   rÀ   zWorksheet autofilter range 'z,' overlaps previous Table autofilter range 'r  Ú	worksheetN)	Ú_convert_name_arear#   rÏ   rÐ   rÑ   rr  rÕ   r±  r   )
r+   r`  ra  rb  rc  ÚareaÚrefrD   rÔ   rÑ   r2   r2   r3   Ú
autofilterå  s(   


ÿÿözWorksheet.autofilterc                 C   sf  | j s	tdƒ dS zt|ƒ W n# ty2   |}t|d ƒ\}}|| jkr0td|› dƒ Y dS Y nw | j\}}||k s@||krPtd|› d|› d|› d	ƒ dS |  |¡}t|ƒd
vrctd|› dƒ |  	||¡}t|ƒdkr|d dkr|  
||d g¡ n/t|ƒdkr¤|d dkr¤|d dkr¤|d dkr¤|  
||d |d g¡ n
|| j|< d| j|< d| _dS )zÆ
        Set the column filter criteria.

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

        Returns:
             Nothing.

        ú-Must call autofilter() before filter_column()NrB   úInvalid column 'ú'úColumn 'ú%' outside autofilter() column range (r¦  ú))rV   rÚ  z(Incorrect number of tokens in criteria 'r‡  r   r   rë  rV   é   )rÏ   r   r)   r*   r    rp   rÑ   Ú_extract_filter_tokensrB  Ú_parse_filter_expressionÚfilter_column_listrÓ   rÔ   rÒ   )r+   rD   ÚcriteriaÚ
col_letterrF   Ú	col_firstÚcol_lastr—  r2   r2   r3   Úfilter_column	  sD   
þû
	ÿÿÿ
0


zWorksheet.filter_columnc                 C   s¾   | j s	tdƒ dS zt|ƒ W n# ty2   |}t|d ƒ\}}|| jkr0td|› dƒ Y dS Y nw | j\}}||k s@||krPtd|› d|› d|› d	ƒ dS || j|< d
| j|< d
| _	dS )zî
        Set the column filter criteria in Excel 2007 list style.

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

        Returns:
             Nothing.

        r  NrB   r  r  r  r  ú,r  r   )
rÏ   r   r)   r*   r    rp   rÑ   rÓ   rÔ   rÒ   )r+   rD   Úfiltersr  rF   r  r  r2   r2   r3   r  K	  s4   
þû
	ÿÿÿ


zWorksheet.filter_column_listc                 C   sÚ  |   ||dd¡r
dS |   ||dd¡rdS |du ri }n| ¡ }h d£}| ¡ D ]}||vr8td|› dƒ  dS q'd|v rC|d |d	< d
|v rM|d
 |d	< d|vrWtdƒ dS dddddddddddddœ}|d |vrxtd|d › dƒ dS ||d  |d< |d dkr–| d¡du r–| d¡du r–dS |d dks¨|d dks¨|d dkr°d|d< d|d< d|vrºtdƒ dS i dd“dd“d d!“d"d!“d#d!“d$d%“d&d%“d'd%“d(d)“d*d)“d+d,“d-d,“d.d/“d0d/“d1d2“d3d2“}	|d |	vrþtd4|d › d5ƒ dS |	|d  |d< |d dks|d dkr d|vrtd6ƒ dS nd|d< d7d8d9d:œ}
d;|vr4d7|d;< n|d; |
vrGtd4|d; › d<ƒ dS |
|d;  |d;< |d d=v rˆ|d	 rˆt|d	 ƒrˆ|  |d	 ¡}|d>›|d	< |d rˆt|d ƒrˆ|  |d ¡}|d>›|d< | d¡r£t|d ƒd?kr£td@|d › dAƒ dS | dB¡r¾t|dB ƒd?kr¾tdC|dB › dAƒ dS | d¡rÙt|d ƒdDkrÙtdE|d › dFƒ dS | dG¡rôt|dG ƒdDkrôtdH|dG › dFƒ dS |d dkrt|d	 t	ƒr| j
|d	 Ž }t|ƒdDkrtdI|› dJƒ dS dK|vr$d8|dK< dL|vr-d8|dL< dM|vr6d8|dM< dN|vr?d8|dN< ||||gg|dO< dP|v rV|dO  |dP ¡ dQ|v re|dQ  dRdS¡|dQ< | j |¡ d7S )Ta  
        Add a data validation to a worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr?  N>   rV  r¬  ÚmaximumÚminimumr  ÚdropdownÚvalidateÚ
error_typeÚ
show_errorÚ
show_inputÚerror_titleÚinput_titleÚmulti_rangeÚother_cellsÚignore_blankÚerror_messageÚinput_messageúUnknown parameter 'z' in data_validation()r@  r¬  rV  r"  r$  z5Parameter 'validate' is required in data_validation()ÚnoneÚwholeÚdecimalr  r0  r1  Ú
textLengthÚcustom)Úanyz	any valuezwhole numberr1  Úintegerr2  r  r0  r1  ztext lengthrø  r4  zUnknown validation type 'z/' for parameter 'validate' in data_validation()r)  r.  Úbetweenr  r!  z5Parameter 'criteria' is required in data_validation()únot betweenÚ
notBetweenúequal toÚequalr  ú==únot equal toÚnotEqualú!=ú<>úgreater thanÚgreaterThanú>ú	less thanÚlessThanú<úgreater than or equal toÚgreaterThanOrEqualú>=úless than or equal toÚlessThanOrEqualú<=zUnknown criteria type 'z/' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   r‡  )ÚstopÚwarningÚinformationr%  z' for parameter 'error_type'.©r0  r1  ú.16gé    zLength of input title 'z' exceeds Excel's limit of 32r(  zLength of error title 'éÿ   zLength of input message 'z' exceeds Excel's limit of 255r-  zLength of error message 'zLength of list items 'z;' exceeds Excel's limit of 255, use a formula range insteadr,  r#  r'  r&  Úcellsr+  r*  ú$rU   )rA  ÚcopyÚkeysr   r±  r   rv  rB  r4  r  Ú	_csv_joinr:   Úreplaceró   rk  )r+   r`  ra  rb  rc  r­  Úvalid_parametersÚ	param_keyÚvalid_typesÚcriteria_typesÚerror_typesÚ	date_timerU  r2   r2   r3   Údata_validationu	  sD  þôÿÿþýüûúùø	÷
öõôóòñðÿ
ÿûý

ÿÿ
þÿÿÿÿ
ÿ





zWorksheet.data_validationc                 C   s(  |   ||dd¡r
dS |   ||dd¡rdS |du ri }n| ¡ }h d£}| ¡ D ]}||vr8td|› dƒ  dS q'd|vrCtd	ƒ dS i d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d"“d#d#“d$d%“d&d'd(œ¥}|d |vrtd)|d › d*ƒ dS |d dkr™d|d+< ||d  |d< i d,d,“d-d.“d/d0“d1d0“d2d0“d3d4“d5d4“d6d4“d7d8“d9d8“d:d;“d<d;“d=d>“d?d>“d@dA“dBdA“dCdD“dEdFdGdHdIdJdKdLdMdNdOdPdMdPdQœ¥}	dR|v rù|dR |	v rù|	|dR  |dR< dS|v rt|dS tƒrt|dS ƒ ¡ |dS< |d dTv rxd|d< dS|v r:t|dS ƒs-tdUƒ dS |  	|dS ¡}
|
dV›|dS< dW|v rYt|dW ƒsLtdXƒ dS |  	|dW ¡}
|
dV›|dW< dY|v rxt|dY ƒsktdZƒ dS |  	|dY ¡}
|
dV›|dY< i d[d\“d]d^“d_d`“dadb“dcdd“dedf“dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“d{d|“}|d d'kr| 
d}¡sÀtd~ƒ dS |d} |vrÓtd€|d} › dƒ dS ||d}  |d}< d‚|dƒ< |d}  d„¡rìd…|dƒ< n|d}  d†¡rød‡|dƒ< |  | 
dƒ¡| 
dˆ¡¡|dˆ< ||kr||}}||kr||}}t||||ƒ}t||ƒ}d‰|v r5|d‰ }| dŠd‹¡}dŒ|v rG|dŒ rG|dŒ  ¡ |dŒ< | j|d< |  jdŽ7  _| js™| 
d¡s™| 
d¡s™| 
d‘¡s™| 
d’¡s™| 
d“¡s™| 
d”¡s™| 
d•¡s™| 
d–¡s™| 
d—¡s™| 
d˜¡s™| 
d™¡rd|dš< |d dkr|dS }t|ƒ}|dR }|dR dDkrÇdD|d< d›|› dœ|› d|dž< nS|dR dEkrÞdŸ|d< d |› dœ|› d¡|dž< n<|dR dFkrødF|d< d¢|› d£|› d¤|› d¥|dž< n"|dR dGkrdG|d< d¦|› d£|› d¤|› d¥|dž< ntd§|› dƒ |d dkré|dR dHkr1d¨|› d©|dž< n¸|dR dIkrAd¨|› dª|dž< n¨|dR d«krQd¨|› d¬|dž< n˜|dR dJkrdd­|› d®|› d¯|dž< n…|dR dKkrwd°|› d±|› d²|dž< nr|dR dLkrŠd°|› d³|› d´|dž< n_|dR dMkrdµ|› d¶|› d·|dž< nL|dR dNkr³d¸|› d¹|› dº|› d»|dž< n6|dR dOkrÆd¸|› d¼|› d½|dž< n#|dR dPkrßd¸|› d¾|› dº|› d¿|› dÀ	|dž< n
tdÁ|dR › dƒ |d dkrødÂ|› dÃ|dž< |d dkrdÂ|› dÄ|dž< |d dkrdÅ|› dÆ|dž< |d d!kr%dÇ|› d¡|dž< |d d"krpdÈ|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Ú|vrÐdÛ|dÚ< |d d%krƒd|dŒ< | 
dË¡sêdÌ|dË< dÜ|dÝ< n|dË |dÝ< | 
dÍ¡sÿdÎ|dÍ< dÞ|dß< n|dÍ |dß< | dÏdÐ¡ | dÑdÐ¡ | dàdá¡ | d‘|dà ¡ | dâdã¡ | d–dã¡ | ddã¡ | 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Ï  d1¡|dÏ< W n ttfyË   Y nw z|dÚ  d1¡|dÚ< W n ttfyã   Y nw z|dÑ  d1¡|dÑ< W n ttfyû   Y nw || jv r| j|  |¡ dÐS |g| j|< dÐS )èa#  
        Add a conditional format to a worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr?  N>$   r5  ÚiconsrV  rJ   r!  r"  Úbar_onlyr  Úmax_typeÚmid_typeÚmin_typeÚ	bar_colorÚ	bar_solidÚ	max_colorÚ	max_valueÚ	mid_colorÚ	mid_valueÚ	min_colorÚ	min_valueÚ
icon_styleÚ
icons_onlyÚ
max_lengthÚ
min_lengthr*  Ústop_if_trueÚbar_directionÚbar_no_borderÚdata_bar_2010Úreverse_iconsÚbar_axis_colorÚbar_border_colorÚbar_axis_positionÚbar_negative_colorÚbar_negative_color_sameÚbar_negative_border_colorÚbar_negative_border_color_samer/  z' in conditional_format()r@  r5  z4Parameter 'type' is required in conditional_format()rö  ÚcellIsr0  r1  ÚaverageÚaboveAverageÚ	duplicateÚduplicateValuesÚuniqueÚuniqueValuesÚtopÚtop10Úbottomr„  Útime_periodÚ
timePeriodÚblanksÚcontainsBlanksÚ	no_blanksÚnotContainsBlanksÚerrorsÚcontainsErrorsÚ	no_errorsÚnotContainsErrorsÚ2_color_scaleÚ3_color_scaleÚdata_barÚdataBarÚ
expressionÚiconSet)rU  Úicon_setzUnknown value 'z.' for parameter 'type' in conditional_format()Ú	directionr7  r8  r9  r:  r;  r  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  Ú
containingÚcontainsTextÚnotContainsÚ
beginsWithÚendsWithÚ	yesterdayÚtodayÚ	last7DaysÚlastWeekÚthisWeekÚnextWeekÚ	lastMonthÚ	thisMonthÚ	nextMonth)znot containingzbegins withz	ends withrŸ  r   zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthr  rV  rP  z5Conditional format 'value' must be a datetime object.rQ  r"  z7Conditional format 'minimum' must be a datetime object.r!  z7Conditional format 'maximum' must be a datetime object.Ú3_arrowsÚ3ArrowsÚ3_flagsÚ3FlagsÚ3_traffic_lights_rimmedÚ3TrafficLights2Ú3_symbols_circledÚ3SymbolsÚ4_arrowsÚ4ArrowsÚ4_red_to_blackÚ4RedToBlackÚ4_traffic_lightsÚ4TrafficLightsÚ5_arrows_grayÚ5ArrowsGrayÚ
5_quartersÚ	5QuartersÚ3_arrows_grayÚ3ArrowsGrayÚ3_traffic_lightsÚ3TrafficLightsÚ3_signsÚ3SignsÚ	3_symbolsÚ	3Symbols2Ú4_arrows_grayÚ4ArrowsGrayÚ	4_ratingsÚ4RatingÚ5_arrowsÚ5ArrowsÚ	5_ratingsÚ5Ratingrn  z_The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format().r‰  zUnknown icon_style 'z' in conditional_format().rV   Útotal_iconsÚ4r  Ú5rë  ra  r*  rU  rU   rJ   Úpriorityr   ru  rg  rx  rz  r{  r|  r}  rt  ry  rw  rs  Úis_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))rU  ÚnotContainsTextzISERROR(SEARCH("z))zLEFT(r  z)="rj  zRIGHT(zInvalid text criteria 'zFLOOR(z,1)=TODAY()-1z,1)=TODAY()Útomorrowz,1)=TODAY()+1zAND(TODAY()-FLOOR(z,1)<=6,FLOOR(z,1)<=TODAY())zAND(TODAY()-ROUNDDOWN(z*,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(z,0)<(WEEKDAY(TODAY())+7))z",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(z ,0)-TODAY()<=7-WEEKDAY(TODAY()))zAND(ROUNDDOWN(z+,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(z",0)-TODAY()<(15-WEEKDAY(TODAY())))z
AND(MONTH(z)=MONTH(TODAY())-1,OR(YEAR(z)=YEAR(TODAY()),AND(MONTH(z)=1,YEAR(A1)=YEAR(TODAY())-1)))z)=MONTH(TODAY()),YEAR(z)=YEAR(TODAY()))z)=MONTH(TODAY())+1,OR(YEAR(z
)=12,YEAR(z)=YEAR(TODAY())+1)))zInvalid time_period criteria 'z	LEN(TRIM(z))=0z))>0zISERROR(r  zNOT(ISERROR(Ú
colorScalerd  rj  re  rÜ  rc  rÛ  rm  r   ri  rl  z#FF7128rh  z#FFEF9CÚ
percentilez#F8696Bz#FFEB84z#63BE7Brk  é2   ÚautoMinÚx14_min_typeÚautoMaxÚx14_max_typerf  z#638EC6rb  Fz#FF0000z#000000éÚ  rr  )rA  rV  rW  r   r4  r,  r.  Úupperr   rv  r±  r  Ú_set_icon_propsr#   r$   rY  Ú_get_dxf_indexr÷   rö   rB  Ú
setdefaultr   rm   ÚlstripÚKeyErrorÚAttributeErrorrô   rk  )r+   r`  ra  rb  rc  r­  Úvalid_parameterr[  Ú
valid_typeÚcriteria_typer_  Úvalid_iconsrt  Ú
start_cellrV  rø  r  r2   r2   r3   Úconditional_formatx
  s  (þÿþýüûúùø	÷
öõôóòñðïíÿÿþýüûúùø	÷
öõôóòñðïà$


ÿþýüûúùø	÷
öõôóòñðïÿÿ
ÿ






ÿþýüûúùø	÷
öõôÿÿÿÿÿÿÿÿÿþÿÿÿÿþýÿÿ


ÿÿÿÿþzWorksheet.conditional_formatc           &      C   sª  i }i }|du ri }n|  ¡ }| jrtdƒ dS |  ||dd¡r"dS |  ||dd¡r,dS ||kr5||}}||kr>||}}t||||ƒ}t||d ƒD ]I}	t||d ƒD ]?}
| j |	|
f¡rr| j |	|
f¡}td|› d|› d	ƒ‚| j	 |	|
f¡r| j	 |	|
f¡}td|› d
|› d	ƒ‚|| j|	|
f< qUqLh d£}| 
¡ D ]}||vr¯td|› dƒ  dS qž| dd¡|d< | dd¡|d< | dd¡|d< || }|d rÔ|d8 }|dk rÞtdƒ dS | dd¡|d< | dd¡|d< | dd¡|d< | dd¡|d< | dd¡|d< | dd¡|d< d|v rm|d }||d< d |v r*td!|› d"ƒ dS t d#|tj¡r:t d$|¡rDtd%|› d&ƒ dS t d'|¡rUtd(|› d&ƒ dS t d)|¡sct d*|¡rmtd+|› d,ƒ dS d-|v rŽ|d- |d-< |d- du rƒd.|d-< |d-  d d.¡|d-< nd/|d-< |}|}| d¡r |d7 }| d¡rª|d8 }t||||ƒ|d0< t||||ƒ|d1< |d sÅd|d< |d rÐ|d1 |d< d}g |d2< i }t||d ƒD ]}|d3t|ƒ d.d.d.dd.ddd4œ	}d2|v rá|t|d2 ƒkr	|d2 |d  }nd}|rá| d5d¡}| d6¡r |d6 |d< |d }| ¡ }||v r8td7|› d&ƒ  dS d||< | d8¡|d9< d:|v rk|d: rk|d: }| d;¡r\| d;¡}|  |¡}|  |d¡}||d:< | d<¡r·|d< }|d=kr|d>}|d?krƒd@}tg dA¢ƒ}||v r—|  ||d ¡}n|  |d¡}||dB< dC}||d<< | dDd¡}|  |||||¡ n| dE¡rÐ|dE }||dE< |  |||| d5¡¡ |durÛ| ¡ |d5< |||d < |d2  |¡ |d rù|  |||d |d9 ¡ |d7 }qßdF|v rX|dF }d}t||d ƒD ]F}	d} t||d ƒD ]5}
|t|ƒk rL| t|| ƒk rL|| |  }!| |v rD|  |	|
|!||  ¡ n|  |	|
|!d¡ | d7 } q|d7 }qtt||d ƒƒD ]/\}}|d2 | }"|"r|"d: r| |¡}#|"d: }t||d ƒD ]}	|  |	|||#¡ qƒqa| j |¡ |d rÓt||d ƒD ]/}
| j ||
f¡rÈ| j ||
f¡\}$}%|$dGkrÈtdH|› dI|%› d	ƒ‚dJ|f| j||
f< q£dS )KaY  
        Add an Excel table to a worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
            -3: Not supported in constant_memory mode.
        Nz5add_table() isn't supported in 'constant_memory' moder‰  Tr?  r   zTable range 'r  r  r  >   r¢  rd   ÚstyleÚcolumnsÚ	total_rowr  Ú
header_rowÚbanded_rowsÚlast_columnÚfirst_columnÚbanded_columnsr/  ú' in add_table()r@  rê  ré  r  r   z1Must have at least one data row in in add_table()rì  FÚshow_first_colrë  Úshow_last_colÚshow_row_stripesrí  Úshow_col_stripesÚheader_row_countrè  Útotals_row_shownrd   ú zName 'z&' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz*Invalid Excel characters in add_table(): 'r  z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z-Name looks like a cell name in add_table(): 'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$zInvalid name 'z#' like a RC cell ref in add_table()ræ  rU   ÚTableStyleMedium9rr  Úa_rangerç  ÚColumn)	Úidrd   Útotal_stringÚtotal_functionÚcustom_totalÚtotal_valuerU  rJ   Úname_formatrJ   rŠ   z'Duplicate header name in add_table(): 'Úheader_formatrþ  rU  r  rû  Ú
count_numsÚ	countNumsÚstd_devÚstdDev©r  r  ÚcountrÛ  rÜ  r  ÚsumÚvarrü  r4  rý  rú  r¢  r  zTable autofilter range 'z0' overlaps previous Worksheet autofilter range 'rÀ   ) rV  rh   r   rA  r#   rr  rÃ   r±  r   rÂ   rW  r  r  ÚUNICODErY  r.  rB  Úlowerr  rÝ  rp  r]  ÚsetÚ_table_function_to_formular  r!  rÛ  rk  r(  Ú	enumeraterç   rÕ   )&r+   r`  ra  rb  rc  r­  rÀ   Úcol_formatsrt  r#  rD   r	  rà  r[  Únum_rowsrd   Úfirst_data_rowÚlast_data_rowÚcol_idÚ
seen_namesrõ  Úcol_dataÚ	user_dataÚxformatÚheader_namerU  ÚfunctionÚ	subtotalsrV  rú  r¢  ÚiÚjr"  Úcolumn_dataÚformula_formatrÔ   rÑ   r2   r2   r3   Ú	add_tableo  s†  

ÿÿÿÿñþ

ÿ



÷





ÿ
ÿÿ

ÿ
 

€

ÿÿzWorksheet.add_tablec                 C   s¸  |   ||dd¡r
dS dt||ƒgi}|du ri }h d£}| ¡ D ]}||vr1td|› dƒ  dS q d|vr<td	ƒ d
S | dd¡}|dvrLtdƒ d
S |dkrRd}||d< d|v rot|d tƒrh|d |d< n|d g|d< t|d tƒr}|d |d< n|d g|d< t|d ƒ}t|d ƒ}	||	krštdƒ d
S t|d ƒ|d< t| j	ƒ}
g }|d D ]}| 
dd¡}| d¡}d|vrÄ|
d | }| |¡ q­||d< g }|d D ]}| 
dd¡}| |¡ qÔ||d< | d¡|d< | d¡|d< | d¡|d< | d¡|d < | d!¡|d"< | d#¡|d#< | d$¡|d$< | d%¡|d%< | d&¡|d&< | d'¡|d'< | d(¡|d)< | d*¡|d*< | d+d¡}|d,krJd-|d.< n|d/krTd0|d.< nd1|d.< | d2¡}|rkd|vrk|
d | }||d2< | d3d-¡}t|ƒ}|d4 |d5< |d |d6< |d# |d7< |d  |d8< |d" |d9< |d |d:< |d |d;< |  ||d5¡ |  ||d6¡ |  ||d7¡ |  ||d8¡ |  ||d9¡ |  ||d:¡ |  ||d;¡ | j |¡ d-S )<ap  
        Add sparklines to the worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.

        Tr?  Ú	locationsN>   rÛ  rÜ  Úaxisr5  rr  ræ  ÚweightÚmarkersÚreverseÚlocationÚ	date_axisÚ	low_colorÚ	low_pointÚ
high_colorÚ
high_pointÚ
last_colorÚ
last_pointÚempty_cellsÚfirst_colorÚfirst_pointÚplot_hiddenÚshow_hiddenÚseries_colorÚmarkers_colorÚnegative_colorÚnegative_pointsr/  z' in add_sparkline()rr  z0Parameter 'range' is required in add_sparkline()r@  r5  Úline)r4  ÚcolumnÚwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()r6  Ústackedr#  ÚrangeszMMust have the same number of location and range parameters in add_sparkline()r  rU  rU   r  ú!r(  Úhighr&  Úlowr3  Únegativer-  Úfirstr*  Úlastr!  rÜ  rÛ  r  r"  r/  rx   r   r+  Úzeror   ÚemptyÚconnectÚspanÚgapr$  ræ  Úseriesr0  r2  r1  r,  r)  r'  r%  )rA  r$   rW  r   r±  r4  r  rB  r   rd   rY  rÝ  rk  r   Ú_set_spark_colorrè   )r+   r#  rD   r­  Ú	sparklinerZ  r[  Ú
spark_typeÚrange_countÚlocation_countÚ	sheetnameÚ
new_rangesÚspark_rangeÚnew_locationsr#  r@  Ú
date_rangeÚstyle_idræ  r2   r2   r3   Úadd_sparklineÅ  s¸   þÿÿ






zWorksheet.add_sparklinec                 C   s^   d}t ||ƒ}||kr||}}||kr||}}t||||ƒ}|dkr&dS |||gg| _dS )a‰  
        Set the selected cell or cells in a worksheet

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

        Returns:
            0:  Nothing.
        NÚA1)r$   r#   rw   )r+   r`  ra  rb  rc  ÚpaneÚactive_cellÚsqrefr2   r2   r3   Úset_selection…  s   


zWorksheet.set_selectionc                 C   s$   |dkr
|dkr
dS t ||ƒ| _dS )zå
        Set the first visible cell at the top left of a worksheet.

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

        Returns:
            0:  Nothing.
        r   N)r$   r{   )r+   r#  rD   r2   r2   r3   Ú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+   ÚvisibleÚsymbols_belowÚsymbols_rightÚ
auto_styler2   r2   r3   Úoutline_settingsº  s
   
zWorksheet.outline_settingsc                 C   s,   |du r|}|du r|}|||||g| _ dS )at  
        Create worksheet panes and mark them as frozen.

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

        Returns:
            0:  Nothing.

        N)r|   )r+   r#  rD   Útop_rowÚleft_colÚ	pane_typer2   r2   r3   Ú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.

        r‡  N)r_  )r+   ÚxÚyr\  r]  r2   r2   r3   Úsplit_panesé  s   zWorksheet.split_panesrZ   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 <= 400rZ   N)r   r)   rª   )r+   rª   r2   r2   r3   Úset_zoomû  s   zWorksheet.set_zoomc                 C   rÅ  )zš
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        TN)r­   r  r2   r2   r3   Úright_to_left  rÇ  zWorksheet.right_to_leftc                 C   rÅ  )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r®   r  r2   r2   r3   Ú	hide_zero  rÇ  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   rz   ©r+   Úcolorr2   r2   r3   Úset_tab_color'  s   zWorksheet.set_tab_colorrU   c                 C   sÊ   |dkr	|   |¡}|si }i dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“}| ¡ D ]}||v rS|| ||< qFtd|› dƒ qF||d< || _dS )zù
        Set the password and protection options of the worksheet.

        Args:
            password: An optional password string.
            options:  A dictionary of worksheet objects to protect.

        Returns:
            Nothing.

        rU   ÚsheetTÚcontentFÚobjectsÚ	scenariosÚformat_cellsÚformat_columnsÚformat_rowsÚinsert_columnsÚinsert_rowsÚinsert_hyperlinksÚdelete_columnsÚdelete_rowsÚselect_locked_cellsÚsortr  Úpivot_tablesÚselect_unlocked_cellszUnknown protection object: 'r  ÚpasswordN)Ú_encode_passwordrW  r   r¤   )r+   r{  r­  Údefaultsrä  r2   r2   r3   Úprotect4  sZ   
ÿþýüûúùø	÷
öõôóòñðï
zWorksheet.protectc                 C   sr   |du r
t dƒ dS | d¡}| dd¡}|  jd7  _|du r'dt| jƒ }|r.|  |¡}| j |||f¡ d	S )
aU  
        Unprotect ranges within a protected worksheet.

        Args:
            cell_range: The cell or cell range to unprotect.
            range_name: An optional name for the range.
            password:   An optional password string. (undocumented)

        Returns:
            0:  Success.
            -1: Parameter error.

        Nz1Cell range must be specified in unprotect_range()r?  r  rU  rU   r   ÚRanger   )r   rÝ  rY  r¦   r.  r|  r¥   rk  ©r+   rt  Ú
range_namer{  r2   r2   r3   Úunprotect_rangeg  s   

zWorksheet.unprotect_rangec                 C   sx   |   ||dd¡rtd|› d|› dƒ dS |du ri }| j}| j}dt| jƒ }t||||||ƒ}| j |¡ d| _dS )	aM  
        Insert a button form object into the worksheet.

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

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

        TzCannot insert button at (r¦  r§  r?  Nr   r   )	rA  r   r¹   r»   rB  rÍ   r   rk  rÅ   )r+   r#  rD   r­  rÿ  rÝ  Úbutton_numberÚbuttonr2   r2   r3   Úinsert_button‰  s   zWorksheet.insert_buttonc                 C   sF   |r	|j s	| ¡  |s| js|  ¡ | _| j ¡  | j}|  ||||¡S )a¦  
        Insert a boolean checkbox in a worksheet cell.

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

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

        )ÚcheckboxÚset_checkboxr  r  r-  rx  r2   r2   r3   Úinsert_checkbox­  s   


zWorksheet.insert_checkboxc                 C   rÐ  )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TN©r   r   r  r2   r2   r3   Úset_landscapeÑ  ó   
zWorksheet.set_landscapec                 C   rÐ  )z€
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr‰  r  r2   r2   r3   Úset_portraitß  r‹  zWorksheet.set_portraitc                 C   rÊ  )zÐ
        Set the page view mode.

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

        Returns:
            Nothing.

        N©rø   )r+   Úviewr2   r2   r3   Úset_page_viewí  s   
zWorksheet.set_page_viewc                 C   rÅ  )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        r‡  Nr  r  r2   r2   r3   Úset_pagebreak_viewü  rÇ  zWorksheet.set_pagebreak_viewc                 C   s   |r
|| _ d| _dS dS )z˜
        Set the paper type. US Letter = 1, A4 = 9.

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)r€   r   )r+   r€   r2   r2   r3   Ú	set_paper	  s   
þzWorksheet.set_paperc                 C   rÐ  )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r‚   rƒ   r  r2   r2   r3   Úcenter_horizontally  r‹  zWorksheet.center_horizontallyc                 C   rÐ  )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r‚   r„   r  r2   r2   r3   Úcenter_vertically&  r‹  zWorksheet.center_verticallyrW   rX   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Úrightr…  r‡  r2   r2   r3   Úset_margins4  s   
zWorksheet.set_marginsc                 C   óª  |}|  dd¡}t|ƒdkrtdƒ dS |dur"t|tƒs!d|i}ni }| ¡ }|dur0||d< g | _| d¡rQ| d¡|d	< |  | d¡|¡}d
|_	| j 
|¡ | d¡ro| d¡|d	< |  | d¡|¡}d|_	| j 
|¡ | d¡r| d¡|d	< |  | d¡|¡}d|_	| j 
|¡ | d¡}t| jƒ}||kr­td|› d|› d|› ƒ g | _dS d|v r¶|d | _d|v r¿|d | _|| _| dd¡| _d| _|rÓd| _dS dS )zù
        Set the page header caption and optional margin.

        Args:
            header:  Header string.
            margin:  Header margin.
            options: Header options, mainly for images.

        Returns:
            Nothing.

        ú
&[Picture]ú&GrS  zCHeader string cannot be longer than Excel's limit of 255 charactersNÚmarginÚ
image_leftÚimage_data_leftÚ
image_dataÚLHÚimage_centerÚimage_data_centerÚCHÚimage_rightÚimage_data_rightÚRHúNumber of footer images 'ú#' doesn't match placeholder count 'ú' in string: Úalign_with_marginsÚscale_with_docrY   T)rY  rB  r   r4  r¨   rV  rŽ   r±  r¨  Ú_header_positionrk  r  rŒ   r   rŠ   r•   r‰   rÆ   )r+   rŠ   r­  rš  Úheader_origr®  Úplaceholder_countÚimage_countr2   r2   r3   Ú
set_headerG  óf   
€




ÿÿÿ


ÿzWorksheet.set_headerc                 C   r—  )zù
        Set the page footer caption and optional margin.

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

        Returns:
            Nothing.

        r˜  r™  rS  zCFooter string cannot be longer than Excel's limit of 255 charactersNrš  r›  rœ  r  ÚLFrŸ  r   ÚCFr¢  r£  ÚRFr¥  r¦  r§  r¨  r©  rY   T)rY  rB  r   r4  r¨   rV  r   r±  r¨  rª  rk  r  rŒ   r   r‹   r–   r‰   rÆ   )r+   r‹   r­  rš  Úfooter_origr®  r¬  r­  r2   r2   r3   Ú
set_footer–  r¯  zWorksheet.set_footerc                 C   sH   |du r|}|d7 }|d7 }d|› d|› }t | jƒ}|d | | _dS )zÕ
        Set the rows to repeat at the top of each printed page.

        Args:
            first_row: Start row for range.
            last_row: End row for range.

        Returns:
            Nothing.

        Nr   rU  z:$r9  )r   rd   r—   )r+   r`  rb  r  rJ  r2   r2   r3   Úrepeat_rowså  s   
zWorksheet.repeat_rowsc                 C   sH   |du r|}t |dƒ}t |dƒ}|d | }t| jƒ}|d | | _dS )zé
        Set the columns to repeat at the left hand side of each printed page.

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

        Returns:
            Nothing.

        Nr   r7   r9  )r!   r   rd   r˜   )r+   ra  rc  r  rJ  r2   r2   r3   Úrepeat_columnsÿ  s   


zWorksheet.repeat_columnsc                 C   sF   |dkrd| _ d| _d| _dS |dkrd| _ d| _dS d| _ d| _dS )a1  
        Set the option to hide gridlines on the screen and the printed page.

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

        Returns:
            Nothing.

        r   r   TN)r…   r†   r‚   )r+   Úoptionr2   r2   r3   Úhide_gridlines  s   


zWorksheet.hide_gridlinesc                 C   ó   d| _ d| _dS )z¢
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

        TN)r‡   r‚   r  r2   r2   r3   Úprint_row_col_headers2  r‹  zWorksheet.print_row_col_headersc                 C   rÅ  )zž
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)rˆ   r  r2   r2   r3   Úhide_row_col_headers@  rÇ  zWorksheet.hide_row_col_headersc                 C   sJ   |dkr|dkr|| j d kr|| jd krdS |  ||||¡}|| _dS )aÃ  
        Set the print area in the current worksheet.

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

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

        r   r   r?  )ro   rp   r  r™   )r+   r`  ra  rb  rc  r  r2   r2   r3   Ú
print_areaM  s   zWorksheet.print_areac                 C   rÐ  )z„
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)rš   r   r  r2   r2   r3   Úprint_acrossn  r‹  zWorksheet.print_acrossc                 C   s   d| _ || _|| _d| _dS )a  
        Fit the printed area to a specific number of pages both vertically and
        horizontally.

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

        Returns:
            Nothing.

        r   TN)rŸ   r    r¡   r   )r+   rÝ  rÿ  r2   r2   r3   Úfit_to_pages|  s   
zWorksheet.fit_to_pagesc                 C   rÊ  )zœ
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)rž   )r+   Ú
start_pager2   r2   r3   Úset_start_pageŽ  rÇ  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.

        rc  rd  zPrint scale 'z#' outside range: 10 <= scale <= 400Nr   T)r   rŸ   r)   r¬   r   )r+   Úscaler2   r2   r3   Úset_print_scale›  s   

zWorksheet.set_print_scalec                 C   r¹  )z”
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r›   r   r  r2   r2   r3   Úprint_black_and_white±  r‹  zWorksheet.print_black_and_whitec                 C   rÊ  )z¿
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r¢   ©r+   Úbreaksr2   r2   r3   Úset_h_pagebreaks¿  rÇ  zWorksheet.set_h_pagebreaksc                 C   rÊ  )zÂ
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r£   rÄ  r2   r2   r3   Úset_v_pagebreaksÌ  rÇ  zWorksheet.set_v_pagebreaksc                 C   s*   |dur	|| _ dS dt| jd ƒ | _ dS )zç
        Set the VBA name for the worksheet. By default this is the
        same as the sheet name: i.e., Sheet1 etc.

        Args:
            name: The VBA name for the worksheet.

        Returns:
            Nothing.

        NÚSheetr   )rù   r.  re   )r+   rd   r2   r2   r3   Úset_vba_nameÙ  s   
zWorksheet.set_vba_namec                 C   sR   |du rdS |  ¡ }h d£}| ¡ D ]}||vr#td|› dƒ  dS q|| _dS )a  
        Ignore various Excel errors/warnings in a worksheet for user defined
        ranges.

        Args:
            options: A dict of ignore errors keys with cell range values.

        Returns:
            0: Success.
           -1: Incorrect parameter or option.

        Nr?  >	   Ú
eval_errorÚformula_rangeÚformula_differsÚformula_unlockedÚcalculated_columnÚtwo_digit_text_yearÚempty_cell_referenceÚlist_data_validationÚnumber_stored_as_textr/  z' in ignore_errors()r   )rV  rW  r   r  )r+   r­  rZ  r[  r2   r2   r3   Úignore_errorsê  s   þzWorksheet.ignore_errorsc                 C   sH  |d | _ |d | _|d | _|d | _|d | _|d | _|d | _|d | _|d	 | _|d
 | _	|d | _
|d | _|d | _|d | _|d | _|d | _|d | _|d | _|d | _| jr€d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _| jr¢tj| jd\}}t  |¡ || _!t"|ddd| _#| j#| _$d S d S )Nrd   re   rf   r  rh   ri   rú   rü   rÿ   rý   rþ   r   r  r  rn   r  r  r  r  g     €)@é   rX   r   ç      à?F)Údirzw+úutf-8©ÚmodeÚencoding)%rd   re   rf   r  rh   ri   rú   rü   rÿ   rý   rþ   r   r  r  rn   r  r  r  r  r·   r¸   r¹   r‘   r’   r“   r”   r•   r–   rŒ   ÚtempfileÚmkstempÚosÚcloser  Úopenr  r”  )r+   Ú	init_dataÚfdÚfilenamer2   r2   r3   Ú_initialize  sJ   



















özWorksheet._initializec                 C   s  |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | js$|  ¡  n|  	¡  |  
¡  |  ¡  | jr7|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |   d¡ |  !¡  d S )Nr  )"Ú_xml_declarationÚ_write_worksheetÚ_write_sheet_prÚ_write_dimensionÚ_write_sheet_viewsÚ_write_sheet_format_prÚ_write_colsrh   Ú_write_sheet_dataÚ_write_optimized_sheet_dataÚ_write_sheet_protectionÚ_write_protected_rangesrn   Ú_write_phonetic_prÚ_write_auto_filterÚ_write_merge_cellsÚ_write_conditional_formatsÚ_write_data_validationsÚ_write_hyperlinksÚ_write_print_optionsÚ_write_page_marginsÚ_write_page_setupÚ_write_header_footerÚ_write_row_breaksÚ_write_col_breaksÚ_write_ignored_errorsÚ_write_drawingsÚ_write_legacy_drawingÚ_write_legacy_drawing_hfÚ_write_pictureÚ_write_table_partsÚ_write_ext_listr“  Ú
_xml_closer  r2   r2   r3   Ú_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 |s$|s$| jr$|| jk r$dS |s@| jd u s0|| jk r3|| _| jd u s=|| jkr@|| _|s\| jd u sL|| jk rO|| _| jd u sY|| jkr\|| _dS r>  )ro   rp   rh   rò   rr   rs   rt   ru   )r+   r#  rD   rÞ  rß  r2   r2   r3   rA  «  s$   
zWorksheet._check_dimensionsc                 C   s   t || j| jƒS ©N)r   rú   r  )r+   Údt_objr2   r2   r3   rv  Ì  ó   zWorksheet._convert_date_timec                 C   sÔ   d}d}d}d}t |dƒ}	t |dƒ}
dt|d ƒ }dt|d ƒ }|dkr4|| jd kr4|	}|
}d}n|dkrF|| jd krF|}|}d}n|	| }|
| }||krW|sW|}n|d | }t| jƒ}|d | }|S )NrU   r   r   rU  r7   r9  )r!   r.  ro   rp   r   rd   )r+   Ú	row_num_1Ú	col_num_1Ú	row_num_2Ú	col_num_2Úrange1Úrange2r  Úrow_col_onlyÚ
col_char_1Ú
col_char_2Ú
row_char_1Ú
row_char_2rJ  r2   r2   r3   r  Ð  s0   


zWorksheet._convert_name_areac                 C   sR   |sg S t |ƒ}d|v r| d¡ t|ƒ}| ¡  d}t|ƒ|kr'|d |… }|S )Nr   iÿ  )r
  Úremover  rx  rB  )r+   rÅ  Ú
breaks_setÚbreaks_listÚmax_num_breaksr2   r2   r3   Ú_sort_pagebreaksø  s   
zWorksheet._sort_pagebreaksc                 C   sp   |sg S t  d¡}| |¡}g }|D ]#}| d¡r|dd … }| d¡r*|d d… }| dd¡}| |¡ q|S )Nz"(?:[^"]|"")*"|\S+rj  r   r?  z"")r  ÚcompileÚfindallr  r  rY  rk  )r+   r–  Útoken_rer—  Ú
new_tokensr"  r2   r2   r3   r    s   



z Worksheet._extract_filter_tokensc                 C   s   t |ƒdkrB|d }t d|¡rd}nt d|¡rd}ntd|› d|› d	ƒ |  ||dd… ¡}|  ||d
d… ¡}||g | S |  ||¡S )NrÚ  rV   z(and|&&)r   z	(or|\|\|)r   úToken 'z3' is not a valid conditional in filter expression 'r  r  )rB  r  r  r   Ú_parse_filter_tokens)r+   r–  r—  ÚconditionalÚexpression_1Úexpression_2r2   r2   r3   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	  ¡ ¡rlt|d ƒ}|dk s3|d
kr>td|› d|› dƒ | ¡ }|dvrQtd|› d|› dƒ |d	  ¡ dkr\d}nd}|d dkrh|d7 }t|ƒ}|s|d	 rtd|d	 › d|› dƒ t d| ¡ ¡r´|dvr˜td|d › d|› dƒ | ¡ }|dkr§|dkr¦d}n|dkr°d}d}nd}d}|dkrÀt d|¡rÀd}||gS ) Nr‡  rë  r   rV   r  é   )r<  r  z=~Úeqr?  z!~Úner@  rF  rL  rC  rI  z
top|bottomr   iô  zThe value 'z' in expression 'z' must be in the range 1 to 500)rð  ú%z
The type 'z ' must be either 'items' or '%%'r…  é   rR  r#  r  z0' is not a valid operator in filter expression 'r  zblanks|nonblanks)r‡  rë  zThe operator 'z0' is not valid in relation to Blanks/NonBlanks'.rŠ  rõ  z[*?]é   )r±  r  r  r	  r)   r   r.  rZ  )r+   r–  r—  Ú	operatorsÚoperatorr"  rV  r2   r2   r3   r  P  sp   ôÿÿÿÿÿ€zWorksheet._parse_filter_tokensc                 C   sp   d}|d d d… D ]}|d? d@ |d> d@ B }|t |ƒN }q	|d? d@ |d> d@ B }|t|ƒN }|dN }|d›S )Nr   r?  é   r   rT   iKÎ  ÚX)ÚordrB  )r+   r{  Údigestro  r2   r2   r3   r|  §  s   zWorksheet._encode_passwordc                 C   sF   t |tƒr	|}|S |d ur| d¡rt|d ƒ}||_|S t|ƒ}|S )Nr  )r4  r   r±  Ú
image_name)r+   r¬  r­  r®  r2   r2   r3   r¨  ¸  s   
úþzWorksheet._image_from_sourcer®  Úimage_idÚ
drawing_idc              	   C   s¤  |j |j }|j|j }|d|j 9 }|d|j 9 }|  |j|j|j	|j
|||j¡}td|d  ƒ}td|d  ƒ}| jsVtƒ }d|_|| _| j ddt|ƒ d d g¡ n| j}tƒ }tj|_||_|j|_||_ ||_d |_|j|_d|_|j|_|jd ur„|j|_|jr¬|j}	|	 ¡ }
|	  ¡ }| j! "|	j#¡s¢| j$ d	|
|g¡ |  %|	j#¡|	_|	|_| j! "|j&¡sÄ| j$ d
dt|ƒ d |j' g¡ |  %|j&¡|_| (|¡ d S )Ng      X@rÕ  é5%  r   ú/drawingú../drawings/drawingú.xmlr   ú
/hyperlinkú/imageú../media/imageÚ.))Ú_widthÚ_x_scaleÚ_heightÚ_y_scaleÚ_x_dpiÚ_y_dpiÚ_position_object_emusrª  r©  Ú	_x_offsetÚ	_y_offsetÚ_anchorr)   rë   r   ÚembeddedrÞ   rk  r.  r   r   ÚIMAGEÚ_drawing_typeÚ_dimensionsr,  Ú_descriptionÚ_shapeÚ
_rel_indexÚ_decorativer»  Ú_urlÚ_targetÚ_target_moderì   r±  Ú_linkrã   Ú_get_drawing_rel_indexÚ_digestÚ_image_extensionÚ_add_drawing_object)r+   r®  r-  r.  rÝ  rÿ  Ú
dimensionsrë   Údrawing_objectr}  ÚtargetÚtarget_moder2   r2   r3   Ú_prepare_imageÆ  sf   	ùÿ
þÿzWorksheet._prepare_imagec                 C   sx  | j | \}}}}}}}	}
}}}| d| jd ¡}| d| jd ¡}||9 }||9 }|  |||||||
¡}td|d  ƒ}td|d  ƒ}| jsatƒ }d|_|| _| j	 
dd	t|ƒ d
 d g¡ n| j}tdd|ƒ}|	|_tƒ }tj|_||_||_||_||_||_|
|_d|_||_t |¡}|rµ| ¡ }| ¡ }| j |j¡s«| j  
d||g¡ |  !|j¡|_||_"| #|¡ d S )NrÝ  rV   rÿ  r   rÕ  r/  r   r0  r1  r2  ÚrectÚTextBoxr   r3  )$ré   r±  r»   r¹   r=  r)   rë   r   rA  rÞ   rk  r.  r   r„  r   r   ÚSHAPErC  rD  r7  r9  rE  rF  r@  rG  rH  r   Úfrom_optionsrJ  rK  rì   rL  rã   rM  rI  rP  )r+   re   r.  r#  rD   r¶  r·  r¸  r¹  r„  r½  r­  r»  r¼  rÝ  rÿ  rQ  rë   ÚshaperR  r}  rS  rT  r2   r2   r3   Ú_prepare_shape  sf   ôÿÿ
zWorksheet._prepare_shapec                 C   s`   t  dd|j¡|_| j |j¡s!| j ddt|ƒ d |j	 g¡ |  
|j¡|_| j |¡ d S )Nz\..*$rU   r4  r5  r6  )r  rg  r,  rî   r±  rN  rä   rk  r.  rO  Ú_get_vml_drawing_rel_indexÚ_ref_idr   )r+   r-  r®  r2   r2   r3   Ú_prepare_header_imageY  s   þÿzWorksheet._prepare_header_imagec                 C   s$   | j  ddt|ƒ d | g¡ d S )Nr4  r5  r6  )râ   rk  r.  )r+   r-  Úimage_extensionr2   r2   r3   Ú_prepare_backgroundk  s   ÿzWorksheet._prepare_backgroundc              
   C   s  | j | \
}}}}}}	}
}}}|d |_td|j|	  ƒ}td|j|
  ƒ}|  |||||||¡}|j}| jsOtƒ }d|_	|| _| j
 ddt|ƒ d g¡ n| j}tƒ }tj|_||_||_||_||_d |_||_|  ¡ |_||_||_| |¡ | j ddt|ƒ d g¡ d S )Nr   rÕ  r0  r1  r2  z/chartz../charts/chart)rå   rù  r)   rÝ  rÿ  r=  Ú
chart_namerë   r   rA  rÞ   rk  r.  r   r   ÚCHARTrC  rD  r7  r9  Ú_namerF  r@  rM  rG  rE  rH  rP  rã   )r+   re   Úchart_idr.  r#  rD   rÁ  r¶  r·  r¸  r¹  r½  r»  r¼  rÝ  rÿ  rQ  rd   rë   rR  r2   r2   r3   Ú_prepare_chartq  sT   õ
ÿÿ

ÿzWorksheet._prepare_chartc              
   C   s¢   |   |||||||¡\
}}}}}}	}
}}}tdd|  ƒ}tdd|  ƒ}tdd|
  ƒ}
tdd|  ƒ}tdd|  ƒ}tdd|  ƒ}||||||	|
|||f
S )NrÕ  r/  )Ú_position_object_pixelsr)   )r+   Ú	col_startÚ	row_startÚx1Úy1rÝ  rÿ  r½  Úcol_endÚrow_endÚx2Úy2Úx_absÚy_absr2   r2   r3   r=  «  s*   ÿõzWorksheet._position_object_emusc              
   C   s:  d}d}	|dk r!|dkr!||   |d ¡7 }|d8 }|dk r!|dks|dk r>|dkr>||  |d ¡7 }|d8 }|dk r>|dks)td|ƒ}td|ƒ}| jrZt|ƒD ]	}
||   |
¡7 }qOn|| j| 7 }||7 }| jrwt|ƒD ]	}|	|  |¡7 }	qln|	| j| 7 }	|	|7 }	||   ||¡kr||   |¡8 }|d7 }||   ||¡ksŠ||  ||¡kr¸||  |¡8 }|d7 }||  ||¡ks¥|}|}|   ||¡dkrÈ|| }|  ||¡dkrÔ|| }||   ||¡krð||   ||¡8 }|d7 }||   ||¡ksÜ||  ||¡kr||  ||¡8 }|d7 }||  ||¡ksù|}|}||||||||||	g
S r(   )Ú	_size_colÚ	_size_rowrÛ  r×   rr  r»   rØ   r¹   )r+   rg  rh  ri  rj  rÝ  rÿ  r½  ro  rp  r  Úrow_idrk  rl  rm  rn  r2   r2   r3   rf  ï  sb   þþ

ÿÿþþþþz!Worksheet._position_object_pixelsc                 C   s–   d}d}d}|| j v rF| j | d }| j | d }|d u r | j}|r*|dkr*d}|S |dk r:t|||  d ƒ}|S t|| d ƒ| }|S | j}|S )NrÚ  rë  r   r‡  r  r   rÕ  )rv   rº   r)   r»   )r+   rD   r½  Úmax_digit_widthÚpaddingÚpixelsrÝ  rx   r2   r2   r3   rq  M  s$   
ùüþzWorksheet._size_colc                 C   s`   d}|| j v r'| j | d }| j | d }|r|dkrd}|S td| ƒ}|S td| j ƒ}|S )Nr   r   r  gUUUUUUõ?)rÖ   r)   r¸   )r+   r#  r½  rv  rÿ  rx   r2   r2   r3   rr  k  s   
üþzWorksheet._size_rowc                 C   s0   d}d}|dkr|||  }|S || | }|S )Ng      @g      @é   r2   )r+   rv  rt  ru  rÝ  r2   r2   r3   rá  €  s   þzWorksheet._pixels_to_widthc                 C   s   d| S )NrX   r2   )r+   rv  r2   r2   r3   r  Œ  s   zWorksheet._pixels_to_heightrÃ  c              	   C   óB   d}|   |j|j|j|j|j|j|¡}| |j¡ | |j¡ |S ©Nr   )rf  Ú	start_colÚ	start_rowr¶  r·  rÝ  rÿ  rk  )r+   rÃ  r½  Úverticesr2   r2   r3   Ú_comment_vertices  ó   ùzWorksheet._comment_verticesr„  c              	   C   rx  ry  )rf  rD   r#  r¶  r·  rÝ  rÿ  rk  )r+   r„  r½  r|  r2   r2   r3   Ú_button_vertices£  r~  zWorksheet._button_verticesc                 C   s(  g }t | j ¡ ƒ}|D ]4}t | j|  ¡ ƒ}|D ]&}	| j| |	 }
|  |
¡|
_|
jd u r0| j|
_|
jd u r9| j|
_| 	|
¡ qq| j
D ]}|  |¡|_qC| j 	ddt|ƒ d g¡ | jrn|| _| j 	ddt|ƒ d g¡ t|ƒ}|}tt|d ƒƒD ]}|| d }|› d	|› }q||| _|| _|S )
Nú/vmlDrawingú../drawings/vmlDrawingú.vmlz	/commentsz../commentsr2  r`   r   r  )rì  rÈ   rW  r}  r|  Ú
is_visiblerË   rË  rÊ   rk  rÍ   r  rà   r.  rÇ   rÉ   rß   rB  rr  r)   r	  rÌ   )r+   r	  rÌ   Úvml_drawing_idÚ
comment_idrÈ   Úrow_numsr#  Úcol_numsrD   rÃ  r„  r  Ústart_data_idr  Údata_idr2   r2   r3   Ú_prepare_vml_objects¶  s>   

ô
ÿÿzWorksheet._prepare_vml_objectsc                 C   s&   || _ | j ddt|ƒ d g¡ d S )Nr€  r  r‚  )rÎ   rà   rk  r.  )r+   rÎ   r„  r2   r2   r3   Ú_prepare_header_vml_objectsë  s   ÿz%Worksheet._prepare_header_vml_objectsc                 C   sŠ   | j D ]?}||d< | d¡d u rdt|ƒ |d< |d  ¡ }||v r,td|d › dƒ‚d||< | j ddt|ƒ d	 g¡ |d
7 }qd S )Nrù  rd   ÚTablezDuplicate name 'z ' used in worksheet.add_table().Tz/tablez../tables/tabler2  r   )rç   r±  r.  r	  r   rá   rk  )r+   Útable_idÚseenrÀ   rd   r2   r2   r3   Ú_prepare_tablesô  s   
ÿÿ
ëzWorksheet._prepare_tablesc              	   C   s„   d}|  dd¡}|  dd¡}|  dd¡}|  dd	¡}d
ddddddddœ}||v r8|| }d|› d|› d}|S td|› dƒ |S )NrU   r  z''ú#z'#ú]z']ú[z'[ée   éf   ég   éh   éi   ék   ém   én   r  z	SUBTOTAL(z,[z])zUnsupported function 'rî  )rY  r   )r+   r  Úcol_namerU  r  Úfunc_numr2   r2   r3   r    s(   øþz$Worksheet._table_function_to_formulac                 C   s$   ||vrd S dt || ƒi||< d S )NÚrgb)r   )r+   rF  r­  Ú
user_colorr2   r2   r3   rE  *  s   zWorksheet._set_spark_colorc                 C   sø   | j rdS g }t||d ƒD ]k}|| jvr| d ¡ qt||d ƒD ]V}|| j| v rs| j| | }|jj}	|	dv rC| |jd›¡ q"|	dkrV|j}
| j 	|
¡}| |¡ q"|	dv ri|j
}|d u rcd}| |¡ q"|	dkrr| d	¡ q"| d ¡ q"q|S )
Nr2   r   ©rL   rP   rQ  rM   ré  r   rI   rU   )rh   rr  rÀ   rk  r  rï  rI  r:  rf   Ú_get_shared_stringrV  )r+   rh  rg  rl  rk  r¢  rô  rõ  rö  r÷  re   r:  rV  r2   r2   r3   Ú_get_range_data1  s8   


€á!zWorksheet._get_range_datac                 G   s   dd„ |D ƒ}d  |¡S )Nc                 S   s"   g | ]}t |tƒst|ƒn|‘qS r2   )r4  r.  )rC   Úitemr2   r2   r3   rE   j  s   " z'Worksheet._csv_join.<locals>.<listcomp>r  )rl  )r+   rð  r2   r2   r3   rX  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}r#  z%25rj  z%22rõ  z%20rF  z%3crC  z%3er’  z%5br‘  z%5dú^z%5eú`z%60rX  z%7br  z%7d)r  rZ  rY  )r+   r}  r2   r2   r3   Ú_escape_urln  s   zWorksheet._escape_urlc                 C   sR   |d u r|  j d7  _ | j S | j |¡r| j| S |  j d7  _ | j | j|< | j S ©Nr   )rí   rì   r±  ©r+   rS  r2   r2   r3   rM  ‚  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§  r2   r2   r3   r\    s
   
z$Worksheet._get_vml_drawing_rel_indexc                 C   sl  | j }| d¡ |jr| d¡ |jr| d¡ |jr | d¡ |jr(| d¡ |jr0| d¡ |jr9|  	|j¡ |j
dkrC|  d¡ |j
d	krM|  d
¡ | dd|jfg¡ |jdkr]n,|jrh|  d|j¡ n!|jrs|  d|j¡ n|jrƒ|  |j¡}|  d|¡ n|  dd¡ | dd|jfg¡ | dd|jfg¡ |jdkr¯|js¯| dd|jfg¡ | d¡ d S )NÚrPrÚbr  ÚstrikeÚoutlineÚshadowr   Úsuperscriptr‡  Ú	subscriptÚszÚvalr?  ÚthemeÚindexedr  ÚrFontÚfamilyÚCalibriÚscheme)rñ   r  ÚboldÚ_xml_empty_tagÚitalicÚfont_strikeoutÚfont_outlineÚfont_shadowÚ	underlineÚ_write_underlineÚfont_scriptÚ_write_vert_alignÚ	font_sizer±  Ú_write_colorÚcolor_indexedÚ
font_colorÚ_get_palette_colorÚ_write_rstring_colorÚ	font_nameÚfont_familyÚ	hyperlinkÚfont_schemer“  )r+   Ú	xf_formatÚ
xml_writerri  r2   r2   r3   r‘  ž  sD   










zWorksheet._write_fontc                 C   sD   g }|dkr
dg}n|dkrdg}n|dkrdg}| j  d|¡ d S )Nr‡  )r°  Údoubleé!   )r°  ÚsingleAccountingé"   )r°  ÚdoubleAccountingÚu©rñ   r¸  )r+   r½  r  r2   r2   r3   r¾  Ô  s   zWorksheet._write_underlinec                 C   s   d|fg}| j  d|¡ d S )Nr°  Ú	vertAlignrÓ  ©r+   r°  r  r2   r2   r3   rÀ  â  ó   
zWorksheet._write_vert_alignc                 C   s   ||fg}| j  d|¡ d S ©Nri  rÓ  ©r+   rd   rV  r  r2   r2   r3   rÆ  è  rÖ  zWorksheet._write_rstring_colorc                 C   s$   |d dkr|dd … }d|  ¡  S )Nr   r  r   ÚFF)rÙ  rh  r2   r2   r3   rÅ  î  s   zWorksheet._get_palette_colorc                 C   s   | j s| j ¡  d| _ d S d S )NT)r
  r  rÞ  r  r2   r2   r3   Ú
_opt_closeõ  s   

þzWorksheet._opt_closec                 C   s2   | j r| j}t|ddd| _d| _ | j| _d S d S )Nza+r×  rØ  F)r
  r  rß  r  r”  )r+   râ  r2   r2   r3   Ú_opt_reopenû  s   ûzWorksheet._opt_reopenc           
      C   sÀ  g }t |ƒD ]}| ddddœ¡ q|dkr"d|d d< d|d	 d< |d
kr8d|d d< d|d	 d< d|d d< |dkrTd|d d< d|d	 d< d|d d< d|d d< |rÞt|ƒ}||krb|d	 }t |ƒD ]w}||  d¡d ur”|| d || d< || d }t|tƒr”| d¡r”| d¡|| d< ||  d¡rÊd}|| d |vr²td|| d › dƒ n|| d || d< || d dkrÊd|| d< ||  d¡}	|	rÝ|	dkrÝd|| d< qf|S )NFr   Úpercent)r  rV  r5  rV   éC   rV  rÎ  r   r  éK   rÓ  é   r‡  rë  éP   é<   é(   r\   r  r5  )rÜ  rÒ  rI  rU  zUnknown icon property type 'z2' for sub-property 'type' in conditional_format().rI  Únumr  rC  T)	rr  rk  rB  r±  r4  r.  r  rÝ  r   )
r+   rÊ  Ú
user_propsÚpropsrF   Úmax_datar  Útmpr\  r  r2   r2   r3   rÚ    sN   ÿ€zWorksheet._set_icon_propsc                 C   sx   d}|d }|d }|d }d}|d }d|fd|fg}| j d	kr4| d
|f¡ | d|f¡ | d¡ |  d|¡ d S )Nz"http://schemas.openxmlformats.org/zspreadsheetml/2006/mainz!officeDocument/2006/relationshipszmarkup-compatibility/2006zhttp://schemas.microsoft.com/zoffice/spreadsheetml/2009/9/acÚxmlnszxmlns:rrØ  zxmlns:mczxmlns:x14ac)zmc:IgnorableÚx14acr  )rm   rk  r  )r+   Úschemarè  Úxmlns_rÚxmlns_mcÚ	ms_schemaÚxmlns_x14acr  r2   r2   r3   rå  I  s   

zWorksheet._write_worksheetc                 C   sÔ   | j d u r| jd u rd}nR| j d u r7| jd ur7| j| jkr$td| jƒ}n;td| jƒ}td| jƒ}|d | }n(| j | jkrK| j| jkrKt| j | jƒ}nt| j | jƒ}t| j| jƒ}|d | }|  dd|fg¡ d S )NrQ  r   r7   Ú	dimensionr  )rr   rt   ru   r$   rs   r¸  )r+   r  r;   r<   r2   r2   r3   rç  ]  s   zWorksheet._write_dimensionc                 C   s    |   d¡ |  ¡  |  d¡ d S )NÚ
sheetViews)r  Ú_write_sheet_viewr“  r  r2   r2   r3   rè  €  s   
zWorksheet._write_sheet_viewsc                 C   sf  g }| j s
| d¡ | jr| d¡ | js| d¡ | jr"| d¡ | jr*| d¡ | js2| d¡ | jdkr=| d¡ n
| jd	krG| d
¡ | jdkrT| d| jf¡ | j	dkr‹| d| j	f¡ | jdkrq| j
rq| d| j	f¡ | jdkr~| d| j	f¡ | jd	kr‹| d| j	f¡ | d¡ | js–| jr«|  d|¡ |  ¡  |  ¡  |  d¡ d S |  d|¡ d S )N)ÚshowGridLinesr   )ÚshowRowColHeadersr   )Ú	showZerosr   ©ÚrightToLeftr   )ÚtabSelectedr   ©ÚshowOutlineSymbolsr   r   )rŽ  Ú
pageLayoutr‡  )rŽ  ÚpageBreakPreviewrU   ÚtopLeftCellrZ   Ú	zoomScaler   ÚzoomScaleNormalÚzoomScalePageLayoutViewÚzoomScaleSheetLayoutView)ÚworkbookViewIdr   Ú	sheetView)r†   rk  rˆ   r®   r­   r~   rµ   rø   r{   rª   r«   r|   rw   r  Ú_write_panesÚ_write_selectionsr“  r¸  ©r+   r  r2   r2   r3   rñ  ‰  sD   













zWorksheet._write_sheet_viewc                 C   sŠ   | j }| j}| j}d|fg}| j | jkr| d¡ | jr!| d¡ |r*| d|f¡ |r3| d|f¡ | jdkr=| d¡ |  d|¡ d S )	NÚdefaultRowHeight©ÚcustomHeightr   )Ú
zeroHeightr   ÚoutlineLevelRowÚoutlineLevelColrØ  ©zx14ac:dyDescentz0.25ÚsheetFormatPr)r¸   r°   r±   r·   rk  r½   rm   r¸  )r+   r¸   Ú	row_levelÚ	col_levelr  r2   r2   r3   ré  Ä  s   




z Worksheet._write_sheet_format_prc                 C   s¼   | j sd S |  d¡ t| j  ¡ ƒd }|}| j | }| j |= |}|}t| j  ¡ ƒD ]!}| j | }||d kr=||kr=|}q)|  |||¡ |}|}|}q)|  |||¡ || j |< |  d¡ d S )NÚcolsr   r   )rv   r  rì  rW  Ú_write_col_infor“  )r+   ra  rc  Úprev_col_optionsÚdeleted_colÚdeleted_col_optionsrD   Úcol_optionsr2   r2   r3   rê  Ü  s(   



zWorksheet._write_colsc                 C   sD  |\}}}}}}	d}
d}|r|  ¡ }|d u r |sd}d}
n	d}n|dkr&d}
|dkr[d}d}|dk rGtt|||  d ƒt|ƒ d ƒd }ntt|| d ƒ| t|ƒ d ƒd }d|d fd	|d fd
|d›fg}|ru| d|f¡ |r|| d¡ |	rƒ| d¡ |
rŠ| d¡ |r“| d|f¡ |rš| d¡ |  d|¡ d S )Nr   r   r]   rÚ  rë  rÕ  g      p@rÜ  rÛ  rÝ  rQ  ræ  )rx   rB   )ÚbestFitrB   )ÚcustomWidthrB   ÚoutlineLevel)rØ  rB   rD   )Ú_get_xf_indexr)   r  rk  r¸  )r+   Úcol_minÚcol_maxrv   rÝ  r;  rx   rÙ  rØ  rþ  Úcustom_widthÚxf_indexrt  ru  r  r2   r2   r3   r    sj   ÿþÿûÿ
ÿþÿûÿ



ý



zWorksheet._write_col_infoc                 C   s8   | j d u r|  d¡ d S |  d¡ |  ¡  |  d¡ d S )NÚ	sheetData)rr   r¸  r  Ú_write_rowsr“  r  r2   r2   r3   rë  H  s
   

zWorksheet._write_sheet_datac                 C   s‚   | j d u r|  d¡ d S |  d¡ d}| j d¡ | j |¡}|r/| j |¡ | j |¡}|s!| j ¡  t	 
| j¡ |  d¡ d S )Nr  i   r   )rr   r¸  r  r  ÚseekÚreadr”  r*  rÞ  rÝ  Úunlinkr  r“  )r+   Ú	buff_sizer¢  r2   r2   r3   rì  R  s   

þ
z%Worksheet._write_optimized_sheet_datac                 C   sD   d| j fd| jfd| jfd| jfd| jfd| jfg}|  d|¡ d S )Nr”  r•  r…  r‡  rŠ   r‹   ÚpageMargins)r‘   r’   r“   r”   r•   r–   r¸  r  r2   r2   r3   rö  j  s   ú	zWorksheet._write_page_marginsc                 C   sX  g }| j sd S | jr| d| jf¡ | jdkr| d| jf¡ | jr/| jdkr/| d| jf¡ | jr?| jdkr?| d| jf¡ | jrG| d¡ | jdkrT| d| jf¡ | j	r]| d	¡ n| d
¡ | j
rj| d¡ | jdkrt| d¡ | jrŽ| jr‚| d| jf¡ | jr| d| jf¡ n| jr™| d| jf¡ | jr¤| d| jf¡ |  d|¡ d S )NÚ	paperSizerZ   rÁ  r   Ú
fitToWidthÚfitToHeight)Ú	pageOrderÚoverThenDownÚfirstPageNumber)r   Úportrait)r   Ú	landscape)ÚblackAndWhiterB   r   )ÚuseFirstPageNumberrB   ÚhorizontalDpiÚverticalDpiÚ	pageSetup)r   r€   rk  r¬   rŸ   r    r¡   rš   rž   r   r›   rj   r  r  r¸  r  r2   r2   r3   r÷  w  sB   






€zWorksheet._write_page_setupc                 C   s^   g }| j sd S | jr| d¡ | jr| d¡ | jr| d¡ | jr'| d¡ |  d|¡ d S )N)ÚhorizontalCenteredr   )ÚverticalCenteredr   )Úheadingsr   )Ú	gridLinesr   ÚprintOptions)r‚   rƒ   rk  r„   r‡   r…   r¸  r  r2   r2   r3   rõ  Å  s   



zWorksheet._write_print_optionsc                 C   sz   g }| j s
| d¡ | js| d¡ | jr0|  d|¡ | jr"|  ¡  | jr)|  ¡  |  	d¡ d S | j
r;|  d|¡ d S d S )N)ÚscaleWithDocr   )ÚalignWithMarginsr   ÚheaderFooter)r   rk  rŒ   r‰   r  rŠ   Ú_write_odd_headerr‹   Ú_write_odd_footerr“  rn   r¸  r  r2   r2   r3   rø  Þ  s   

ÿzWorksheet._write_header_footerc                 C   ó   |   d| j¡ d S )NÚ	oddHeader)r’  rŠ   r  r2   r2   r3   r:  ò  ó   zWorksheet._write_odd_headerc                 C   r<  )NÚ	oddFooter)r’  r‹   r  r2   r2   r3   r;  ö  r>  zWorksheet._write_odd_footerc                 C   s   |   ¡  t| j| jd ƒD ]€}|| jv s|| jv s| j| rt|d ƒ}|| jv r/| j| }nd }| j| rs|| jvrB|  	||¡ n
|  	||| j| ¡ t| j
| jd ƒD ]}|| j| v rl| j| | }|  |||¡ qU|  d¡ q|| jv rƒ|  ||| j| ¡ q|  ||| j| ¡ qd S )Nr   rê  r#  )Ú_calculate_spansrr  rr   rs   r©   rÈ   rÀ   r)   rÄ   Ú
_write_rowrt   ru   Ú_write_cellr“  Ú_write_empty_row)r+   rô  Ú
span_indexrB  rõ  Úcol_refr2   r2   r3   r  ú  s2   

ÿ


€
€ÞzWorksheet._write_rowsc                 C   sÔ   | j }|| _ || jv s|| jv s| j| rcd }| j| rY|| jvr(|  ||¡ n
|  ||| j| ¡ t| j| jd ƒD ]}|| j| v rR| j| | }|  |||¡ q;|  	d¡ n
|  
||| j| ¡ | j ¡  d S )Nr   r#  )rò   r©   rÈ   rÀ   rA  rr  rt   ru   rB  r“  rC  Úclear)r+   Úcurrent_row_numrô  rB  rõ  rE  r2   r2   r3   rD  "  s    

€zWorksheet._write_single_rowc                 C   s8  i }d }d }t | j| jd ƒD ]‡}|| jv r<t | j| jd ƒD ]}|| j| v r;|d u r1|}|}qt||ƒ}t||ƒ}q|| jv rlt | j| jd ƒD ]!}|| jv rk|| j| v rk|d u ra|}|}qJt||ƒ}t||ƒ}qJ|d d dksy|| jkr–t	|d ƒ}|d ur–|d7 }|d7 }|› d|› ||< d }q|| _
d S )Nr   rê  r   r7   )rr  rr   rs   rÀ   rt   ru   rÜ  rÛ  rÈ   r)   rÄ   )r+   ÚspansÚspan_minÚspan_maxrô  rõ  rD  r2   r2   r3   r@  G  s>   


€


€€
zWorksheet._calculate_spansc                 C   s>  d}|r|\}}}}	}
nd\}}}}	}
|d u r| j }d|d fg}|r'| ¡ }|r0| d|f¡ |r9| d|f¡ |r@| d¡ || jksO|| jkrX|| j krX| d|d	›f¡ |r_| d
¡ || jksn|| jkrs|| j krs| d¡ |	r|| d|	f¡ |
rƒ| d¡ | jdkr| d¡ |r—|  d|¡ d S |  d|¡ d S )Nr   )NNr   r   r   rŠ  r   rH  Ús)ÚcustomFormatr   ÚhtÚg)rx   r   r  r  )rØ  r   rØ  r  r#  )r¸   r  rk  r·   rm   Ú_xml_empty_tag_unencodedÚ_xml_start_tag_unencoded)r+   r#  rH  Ú
propertiesÚ	empty_rowr  rÿ  r;  rx   rÙ  rØ  r  r2   r2   r3   rA  r  s@   







zWorksheet._write_rowc                 C   s   | j |||dd d S )NT)rR  )rA  )r+   r#  rH  rQ  r2   r2   r3   rC  ©  s   zWorksheet._write_empty_rowc                 C   sÖ  t ||ƒ}d|fg}|jr|j ¡ }| d|f¡ n6|| jv r7| j| d r7| j| d }| d| ¡ f¡ n|| jv rP| j| d }|d urP| d| ¡ f¡ |jj}	|	dv ra|  |j	|¡ d S |	dv r—|j
}
| jss|  |
|¡ d S |  |
¡}
|
 d¡rŠ|
 d¡rŠ|  |
|¡ d S t|
ƒ}|  |
||¡ d S |	dkrÚ|j}t|jtƒr²| d	¡ |jr¯d}n!d
}nt|jtƒrÐd}|jdkrÀn|j|v rË| d¡ n| d¡ |  |j||¡ d S |	dkr|jdkré| d¡ zt|jƒ W n tyþ   | d¡ Y nw |  d|¡ |  |j|j¡ |  |j¡ |   d¡ d S |	dkr'|  !d|¡ d S |	dkrD| d	¡ |  d|¡ |  |j"¡ |   d¡ d S |	dkri| d¡ | d|jf¡ |  d|¡ |  |j#¡ |   d¡ d S d S )NrŠ  rK  r   rŸ  rå  z<r>z</r>rO   )rŒ  r©  r   )rM  z#N/Az#NAME?z#NULL!rL  z#REF!r°  rU   )rŒ  Úe)rŒ  r.  rR   re  )Úcmr   ÚcrI   rN   rK   Úvm)$r%   rJ   r  rk  r©   rv   r  rï  Ú_xml_number_elementrI  r:  rh   Ú_xml_string_elementÚ_escape_control_charactersr  r  Ú_xml_rich_inline_stringr   Ú_xml_inline_stringrV  r4  r,  r.  Ú_xml_formula_elementrU  rs  r  r*   r  Ú_write_cell_array_formularr  Ú_write_cell_valuer“  r¸  ry  rf  )r+   r#  rD   rö  rt  r  r  Úrow_xfÚcol_xfÚtype_cell_namer:  r‹  rV  Úerror_codesr2   r2   r3   rB  ­  s‚   












ÿ




úzWorksheet._write_cellc                 C   s   |d u rd}|   d|¡ d S )NrU   Úv©r’  )r+   rV  r2   r2   r3   r^  #  s   zWorksheet._write_cell_valuec                 C   s   dd|fg}|   d||¡ d S )N)rŒ  Úarrayr  r$  rd  )r+   rU  rt  r  r2   r2   r3   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r&| d¡ | j s/| js/| jrH|  d|¡ |  ¡  |  ¡  |  	¡  |  
d¡ d S |  d|¡ d S )NÚcodeName)Ú
filterModer   ÚsheetPr)rŸ   rÒ   rz   r¶   rù   rk  r  Ú_write_tab_colorÚ_write_outline_prÚ_write_page_set_up_prr“  r¸  r  r2   r2   r3   ræ  0  s.   ÿþýüû
zWorksheet._write_sheet_prc                 C   s    | j sd S dg}|  d|¡ d S )N)Ú	fitToPager   ÚpageSetUpPr)rŸ   r¸  r  r2   r2   r3   rk  L  s   zWorksheet._write_page_set_up_prc                 C   s(   | j }|sd S d|fg}|  d|¡ d S )Nr  ÚtabColor)rz   r¸  )r+   ri  r  r2   r2   r3   ri  T  s
   
zWorksheet._write_tab_colorc                 C   s^   g }| j sd S | jr| d¡ | js| d¡ | js| d¡ | js'| d¡ |  d|¡ d S )N)ÚapplyStylesr   )ÚsummaryBelowr   )ÚsummaryRightr   rø  Ú	outlinePr)r¶   r²   rk  r³   r´   rµ   r¸  r  r2   r2   r3   rj  _  s   



zWorksheet._write_outline_prc                 C   ó\   |   | j¡}|s
d S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q|  d¡ d S )Nr  ÚmanualBreakCountÚ	rowBreaksiÿ?  )r  r¢   rB  r  Ú
_write_brkr“  )r+   Úpage_breaksr  r  rô  r2   r2   r3   rù  q  ó   þzWorksheet._write_row_breaksc                 C   rs  )Nr  rt  Ú	colBreaksiÿÿ )r  r£   rB  r  rv  r“  )r+   rw  r  r  rõ  r2   r2   r3   rú  †  rx  zWorksheet._write_col_breaksc                 C   s"   d|fd|fdg}|   d|¡ d S )Nrù  rÛ  )Úmanr   Úbrk©r¸  )r+   Úbrk_idÚbrk_maxr  r2   r2   r3   rv  ›  s   zWorksheet._write_brkc                 C   óN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q|  d¡ d S )Nr  Ú
mergeCells)rÁ   rB  r  Ú_write_merge_cellr“  )r+   rÂ   r  r  Úmerged_ranger2   r2   r3   rñ  ¡  ó   
zWorksheet._write_merge_cellsc           
      C   sF   |\}}}}t ||ƒ}t ||ƒ}|d | }d|fg}	|  d|	¡ d S )Nr7   r  Ú	mergeCell)r$   r¸  )
r+   r‚  Úrow_minr  Úrow_maxr  r;   r<   r  r  r2   r2   r3   r  ³  s   


zWorksheet._write_merge_cellc                 C   sø   t | j ¡ ƒ}|sd S |  d¡ |D ]b}t | j|  ¡ ƒ}|D ]T}| j| | }| jrG| j| rG| j| | rG| j| | }|jjdkrGd|_|jt	j
t	jfv rl|  jd7  _|  ||| j|¡ | j d| ¡ dg¡ q|  |||¡ qq|  d¡ d S )Nrû   rM   Tr   r3  ÚExternal)rì  rû   rW  r  rÀ   r  rï  Ú_is_object_linkÚ
_link_typer   ÚURLÚEXTERNALrÚ   Ú_write_hyperlink_externalrÝ   rk  rJ  Ú_write_hyperlink_internalr“  )r+   r†  rô  r‡  rõ  r}  rö  r2   r2   r3   rô  À  s.   

ÿÿçzWorksheet._write_hyperlinksr#  rD   Úid_numr}  c                 C   sx   t ||ƒ}dt|ƒ }d|fd|fg}|jr| d|jf¡ |jr)| d|jf¡ |jr4| d|jf¡ |  d|¡ d S )NÚrIdr  úr:idr#  ÚdisplayÚtooltiprÉ  )r$   r.  r@  rk  rˆ  r  r‚  r¸  )r+   r#  rD   rŽ  r}  r  Úr_idr  r2   r2   r3   rŒ  ò  s   
z#Worksheet._write_hyperlink_externalc                 C   sR   t ||ƒ}d|fd|jfg}|jr| d|jf¡ | d|jf¡ |  d|¡ d S )Nr  r#  r’  r‘  rÉ  )r$   rL  r‚  rk  r  r¸  )r+   r#  rD   r}  r  r  r2   r2   r3   r    s   
z#Worksheet._write_hyperlink_internalc                 C   sN   | j sd S d| j fg}| jr|  d|¡ |  ¡  |  d¡ d S |  d|¡ d S )Nr  Ú
autoFilter)rÐ   rÒ   r  Ú_write_autofiltersr“  r¸  r  r2   r2   r3   rð    s   zWorksheet._write_auto_filterc                 C   sT   | j \}}t||d ƒD ]}|| jvrq| j| }| j| }|  || ||¡ qd S r¦  )rÑ   rr  rÓ   rÔ   Ú_write_filter_column)r+   Úcol1Úcol2rD   r—  rÔ   r2   r2   r3   r•  "  s   



özWorksheet._write_autofiltersc                 C   sB   d|fg}|   d|¡ |dkr|  |¡ n|  |¡ |  d¡ d S )NÚcolIdÚfilterColumnr   )r  Ú_write_filtersÚ_write_custom_filtersr“  )r+   r  rÔ   r   r  r2   r2   r3   r–  3  s   

zWorksheet._write_filter_columnc                 C   s‚   dd„ |D ƒ}g }t |ƒt |ƒkrdg}t |ƒdkr(t |ƒdkr(|  d|¡ d S |  d|¡ t|ƒD ]}|  |¡ q2|  d¡ d S )Nc                 S   s    g | ]}t |ƒ ¡ d kr|‘qS )rŠ  )r.  r	  )rC   Úfilterr2   r2   r3   rE   D  s     z,Worksheet._write_filters.<locals>.<listcomp>)rQ  r   r   r   r   )rB  r¸  r  rì  Ú_write_filterr“  )r+   r   Ú
non_blanksr  r  r2   r2   r3   r›  B  s   zWorksheet._write_filtersc                 C   ó   d|fg}|   d|¡ d S )Nr°  r  r|  rÕ  r2   r2   r3   rž  V  ó   
zWorksheet._write_filterc                 C   sŽ   t |ƒdkr|  d¡ | j|Ž  |  d¡ d S g }|d dkr#dg}ndg}|  d|¡ |  |d |d ¡ |  |d |d ¡ |  d¡ d S )	Nr‡  ÚcustomFiltersr   )Úandr   )r£  r   r   rV   r  )rB  r  Ú_write_custom_filterr“  )r+   r—  r  r2   r2   r3   rœ  \  s   

zWorksheet._write_custom_filtersc                 C   sp   g }ddddddddœ}|| d ur|| }nt d|› ƒ |dkr)| d	|f¡ | d
|f¡ |  d|¡ d S )NrE  r;  rK  rB  r>  rH  )r   r‡  rV   r  rë  r   r%  zUnknown operator = r'  r°  ÚcustomFilter)r   rk  r¸  )r+   r'  r°  r  r&  r2   r2   r3   r¤  s  s    ù
zWorksheet._write_custom_filterc                 C   sp  g }| j sd S | j }|d r| d|d f¡ |d r | d¡ |d r)| d¡ |d s2| d¡ |d s;| d	¡ |d
 rD| d¡ |d rM| d¡ |d rV| d¡ |d r_| d¡ |d rh| d¡ |d rq| d¡ |d rz| d¡ |d rƒ| d¡ |d sŒ| d¡ |d r•| d¡ |d rž| d¡ |d  r§| d!¡ |d" s°| d#¡ |  d$|¡ d S )%Nr{  rk  )rk  r   rl  )rl  r   rm  )rm  r   rn  )rn  r   ro  )ÚformatCellsr   rp  )ÚformatColumnsr   rq  )Ú
formatRowsr   rr  )ÚinsertColumnsr   rs  )Ú
insertRowsr   rt  )ÚinsertHyperlinksr   ru  )ÚdeleteColumnsr   rv  )Ú
deleteRowsr   rw  )ÚselectLockedCellsr   rx  )rx  r   r  )r”  r   ry  )ÚpivotTablesr   rz  )ÚselectUnlockedCellsr   ÚsheetProtection)r¤   rk  r¸  )r+   r  r­  r2   r2   r3   rí  Ž  sR   
















z!Worksheet._write_sheet_protectionc                 C   sF   | j dkrd S |  d¡ | jD ]\}}}|  |||¡ q|  d¡ d S )Nr   ÚprotectedRanges)r¦   r  r¥   Ú_write_protected_ranger“  r€  r2   r2   r3   rî  ¾  s   

z!Worksheet._write_protected_rangesc                 C   sB   g }|r|  d|f¡ |  d|f¡ |  d|f¡ |  d|¡ d S )Nr{  rT  rd   ÚprotectedRange©rk  r¸  )r+   rt  r  r{  r  r2   r2   r3   r³  Ê  s   z Worksheet._write_protected_rangec                 C   s(   | j sd S |  jd7  _|  | j¡ d S r¦  )rë   rÚ   Ú_write_drawingr  r2   r2   r3   rü  Ö  s   zWorksheet._write_drawingsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr  r  rë   ©r.  r¸  )r+   r.  r“  r  r2   r2   r3   r¶  Þ  s   
zWorksheet._write_drawingc                 C   ó@   | j sd S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   r  r  ÚlegacyDrawing)rÅ   rÚ   r.  r¸  ©r+   r“  r  r2   r2   r3   rý  æ  ó   
zWorksheet._write_legacy_drawingc                 C   r¸  )Nr   r  r  ÚlegacyDrawingHF)rÆ   rÚ   r.  r¸  rº  r2   r2   r3   rþ  ó  r»  z"Worksheet._write_legacy_drawing_hfc                 C   r¸  )Nr   r  r  Úpicture)rð   rÚ   r.  r¸  rº  r2   r2   r3   rÿ     r»  zWorksheet._write_picturec                 C   r  )Nr  ÚdataValidations)ró   rB  r  Ú_write_data_validationr“  )r+   ró   r  r  Ú
validationr2   r2   r3   ró    rƒ  z!Worksheet._write_data_validationsc           	      C   s  d}g }|d D ]+}|dkr|d7 }|\}}}}||kr!||}}||kr*||}}|t ||||ƒ7 }q| d¡r=|d }|d dkr[| d|d f¡ |d d	kr[| d
|d f¡ d|v ru|d dkrj| d¡ |d dkru| d¡ |d r~| d¡ |d s‡| d¡ |d r| d¡ |d r™| d¡ d|v r¦| d|d f¡ d|v r³| d|d f¡ d|v rÀ| d|d f¡ d|v rÍ| d|d f¡ | d |f¡ |d dkrâ|  d!|¡ d S |  d!|¡ |  |d" ¡ |d# d urü|  |d# ¡ |  d!¡ d S )$NrU   rT  rõ  r*  r$  r0  r5  r  r7  r'  r%  r   )Ú
errorStylerN  r‡  )rÁ  rO  r,  )Ú
allowBlankr   r#  )ÚshowDropDownr   r'  )ÚshowInputMessager   r&  )ÚshowErrorMessager   r(  Ú
errorTitler-  rf  r)  ÚpromptTitler.  ÚpromptrT  ÚdataValidationrV  r!  )r#   r±  rk  r¸  r  Ú_write_formula_1Ú_write_formula_2r“  )	r+   r­  rT  r  rT  Ú	row_firstr  Úrow_lastr  r2   r2   r3   r¿    s\   








z Worksheet._write_data_validationc                 C   sf   t |tƒr| j|Ž }d|› d}nzt|ƒ W n ty*   | d¡r(| d¡}Y nw |  d|¡ d S )Nrj  r  Úformula1)r4  r  rX  r  r*   r  rÝ  r’  ©r+   rU  r2   r2   r3   rÊ  l  s   



€ýzWorksheet._write_formula_1c                 C   óD   zt |ƒ W n ty   | d¡r| d¡}Y nw |  d|¡ d S )Nr  Úformula2©r  r*   r  rÝ  r’  rÏ  r2   r2   r3   rË  }  ó   

€ýzWorksheet._write_formula_2c                 C   s6   t | j ¡ ƒ}|sd S |D ]}|  || j| ¡ qd S r  )rì  rô   rW  Ú_write_conditional_formatting)r+   r8  Ú
cond_ranger2   r2   r3   rò  Š  s   
ÿÿz$Worksheet._write_conditional_formatsc                 C   s8   d|fg}|   d|¡ |D ]}|  |¡ q|  d¡ d S )NrT  ÚconditionalFormatting)r  Ú_write_cf_ruler“  )r+   rÕ  Úparamsr  Úparamr2   r2   r3   rÔ  –  s
   
z'Worksheet._write_conditional_formattingc                 C   s  d|d fg}d|v r|d d ur|  d|d f¡ |  d|d f¡ | d¡r-|  d¡ |d dkrg|  d|d	 f¡ |  d
|¡ d|v rYd|v rY|  |d ¡ |  |d ¡ n|  |d ¡ |  d
¡ d S |d dkr©t d|d	 ¡rz|  d¡ t d|d	 ¡r‡|  d¡ t d|d	 ¡r¡t d|d	 ¡}|  d| d¡f¡ |  d
|¡ d S |d dkrÜd	|v r¾|d	 dkr¾|  d¡ d|v rÇ|  d¡ |d pÌd}|  d|f¡ |  d
|¡ d S |d dkrê|  d
|¡ d S |d dkrø|  d
|¡ d S |d d ks|d d!ks|d d"ks|d d#kr:|  d|d	 f¡ |  d$|d f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d&kr^|  d&|d	 f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d'ksz|d d(ksz|d d)ksz|d d*krŽ|  d
|¡ |  |d% ¡ |  d
¡ d S |d d+kr§|  d
|¡ |  	|¡ |  d
¡ d S |d d,krË|  d
|¡ |  
|¡ | d-¡rÄ|  |¡ |  d
¡ d S |d d.kræ|  d
|¡ |  |d	 ¡ |  d
¡ d S |d d/krÿ|  d
|¡ |  |¡ |  d
¡ d S d S )0Nr5  rJ   ÚdxfIdrÍ  rr  )Ú
stopIfTruer   r~  r'  r  ÚcfRuler"  r!  rV  r€  Úbelow)r€  r   r;  )ÚequalAverager   z[123] std devz([123]) std devr  r   r†  r#  )rÜ  r   r™  )r‡  r   rc  Úrankr‚  r„  r›  rÏ  r  rž  r„  rU  r‰  r‹  r  r  r‘  rÑ  r•  rÎ  r–  r—  )rk  r±  r  Ú_write_formula_elementr“  r  rZ  Úgroupr¸  Ú_write_color_scaleÚ_write_data_barÚ_write_data_bar_extÚ_write_icon_set)r+   rØ  r  r  rß  r2   r2   r3   r×  Ÿ  s–   









ýzWorksheet._write_cf_rulec                 C   rÐ  )Nr  rU  rÒ  rÏ  r2   r2   r3   rà    rÓ  z Worksheet._write_formula_elementc                 C   sœ   |   d¡ |  |d |d ¡ |d d ur|  |d |d ¡ |  |d |d ¡ |  d|d	 ¡ |d
 d ur?|  d|d
 ¡ |  d|d ¡ |  d¡ d S )NrÑ  re  rm  rd  rk  rc  ri  r  rl  rj  rh  )r  Ú_write_cfvorÂ  r“  )r+   rÙ  r2   r2   r3   râ    s   
zWorksheet._write_color_scalec                 C   sž   g }d|v r|  d|d f¡ d|v r|  d|d f¡ | d¡r&|  d¡ |  d|¡ |  |d |d	 ¡ |  |d
 |d ¡ |  d|d ¡ |  d¡ d S )Nrq  Ú	minLengthrp  Ú	maxLengthrb  ©Ú	showValuer   r•  re  rm  rc  ri  r  rf  )rk  r±  r  ræ  rÂ  r“  )r+   rÙ  r  r2   r2   r3   rã  -  s   

zWorksheet._write_data_barc                 C   sp   | j d }t| jƒd }d||f }||d< | j |¡ |  d¡ |  d¡ |  d|¡ |  d¡ |  d¡ d S )Nr   z{DA7ABA51-AAAA-BBBB-%04X-%012X}ÚguidÚextLstz&{B025F937-C7B1-47D3-B67F-A62EFF666E3E}zx14:idÚext)re   rB  rõ   rk  r  Ú
_write_extr’  r“  )r+   rÙ  Úworksheet_countÚdata_bar_countrë  r2   r2   r3   rä  D  s   



zWorksheet._write_data_bar_extc                 C   sŒ   g }|d dkrd|d fg}|  d¡r| d¡ |  d¡r#| d¡ |  d|¡ t|d ƒD ]}|  |d	 |d
 |d ¡ q/|  d¡ d S )Nrn  r½  r—  ro  ré  rv  )r"  r   ra  r5  rV  r  )r±  rk  r  Úreversedræ  r“  )r+   rÙ  r  Úiconr2   r2   r3   rå  V  s   



zWorksheet._write_icon_setc                 C   s>   d|fg}|d ur|  d|f¡ |r|  d¡ |  d|¡ d S )Nr5  r°  )Úgter   Úcfvorµ  )r+   Úcf_typer°  r  r  r2   r2   r3   ræ  l  s   

zWorksheet._write_cfvoc                 C   s   ||fg}|   d|¡ d S r×  r|  rØ  r2   r2   r3   rÂ  x  r¡  zWorksheet._write_colorc                 C   s   | j D ]}| j|Ž  qd S r  )rw   Ú_write_selection)r+   Ú	selectionr2   r2   r3   r  ~  s   
ÿzWorksheet._write_selectionsc                 C   sJ   g }|r|  d|f¡ |r|  d|f¡ |r|  d|f¡ |  d|¡ d S )NrR  Ú
activeCellrT  r÷  rµ  )r+   rR  rS  rT  r  r2   r2   r3   rö  ƒ  s   zWorksheet._write_selectionc                 C   s6   | j }|sd S |d dkr| j|Ž  d S | j|Ž  d S )Nr  r‡  )r|   Ú_write_split_panesÚ_write_freeze_panes)r+   r|   r2   r2   r3   r  ’  s   zWorksheet._write_panesc                 C   sJ  g }|}|}t ||ƒ}	d}
d}d}d}| jr!| jd \}}}g | _|rM|rMd}
t |dƒ}t d|ƒ}| j d||g¡ | j d||g¡ | j d||g¡ n|r[d}
| j d||g¡ nd}
| j d||g¡ |dkrmd}n	|dkrtd}nd	}|r| d
|f¡ |rˆ| d|f¡ | d|	f¡ | d|
f¡ | d|f¡ |  d|¡ d S )NrU   r   ÚbottomRightÚtopRightÚ
bottomLeftÚfrozenr   ÚfrozenSplitr9   ÚxSplitÚySplitrü  Ú
activePaneÚstaterR  )r$   rw   rk  r¸  )r+   r#  rD   r\  r]  r^  r  Úy_splitÚx_splitr{   r}   r  rS  rT  rF   Úrow_cellÚcol_cellr2   r2   r3   rú  ž  sH   


zWorksheet._write_freeze_panesc                 C   s¢  g }d}d}d}	d}
|}|}| j r| j d \}}	}
g | _ d}|r(td| d ƒ}|r/|  |¡}||krS||krStd|d d d  ƒ}td|d	 d d
 d d  ƒ}t||ƒ}|s^|}	|}
|rŠ|rŠd}t|dƒ}td|ƒ}| j  d||g¡ | j  d||g¡ | j  d|	|
g¡ n|r˜d}| j  d|	|
g¡ nd}| j  d|	|
g¡ |r®| d|d›f¡ |r¹| d|d›f¡ | d|f¡ |rÉ| d|f¡ |  d|¡ d S )NFrU   r   Tr\   i,  rÕ  r[   é†  rV   r  r^   rû  rü  rý  r   rQ  r  rü  r  rR  )rw   r)   Ú_calculate_x_split_widthr$   rk  r¸  )r+   r#  rD   r\  r]  rF   r  Úhas_selectionr}   rS  rT  r  r  r{   r  r  r2   r2   r3   rù  Ö  sT   
 


zWorksheet._write_split_panesc                 C   sZ   d}d}|dk rt |||  d ƒ}n
t || d ƒ| }|d d }|d }|d }|S )	NrÚ  rë  r   rÕ  rV   r  r\   r  )r)   )r+   rÝ  rt  ru  rv  ÚpointsÚtwipsr2   r2   r3   r	    s   z"Worksheet._calculate_x_split_widthc                 C   s^   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  jd7  _|  | j¡ q|  d¡ d S )Nr  Ú
tablePartsr   )rç   rB  r  rÚ   Ú_write_table_partr“  )r+   rç   r  r  rF   r2   r2   r3   r   4  s   þÿzWorksheet._write_table_partsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr  r  Ú	tablePartr·  rº  r2   r2   r3   r  M  s   þÿzWorksheet._write_table_partc                 C   sP   t | jƒ}t | jƒ}|s|sd S |  d¡ |r|  ¡  |r!|  ¡  |  d¡ d S )Nrì  )rB  rõ   rè   r  Ú_write_ext_list_data_barsÚ_write_ext_list_sparklinesr“  )r+   Úhas_data_barsÚhas_sparklinesr2   r2   r3   r  [  s   


zWorksheet._write_ext_listc                 C   sB   |   d¡ |  d¡ | jD ]}|  |¡ q|  d¡ |  d¡ d S )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsrí  )rî  r  rõ   Ú"_write_conditional_formatting_2010r“  )r+   r”  r2   r2   r3   r  n  s   



z#Worksheet._write_ext_list_data_barsc                 C   sì   d}d|fg}|   d|¡ |  |¡ |  |¡ |  |d |d ¡ |  |d |d ¡ |d s6|  |d	 ¡ |d
 sA|  |d ¡ |d sP|d sP|  |d ¡ |d dkr]|  |d ¡ |  d¡ |  d¡ |  	d|d ¡ |  d¡ d S )Nú3http://schemas.microsoft.com/office/excel/2006/mainúxmlns:xmzx14:conditionalFormattingrÕ  rm  r×  ri  rt  rx  r{  rz  r}  r|  ry  r0  rw  úx14:dataBarú
x14:cfRuleúxm:sqrefrr  )
r  Ú_write_x14_cf_ruleÚ_write_x14_data_barÚ_write_x14_cfvoÚ_write_x14_border_colorÚ_write_x14_negative_fill_colorÚ _write_x14_negative_border_colorÚ_write_x14_axis_colorr“  r’  )r+   r”  Úxmlns_xmr  r2   r2   r3   r  |  s,   


ÿþ

z,Worksheet._write_conditional_formatting_2010c                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nr•  rë  r5  rù  r  ©r  )r+   r”  Ú	rule_typerë  r  r2   r2   r3   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r)|  d¡ |d	 dkr4|  d¡ |d r=|  d¡ |d sJ|d sJ|  d¡ |d dkrU|  d¡ |d dkr`|  d¡ |  d|¡ d S )Nr   rZ   rç  rè  rt  )Úborderr   rg  )Úgradientr   rs  r”  )r™  ÚleftToRightr•  )r™  rö  r{  )ÚnegativeBarColorSameAsPositiver   r}  )Ú$negativeBarBorderColorSameAsPositiver   ry  Úmiddle)ÚaxisPositionr)  r0  )r*  r0  r  )rk  r  )r+   r”  rq  rp  r  r2   r2   r3   r  ±  s2   þ




ÿþ


zWorksheet._write_x14_data_barc                 C   sH   d|fg}|dv r|   d|¡ d S |  d|¡ |  d|¡ |  d¡ d S )Nr5  )rÜ  rÛ  rÔ  rÖ  zx14:cfvoúxm:f)r¸  r  r’  r“  )r+   r#  rV  r  r2   r2   r3   r  Ø  s   
zWorksheet._write_x14_cfvoc                 C   r   )Nr  zx14:borderColorr|  ©r+   r  r  r2   r2   r3   r  ã  ó   
z!Worksheet._write_x14_border_colorc                 C   r   )Nr  zx14:negativeFillColorr|  r,  r2   r2   r3   r  è  r-  z(Worksheet._write_x14_negative_fill_colorc                 C   r   )Nr  zx14:negativeBorderColorr|  r,  r2   r2   r3   r  í  r-  z*Worksheet._write_x14_negative_border_colorc                 C   r   )Nr  zx14:axisColorr|  r,  r2   r2   r3   r   ò  r-  zWorksheet._write_x14_axis_colorc                 C   sÚ   |   d¡ |  ¡  t| jƒD ]R}|  |¡ |  |d ¡ |  |d ¡ |  ¡  |  |d ¡ |  	|d ¡ |  
|d ¡ |  |d ¡ |  |d ¡ |d	 rV|  d
|d	 ¡ |  |¡ |  d¡ q|  d¡ |  d¡ d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}r0  r2  r1  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_lowr’  Ú_write_sparklinesr“  )r+   rF  r2   r2   r3   r  ÷  s$   



z$Worksheet._write_ext_list_sparklinesc                 C   sn   |   d¡ t|d ƒD ]$}|d | }|d | }|   d¡ |  d|¡ |  d|¡ |  d¡ q|  d¡ d S )Nzx14:sparklinesr  r8  r  zx14:sparkliner+  r  )r  rr  r’  r“  )r+   rF  r  rL  r#  r2   r2   r3   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ê  Ú	xmlns_x14r  r2   r2   r3   rî  6  s   þzWorksheet._write_extc                 C   s   d}d|fg}|   d|¡ d S )Nr  r  r/  r"  )r+   r!  r  r2   r2   r3   r0  B  s   
z!Worksheet._write_sparkline_groupsc                 C   sæ  |  d¡}g }|  d¡d ur&|d dkrd|d< n| d|d f¡ d|d< |  d¡d urE|d dkr8d|d< n| d	|d f¡ d|d< |d
 dkrT| d
|d
 f¡ |  d¡rb| d|d f¡ |  d¡rl| d¡ |ru| d|f¡ |  d¡r| d¡ |  d¡r‰| d¡ |  d¡r“| d¡ |  d¡r| d¡ |  d¡r§| d¡ |  d¡r±| d¡ |  d¡r»| d¡ |  d¡rÅ| d ¡ |  d¡rÓ| d!|d f¡ |  d¡rá| d"|d f¡ |  d#¡rë| d$¡ |  d%|¡ d S )&Nr@  rÛ  rá  Úcust_maxÚ	manualMaxr4  rÜ  Úcust_minÚ	manualMinr5  r4  r   Ú
lineWeightr$  )ÚdateAxisr   ÚdisplayEmptyCellsAsr!  )r!  r   r:  )r:  r   r;  )r;  r   r=  )r=  r   r>  )r>  r   r<  )r<  r   r  )ÚdisplayXAxisr   rx   )ÚdisplayHiddenr   ÚminAxisTypeÚmaxAxisTyper"  rõ  r.  )r±  rk  r  )r+   r­  r@  r  r2   r2   r3   r1  J  sV   

























z Worksheet._write_sparkline_groupc                 C   sh   g }|  d¡r| d|d f¡ |  d¡r| d|d f¡ |  d¡r,| d|d f¡ |  ||¡ d S )Nr  r±  Útint)r±  rk  r¸  )r+   Úelementri  r  r2   r2   r3   Ú_write_spark_color£  s   


zWorksheet._write_spark_colorc                 C   ó   |   d|¡ d S )Nzx14:colorSeries©rJ  rh  r2   r2   r3   r2  ²  r  zWorksheet._write_color_seriesc                 C   rK  )Nzx14:colorNegativerL  rh  r2   r2   r3   r3  ¶  r  zWorksheet._write_color_negativec                 C   s   |   dddi¡ d S )Nzx14:colorAxisr  ÚFF000000rL  r  r2   r2   r3   r4  º  s   zWorksheet._write_color_axisc                 C   rK  )Nzx14:colorMarkersrL  rh  r2   r2   r3   r5  ¾  r  zWorksheet._write_color_markersc                 C   rK  )Nzx14:colorFirstrL  rh  r2   r2   r3   r6  Â  r  zWorksheet._write_color_firstc                 C   rK  )Nzx14:colorLastrL  rh  r2   r2   r3   r7  Æ  r  zWorksheet._write_color_lastc                 C   rK  )Nzx14:colorHighrL  rh  r2   r2   r3   r8  Ê  r  zWorksheet._write_color_highc                 C   rK  )Nzx14:colorLowrL  rh  r2   r2   r3   r9  Î  r  zWorksheet._write_color_lowc                 C   s   ddg}|   d|¡ d S )N)ÚfontIdÚ0)r5  ÚnoConversionÚ
phoneticPrr|  r  r2   r2   r3   rï  Ò  s   þzWorksheet._write_phonetic_prc                 C   sT  | j sd S |  d¡ | j  d¡r| j d }|  d|¡ | j  d¡r,| j d }|  d|¡ | j  d¡r=| j d }|  d|¡ | j  d¡rN| j d }|  d	|¡ | j  d
¡r_| j d
 }|  d|¡ | j  d¡rp| j d }|  d|¡ | j  d¡r| j d }|  d|¡ | j  d¡r’| j d }|  d|¡ | j  d¡r£| j d }|  d|¡ |  d¡ d S )NÚignoredErrorsrÒ  ÚnumberStoredAsTextrÊ  Ú	evalErrorrÌ  rU  rË  ÚformulaRangerÍ  ÚunlockedFormularÐ  ÚemptyCellReferencerÑ  ÚlistDataValidationrÎ  ÚcalculatedColumnrÏ  ÚtwoDigitTextYear)r  r  r±  Ú_write_ignored_errorr“  )r+   Úignored_ranger2   r2   r3   rû  Û  s>   









zWorksheet._write_ignored_errorsc                 C   s    d|f|dfg}|   d|¡ d S )NrT  r   ÚignoredErrorr|  )r+   r%  r\  r  r2   r2   r3   r[     s   þzWorksheet._write_ignored_errorr  ry  )F)Nr   r_  )NNN)rã  )NF)r   r   )r   r   r   r   )NNr   )NN)rZ   )rU   N)r   )rW   rW   rX   rX   )rU   NN)FF)r   )ùrï  Ú
__module__Ú__qualname__Ú__doc__rc   r%  r6   r*  r(  r<  r!  rJ  r   rR  r  rW  r  rA   rd  r[  r]  Ústaticmethodrp  r\  ru  r3  rz  r-  r  r  r†  r…  r   r£  r¥  r¯  rµ  r¾  rÂ  rÄ  rÆ  rÉ  rÌ  rÍ  rÏ  rÑ  rÓ  rÕ  r×  rH   rà  râ  rþ  r  r  r  r
  r  r  r  r`  rå  r  rP  rU  rV  r[  r_  rb  re  rf  rg  rj  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  rA  rv  r  r  r  r  r  r|  r¨  r   r)   rU  r[  r^  r`  re  r=  rf  rq  rr  rá  r  r   r}  r   r  rŠ  r‹  r  r  rE  r¡  rX  r¥  rM  r\  r‘  r¾  rÀ  rÆ  rÅ  rÚ  rÛ  rÚ  rå  rç  rè  rñ  ré  rê  r  rë  rì  rö  r÷  rõ  rø  r:  r;  r  rD  r@  rA  rC  rB  r^  r]  ræ  rk  ri  rj  rù  rú  rv  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   r  r:  rî  r0  r1  rJ  r2  r3  r4  r5  r6  r7  r8  r9  rï  rû  r[  Ú__classcell__r2   r2   r  r3   rS   Ç   sZ    ]&
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	-rS   )Hr/  rN  rÝ  r  rÛ  Úcollectionsr   r   r2  r   Ú	fractionsr   Ú	functoolsr   Úior   r	   r
   Úwarningsr   Úxlsxwriter.commentsr   Úxlsxwriter.imager   Úxlsxwriter.urlr   r   Úxlsxwriter.vmlr   rU   r   rë   r   r   r   Ú
exceptionsr   r   rJ   r   rZ  r   Úutilityr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r  ÚVERBOSErY  r6   rA   rH   rS  r³  rP  rE  r{  r^  rw  r–  rq  rS   r2   r2   r2   r3   Ú<module>   sT   8á( 
 






ÿ
