o
    ]oiíc ã                   @   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 d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddl+m,Z, ddl+m-Z- e .d ej/¡Z0d!d"„ Z1d#d$„ Z2d%d&„ Z3ed'd(ƒZ4ed)d*ƒZ5ed+d,ƒZ6ed-d.ƒZ7ed/d0ƒZ8ed1d*ƒZ9ed2d3ƒZ:ed4d5ƒZ;ed6d7ƒZ<G d8d9„ d9ejƒZ=dS ):é    N)Údefaultdict)Ú
namedtuple)ÚDecimal)ÚFraction©Úwraps)ÚStringIO)Úisinf)Úisnan)Úwarné   )Ú	xmlwriter)ÚFormat)ÚDrawing)ÚShape)Ú	XMLwriter)Úxl_rowcol_to_cell)Úxl_rowcol_to_cell_fast)Úxl_cell_to_rowcol)Úxl_col_to_name)Úxl_range©Úxl_color)Úxl_pixel_width)Úget_sparkline_style)Úsupported_datetime)Údatetime_to_excel_datetime)Úget_image_properties)Úpreserve_whitespace)Úquote_sheetname)ÚDuplicateTableName)ÚOverlappingRangeaÌ  
    \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ÚkwargsZ	first_argÚnew_args©Úmethod© ú\/var/www/html/kuke-dev/django-kuke/venv/lib/python3.10/site-packages/xlsxwriter/worksheet.pyÚcell_wrapper_   s   €ýz'convert_cell_args.<locals>.cell_wrapperr   ©r+   r.   r,   r*   r-   Úconvert_cell_argsX   s   r0   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_2Zrow_1Úcol_1Zrow_2Úcol_2r)   r*   r,   r-   r.   w   s    €
ôz(convert_range_args.<locals>.cell_wrapperr   r/   r,   r*   r-   Úconvert_range_argsp   s   r9   c                    r"   )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c           	         s   z
|r	t |d ƒ W n2 ty<   dd„ |d  d¡D ƒ\}}t|ƒ\}}t|ƒ\}}||g}| |dd … ¡ |}Y nw ˆ | g|¢R i |¤ŽS )Nr   c                 S   s   g | ]}|d  ‘qS )Ú1r,   )Ú.0Úcolr,   r,   r-   Ú
<listcomp>Ÿ   s    z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>r1   r   r2   )	r&   r'   r(   r5   r6   Ú_r7   r8   r)   r*   r,   r-   Úcolumn_wrapper—   s   €ù	z+convert_column_args.<locals>.column_wrapperr   )r+   r?   r,   r*   r-   Úconvert_column_args   s   r@   ÚStringzstring, formatÚNumberznumber, formatÚBlankÚformatÚBooleanzboolean, formatÚFormulazformula, format, valueÚDatetimeÚArrayFormulaz$formula, format, value, range, atypeÚ
RichStringzstring, format, raw_stringÚErrorzerror, format, valuec                       s¶
  e Zd ZdZ‡ fdd„Zdd„ Zedd„ ƒZdd	„ ZedÛdd„ƒZ	dÛdd„Z
edÛdd„ƒZdÛdd„ZedÛdd„ƒZdÛdd„ZedÜdd„ƒZdÜdd„Ze	
	dÜdd„ƒZe	
	dÜdd„ƒZdÝd!d"„Z	
		#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ßd0d1„Zed2d3„ ƒZd4d5„ Zd6d7„ ZedÛ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%dFdG„ Z&dÝdHdI„Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.e/	
dßdXdY„ƒZ0e/	
dßdZd[„ƒZ1d\d]„ Z2dßd^d_„Z3dßd`da„Z4dàdbdc„Z5e	
dÛddde„ƒZ6edfdg„ ƒZ7dhdi„ Z8djdk„ Z9edÛdldm„ƒZ:e	
dÛdndo„ƒZ;edÛdpdq„ƒZ<edÛdrds„ƒZ=edtdu„ ƒZ>edádvdw„ƒZ?	dâdydz„Z@edãd{d|„ƒZAedäd}d~„ƒZBdåd€d„ZCd‚dƒ„ ZDd„d…„ ZEd†d‡„ ZFdæd‰dŠ„ZGdäd‹dŒ„ZHedÛddŽ„ƒZIdd„ ZJd‘d’„ ZKdçd“d”„ZLdçd•d–„ZMd—d˜„ ZNd™dš„ ZOd›dœ„ ZPdèdŸd „ZQdéd¡d¢„ZRdéd£d¤„ZSdÛd¥d¦„ZTe/dÛd§d¨„ƒZUdçd©dª„ZVd«d¬„ ZWd­d®„ ZXed¯d°„ ƒZYd±d²„ ZZd³d´„ Z[dµd¶„ Z\d·d¸„ Z]d¹dº„ Z^d»d¼„ Z_d½d¾„ Z`dÛd¿dÀ„ZadÛdÁdÂ„ZbdÃdÄ„ ZcdÅdÆ„ ZddêdÇdÈ„ZedÉdÊ„ ZfdËdÌ„ ZgdÍdÎ„ ZhdÏdÐ„ ZidÑdÒ„ ZjdÓdÔ„ ZkdÕdÖ„ Zld×dØ„ ZmdÙdÚ„ ZndÛdÜ„ ZodÝdÞ„ Zpdßdà„ Zqdádâ„ Zrdãdä„ Zsdëdådæ„Ztdëdçdè„Zudédê„ Zvdëdì„ Zwdídî„ Zxdïdð„ Zydñdò„ Zzdódô„ Z{dõdö„ Z|d÷dø„ Z}dùdú„ Z~dûdü„ Zdýdþ„ Z€dÿd „ ZdÛdd„Z‚dÛdd„Zƒdd„ Z„dd„ Z…d	d
„ Z†dd„ Z‡dd„ Zˆdd„ Z‰dd„ ZŠdÛdd„Z‹dd„ ZŒdd„ Zdd„ ZŽdd„ Zdd„ Zdd „ Z‘d!d"„ Z’d#d$„ Z“d%d&„ Z”d'd(„ Z•d)d*„ Z–d+d,„ Z—d-d.„ Z˜d/d0„ Z™d1d2„ Zšd3d4„ Z›dëd5d6„Zœd7d8„ Zdàd9d:„ZždÛd;d<„ZŸd=d>„ Z d?d@„ Z¡dAdB„ Z¢dCdD„ Z£dEdF„ Z¤dGdH„ Z¥dIdJ„ Z¦dKdL„ Z§dMdN„ Z¨dOdP„ Z©dQdR„ ZªdSdT„ Z«dUdV„ Z¬	
dßdWdX„Z­	
dßdYdZ„Z®d[d\„ Z¯d]d^„ Z°d_d`„ Z±dadb„ Z²dcdd„ Z³dedf„ Z´dgdh„ Zµdidj„ Z¶dkdl„ Z·dmdn„ Z¸dodp„ Z¹dqdr„ Zºdsdt„ Z»dudv„ Z¼dwdx„ Z½dydz„ Z¾d{d|„ Z¿d}d~„ ZÀdd€„ ZÁdd‚„ ZÂdƒd„„ ZÃd…d†„ ZÄd‡dˆ„ ZÅd‰dŠ„ ZÆd‹dŒ„ ZÇddŽ„ ZÈdd„ ZÉdÛd‘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                    s<  t 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| _0d| _1d| _2d| _3d| _4d| _5d| _6d| _7d| _8d| _9d| _:d| _;d| _<d| _=d| _>d| _?d| _@g | _Ag | _Bi | _Cg | _Dd| _Ei | _FtGtHƒ| _Id| _Jd
| _Kd| _Ld| _Md
| _Nd| _Od| _Pd| _Qd| _Rd
| _Sd
| _Td
| _Ud| _Vd| _Wd| _Xd| _Yd| _Zd| _[d| _\d| _]i | _^g | __tGtHƒ| _`g | _ai | _bi | _ci | _dd| _ed| _fd| _gtGtHƒ| _hg | _id| _jd| _kd| _lg | _md| _nd| _od| _pg | _qd| _ri | _si | _ti | _ui | _vd| _wd| _xd
| _yd| _zd| _{g | _|g | _}g | _~g | _g | _€g | _g | _‚g | _ƒg | _„g | _…g | _†g | _‡g | _ˆg | _‰i | _Šd| _‹i | _Œd| _i | _Žd| _d| _d| _‘d| _’d| _“g | _”i | _•g | _–d| _—d
| _˜d| _™d| _šd| _›tGtHƒ| _œd| _d| _žd| _Ÿd| _ d| _¡d| _¢d| _£d| _¤d| _¥d| _¦d| _§d| _¨d| _ld| _¥d| _¦d| _©d| _ªd| _«i | _¬d| _­d| _®d| _¯d| _°dS )z
        Constructor.

        Nr   Fi×  i   i @  éÿ  Ú é   r   Tçffffffæ?ç      è?ç333333Ó?éd   é   é   ç\Âõ(Ü @é@   éD   é   i  )±ÚsuperrK   Ú__init__ÚnameÚindexÚ	str_tableÚpaletteÚconstant_memoryÚtmpdirÚis_chartsheetZ
ext_sheetsZ
fileclosedÚexcel_versionÚexcel2003_styleÚ
xls_rowmaxÚ
xls_colmaxÚ
xls_strmaxÚ
dim_rowminÚ
dim_rowmaxÚ
dim_colminÚ
dim_colmaxÚcol_infoÚ
selectionsÚhiddenZactiveÚ	tab_colorÚtop_left_cellÚpanesÚactive_paneÚselectedÚpage_setup_changedÚ
paper_sizeÚorientationÚprint_options_changedÚhcenterÚvcenterÚprint_gridlinesÚscreen_gridlinesÚprint_headersÚrow_col_headersÚheader_footer_changedÚheaderÚfooterÚheader_footer_alignsÚheader_footer_scalesÚheader_imagesÚfooter_imagesÚheader_images_listÚmargin_leftÚmargin_rightÚ
margin_topÚmargin_bottomÚmargin_headerÚmargin_footerÚrepeat_row_rangeÚrepeat_col_rangeÚprint_area_rangeÚ
page_orderÚblack_whiteZdraft_qualityZprint_commentsÚ
page_startÚfit_pageÚ	fit_widthÚ
fit_heightÚhbreaksÚvbreaksÚprotect_optionsÚprotected_rangesÚnum_protected_rangesZset_colsr   ÚdictÚset_rowsÚzoomÚzoom_scale_normalÚprint_scaleÚis_right_to_leftÚ
show_zerosZleading_zerosÚoutline_row_levelÚoutline_col_levelÚoutline_styleÚoutline_belowÚoutline_rightÚ
outline_onÚoutline_changedÚoriginal_row_heightÚdefault_row_heightÚdefault_row_pixelsÚdefault_col_widthÚdefault_col_pixelsÚdefault_date_pixelsÚdefault_row_zeroedÚnamesZwrite_matchÚtableÚmergeÚmerged_cellsÚtable_cellsÚ	row_spansÚhas_vmlÚhas_header_vmlÚhas_commentsÚcommentsÚcomments_listÚcomments_authorÚcomments_visibleÚvml_shape_idÚbuttons_listÚvml_header_idÚautofilter_areaÚautofilter_refÚfilter_rangeÚ	filter_onÚfilter_colsÚfilter_typeÚfilter_cellsÚ	row_sizesÚcol_size_changedÚrow_size_changedZlast_shape_idÚ	rel_countÚhlink_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ÚshapesZ
shape_hashÚdrawingÚdrawing_relsÚdrawing_rels_idÚvml_drawing_relsÚvml_drawing_rels_idÚbackground_imageÚbackground_bytesÚ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Ú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©r&   ©Ú	__class__r,   r-   rZ   Î   s`  




zWorksheet.__init__c                 G   s2  |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 rW| jrWt d|¡sMt d|¡sMt d|¡rW| j||g|¢R Ž S | j	rz!t
|ƒ}| jsjt|ƒszt|ƒsz| j|||g|d	d … ¢R Ž W S W n	 ty„   Y nw | j||g|¢R Ž S | j||g|¢R Ž S )
NrM   ú=z{=Ú}r1   ú(ftp|http)s?://úmailto:z(in|ex)ternal:r   )Ú_write_blankrí   Ú
startswithÚ_write_formulaÚendswithrë   ÚreÚmatchÚ
_write_urlrê   Úfloatrì   r
   r	   Ú_write_numberr%   Ú_write_string)r&   ÚtokenÚrowr<   r'   Úfr,   r,   r-   Ú_write_token_as_string¨  s6   ÿ
ý
ü
û €þ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  r<   r'   r,   r,   r-   ÚwriteÍ  s   zWorksheet.writec           	      G   s  |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 zt|ƒ}| j
|||g|dd … ¢R Ž W S  tyØ   Y n t yæ   t dt|ƒ ƒ‚w zt|ƒ | j||g|¢R Ž W S  ty   t dt|ƒ ƒ‚w )Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type %s in write())Ú	TypeErrorr   rù   r  ÚboolÚ_write_booleanr  r$   r   r   r  Ústrr  ÚdatetimeÚdateÚtimeÚ	timedeltaÚ_write_datetimeÚ
isinstancer   r%   Útyper  )	r&   r  r<   r'   r  Ú
token_typeZwrite_handlerZfunction_returnr  r,   r,   r-   r  á  s^   

ü

 ÿÿ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  r<   ÚstringÚcell_formatr,   r,   r-   Úwrite_string1  ó   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Úlenrf   r_   r]   Ú_get_shared_string_indexrà   Ú_write_single_rowÚcell_string_tupler¯   )r&   r  r<   r%  r&  Ú	str_errorÚstring_indexr,   r,   r-   r  E  s   
zWorksheet._write_stringc                 C   r$  )a„  
        Write a number to a worksheet cell.

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

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

        )r  ©r&   r  r<   Únumberr&  r,   r,   r-   Úwrite_number`  ó   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ƒ‚|  ||¡rBdS | jrO|| j	krO|  
|¡ t||ƒ| j| |< dS )Nú#NUM!z1/0ú#DIV/0!z-1/0zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr*  r   )r
   r	   rì   r  ÚmathÚinfr  r,  r_   rà   r/  Úcell_number_tupler¯   r3  r,   r,   r-   r  s  s$   
ÿÿ
zWorksheet._write_numberc                 C   r$  )aè  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

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

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

        )r  ©r&   r  r<   Úblankr&  r,   r,   r-   Ú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*  )r,  r_   rà   r/  Úcell_blank_tupler¯   r<  r,   r,   r-   r  £  s   
zWorksheet._write_blankr   c                 C   s   |   |||||¡S )aô  
        Write a formula to a worksheet cell.

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

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

        )r  ©r&   r  r<   Úformular&  Úvaluer,   r,   r-   Úwrite_formulaµ  s   zWorksheet.write_formulac              	   C   s´   |   ||¡rdS |d u s|dkrtdƒ dS t |¡r&|  |||||||¡S | d¡r;| d¡r;|  |||||||¡S |  |¡}| j	rM|| j
krM|  |¡ t|||ƒ| j| |< dS )Nr*  rM   zFormula can't be None or emptyÚ{r  r   )r,  r   Úre_dynamic_functionÚsearchÚwrite_dynamic_array_formular  r  Ú_write_array_formulaÚ_prepare_formular_   rà   r/  Úcell_formula_tupler¯   r@  r,   r,   r-   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)rE  rF  rG  rH  )r&   Ú	first_rowÚ	first_colÚlast_rowÚlast_colrA  r&  rB  r,   r,   r-   Úwrite_array_formulaë  s   
ÿøzWorksheet.write_array_formulac           	   
   C   s*   |   |||||||d¡}|dkrd| _|S )a|  
        Write a dynamic array formula to a worksheet cell/range.

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

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

        Údynamicr   T)rH  rû   )	r&   rL  rM  rN  rO  rA  r&  rB  Úerrorr,   r,   r-   rG    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 (=  NrD  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&   rA  Zexpand_future_functionsr,   r,   r-   rI  F  sT  



ÿÿzWorksheet._prepare_formularK  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*  r1   r   r   )
r,  r   rI  r_   rà   r/  Úcell_arformula_tupler¯   Úranger  )r&   rL  rM  rN  rO  rA  r&  rB  ÚatypeÚ
cell_ranger  r<   r,   r,   r-   rH  ü  s<   

ÿþÿ


ÿ€þzWorksheet._write_array_formulac                 C   r$  )aŽ  
        Write a date or time to a worksheet cell.

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

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

        )r   )r&   r  r<   r  r&  r,   r,   r-   Úwrite_datetime2  r6  zWorksheet.write_datetimec                 C   sZ   |   ||¡rdS | jr|| jkr|  |¡ |  |¡}|d u r!| j}t||ƒ| j| |< dS )Nr*  r   )r,  r_   rà   r/  Ú_convert_date_timerî   Úcell_datetime_tupler¯   )r&   r  r<   r  r&  r4  r,   r,   r-   r   E  s   

zWorksheet._write_datetimec                 C   r$  )aˆ  
        Write a boolean value to a worksheet cell.

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

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

        )r  )r&   r  r<   Úbooleanr&  r,   r,   r-   Úwrite_booleanZ  r6  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   )r,  r_   rà   r/  Úcell_boolean_tupler¯   )r&   r  r<   r[  r&  rB  r,   r,   r-   r  m  s   
zWorksheet._write_booleanc                 C   s   |   ||||||¡S )aˆ  
        Write a hyperlink to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )r  )r&   r  r<   Úurlr&  r%  Útipr,   r,   r-   Ú	write_urlˆ  s   zWorksheet.write_urlc                 C   sæ  |   ||¡rdS |d u r|}d}| d¡r#| dd¡}| dd¡}d}d}| d¡rD| dd¡}| dd	¡}| dd¡}| dd	¡}d
}| dd¡}d}	t|ƒ| jkrYtdƒ dS |}
|dkr•d|v rl| dd¡\}}
nd }
|  |¡}|
d ur~|s~|  |
¡}
t 	d|¡sŠt 	d|¡rŽd| }t 
dd|¡}|
p˜d}| j}t|ƒ|ks¨t|ƒ|kr²td||f ƒ dS |  jd7  _| jdkrÆtd| ƒ dS |d u rÍ| j}| jså| jrÝ|| jkrÝ|  |¡ |  ||||¡ |||
|dœ| j| |< |	S )Nr*  r   ú	internal:rM   é   Fú	external:ú/ú\Tr  r   zFIgnoring URL since it exceeds Excel's string limit of 32767 charactersr+  ú#ú\w:ú\\úfile:///z^\.\\zfIgnoring URL '%s' with link or location/anchor > %d characters since it exceeds Excel's limit for URLSéýÿÿÿiúÿ  zNIgnoring URL '%s' since it exceeds Excel's limit of 65,530 URLS per worksheet.éüÿÿÿ)Ú	link_typer^  r  r_  )r,  r  Úreplacer-  rf   r   r3   Ú_escape_urlr	  r
  rS  rñ   rÉ   rï   rý   r_   rà   r/  r  ré   )r&   r  r<   r^  r&  r%  r_  rl  Zexternalr1  Zurl_strZtmp_url_strZmax_urlr,   r,   r-   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  r,   r,   r-   Úwrite_rich_string	  s   zWorksheet.write_rich_stringc                 G   sü  t |ƒ}d }d}d}|  ||¡rdS t|d tƒr| ¡ }tƒ }tƒ | _| j |¡ tƒ }	g }
d}d}t	|ƒdkr?t
dƒ dS |D ]G}t|tƒsn|dkrW|
 |	¡ |
 |¡ n|
 |¡ |dkrgt
dƒ  d	S ||7 }d
}n|dkr}|dkr}t
dƒ  dS |
 |¡ d}|d7 }qAt|
d tƒs–| j d¡ |
D ],}t|tƒr«| j d¡ |  |¡ q˜g }t|ƒr¶| d¡ | j d||¡ | j d¡ q˜| jj ¡ }t	|ƒ| jkrØt
dƒ dS | jsâ| j |¡}n|}| jrñ|| jkrñ|  |¡ t|||ƒ| j| |< dS )Nr   rM   r*  rD   rb  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().rk  r%  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().rj  r   Úr)z	xml:spaceÚpreserveÚtzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().r+  )Úlistr,  r!  r   Úpopr   r   rß   Z_set_filehandler-  r   ÚappendÚ_xml_start_tagÚ_write_fontr   Ú_xml_data_elementÚ_xml_end_tagÚfhÚgetvaluerf   r_   r]   r.  rà   r/  Úcell_rich_string_tupler¯   )r&   r  r<   r'   Útokensr&  r2  Ú
raw_stringr|  ÚdefaultÚ	fragmentsÚpreviousÚposr  Ú
attributesr%  r,   r,   r-   ro  !  s†   ÿ


ÿÿ



ÿ
ÿzWorksheet._write_rich_stringc                 C   s   || j |< dS )a"  
        Add a callback function to the write() method to handle user defined
        types.

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

        N)rù   )r&   Z	user_typeÚuser_functionr,   r,   r-   Úadd_write_handlerš  s   zWorksheet.add_write_handlerc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }qdS )a†  
        Write a row of data starting from (row, col).

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

        r   r   r  ©r&   r  r<   Údatar&  r  rR  r,   r,   r-   Ú	write_row©  ó   
zWorksheet.write_rowc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }qdS )a‰  
        Write a column of data starting from (row, col).

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

        r   r   r  rˆ  r,   r,   r-   Úwrite_columnÀ  r‹  zWorksheet.write_columnc                 C   sþ   |   ||dd¡rtd||f ƒ dS |du ri }| dd¡}| dd¡}| dd	¡}| d
d	¡}| dd¡}	| dd¡}
| dd¡}| dd¡}| dd¡}| dd¡}| d|¡}|sjtj |¡sjtd| ƒ dS | j ||||||||	|
||||g¡ 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).
            filename: Path and filename for in supported formats.
            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 (%d, %d).r*  NÚx_offsetr   Úy_offsetÚx_scaler   Úy_scaler^  r_  Úobject_positionrb  Ú
image_dataÚdescriptionÚ
decorativeFZpositioningúImage file '%s' not found.)r,  r   ÚgetÚosÚpathÚexistsrÔ   rw  )r&   r  r<   ÚfilenameÚoptionsr  rŽ  r  r  r^  r_  Úanchorr’  r“  r”  r,   r,   r-   Úinsert_image×  sH   óÿzWorksheet.insert_imagec                 C   s  |   ||¡rtd||f ƒ dS |du ri }| dd¡}| dd¡}| dd¡}| dd¡}| dd¡}	| d	d
¡}
|sJtj |¡sJtd| ƒ dS |rc|du rS| j}d| _|  ||||d|¡ d
| _t	||ƒ\}}}}}}}||||	|
g}| 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).
            filename: Path and filename for in supported formats.
            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 (%d, %d).r*  Nr^  r_  r&  r’  r“  r”  Fr•  Tú#VALUE!r   )r,  r   r–  r—  r˜  r™  rï   rý   r`  r   Úembedded_imagesZget_image_indexÚcell_error_tupler¯   )r&   r  r<   rš  r›  r^  r_  r&  r’  r“  r”  Ú
image_typer>   ÚdigestÚimageZimage_indexr,   r,   r-   Úembed_image  sB   øzWorksheet.embed_imagec                 C   s¶   |   ||dd¡rtd||f ƒ 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 (%d, %d).r*  NrM   r  r   rŽ  r  r   r  r‘  r“  r”  F)r,  r   r–  r×   rw  )r&   r  r<   Útextr›  r  rŽ  r  r  rœ  r“  r”  r,   r,   r-   Úinsert_textboxR  s:   õÿzWorksheet.insert_textboxc                 C   s  |   ||dd¡rtd||f ƒ dS |du ri }|js"|jr(|jjr(tdƒ dS d|_|jr2d|j_| dd¡}| dd¡}| d	d
¡}| dd
¡}| dd
¡}	| dd¡}
| dd¡}|jd
krd|j}|jd
krl|j}|jrr|j}|jrx|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 (%d, %d).r*  Nz7Chart cannot be inserted in a worksheet more than once.r  r   rŽ  r  r   r  r‘  r“  r”  F)r,  r   Zalready_insertedÚcombinedr–  r  r  r  rŽ  rÓ   rw  )r&   r  r<   Úchartr›  r  rŽ  r  r  rœ  r“  r”  r,   r,   r-   Úinsert_chart†  sP   

öÿzWorksheet.insert_chartc                 C   sT   |du ri }|   ||¡rdS t|ƒ| jkrdS d| _d| _||||g| 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.

        Nr*  r+  r   r   )r,  r-  rf   r´   r¶   r·   )r&   r  r<   Úcommentr›  r,   r,   r-   Úwrite_commentÍ  s   zWorksheet.write_commentc                 C   ó
   d| _ dS )z†
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rº   rþ   r,   r,   r-   Úshow_commentsñ  ó   
zWorksheet.show_commentsc                 C   s0   |st j |¡std| ƒ dS || _|| _dS )zî
        Set a background image for a worksheet.

        Args:
            filename:       Path and filename for in supported formats.
            is_byte_stream: File is a stream of bytes.
        Returns:
            Nothing.

        r•  r*  N)r—  r˜  r™  r   rÞ   rÝ   )r&   rš  Zis_byte_streamr,   r,   r-   Úset_backgroundþ  s
   
zWorksheet.set_backgroundc                 C   ó
   || _ dS )z¦
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)r¹   )r&   Úauthorr,   r,   r-   Úset_comments_author  r®  zWorksheet.set_comments_authorc                 C   s   | j S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )r[   rþ   r,   r,   r-   Ú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)rm   rr   r\   rô   Zactivesheetrþ   r,   r,   r-   Ú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)rr   rm   rþ   r,   r,   r-   Úselect>  s   
zWorksheet.selectc                 C   rµ  )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N©rm   rr   rþ   r,   r,   r-   ÚhideO  ó   
zWorksheet.hidec                 C   rµ  )z˜
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        rb  r   Nr·  rþ   r,   r,   r-   Úvery_hidden_  r¹  zWorksheet.very_hiddenc                 C   s   d| _ | j| j_dS )aJ  
        Set current worksheet as the first visible sheet. This is necessary
        when there are a large number of worksheets and the activated
        worksheet is not visible on the screen.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rm   r\   rô   Z
firstsheetrþ   r,   r,   r-   Úset_first_sheeto  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 |	dk rHd}	|	d	krNd	}	|	| jkrV|	| _t||d
 ƒD ]}||||	|dg| j|< q]d| _dS )a  
        Set the width, and other properties of a single column or a
        range of columns.

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

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

        NTrm   FÚ	collapsedÚlevelr   r*  é   r   )r–  r,  r¡   rU  rk   rÆ   )r&   rM  rO  Úwidthr&  r›  Ú
ignore_rowrm   r¼  r½  Ú
ignore_colr<   r,   r,   r-   Ú
set_column  s2   

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&   rM  rO  r¿  r&  r›  r,   r,   r-   Úset_column_pixelsÂ  s   
zWorksheet.set_column_pixelsc                 C   sº  | j r	tdƒ dS | jdu rdS i }t| jj| jjjd}t| j| jd ƒD ]Ò}| j	 
|¡s/q&t| j| jd ƒD ]¿}|| j	| v r÷| j	| | }|jj}d}|dv r}|dkr^|j}|| }	n|j}	d|	vrjt|	ƒ}no|	 d¡D ]}	t|	ƒ}
|
|kr{|
}qon\|d	kr‹d
tt|jƒƒ }nN|dkr“| j}nF|dkr |jrd}n<d}n9|dks¨|dkrÙt|jttfƒr¿|jdkr¾d
tt|jƒƒ }nt|jtƒrËt|jƒ}nt|jtƒrÙ|jr×d}nd}| j 
||f¡ré|dkré|d7 }| 
|d¡}||kr÷|||< q8q&| ¡ D ]]\}}|  |d
 ¡}|dkrd}| j  
|¡rO| j  
|¡}|d }|d }|dur@|s@||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:
            None.

        Returns:
            Nothing.

        z1Autofit is not supported in constant_memory mode.N)Úkeyr   r   ©rA   rI   rA   Ú
rB   r¾  rG   rE   é   é$   rF   rH   é   g     ào@é   TF)!r_   r   rh   Úsortedr]   Zstring_tableÚ__getitem__rU  rg   r¯   r–  ri   rj   r   Ú__name__r%  r€  r   r3   r-  r  r4  r¬   r[  r!  rB  r  r$   r  rÄ   ÚitemsrÃ  rk   )r&   Zcol_width_maxÚstringsÚrow_numÚcol_numÚcellÚ	cell_typeÚlengthZ	string_idr%  Z
seg_lengthZ	width_maxZpixel_widthr¿  rk   Z
user_widthrm   r,   r,   r-   ÚautofitÛ  s’   
ÿ

€ý
€€­V

€æ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}|dk rAd}|d	krGd	}|| jkrO|| _|||||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*  rm   Fr¼  r½  r   r¾  T)ri   r,  r¨   r–  r    rš   rÇ   rÅ   )	r&   r  Úheightr&  r›  Zmin_colrm   r¼  r½  r,   r,   r-   Úset_rowm  s2   

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›  r,   r,   r-   Úset_row_pixelsª  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×  Zhide_unused_rowsr,   r,   r-   Úset_default_row¾  s   

ÿzWorksheet.set_default_rowc                 C   sv  ||kr||krt dƒ dS ||kr||}}||kr ||}}|  ||¡r(dS |  ||¡r0dS t||||ƒ}t||d ƒD ]C}t||d ƒD ]9}	| j ||	f¡ra| j ||	f¡}
td||
f ƒ‚| j ||	f¡ry| j ||	f¡}
td||
f ƒ‚|| 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 cellNr*  r   z4Merge range '%s' overlaps previous merge range '%s'.z4Merge range '%s' overlaps previous table range '%s'.rM   r   )r   r,  r   rU  r±   r–  r!   r²   r°   rw  r  r  )r&   rL  rM  rN  rO  r‰  r&  rW  r  r<   Úprevious_ranger,   r,   r-   Úmerge_rangeÕ  sN   

ÿÿÿÿòýzWorksheet.merge_rangec                 C   s~   ||k r	||}}||k r||}}|   ||||¡}t||||ƒ}|| _|| _||g| _t||d ƒD ]	}d| 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   TN)Ú_convert_name_arear   r¾   r¿   rÀ   rU  rÄ   )r&   rL  rM  rN  rO  ÚareaÚrefr<   r,   r,   r-   Ú
autofilter!	  s   


ÿzWorksheet.autofilterc                 C   sT  | j s	tdƒ dS zt|ƒ W n! ty0   |}t|d ƒ\}}|| jkr.td| ƒ Y dS Y nw | j\}}||k s>||krItd|||f ƒ dS |  |¡}t|ƒdvrZtd| ƒ |  	||¡}t|ƒdkrv|d	 dkrv|  
||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()Nr:   úInvalid column '%s'z6Column '%d' outside autofilter() column range (%d, %d))rN   r¾  z+Incorrect number of tokens in criteria '%s'rb  r   r   rË  rN   é   )r¾   r   r$   r%   r   re   rÀ   Ú_extract_filter_tokensr-  Ú_parse_filter_expressionÚfilter_column_listrÂ   rÃ   rÁ   )r&   r<   ÚcriteriaÚ
col_letterr>   Ú	col_firstÚcol_lastr  r,   r,   r-   Úfilter_columnB	  s@   
þû
	ÿÿ
0


zWorksheet.filter_columnc                 C   s°   | j s	tdƒ dS zt|ƒ W n! ty0   |}t|d ƒ\}}|| jkr.td| ƒ Y dS Y nw | j\}}||k s>||krItd|||f ƒ dS || j|< d| j|< d| _	dS )zî
        Set the column filter criteria in Excel 2007 list style.

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

        Returns:
             Nothing.

        râ  Nr:   rã  z5Column '%d' outside autofilter() column range (%d,%d)r   )
r¾   r   r$   r%   r   re   rÀ   rÂ   rÃ   rÁ   )r&   r<   Úfiltersré  r>   rê  rë  r,   r,   r-   rç  ~	  s0   
þû
	ÿÿ


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r6td| ƒ  dS q'd|v rA|d |d< d	|v rK|d	 |d< d
|vrUtdƒ dS dddddddddddddœ}|d
 |vrtt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-“d.d-“d/d0“d1d0“}	|d |	vrøtd2|d  ƒ dS |	|d  |d< |d dks|d dkrd|vrtd3ƒ dS nd|d< d4d5d6d7œ}
d8|vr.d4|d8< n|d8 |
vr?td9|d8  ƒ dS |
|d8  |d8< |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  ƒ dS | d>¡r²t|d> ƒd<kr²td?|d>  ƒ dS | d¡rËt|d ƒd@krËtdA|d  ƒ dS | dB¡rät|dB ƒd@krätdC|dB  ƒ dS |d
 dkr	t|d t	ƒr	| j
|d Ž }t|ƒd@kr	tdD| ƒ dS dE|vrd5|dE< dF|vrd5|dF< dG|vr$d5|dG< dH|vr-d5|dH< ||||gg|dI< dJ|v rD|dI  |dJ ¡ dK|v rS|dK  dLdM¡|dK< | j |¡ d4S )Na  
        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>   Ú
error_typeÚdropdownÚinput_titleÚminimumÚmaximumÚinput_messageÚ
show_errorÚerror_titleÚ
show_inputÚvalidaterB  Úerror_messageÚother_cellsÚmulti_rangeÚignore_blankrè  Úsourcez+Unknown parameter '%s' in data_validation()r+  rü  rB  rñ  r÷  z5Parameter 'validate' is required in data_validation()ÚnoneÚwholeÚdecimalru  r  r  Ú
textLengthÚcustom)Úanyz	any valuezwhole numberrþ  Úintegerrÿ  ru  r  r  ztext lengthrÕ  r  zJUnknown validation type '%s' 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ú<=zHUnknown criteria type '%s' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   rb  )ÚstopÚwarningÚinformationrî  zJUnknown criteria type '%s' for parameter 'error_type' in data_validation()©r  r  ú%.16gé    z6Length of input title '%s' exceeds Excel's limit of 32rõ  z6Length of error title '%s' exceeds Excel's limit of 32éÿ   z9Length of input message '%s' exceeds Excel's limit of 255rø  z9Length of error message '%s' exceeds Excel's limit of 255zSLength of list items '%s' exceeds Excel's limit of 255, use a formula range insteadrû  rï  rö  rô  Úcellsrù  rú  ú$rM   )r,  ÚcopyÚkeysr   r–  r   rY  r-  r!  ru  Ú	_csv_joinr4   rm  rá   rw  )r&   rL  rM  rN  rO  r›  Úvalid_parametersÚ	param_keyÚvalid_typesZcriteria_typesZerror_typesÚ	date_timerA  r,   r,   r-   Údata_validation¨	  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r6td| ƒ  dS q'd|vrAtdƒ dS i d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d!“d"d"“d#d$“d%d&d'œ¥}|d |vr‹td(|d  ƒ dS |d dkr•d|d)< ||d  |d< i d*d*“d+d,“d-d.“d/d.“d0d.“d1d2“d3d2“d4d2“d5d6“d7d6“d8d9“d:d9“d;d<“d=d<“d>d?“d@d?“dAdB“dCdDdEdFdGdHdIdJdKdLdMdNdKdNdOœ¥}	dP|v rõ|dP |	v rõ|	|dP  |dP< |d dQv r]d
|d< dR|v rt|dR ƒstdSƒ dS |  |dR ¡}
dT|
 |dR< dU|v r>t|dU ƒs1tdVƒ dS |  |dU ¡}
dT|
 |dU< dW|v r]t|dW ƒsPtdXƒ dS |  |dW ¡}
dT|
 |dW< i dYdZ“d[d\“d]d^“d_d`“dadb“dcdd“dedf“dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“}|d d&kré| d{¡s¥td|ƒ d}S |d{ |vr¶td~|d{  ƒ dS ||d{  |d{< d|d€< |d{  d¡rÏd‚|d€< n|d{  dƒ¡rÛd„|d€< |  | d€¡| d…¡¡|d…< ||kró||}}||krý||}}t	||||ƒ}t
||ƒ}d†|v r|d† }| d‡dˆ¡}d‰|v r*|d‰ r*|d‰  ¡ |d‰< | j|dŠ< |  jd‹7  _| js|| dŒ¡s|| d¡s|| dŽ¡s|| d¡s|| d¡s|| d‘¡s|| d’¡s|| d“¡s|| d”¡s|| d•¡s|| d–¡r€d|d—< |d dkrñ|dP dBkrdB|d< d˜|dR |f |d™< nT|dP dCkr³dš|d< d›|dR |f |d™< n>|dP dDkrÎdD|d< dœ|t|dR ƒ|dR f |d™< n#|dP dEkrédE|d< d|t|dR ƒ|dR f |d™< ntdž|dP  ƒ |d dkr|dP dFkrdŸ| |d™< n—|dP dGkrd | |d™< n‰|dP d¡kr"d¢| |d™< n{|dP dHkr2d£||f |d™< nk|dP dIkrBd¤||f |d™< n[|dP dJkrRd¥||f |d™< nK|dP dKkrbd¦||f |d™< n;|dP dLkrsd§|||f |d™< n*|dP dMkrƒd¨||f |d™< n|dP dNkr•d©||||f |d™< ntdª|dP  ƒ |d dkrªd«| |d™< |d dkr·d¬| |d™< |d dkrÄd­| |d™< |d d krÑ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»< |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ˆ¡ | ddË¡ | d‘dË¡ | ddÊ¡ | 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rJ|d¶ d·krJd|d¶< |d´ dµkr\|d¸ d·kr\d|d¸< ||dÎ< z|d¶  d/¡|d¶< W n ttfyw   Y nw z|dÁ  d/¡|dÁ< W n ttfy   Y nw z|d¸  d/¡|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>$   Ú	mid_valuerò  Ú	mid_colorÚ
icon_styleÚ	bar_solidÚ	min_colorÚbar_directionÚbar_negative_color_sameÚ
min_lengthrB  Úbar_negative_colorÚ
icons_onlyÚmax_typeÚ	bar_colorÚdata_bar_2010Úbar_negative_border_colorÚbar_axis_colorÚ	max_colorÚmin_typerú  Úbar_border_colorÚ
max_lengthÚbar_negative_border_color_sameÚreverse_iconsrè  Úbar_onlyÚbar_axis_positionÚbar_no_borderrD   rñ  Ú	min_valueÚstop_if_truer"  Úmid_typeÚiconsÚ	max_valuez.Unknown parameter '%s' in conditional_format()r+  r"  z4Parameter 'type' is required in conditional_format()rÓ  ÚcellIsr  r  ÚaverageÚaboveAverageZ	duplicateÚduplicateValuesÚuniqueÚuniqueValuesÚtopÚtop10Úbottomr¥  Ztime_periodÚ
timePeriodÚblanksÚcontainsBlanksZ	no_blanksÚnotContainsBlanksÚerrorsÚcontainsErrorsZ	no_errorsÚnotContainsErrorsZ2_color_scaleZ3_color_scaleÚdata_barÚdataBarÚ
expressionÚiconSet)rA  Zicon_setz?Unknown value '%s' for parameter 'type' in conditional_format()Ú	directionr  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Z
containingÚcontainsTextZnotContainsÚ
beginsWithÚendsWithÚ	yesterdayÚtodayZ	last7DaysZlastWeekZthisWeekZnextWeekZ	lastMonthZ	thisMonthZ	nextMonth)znot containingzbegins withz	ends withr`  ra  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthrè  r  rB  z5Conditional format 'value' must be a datetime object.r  rñ  z7Conditional format 'minimum' must be a datetime object.rò  z7Conditional format 'maximum' must be a datetime object.Z3_arrowsZ3ArrowsZ3_flagsZ3FlagsZ3_traffic_lights_rimmedZ3TrafficLights2Z3_symbols_circledZ3SymbolsZ4_arrowsZ4ArrowsZ4_red_to_blackZ4RedToBlackZ4_traffic_lightsZ4TrafficLightsZ5_arrows_grayZ5ArrowsGrayZ
5_quartersZ	5QuartersZ3_arrows_grayZ3ArrowsGrayZ3_traffic_lightsÚ3TrafficLightsZ3_signsZ3SignsZ	3_symbolsZ	3Symbols2Z4_arrows_grayZ4ArrowsGrayZ	4_ratingsZ4RatingZ5_arrowsZ5ArrowsZ	5_ratingsZ5Ratingr-  z^The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format()rj  z/Unknown icon_style '%s' in conditional_format()rN   Útotal_iconsÚ4rä  Ú5rË  rF  rú  r"  rM   rD   Úpriorityr   r7  r.  r<  r3  r1  r8  r>  rB  rA  r9  r0  Úis_data_bar_2010zNOT(ISERROR(SEARCH("%s",%s)))rA  ÚnotContainsTextzISERROR(SEARCH("%s",%s))zLEFT(%s,%d)="%s"zRIGHT(%s,%d)="%s"z2Invalid text criteria '%s' in conditional_format()zFLOOR(%s,1)=TODAY()-1zFLOOR(%s,1)=TODAY()ZtomorrowzFLOOR(%s,1)=TODAY()+1z0AND(TODAY()-FLOOR(%s,1)<=6,FLOOR(%s,1)<=TODAY())z]AND(TODAY()-ROUNDDOWN(%s,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(%s,0)<(WEEKDAY(TODAY())+7))z\AND(TODAY()-ROUNDDOWN(%s,0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(%s,0)-TODAY()<=7-WEEKDAY(TODAY()))z_AND(ROUNDDOWN(%s,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(%s,0)-TODAY()<(15-WEEKDAY(TODAY())))zdAND(MONTH(%s)=MONTH(TODAY())-1,OR(YEAR(%s)=YEAR(TODAY()),AND(MONTH(%s)=1,YEAR(A1)=YEAR(TODAY())-1)))z4AND(MONTH(%s)=MONTH(TODAY()),YEAR(%s)=YEAR(TODAY()))zeAND(MONTH(%s)=MONTH(TODAY())+1,OR(YEAR(%s)=YEAR(TODAY()),AND(MONTH(%s)=12,YEAR(%s)=YEAR(TODAY())+1)))z9Invalid time_period criteria '%s' in conditional_format()zLEN(TRIM(%s))=0zLEN(TRIM(%s))>0zISERROR(%s)zNOT(ISERROR(%s))Ú
colorScalerE  r,  r;  Úminr5  ÚmaxrC  r   rG  r/  z#FF7128r:  z#FFEF9CÚ
percentilez#F8696Bz#FFEB84z#63BE7Br+  é2   ÚautoMinÚx14_min_typeÚautoMaxÚx14_max_typer6  z#638EC6r@  Fz#FF0000z#000000éÚ  rU  )r,  r#  r$  r   r   rY  r–  r  Ú_set_icon_propsr   r   rm  Ú_get_dxf_indexrå   rä   r-  Ú
setdefaultr   rb   ÚlstripÚKeyErrorÚAttributeErrorrâ   rw  )r&   rL  rM  rN  rO  r›  Úvalid_parameterr'  Z
valid_typeZcriteria_typer)  Zvalid_iconsrW  Ú
start_cellr,   r,   r-   Úconditional_format«
  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 ]C}	t||d ƒD ]9}
| j |	|
f¡ro| j |	|
f¡}td||f ƒ‚| j	 |	|
f¡r‡| j	 |	|
f¡}td||f ƒ‚|| j|	|
f< qUqLh d	£}| 
¡ D ]}||vr§t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 r]|d }||d< d|v r td| ƒ dS t d|tj¡r0t d |¡r8td!| ƒ dS t d"|¡rGtd#| ƒ dS t d$|¡sUt d%|¡r]td&| ƒ dS d'|v r~|d' |d'< |d' du rsd(|d'< |d'  dd(¡|d'< nd)|d'< |}|}| d¡r|d7 }| d¡rš|d8 }t||||ƒ|d*< t||||ƒ|d+< |d sµd|d< |d rÀ|d+ |d< d}g |d,< i }t||d ƒD ]}|d-t|ƒ d(d(d(dd(ddd.œ	}d,|v rÐ|t|d, ƒkrù|d, |d  }nd}|rÐ| d/d¡}| d0¡r|d0 |d< |d }| ¡ }||v r&td1| ƒ  dS d||< | d2¡|d3< d4|v rZ|d4 rZ|d4 }| d5¡rJ| d5¡}| d6d7¡}|  |d¡}||d4< | d8¡r¦|d8 }|d9krkd:}|d;krrd<}tg d=¢ƒ}||v r†|  ||d ¡}n|  |d¡}||d>< d?}||d8< | d@d¡}|  |||||¡ n| dA¡r¿|dA }||dA< |  |||| d/¡¡ |durÊ| ¡ |d/< |||d < |d,  |¡ |d rè|  |||d |d3 ¡ |d7 }qÏdB|v rG|dB }d}t||d ƒD ]F}	d} t||d ƒD ]5}
|t|ƒk r;| t|| ƒk r;|| |  }!| |v r3|  |	|
|!||  ¡ n|  |	|
|!d¡ | d7 } q|d7 }q tt||d ƒƒD ]/\}}|d, | }"|"r~|"d4 r~| |¡}#|"d4 }t||d ƒD ]}	|  |	|||#¡ qrqP| j |¡ |d rt||d ƒD ]
}
d| j||
f< q’dS )CaY  
        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' moderj  Tr*  r   z4Table range '%s' overlaps previous table range '%s'.z4Table range '%s' overlaps previous merge range '%s'.>   rá  ÚstyleÚ	total_rowÚcolumnsÚlast_columnr‰  Úbanded_columnsÚfirst_columnÚbanded_rowsÚ
header_rowr[   z%Unknown parameter '%s' in add_table()r+  r‚  rƒ  rá  r   z1Must have at least one data row in in add_table()r  FZshow_first_colr  Zshow_last_colZshow_row_stripesr€  Zshow_col_stripesZheader_row_countr}  Ztotals_row_shownr[   ú z.Name '%s' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz-Invalid Excel characters in add_table(): '%s'z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z0Name looks like a cell name in add_table(): '%s'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$z3Invalid name '%s' like a RC cell ref in add_table()r|  rM   ZTableStyleMedium9rU  Za_ranger~  ÚColumn)	Úidr[   Útotal_stringÚtotal_functionÚcustom_totalÚtotal_valuerA  rD   Úname_formatrD   r~   z*Duplicate header name in add_table(): '%s'Zheader_formatr‹  rA  r  ú@z[#This Row],rˆ  Z
count_numsÚ	countNumsZstd_devÚstdDev©rI  r  Úcountrk  rj  rŽ  ÚsumÚvarr‰  r  rŠ  r‡  r‰  )r#  r_   r   r,  r   rU  r²   r–  r!   r±   r$  r	  r
  ÚUNICODErm  r  r-  Úlowerr  rv  rI  ÚsetÚ_table_function_to_formular  r  rt  rw  r  Ú	enumeraterÕ   rÄ   )$r&   rL  rM  rN  rO  r›  r¯   Zcol_formatsrW  r  r<   rÜ  ry  r'  Znum_rowsr[   Zfirst_data_rowZlast_data_rowÚcol_idZ
seen_namesrÒ  Zcol_dataÚ	user_dataZxformatÚheader_namerA  ÚfunctionÚ	subtotalsrB  r‡  r‰  ÚiÚjr  Zcolumn_dataZformula_formatr,   r,   r-   Ú	add_table¬  sv  

ÿÿÿÿòþ

ÿ



÷




ÿ
ÿÿ

ÿ
 

€
zWorksheet.add_tablec                 C   s´  |   ||dd¡r
dS dt||ƒgi}|du ri }h d£}| ¡ D ]}||vr/td| ƒ  dS q d|vr:tdƒ d	S | d
d¡}|dvrJtdƒ d	S |dkrPd}||d
< d|v rmt|d tƒrf|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rHd,|d-< n|d.krRd/|d-< nd0|d-< | d1¡}|rid|vri|
d | }||d1< | d2d,¡}t|ƒ}|d3 |d4< |d |d5< |d" |d6< |d |d7< |d! |d8< |d |d9< |d |d:< |  ||d4¡ |  ||d5¡ |  ||d6¡ |  ||d7¡ |  ||d8¡ |  ||d9¡ |  ||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>   Úfirst_pointr|  Ú	low_colorÚlocationÚ
high_pointÚ
high_colorÚ
last_pointÚreverserU  Úseries_colorZplot_hiddenÚmarkers_colorÚ	date_axisrk  ÚmarkersÚ	low_pointÚnegative_pointsÚweightÚ
last_colorrj  Úshow_hiddenÚaxisÚnegative_colorÚempty_cellsr"  Úfirst_colorz)Unknown parameter '%s' in add_sparkline()rU  z0Parameter 'range' is required in add_sparkline()r+  r"  Úline)rµ  ÚcolumnÚwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()r·  Zstackedr£  ÚrangeszMMust have the same number of location and range parameters in add_sparkline()r  r"  rM   r  ú!r¤  Úhighr¬  Úlowr­  Únegativer¡  Úfirstr¦  Úlastr«  rj  rk  r±  r§  r°  rm   r®  r³  Úzeror   ÚemptyÚconnectÚspanÚgaprª  r|  Zseriesr¨  r²  r©  r´  r¯  r¥  r¢  )r,  r   r$  r   r–  r!  ru  r-  r   r[   rm  rv  rw  r   Ú_set_spark_colorrÖ   )r&   r  r<   r›  Ú	sparkliner&  r'  Z
spark_typeZrange_countZlocation_countÚ	sheetnameZ
new_rangesÚspark_rangeZnew_locationsr£  rÀ  Z
date_rangeÚstyle_idr|  r,   r,   r-   Úadd_sparklineø  s¸   þÿÿ






zWorksheet.add_sparklinec                 C   s^   d}t ||ƒ}||kr||}}||kr||}}t||||ƒ}|dkr&dS |||gg| _dS )a‰  
        Set the selected cell or cells in a worksheet

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

        Returns:
            0:  Nothing.
        NÚA1)r   r   rl   )r&   rL  rM  rN  rO  ÚpaneÚactive_cellÚsqrefr,   r,   r-   Úset_selection¸  s   


zWorksheet.set_selectionc                 C   s$   |dkr
|dkr
dS t ||ƒ| _dS )zå
        Set the first visible cell at the top left of a worksheet.

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

        Returns:
            0:  Nothing.
        r   N)r   ro   )r&   r  r<   r,   r,   r-   Úset_top_left_cellÛ  s   zWorksheet.set_top_left_cellr   c                 C   s"   || _ || _|| _|| _d| _dS )a  
        Control outline settings.

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

        Returns:
            0:  Nothing.
        TN)r¥   r£   r¤   r¢   r¦   )r&   ÚvisibleZsymbols_belowZsymbols_rightZ
auto_styler,   r,   r-   Ú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)rp   )r&   r  r<   Útop_rowÚleft_colÚ	pane_typer,   r,   r-   Ú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.

        rb  N)rÕ  )r&   ÚxÚyrÒ  rÓ  r,   r,   r-   Úsplit_panes  s   zWorksheet.split_panesrR   c                 C   s.   |dk s|dkrt d| ƒ d}t|ƒ| _dS )zš
        Set the worksheet zoom factor.

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

        Returns:
            Nothing.

        é
   é  z/Zoom factor %d outside range: 10 <= zoom <= 400rR   N)r   r$   r›   )r&   r›   r,   r,   r-   Úset_zoom.  s   zWorksheet.set_zoomc                 C   r¬  )zš
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rž   rþ   r,   r,   r-   Úright_to_left@  r®  zWorksheet.right_to_leftc                 C   r¬  )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rŸ   rþ   r,   r,   r-   Ú	hide_zeroM  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   rn   ©r&   Úcolorr,   r,   r-   Úset_tab_colorZ  s   zWorksheet.set_tab_colorrM   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| ƒ 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.

        rM   Ú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: '%s'ÚpasswordN)Ú_encode_passwordr$  r   r–   )r&   rñ  r›  ÚdefaultsrÅ  r,   r,   r-   Úprotectg  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 )	a0  
        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:
            Nothing.

        Nz1Cell range must be specified in unprotect_range()r*  r  r"  rM   r   ÚRange)r   rv  rm  r˜   r  rò  r—   rw  ©r&   rW  Ú
range_namerñ  r,   r,   r-   Úunprotect_rangeš  s   

zWorksheet.unprotect_rangec                 C   sT   |   ||dd¡rtd||f ƒ dS |du ri }|  |||¡}| 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 (%d, %d).r*  Nr   r   )r,  r   Ú_button_paramsr¼   rw  r´   )r&   r  r<   r›  Úbuttonr,   r,   r-   Úinsert_button¹  s   zWorksheet.insert_buttonc                 C   rµ  )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TN©ru   rs   rþ   r,   r,   r-   Úset_landscapeÝ  ó   
zWorksheet.set_landscapec                 C   rµ  )z€
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNrü  rþ   r,   r,   r-   Úset_portraitë  rþ  zWorksheet.set_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&   Úviewr,   r,   r-   Úset_page_viewù  s   
zWorksheet.set_page_viewc                 C   r¬  )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        rb  Nr   r  r,   r,   r-   Ú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)rt   rs   )r&   rt   r,   r,   r-   Ú	set_paper  s   
þzWorksheet.set_paperc                 C   rµ  )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)rv   rw   rþ   r,   r,   r-   Úcenter_horizontally$  rþ  zWorksheet.center_horizontallyc                 C   rµ  )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)rv   rx   rþ   r,   r,   r-   Úcenter_vertically2  rþ  zWorksheet.center_verticallyrO   rP   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ÚrightrN  rP  r,   r,   r-   Úset_margins@  s   
zWorksheet.set_marginsc                 C   óf  |}|  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¡rG| j | d¡| d¡d	g¡ | d
¡r[| j | d
¡| d¡dg¡ | d¡ro| j | d¡| d¡dg¡ | 	d¡}t| jƒ}||kr‹td|||f ƒ g | _dS d|v r”|d | _
d|v r|d | _|| _| dd¡| _d| _|r±d| _dS dS )zù
        Set the page header caption and optional margin.

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

        Returns:
            Nothing.

        ú
&[Picture]ú&Gr   zCHeader string cannot be longer than Excel's limit of 255 charactersNÚmarginÚ
image_leftÚimage_data_leftZLHÚimage_centerÚimage_data_centerZCHÚimage_rightÚimage_data_rightZRHzONumber of header images (%s) doesn't match placeholder count (%s) in string: %sÚalign_with_marginsÚscale_with_docrQ   T)rm  r-  r   r!  r™   r#  r‚   r–  rw  r  r€   r   r~   r‰   r}   rµ   )r&   r~   r›  r  Zheader_origÚplaceholder_countÚimage_countr,   r,   r-   Ú
set_headerS  ó\   
€
ÿ
ÿ
ÿ

þÿ


ÿ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  r   zCFooter string cannot be longer than Excel's limit of 255 charactersNr  r  r  ZLFr  r  ZCFr  r  ZRFzONumber of footer images (%s) doesn't match placeholder count (%s) in string: %sr  r  rQ   T)rm  r-  r   r!  r™   r#  rƒ   r–  rw  r  r€   r   r   rŠ   r}   rµ   )r&   r   r›  r  Zfooter_origr  r  r,   r,   r-   Ú
set_footer   r  zWorksheet.set_footerc                 C   sD   |du r|}|d7 }|d7 }d||f }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   z$%d:$%dr¹  )r   r[   r‹   )r&   rL  rN  rß  rÆ  r,   r,   r-   Úrepeat_rowsí  s   
zWorksheet.repeat_rowsc                 C   sH   |du r|}t |dƒ}t |dƒ}|d | }t| jƒ}|d | | _dS )zé
        Set the columns to repeat at the left hand side of each printed page.

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

        Returns:
            Nothing.

        Nr   r1   r¹  )r   r   r[   rŒ   )r&   rM  rO  rß  rÆ  r,   r,   r-   Ú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)ry   rz   rv   )r&   Úoptionr,   r,   r-   Úhide_gridlines"  s   


zWorksheet.hide_gridlinesc                 C   ó   d| _ d| _dS )z¢
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

        TN)r{   rv   rþ   r,   r,   r-   Úprint_row_col_headers:  rþ  zWorksheet.print_row_col_headersc                 C   r¬  )zž
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)r|   rþ   r,   r,   r-   Úhide_row_col_headersH  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   N)rd   re   rÞ  r   )r&   rL  rM  rN  rO  rß  r,   r,   r-   Ú
print_areaU  s   zWorksheet.print_areac                 C   rµ  )z„
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)rŽ   rs   rþ   r,   r,   r-   Úprint_acrossv  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“   rs   )r&   r¿  r×  r,   r,   r-   Ú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&   Z
start_pager,   r,   r-   Úset_start_page–  r®  zWorksheet.set_start_pagec                 C   s:   |dk s|dkrt d| ƒ dS d| _t|ƒ| _d| _dS )z§
        Set the scale factor for the printed page.

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

        Returns:
            Nothing.

        rÙ  rÚ  z2Print scale '%d' outside range: 10 <= scale <= 400Nr   T)r   r‘   r$   r   rs   )r&   Úscaler,   r,   r-   Úset_print_scale£  s   

zWorksheet.set_print_scalec                 C   r   )z”
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   rs   rþ   r,   r,   r-   Ú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&   Úbreaksr,   r,   r-   Úset_h_pagebreaksÇ  r®  zWorksheet.set_h_pagebreaksc                 C   r°  )zÂ
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r•   r*  r,   r,   r-   Úset_v_pagebreaksÔ  r®  zWorksheet.set_v_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.

        NZSheetr   )rç   r  r\   )r&   r[   r,   r,   r-   Úset_vba_nameá  s   
zWorksheet.set_vba_namec                 C   sN   |du rdS |  ¡ }h d£}| ¡ D ]}||vr!t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*  >	   Úformula_rangeÚ
eval_errorÚempty_cell_referenceÚformula_differsÚcalculated_columnÚlist_data_validationÚnumber_stored_as_textÚtwo_digit_text_yearÚformula_unlockedz)Unknown parameter '%s' in ignore_errors()r   )r#  r$  r   rú   )r&   r›  r&  r'  r,   r,   r-   Úignore_errorsò  s   þzWorksheet.ignore_errorsc                 C   s>  |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rtj| jd\}}t |¡ || _ t!|ddd| _"| j"| _#d S d S )Nr[   r\   r]   rô   r_   r`   rè   rê   rí   rë   rì   rî   rï   rc   rð   rñ   rü   rŸ  g     €)@é   rP   r   ç      à?F)Údirzw+úutf-8©ÚmodeÚencoding)$r[   r\   r]   rô   r_   r`   rè   rê   rí   rë   rì   rî   rï   rc   rð   rñ   rü   rŸ  r§   r¨   r©   r…   r†   r‡   rˆ   r‰   rŠ   r€   ÚtempfileÚmkstempr—  Úcloserò   Úopenró   r|  )r&   Z	init_dataÚfdrš  r,   r,   r-   Ú_initialize!  sH   


















÷zWorksheet._initializec                 C   s  |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | js$|  ¡  n|  	¡  |  
¡  |  ¡  | jr7|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |   d¡ |  !¡  d S )NÚ	worksheet)"Z_xml_declarationÚ_write_worksheetÚ_write_sheet_prÚ_write_dimensionÚ_write_sheet_viewsÚ_write_sheet_format_prÚ_write_colsr_   Ú_write_sheet_dataÚ_write_optimized_sheet_dataÚ_write_sheet_protectionÚ_write_protected_rangesrc   Ú_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{  Z
_xml_closerþ   r,   r,   r-   Ú_assemble_xml_fileM  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)  )rd   re   r_   rà   rg   rh   ri   rj   )r&   r  r<   rÀ  rÁ  r,   r,   r-   r,  ±  s$   
zWorksheet._check_dimensionsc                 C   s   t || j| jƒS ©N)r   rè   rð   )r&   Zdt_objr,   r,   r-   rY  Ò  ó   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 )NrM   r   r   r"  r1   r¹  )r   r  rd   re   r   r[   )r&   Z	row_num_1Z	col_num_1Z	row_num_2Z	col_num_2Zrange1Zrange2rß  Zrow_col_onlyZ
col_char_1Z
col_char_2Z
row_char_1Z
row_char_2rÆ  r,   r,   r-   rÞ  Ö  s0   


zWorksheet._convert_name_areac                 C   sR   |sd S t |ƒ}d|v r| d¡ t|ƒ}| ¡  d}t|ƒ|kr'|d |… }|S )Nr   iÿ  )r•  Úremoveru  rî  r-  )r&   r+  Z
breaks_setZbreaks_listZmax_num_breaksr,   r,   r-   Ú_sort_pagebreaksþ  s   
zWorksheet._sort_pagebreaksc                 C   sp   |sg S t  d¡}| |¡}g }|D ]#}| d¡r|dd … }| d¡r*|d d… }| dd¡}| |¡ q|S )Nz"(?:[^"]|"")*"|\S+ú"r   r*  z"")r	  ÚcompileÚfindallr  r  rm  rw  )r&   rZ  Ztoken_rer  Z
new_tokensr  r,   r,   r-   rå    s   



z Worksheet._extract_filter_tokensc                 C   sŠ   t |ƒdkr?|d }t d|¡rd}nt d|¡rd}ntd||f ƒ |  ||dd… ¡}|  ||dd… ¡}||g | S |  ||¡S )	Nr¾  rN   z(and|&&)r   z	(or|\|\|)r   z?Token '%s' is not a valid conditional in filter expression '%s'rä  )r-  r	  r
  r   Ú_parse_filter_tokens)r&   rZ  r  ZconditionalZexpression_1Zexpression_2r,   r,   r-   ræ  9  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	  ¡ ¡rjt|d ƒ}|dk s3|d
kr;td||f ƒ | ¡ }|dkrO|dkrOtd||f ƒ |d	  ¡ dkrZd}nd}|d dkrf|d7 }t|ƒ}|sz|d	 rztd|d	 |f ƒ t d| ¡ ¡r°|dkr”|dkr”td|d |f ƒ | ¡ }|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 )Nrb  rË  r   rN   rä  é   )r	  r  z=~Úeqr  z!~Úner  r  r  r  r  z
top|bottomr   iô  z?The value '%d' in expression '%s' must be in the range 1 to 500rÏ  ú%z?The type '%s' in expression '%s' must be either 'items' or '%%'rN  é   r  z<Token '%s' is not a valid operator in filter expression '%s'zblanks|nonblankszRThe operator '%s' in expression '%s' is not valid in relation to Blanks/NonBlanks'rR  r„  z[*?]é   )r–  r	  r
  r”  r$   r   r  rF  )r&   rZ  r  Ú	operatorsÚoperatorr  rB  r,   r,   r-   rl  W  s|   ôÿÿÿÿ
ÿÿ
þÿ€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   rL   iKÎ  z%X)Úordr-  )r&   rñ  ÚhashÚcharr,   r,   r-   rò  ¯  s   zWorksheet._encode_passwordc                 C   s†  d}| j | \}}}}}}}}}}}}}||9 }||9 }|d| 9 }|d|	 9 }|  |||||||¡}td|d  ƒ}td|d  ƒ}| js_tƒ }d|_|| _| j ddt|ƒ d d g¡ n| j}| 	¡ }||d	< ||d
< ||d< ||d< ||d< d |d< ||d< d|d< d|d< ||d< ||d< |d urš||d< |r#d }d}d}t
 d|¡r®|  |¡}t
 d|¡r¹|  |¡}t
 d|¡rç| dd¡}|  |¡}| dd¡}t
 d|¡sÜt
 d|¡rád| }n| d d!¡}t
 d"|¡rõ| d"d¡}d }|d ur#t|ƒ| jkrtd#|| jf ƒ n| j |¡s| j |||g¡ |  |¡|d< | j |
¡s:| j d$d%t|ƒ d& | g¡ |  |
¡|d< d S )'Nrb  g      X@r:  é5%  r   ú/drawingú../drawings/drawingú.xmlr"  Ú
dimensionsr¿  r×  r“  Úshaperœ  r   Ú	rel_indexÚurl_rel_indexr_  r”  ú
/hyperlinkÚExternalr  ú^mailto:rc  rM   rf  ú%23rg  rh  ri  re  rd  ra  úaIgnoring URL '%s' with link and/or anchor > %d characters since it exceeds Excel's limit for URLSú/imageú../media/imageÚ.)rÔ   Ú_position_object_emusr$   rØ   r   ÚembeddedrÌ   rw  r  Ú_add_drawing_objectr	  r
  rn  rm  r-  rñ   r   rÙ   r–  rÑ   Ú_get_drawing_rel_index)r&   r\   Úimage_idÚ
drawing_idr¿  r×  r[   r¡  Úx_dpiÚy_dpir¢  Údrawing_typer  r<   r>   r  rŽ  r  r  r^  r_  rœ  r“  r”  r}  rØ   Údrawing_objectÚtargetÚrel_typeÚtarget_moder,   r,   r-   Ú_prepare_imageÀ  s    òÿÿ




þÿÿzWorksheet._prepare_imagec                 C   sB  d}| j | \}}}}}}	}
}}}}| d| jd ¡}| d| jd ¡}||9 }||	9 }|  |||||||¡}td|d  ƒ}td|d  ƒ}| jsctƒ }d|_|| _| j	 
dd	t|ƒ d
 d g¡ n| j}tdd|ƒ}|
|_| ¡ }||d< ||d< ||d< ||d< ||d< ||d< ||d< d|d< d|d< | d¡|d< ||d< | dd ¡}|rd }d}d}t d|¡r¼|  |¡}t d|¡rÇ|  |¡}t d|¡rÞ| dd¡}|  |¡}| dd¡}t d |¡rì| d d¡}d }|d urt|ƒ| jkrtd!|| jf ƒ d S | j |¡s| j 
|||g¡ |  |¡|d< d S d S d S )"NrN   r¿  r×  rm  r:  ry  r   rz  r{  r|  ÚrectZTextBoxr"  r}  r“  r~  rœ  r   r  r€  r_  r”  r^  r  r‚  r  rƒ  rc  ri  rf  r„  ra  r…  )r×   r–  r«   r©   r‰  r$   rØ   r   rŠ  rÌ   rw  r  r   r¥  r‹  r	  r
  rn  rm  r-  rñ   r   rÙ   rÑ   rŒ  )r&   r\   rŽ  r‘  r  r<   r  rŽ  r  r  r¥  rœ  r›  r“  r”  r¿  r×  r}  rØ   r~  r’  r^  r“  r”  r•  r,   r,   r-   Ú_prepare_shape7  s’   ôÿÿ



þÿàzWorksheet._prepare_shapec
              	   C   sb   t  dd|¡}| j |	¡s| j ddt|ƒ d | g¡ |  |	¡}
| j |||||||
g¡ d S )Nz\..*$rM   r†  r‡  rˆ  )	r	  rS  rÛ   r–  rÒ   rw  r  Ú_get_vml_drawing_rel_indexr„   )r&   r  r¿  r×  r[   r¡  Úpositionr  r  r¢  Zref_idr,   r,   r-   Ú_prepare_header_image–  s   ÿ
ÿzWorksheet._prepare_header_imagec                 C   s$   | j  ddt|ƒ d | g¡ d S )Nr†  r‡  rˆ  )rÐ   rw  r  )r&   r  r¡  r,   r,   r-   Ú_prepare_background©  s   ÿzWorksheet._prepare_backgroundc              
   C   s4  d}| j | \
}}}}}	}
}}}}|d |_td|j|
  ƒ}td|j|  ƒ}|  ||||	|||¡}|j}| jsQtƒ }d|_	|| _| j
 ddt|ƒ d g¡ n| j}| ¡ }||d< ||d< ||d< ||d	< ||d
< d |d< ||d< |  ¡ |d< d|d< d |d< ||d< ||d< | j ddt|ƒ d g¡ d S )Nr   r:  rz  r{  r|  r"  r}  r¿  r×  r[   r~  rœ  r  r   r€  r_  r“  r”  z/chartz../charts/chart)rÓ   r†  r$   r¿  r×  r‰  Z
chart_namerØ   r   rŠ  rÌ   rw  r  r‹  rŒ  rÑ   )r&   r\   Zchart_idrŽ  r‘  r  r<   r¨  r  rŽ  r  r  rœ  r“  r”  r¿  r×  r}  r[   rØ   r’  r,   r,   r-   Ú_prepare_chart¯  sX   õ
ÿÿÿ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:  ry  )Ú_position_object_pixelsr$   )r&   Ú	col_startÚ	row_startÚx1Úy1r¿  r×  rœ  Úcol_endÚrow_endÚx2Úy2Úx_absÚy_absr,   r,   r-   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)|dk rDd}|dk rJd}| jr\t|ƒD ]	}
||   |
¡7 }qQn|| j| 7 }||7 }| jryt|ƒD ]	}|	|  |¡7 }	qnn|	| 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Æ   rU  r«   rÇ   r©   )r&   rŸ  r   r¡  r¢  r¿  r×  rœ  r§  r¨  r˜  Zrow_idr£  r¤  r¥  r¦  r,   r,   r-   rž  /  sf   þþÿÿþþþþ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   rb  rä  r   r:  )rk   rª   r$   r«   )r&   r<   rœ  Úmax_digit_widthÚpaddingÚpixelsr¿  rm   r,   r,   r-   r©    s$   
ùüþzWorksheet._size_colc                 C   s`   d}|| j v r'| j | d }| j | d }|r|dkrd}|S td| ƒ}|S td| j ƒ}|S )Nr   r   rä  gUUUUUUõ?)rÅ   r$   r¨   )r&   r  rœ  r­  r×  rm   r,   r,   r-   rª  ­  s   
üþzWorksheet._size_rowc                 C   s0   d}d}|dkr|||  }|S || | }|S )Ng      @g      @é   r,   )r&   r­  r«  r¬  r¿  r,   r,   r-   rÃ  Â  s   þzWorksheet._pixels_to_widthc                 C   s   d| S )NrP   r,   )r&   r­  r,   r,   r-   rÙ  Î  s   zWorksheet._pixels_to_heightc                 C   sV  d}d}d}d dd d d d ||d dd ddddd	œ}|  ¡ D ]}	||	 ||	< q|d
 s-||d
< |d s5||d< t|d ƒ ¡ |d< |d  ddd¡|d< |d d ur`t|d ƒ\}
}|
|d< ||d< | j}| j}|d d u r¢|dkrud|d< n-||d kr‚|d |d< n ||d kr|d |d< n||d krœ|d |d< n|d |d< |d d u rÖ|dkr±d|d< n%||d kr¼d|d< n||d krÇd|d< n||d krÒd|d< nd|d< |d d u r||d krê|d |d< n!||d kr÷|d |d< n||d kr|d |d< n|d |d< |d d u r:||d krd|d< n||d kr*d|d< n||d kr6d|d< nd|d< |d rI|d
 |d  |d
< |d rX|d |d  |d< td |d
  ƒ|d
< td |d  ƒ|d< |  |d |d |d |d |d
 |d |¡}| 	|d
 ¡ | 	|d ¡ ||||d! |d" |d |d# |d$ |d% g	|g S )&Né€   éJ   r   z#ffffe1r   ZTahomaé   rb  )r±  rß  rz  Ú	start_colÚ	start_rowrÐ  r¿  r×  r  r  rŽ  r  Ú	font_nameÚ	font_sizeÚfont_familyr¿  r×  rß  Úffrf  rz  r³  r²  rN   r¾  rm  rË  rŽ  rÊ  ru  rÙ  rä  r  é1   rS   r  r  r:  r±  rÐ  r´  rµ  r¶  )
r$  r   r”  rm  r   rd   re   r$   rž  rw  )r&   r  r<   r%  r›  Údefault_widthÚdefault_heightrœ  ÚparamsrÅ  r³  r²  Úrow_maxÚcol_maxÚverticesr,   r,   r-   Ú_comment_paramsÒ  sÄ   ñ









ù÷
özWorksheet._comment_paramsc              	   C   s¢  | j }| j}d}dt| jƒ }||i dœ}i }	| ¡ D ]}
||
 |	|
< q|	 d¡}|d u r1d| }||d d< |	 d¡rEd|	d  |d< nd	| |d< |	 d
¡|d
< |	 d|¡|	d< |	 d|¡|	d< |	 dd¡|	d< |	 dd¡|	d< |	d |	 dd¡ |	d< |	d |	 dd¡ |	d< td|	d  ƒ|	d< td|	d  ƒ|	d< ||	d< ||	d< |  |	d |	d |	d |	d |	d |	d |¡}| |	d ¡ | |	d ¡ ||d< |S )Nr   r   )r  r<   ÚfontÚcaptionz	Button %drÀ  Úmacroz[0]!z[0]!Button%d_Clickr“  r¿  r×  r  rŽ  r  r  r:  r³  r²  r¾  )	r©   r«   r-  r¼   r$  r–  r$   rž  rw  )r&   r  r<   r›  rº  r¹  rœ  Zbutton_numberrú  r»  rÅ  rÁ  r¾  r,   r,   r-   rù  [  sN   

ùzWorksheet._button_paramsc                 C   sT  g }t | j ¡ ƒ}|D ]Y}t | j|  ¡ ƒ}|D ]K}	| j| |	 }
| j|
Ž }|| j| |	< | jrD| j| |	 d d u rDd| j| |	 d< | j| |	 d d u rY| j| j| |	 d< | | j| |	 ¡ qq| j ddt|ƒ d g¡ | j	r‡|| _
| j ddt|ƒ d	 g¡ t|ƒ}|}tt|d
 ƒƒD ]}d||| d f }q•|| _|| _|S )Nrä  r   rN   ú/vmlDrawingú../drawings/vmlDrawingú.vmlz	/commentsz../commentsr|  rX   z%s,%d)rÌ  r·   r$  r¿  rº   r¹   rw  rÎ   r  r¶   r¸   rÍ   r-  rU  r$   rõ   r»   )r&   rõ   r»   Úvml_drawing_idZ
comment_idr·   Úrow_numsr  Úcol_numsr<   Zuser_optionsr»  r  Zstart_data_idr  r,   r,   r-   Ú_prepare_vml_objects¤  s<   
òÿÿzWorksheet._prepare_vml_objectsc                 C   s&   || _ | j ddt|ƒ d g¡ d S )NrÃ  rÄ  rÅ  )r½   rÎ   rw  r  )r&   r½   rÆ  r,   r,   r-   Ú_prepare_header_vml_objects×  s   ÿz%Worksheet._prepare_header_vml_objectsc                 C   s†   | j D ]=}||d< | d¡d u rdt|ƒ |d< |d  ¡ }||v r*td|d  ƒ‚d||< | j ddt|ƒ d g¡ |d	7 }qd S )
Nr†  r[   ÚTablez2Duplicate name '%s' used in worksheet.add_table().Tz/tablez../tables/tabler|  r   )rÕ   r–  r  r”  r    rÏ   rw  )r&   Ztable_idÚseenr¯   r[   r,   r,   r-   Ú_prepare_tablesà  s   

ÿÿ
ëzWorksheet._prepare_tablesc              	   C   sz   d}|  dd¡}|  dd¡}|  dd¡}|  dd	¡}d
ddddddddœ}||v r5|| }d||f }|S td| ƒ |S )NrM   ú'z''rf  z'#ú]z']ú[z'[ée   éf   ég   éh   éi   ék   ém   én   r  zSUBTOTAL(%s,[%s])z(Unsupported function '%s' in add_table())rm  r   )r&   r›  Zcol_namerA  rœ  Zfunc_numr,   r,   r-   r–  ù  s(   øþz$Worksheet._table_function_to_formulac                 C   s$   ||vrd S dt || ƒi||< d S )NÚrgbr   )r&   rÅ  r›  Z
user_colorr,   r,   r-   rÄ    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| d|j ¡ q"|	dkrV|j}
| j 	|
¡}| |¡ q"|	dv ri|j
}|d u rcd}| |¡ q"|	dkrr| d	¡ q"| d ¡ q"q|S )
Nr,   r   ©rB   rG   r  rA   )rF   rH   r   rC   rM   )r_   rU  r¯   rw  r   rÎ  r4  r%  r]   Z_get_shared_stringrB  )r&   r   rŸ  r¤  r£  r‰  rÑ  rÒ  rÓ  rÔ  r\   r%  rB  r,   r,   r-   Ú_get_range_data  s8   


€á!zWorksheet._get_range_datac                 G   s   dd„ |D ƒ}d  |¡S )Nc                 S   s"   g | ]}t |tƒst|ƒn|‘qS r,   )r!  r  )r;   Úitemr,   r,   r-   r=   V  s   " z'Worksheet._csv_join.<locals>.<listcomp>ú,)Újoin)r&   rÏ  r,   r,   r-   r%  R  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}rp  z%25ri  z%22r„  z%20r  z%3cr  z%3erÐ  z%5brÏ  z%5dú^z%5eú`z%60rD  z%7br  z%7d)r	  rF  rm  )r&   r^  r,   r,   r-   rn  Z  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&   r“  r,   r,   r-   rŒ  n  s   
z Worksheet._get_drawing_rel_indexc                 C   s6   | j  |¡r| j | S |  jd7  _| j| j |< | jS rá  )rÛ   r–  rÜ   râ  r,   r,   r-   r™  z  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 )NZrPrÚbr  ÚstrikeÚoutlineZshadowr   Zsuperscriptrb  Z	subscriptÚszÚvalr*  ÚthemeZindexedrÙ  ZrFontÚfamilyZCalibriÚscheme)rß   rx  ÚboldÚ_xml_empty_tagÚitalicZfont_strikeoutZfont_outlineZfont_shadowÚ	underlineÚ_write_underlineZfont_scriptÚ_write_vert_alignrµ  rè  Ú_write_colorZcolor_indexedZ
font_colorÚ_get_palette_colorÚ_write_rstring_colorr´  r¶  Ú	hyperlinkZfont_schemer{  )r&   Z	xf_formatZ
xml_writerrß  r,   r,   r-   ry  ‰  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 )Nrb  )rç  Údoubleé!   )rç  ZsingleAccountingé"   )rç  ZdoubleAccountingÚu©rß   rì  )r&   rî  r…  r,   r,   r-   rï  ¿  s   zWorksheet._write_underlinec                 C   s   d|fg}| j  d|¡ d S )Nrç  Z	vertAlignrù  ©r&   rç  r…  r,   r,   r-   rð  Í  ó   
zWorksheet._write_vert_alignc                 C   s   ||fg}| j  d|¡ d S ©Nrß  rù  ©r&   r[   rB  r…  r,   r,   r-   ró  Ó  rû  zWorksheet._write_rstring_colorc                 C   s$   |d dkr|dd … }d|  ¡  S )Nr   rf  r   ZFF)ÚupperrÞ  r,   r,   r-   rò  Ù  s   zWorksheet._get_palette_colorc                 C   s   | j s| j ¡  d| _ d S d S )NT)rö   ró   rB  rþ   r,   r,   r-   Ú
_opt_closeà  s   

þzWorksheet._opt_closec                 C   s2   | j r| j}t|ddd| _d| _ | j| _d S d S )Nza+r<  r=  F)rö   rò   rC  ró   r|  )r&   rš  r,   r,   r-   Ú_opt_reopenæ  s   üzWorksheet._opt_reopenc           
      C   s¼  g }t |ƒD ]}| ddddœ¡ q|dkr"d|d d< d|d	 d< |d
kr8d|d d< d|d	 d< d|d d< |dkrTd|d d< d|d	 d< d|d d< d|d d< |rÜt|ƒ}||krb|d	 }t |ƒD ]u}||  d¡d ur”|| d || d< || d }t|tƒr”| d¡r”| d¡|| d< ||  d¡rÈd}|| d |vr°td|| d  ƒ n|| d || d< || d dkrÈd|| d< ||  d¡}	|	rÛ|	dkrÛd|| d< qf|S )NFr   Úpercent)rè  rB  r"  rN   éC   rB  rö  r   rä  éK   rm  é   rb  rË  éP   é<   é(   rT   r  r"  )r  rl  r4  rA  zOUnknown icon property type '%s' for sub-property 'type' in conditional_format()r4  Únumrè  r  T)	rU  rw  r-  r–  r!  r  r  rv  r   )
r&   rc  Z
user_propsÚpropsr>   Zmax_datar  Útmpr(  rè  r,   r,   r-   rs  î  sR   
þÿ€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:rrr  zxmlns:mczxmlns:x14ac)zmc:IgnorableZx14acrF  )rb   rw  rx  )r&   Úschemar  Zxmlns_rZxmlns_mcZ	ms_schemaZxmlns_x14acr…  r,   r,   r-   rG  4  s   

zWorksheet._write_worksheetc                 C   sÔ   | j d u r| jd u rd}nR| j d u r7| jd ur7| j| jkr$td| jƒ}n;td| jƒ}td| jƒ}|d | }n(| j | jkrK| j| jkrKt| j | jƒ}nt| j | jƒ}t| j| jƒ}|d | }|  dd|fg¡ d S )NrÊ  r   r1   Ú	dimensionrà  )rg   ri   rj   r   rh   rì  )r&   rà  r5   r6   r,   r,   r-   rI  H  s   zWorksheet._write_dimensionc                 C   s    |   d¡ |  ¡  |  d¡ d S )NZ
sheetViews)rx  Ú_write_sheet_viewr{  rþ   r,   r,   r-   rJ  k  s   
zWorksheet._write_sheet_viewsc                 C   sj  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˜t| jƒr­|  d|¡ |  ¡  |  ¡  |  d¡ d S |  d|¡ d S )N)ZshowGridLinesr   )ZshowRowColHeadersr   )Z	showZerosr   ©ÚrightToLeftr   )ZtabSelectedr   ©ZshowOutlineSymbolsr   r   )r  Z
pageLayoutrb  )r  ZpageBreakPreviewrM   ÚtopLeftCellrR   Z	zoomScaler   ZzoomScaleNormalZzoomScalePageLayoutViewZzoomScaleSheetLayoutView)ZworkbookViewIdr   Z	sheetView)rz   rw  r|   rŸ   rž   rr   r¥   ræ   ro   r›   rœ   rp   r-  rl   rx  Ú_write_panesÚ_write_selectionsr{  rì  ©r&   r…  r,   r,   r-   r  t  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 )	NZdefaultRowHeight©ZcustomHeightr   )Z
zeroHeightr   ZoutlineLevelRowZoutlineLevelColrr  ©zx14ac:dyDescentz0.25ZsheetFormatPr)r¨   r    r¡   r§   rw  r­   rb   rì  )r&   r¨   Z	row_levelZ	col_levelr…  r,   r,   r-   rK  ¯  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   )rk   rx  rÌ  r$  Ú_write_col_infor{  )r&   rM  rO  Zprev_col_optionsZdeleted_colZdeleted_col_optionsr<   Zcol_optionsr,   r,   r-   rL  Ç  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   rU   r¾  rË  r:  g      p@rj  rk  r¿  r  r|  )rm   r:   )ZbestFitr:   )ZcustomWidthr:   ÚoutlineLevel)r¼  r:   r<   )Ú_get_xf_indexr$   r  rw  rì  )r&   Úcol_minr½  rk   r¿  r&  rm   r½  r¼  rÖ  Zcustom_widthÚxf_indexr«  r¬  r…  r,   r,   r-   r  ï  sj   ÿþÿûÿ
ÿþÿûÿ



ý



zWorksheet._write_col_infoc                 C   s8   | j d u r|  d¡ d S |  d¡ |  ¡  |  d¡ d S )NÚ	sheetData)rg   rì  rx  Ú_write_rowsr{  rþ   r,   r,   r-   rM  3  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   )rg   rì  rx  ró   ÚseekÚreadr|  r  rB  r—  Úunlinkrò   r{  )r&   Z	buff_sizer‰  r,   r,   r-   rN  =  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	  rN  rP  r~   r   ZpageMargins)r…   r†   r‡   rˆ   r‰   rŠ   rì  r  r,   r,   r-   rX  U  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 )NZ	paperSizerR   r'  r   Z
fitToWidthZfitToHeight)Z	pageOrderZoverThenDownZfirstPageNumber)ru   Zportrait)ru   Z	landscape)ZblackAndWhiter:   r   )ZuseFirstPageNumberr:   ZhorizontalDpiZverticalDpiZ	pageSetup)rs   rt   rw  r   r‘   r’   r“   rŽ   r   ru   r   ra   rø   r÷   rì  r  r,   r,   r-   rY  b  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)ZhorizontalCenteredr   )ZverticalCenteredr   )Zheadingsr   )Z	gridLinesr   ZprintOptions)rv   rw   rw  rx   r{   ry   rì  r  r,   r,   r-   rW  °  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)ZscaleWithDocr   )ZalignWithMarginsr   ZheaderFooter)r   rw  r€   r}   rx  r~   Ú_write_odd_headerr   Ú_write_odd_footerr{  rc   rì  r  r,   r,   r-   rZ  É  s   

ÿzWorksheet._write_header_footerc                 C   ó   |   d| j¡ d S )NZ	oddHeader)rz  r~   rþ   r,   r,   r-   r#  Ý  ó   zWorksheet._write_odd_headerc                 C   r%  )NZ	oddFooter)rz  r   rþ   r,   r,   r-   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_spansrU  rg   rh   rš   r·   r¯   r$   r³   Ú
_write_rowri   rj   Ú_write_cellr{  Ú_write_empty_row)r&   rÑ  Ú
span_indexrÂ  rÒ  Úcol_refr,   r,   r-   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¯   r(  rU  ri   rj   r)  r{  r*  Úclear)r&   Zcurrent_row_numrÑ  rÂ  rÒ  r,  r,   r,   r-   r/    s    

€zWorksheet._write_single_rowc                 C   s>  i }d }d }t | j| jd ƒD ]Š}|| jv r>t | j| jd ƒD ]}|| j| v r=|d u r1|}|}q||k r7|}||kr=|}q|| jv rpt | j| jd ƒD ]#}|| jv ro|| j| v ro|d u rc|}|}qL||k ri|}||kro|}qL|d d dks}|| jkr™t|d ƒ}|d ur™|d7 }|d7 }d||f ||< d }q|| _d S )Nr   rÊ  r   z%s:%s)	rU  rg   rh   r¯   ri   rj   r·   r$   r³   )r&   ÚspansZspan_minZspan_maxrÑ  rÒ  r+  r,   r,   r-   r'  2  sF   
€
€€
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rN| dd	| f¡ |rU| d
¡ || jkr_| d¡ |	rh| d|	f¡ |
ro| d¡ | jdkry| d¡ |rƒ|  d|¡ d S |  d|¡ d S )Nr   )NNr   r   r   rr  r   r.  Ús)ZcustomFormatr   Zhtz%g)rm   r   r  r  )r¼  r   rr  r  r  )r¨   r  rw  r§   rb   Z_xml_empty_tag_unencodedZ_xml_start_tag_unencoded)r&   r  r.  Ú
propertiesÚ	empty_rowr  r×  r&  rm   r½  r¼  r…  r,   r,   r-   r(  a  s<   







zWorksheet._write_rowc                 C   s   | j |||dd d S )NT)r1  )r(  )r&   r  r.  r0  r,   r,   r-   r*  ”  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 )Nrr  r/  r   rÚ  rÆ  z<r>z</r>rF   )rt  rã  r   )r8  z#N/Az#NAME?z#NULL!r7  z#REF!rž  rM   )rt  Úe)rt  r  rH   rQ  )Úcmr   ÚcrC   rE   rJ   Úvm)$r   rD   r  rw  rš   rk   r   rÎ  Z_xml_number_elementr4  r%  r_   Z_xml_string_elementZ_escape_control_charactersr  r  Z_xml_rich_inline_stringr   Z_xml_inline_stringrB  r!  r  r  Z_xml_formula_elementrA  rV  r  r%   rx  Ú_write_cell_array_formularU  Ú_write_cell_valuer{  rì  r[  rR  )r&   r  r<   rÓ  rW  r…  r  Zrow_xfZcol_xfZtype_cell_namer%  rs  rB  Zerror_codesr,   r,   r-   r)  ˜  s‚   












ÿ




úzWorksheet._write_cellc                 C   s   |d u rd}|   d|¡ d S )NrM   Úv©rz  )r&   rB  r,   r,   r-   r7    s   zWorksheet._write_cell_valuec                 C   s   dd|fg}|   d||¡ d S )N)rt  Úarrayrà  r  r9  )r&   rA  rW  r…  r,   r,   r-   r6    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 )NZcodeName)Z
filterModer   ZsheetPr)r‘   rÁ   rn   r¦   rç   rw  rx  Ú_write_tab_colorÚ_write_outline_prÚ_write_page_set_up_prr{  rì  r  r,   r,   r-   rH    s.   ÿþýüû
zWorksheet._write_sheet_prc                 C   s    | j sd S dg}|  d|¡ d S )N)Z	fitToPager   ZpageSetUpPr)r‘   rì  r  r,   r,   r-   r=  7  s   zWorksheet._write_page_set_up_prc                 C   s(   | j }|sd S d|fg}|  d|¡ d S )NrÙ  ZtabColor)rn   rì  )r&   rß  r…  r,   r,   r-   r;  ?  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)ZapplyStylesr   )ZsummaryBelowr   )ZsummaryRightr   r  Z	outlinePr)r¦   r¢   rw  r£   r¤   r¥   rì  r  r,   r,   r-   r<  J  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  ÚmanualBreakCountZ	rowBreaksiÿ?  )rh  r”   r-  rx  Ú
_write_brkr{  )r&   Úpage_breaksr  r…  rÑ  r,   r,   r-   r[  \  ó   þzWorksheet._write_row_breaksc                 C   r>  )Nr  r?  Z	colBreaksiÿÿ )rh  r•   r-  rx  r@  r{  )r&   rA  r  r…  rÒ  r,   r,   r-   r\  q  rB  zWorksheet._write_col_breaksc                 C   s"   d|fd|fdg}|   d|¡ d S )Nr†  rk  )Úmanr   Zbrk©rì  )r&   Zbrk_idZbrk_maxr…  r,   r,   r-   r@  †  s   zWorksheet._write_brkc                 C   óN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q|  d¡ d S )Nr  Z
mergeCells)r°   r-  rx  Ú_write_merge_cellr{  )r&   r±   r  r…  Úmerged_ranger,   r,   r-   rS  Œ  ó   
zWorksheet._write_merge_cellsc           
      C   sF   |\}}}}t ||ƒ}t ||ƒ}|d | }d|fg}	|  d|	¡ d S )Nr1   rà  Z	mergeCell)r   rì  )
r&   rG  Zrow_minr  r¼  r½  r5   r6   rà  r…  r,   r,   r-   rF  ž  s   


zWorksheet._write_merge_cellc                 C   s^  g }d }t | j ¡ ƒ}|sd S |D ]t}t | j|  ¡ ƒ}|D ]f}| j| | }|d }| jrK| j| rK| j| | rK| j| | }	|	jjdkrK|d }|dkrs|  jd7  _| |||| j|d ||d g¡ | j d|d dg¡ q| ||||d |d |d g¡ qq|  	d	¡ |D ]}
|
 
d
¡}|dkrž| j|
Ž  q|dkr§| j|
Ž  q|  d	¡ d S )Nrl  rA   r^  r   r  r_  r  r‚  ré   r   rb  )rÌ  ré   r$  r¯   r   rÎ  rÈ   rw  rË   rx  rv  Ú_write_hyperlink_externalÚ_write_hyperlink_internalr{  )r&   rÊ   ÚdisplayrÇ  rÑ  rÈ  rÒ  Úlinkrl  rÓ  r'   r,   r,   r-   rV  «  s`   ùÿÿúÿÞ
.

€zWorksheet._write_hyperlinksc           
      C   sx   t ||ƒ}dt|ƒ }d|fd|fg}	|d ur|	 d|f¡ |d ur)|	 d|f¡ |d ur4|	 d|f¡ |  d|	¡ d S )NÚrIdrà  úr:idr£  rK  Útooltiprô  )r   r  rw  rì  )
r&   r  r<   Zid_numr£  rK  rO  rà  Úr_idr…  r,   r,   r-   rI  ù  s   
z#Worksheet._write_hyperlink_externalc                 C   sN   t ||ƒ}d|fd|fg}|d ur| d|f¡ | d|f¡ |  d|¡ d S )Nrà  r£  rO  rK  rô  )r   rw  rì  )r&   r  r<   r£  rK  rO  rà  r…  r,   r,   r-   rJ    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Á   rx  Ú_write_autofiltersr{  rì  r  r,   r,   r-   rR    s   zWorksheet._write_auto_filterc                 C   sT   | j \}}t||d ƒD ]}|| jvrq| j| }| j| }|  || ||¡ qd S rá  )rÀ   rU  rÂ   rÃ   Ú_write_filter_column)r&   Zcol1Zcol2r<   r  rÃ   r,   r,   r-   rR  *  s   



özWorksheet._write_autofiltersc                 C   sB   d|fg}|   d|¡ |dkr|  |¡ n|  |¡ |  d¡ d S )NZcolIdZfilterColumnr   )rx  Ú_write_filtersÚ_write_custom_filtersr{  )r&   r˜  rÃ   rí  r…  r,   r,   r-   rS  ;  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 )rR  )r  r”  )r;   Úfilterr,   r,   r-   r=   L  s     z,Worksheet._write_filters.<locals>.<listcomp>)r=  r   r   r   rí  )r-  rì  rx  rÌ  Ú_write_filterr{  )r&   rí  Z
non_blanksr…  rá  r,   r,   r-   rT  J  s   zWorksheet._write_filtersc                 C   ó   d|fg}|   d|¡ d S )Nrç  rV  rD  rú  r,   r,   r-   rW  ^  ó   
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 )	Nrb  ZcustomFiltersr   )Úandr   )rZ  r   r   rN   rä  )r-  rx  Ú_write_custom_filterr{  )r&   r  r…  r,   r,   r-   rU  d  s   

zWorksheet._write_custom_filtersc                 C   sn   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 )Nr  r  r  r  r  r  )r   rb  rN   rä  rË  rm  rr  zUnknown operator = %srt  rç  ZcustomFilter)r   rw  rì  )r&   rt  rç  r…  rs  r,   r,   r-   r[  {  s    ù
zWorksheet._write_custom_filterc                 C   sp  g }| j sd S | j }|d r| d|d f¡ |d r | d¡ |d r)| d¡ |d s2| d¡ |d s;| d	¡ |d
 rD| d¡ |d rM| d¡ |d rV| d¡ |d r_| d¡ |d rh| d¡ |d rq| d¡ |d rz| d¡ |d rƒ| d¡ |d sŒ| d¡ |d r•| d¡ |d rž| d¡ |d  r§| d!¡ |d" s°| d#¡ |  d$|¡ d S )%Nrñ  rá  )rá  r   râ  )râ  r   rã  )rã  r   rä  )rä  r   rå  )ZformatCellsr   ræ  )ZformatColumnsr   rç  )Z
formatRowsr   rè  )ZinsertColumnsr   ré  )Z
insertRowsr   rê  )ZinsertHyperlinksr   rë  )ZdeleteColumnsr   rì  )Z
deleteRowsr   rí  )ZselectLockedCellsr   rî  )rî  r   rá  )rQ  r   rï  )ZpivotTablesr   rð  )ZselectUnlockedCellsr   ZsheetProtection)r–   rw  rì  )r&   r…  r›  r,   r,   r-   rO  –  sR   
















z!Worksheet._write_sheet_protectionc                 C   sF   | j dkrd S |  d¡ | jD ]\}}}|  |||¡ q|  d¡ d S )Nr   ZprotectedRanges)r˜   rx  r—   Ú_write_protected_ranger{  rö  r,   r,   r-   rP  Æ  s   

z!Worksheet._write_protected_rangesc                 C   sB   g }|r|  d|f¡ |  d|f¡ |  d|f¡ |  d|¡ d S )Nrñ  rÍ  r[   ZprotectedRange©rw  rì  )r&   rW  r÷  rñ  r…  r,   r,   r-   r\  Ò  s   z Worksheet._write_protected_rangec                 C   s(   | j sd S |  jd7  _|  | j¡ d S rá  )rØ   rÈ   Ú_write_drawingrþ   r,   r,   r-   r^  Þ  s   zWorksheet._write_drawingsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )NrM  rN  rØ   ©r  rì  )r&   rŽ  rP  r…  r,   r,   r-   r^  æ  s   
zWorksheet._write_drawingc                 C   ó@   | j sd S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   rM  rN  ZlegacyDrawing)r´   rÈ   r  rì  ©r&   rP  r…  r,   r,   r-   r_  î  ó   
zWorksheet._write_legacy_drawingc                 C   r`  )Nr   rM  rN  ZlegacyDrawingHF)rµ   rÈ   r  rì  ra  r,   r,   r-   r`  û  rb  z"Worksheet._write_legacy_drawing_hfc                 C   r`  )Nr   rM  rN  Zpicture)rÝ   rÈ   r  rì  ra  r,   r,   r-   ra    rb  zWorksheet._write_picturec                 C   rE  )Nr  ZdataValidations)rá   r-  rx  Ú_write_data_validationr{  )r&   rá   r  r…  Z
validationr,   r,   r-   rU    rH  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 )$NrM   r!  r„  rú  r÷  rý  r"  rè  r  rt  rî  r   )Ú
errorStyler  rb  )rd  r  rû  )Z
allowBlankr   rï  )ZshowDropDownr   rö  )ZshowInputMessager   rô  )ZshowErrorMessager   rõ  Z
errorTitlerø  rR  rð  ZpromptTitleró  ÚpromptrÍ  ZdataValidationrB  rò  )r   r–  rw  rì  rx  Ú_write_formula_1Ú_write_formula_2r{  )	r&   r›  rÍ  r…  r!  Z	row_firstrê  Zrow_lastrë  r,   r,   r-   rc  '  s\   








z Worksheet._write_data_validationc                 C   sb   t |tƒr| j|Ž }d| }nzt|ƒ W n ty(   | d¡r&| d¡}Y nw |  d|¡ d S )Nz"%s"r  Zformula1)r!  ru  r%  r  r%   r  rv  rz  ©r&   rA  r,   r,   r-   rf  t  s   




€ýzWorksheet._write_formula_1c                 C   óD   zt |ƒ W n ty   | d¡r| d¡}Y nw |  d|¡ d S )Nr  Zformula2©r  r%   r  rv  rz  rh  r,   r,   r-   rg  …  ó   

€ýzWorksheet._write_formula_2c                 C   s6   t | j ¡ ƒ}|sd S |D ]}|  || j| ¡ qd S re  )rÌ  râ   r$  Ú_write_conditional_formatting)r&   r¸  Ú
cond_ranger,   r,   r-   rT  ’  s   
ÿÿz$Worksheet._write_conditional_formatsc                 C   s8   d|fg}|   d|¡ |D ]}|  |¡ q|  d¡ d S )NrÍ  ZconditionalFormatting)rx  Ú_write_cf_ruler{  )r&   rm  r»  r…  Úparamr,   r,   r-   rl  ž  s
   
z'Worksheet._write_conditional_formattingc                 C   s  d|d fg}d|v r|d d ur|  d|d f¡ |  d|d f¡ | d¡r-|  d¡ |d dkrg|  d|d	 f¡ |  d
|¡ d|v rYd|v rY|  |d ¡ |  |d ¡ n|  |d ¡ |  d
¡ d S |d dkr©t d|d	 ¡rz|  d¡ t d|d	 ¡r‡|  d¡ t d|d	 ¡r¡t d|d	 ¡}|  d| d¡f¡ |  d
|¡ d S |d dkrÜd	|v r¾|d	 dkr¾|  d¡ d|v rÇ|  d¡ |d pÌd}|  d|f¡ |  d
|¡ d S |d dkrê|  d
|¡ d S |d dkrø|  d
|¡ d S |d d ks|d d!ks|d d"ks|d d#kr:|  d|d	 f¡ |  d$|d f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d&kr^|  d&|d	 f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d'ksz|d d(ksz|d d)ksz|d d*krŽ|  d
|¡ |  |d% ¡ |  d
¡ d S |d d+kr§|  d
|¡ |  	|¡ |  d
¡ d S |d d,krË|  d
|¡ |  
|¡ | d-¡rÄ|  |¡ |  d
¡ d S |d d.kræ|  d
|¡ |  |d	 ¡ |  d
¡ d S |d d/krÿ|  d
|¡ |  |¡ |  d
¡ d S d S )0Nr"  rD   ZdxfIdrf  rD  )Z
stopIfTruer   rH  rt  rè  ZcfRulerñ  rò  rB  rJ  Zbelow)rJ  r   r  )ZequalAverager   z[123] std devz([123]) std devrŽ  r   rO  rp  )r  r   r\  )rP  r   rÙ  ÚrankrK  rM  r]  rh  r^  r_  r¥  rA  rQ  rS  rT  rV  rW  ri  rY  rg  rZ  r[  )rw  r–  rx  Ú_write_formula_elementr{  r	  rF  Úgrouprì  Ú_write_color_scaleÚ_write_data_barÚ_write_data_bar_extÚ_write_icon_set)r&   r»  r…  r
  rp  r,   r,   r-   rn  §  s–   









ýzWorksheet._write_cf_rulec                 C   ri  )Nr  rA  rj  rh  r,   r,   r-   rq    rk  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 )Nri  r;  rC  rE  r+  r5  rG  rÙ  r/  r,  r:  )rx  Ú_write_cfvorñ  r{  )r&   ro  r,   r,   r-   rs     s   
zWorksheet._write_color_scalec                 C   s¢   g }|  d¡r| d|d f¡ |  d¡r| d|d f¡ |  d¡r(| d¡ |  d|¡ |  |d |d	 ¡ |  |d
 |d ¡ |  d|d ¡ |  d¡ d S )Nr2  Ú	minLengthr=  Ú	maxLengthr@  ©Z	showValuer   rY  r;  rC  r5  rG  rÙ  r6  )r–  rw  rx  rw  rñ  r{  )r&   ro  r…  r,   r,   r-   rt  5  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)r\   r-  rã   rw  rx  Ú
_write_extrz  r{  )r&   ro  Zworksheet_countZdata_bar_countr{  r,   r,   r-   ru  L  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 )Nr-  rb  r[  r4  rz  r?  )r§  r   rF  r"  rB  rè  )r–  rw  rx  Úreversedrw  r{  )r&   ro  r…  Úiconr,   r,   r-   rv  ^  s   



zWorksheet._write_icon_setc                 C   s>   d|fg}|d ur|  d|f¡ |r|  d¡ |  d|¡ d S )Nr"  rç  )Zgter   Zcfvor]  )r&   Zcf_typerç  rè  r…  r,   r,   r-   rw  t  s   

zWorksheet._write_cfvoc                 C   s   ||fg}|   d|¡ d S rü  rD  rý  r,   r,   r-   rñ  €  rY  zWorksheet._write_colorc                 C   s   | j D ]}| j|Ž  qd S re  )rl   Ú_write_selection)r&   Ú	selectionr,   r,   r-   r  †  s   
ÿzWorksheet._write_selectionsc                 C   sJ   g }|r|  d|f¡ |r|  d|f¡ |r|  d|f¡ |  d|¡ d S )NrË  Z
activeCellrÍ  r‚  r]  )r&   rË  rÌ  rÍ  r…  r,   r,   r-   r  ‹  s   zWorksheet._write_selectionc                 C   s:   | j }t|ƒs	d S |d dkr| j|Ž  d S | j|Ž  d S )Nrä  rb  )rp   r-  Ú_write_split_panesÚ_write_freeze_panes)r&   rp   r,   r,   r-   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 )NrM   r   ÚbottomRightÚtopRightÚ
bottomLeftÚfrozenr   ZfrozenSplitr3   ÚxSplitÚySplitr  Ú
activePaneÚstaterË  )r   rl   rw  rì  )r&   r  r<   rÒ  rÓ  rÔ  r…  Úy_splitÚx_splitro   rq   rŒ  rÌ  rÍ  r>   Úrow_cellÚcol_cellr,   r,   r-   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 )Nr   rM   r   rT   i,  r:  rS   é†  rN   rä  rV   r…  r†  r‡  r‰  r  rŠ  r  r‹  rË  )rl   r$   Ú_calculate_x_split_widthr   rw  rì  )r&   r  r<   rÒ  rÓ  rÔ  r…  Zhas_selectionrq   rÌ  rÍ  r  rŽ  r>   ro   r  r  r,   r,   r-   rƒ  Þ  sT   
 


zWorksheet._write_split_panesc                 C   sZ   d}d}|dk rt |||  d ƒ}n
t || d ƒ| }|d d }|d }|d }|S )	Nr¾  rË  r   r:  rN   rä  rT   r‘  )r$   )r&   r¿  r«  r¬  r­  ZpointsZtwipsr,   r,   r-   r’  %  s   z"Worksheet._calculate_x_split_widthc                 C   s^   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  jd7  _|  | j¡ q|  d¡ d S )Nr  Z
tablePartsr   )rÕ   r-  rx  rÈ   Ú_write_table_partr{  )r&   rÕ   r  r…  r>   r,   r,   r-   rb  <  s   þÿzWorksheet._write_table_partsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )NrM  rN  Z	tablePartr_  ra  r,   r,   r-   r“  U  s   þÿzWorksheet._write_table_partc                 C   sP   t | jƒ}t | jƒ}|s|sd S |  d¡ |r|  ¡  |r!|  ¡  |  d¡ d S )Nr|  )r-  rã   rÖ   rx  Ú_write_ext_list_data_barsÚ_write_ext_list_sparklinesr{  )r&   Zhas_data_barsZhas_sparklinesr,   r,   r-   rc  c  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~  rx  rã   Ú"_write_conditional_formatting_2010r{  )r&   rX  r,   r,   r-   r”  v  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:conditionalFormattingro  rC  rq  rG  rB  r<  r1  r3  r>  r8  rA  rý  r9  úx14:dataBarú
x14:cfRuleúxm:sqrefrU  )
rx  Ú_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{  rz  )r&   rX  Úxmlns_xmr…  r,   r,   r-   r–  „  s,   


ÿþ

z,Worksheet._write_conditional_formatting_2010c                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )NrY  r{  r"  r†  rš  ©rx  )r&   rX  Ú	rule_typer{  r…  r,   r,   r-   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   rR   rx  ry  rB  )Úborderr   r.  )Zgradientr   r0  r  )r\  ZleftToRightr	  )r\  r  r1  )ZnegativeBarColorSameAsPositiver   r>  )Z$negativeBarBorderColorSameAsPositiver   rA  Úmiddle)ÚaxisPositionr§  rý  )r¨  rý  r™  )rw  rx  )r&   rX  r2  r=  r…  r,   r,   r-   r  ¹  s2   þ




ÿþ


zWorksheet._write_x14_data_barc                 C   sH   d|fg}|dv r|   d|¡ d S |  d|¡ |  d|¡ |  d¡ d S )Nr"  )rj  rk  rn  rp  zx14:cfvoúxm:f)rì  rx  rz  r{  )r&   r¥  rB  r…  r,   r,   r-   rž  à  s   
zWorksheet._write_x14_cfvoc                 C   rX  )NrÙ  zx14:borderColorrD  ©r&   rÙ  r…  r,   r,   r-   rŸ  ë  ó   
z!Worksheet._write_x14_border_colorc                 C   rX  )NrÙ  zx14:negativeFillColorrD  rª  r,   r,   r-   r   ð  r«  z(Worksheet._write_x14_negative_fill_colorc                 C   rX  )NrÙ  zx14:negativeBorderColorrD  rª  r,   r,   r-   r¡  õ  r«  z*Worksheet._write_x14_negative_border_colorc                 C   rX  )NrÙ  zx14:axisColorrD  rª  r,   r,   r-   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}r¨  r²  r©  r´  r¯  r¥  r¢  rª  r©  úx14:sparklineGroupúx14:sparklineGroupsr}  )r~  Ú_write_sparkline_groupsr  rÖ   Ú_write_sparkline_groupÚ_write_color_seriesÚ_write_color_negativeÚ_write_color_axisÚ_write_color_markersÚ_write_color_firstÚ_write_color_lastÚ_write_color_highÚ_write_color_lowrz  Ú_write_sparklinesr{  )r&   rÅ  r,   r,   r-   r•  ÿ  s$   



z$Worksheet._write_ext_list_sparklinesc                 C   sn   |   d¡ t|d ƒD ]$}|d | }|d | }|   d¡ |  d|¡ |  d|¡ |  d¡ q|  d¡ d S )Nzx14:sparklinesr  r¸  r   zx14:sparkliner©  r›  )rx  rU  rz  r{  )r&   rÅ  r  rÇ  r£  r,   r,   r-   r¸  -   s   

zWorksheet._write_sparklinesc                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14Úurir}  r¤  )r&   r¹  r  Z	xmlns_x14r…  r,   r,   r-   r~  >   s   þzWorksheet._write_extc                 C   s   d}d|fg}|   d|¡ d S )Nr—  r˜  r­  r¤  )r&   r£  r…  r,   r,   r-   r®  J   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À  rk  rr  Zcust_maxZ	manualMaxr  rj  Zcust_minZ	manualMinr"  rµ  r®  Z
lineWeightrª  )ZdateAxisr   ZdisplayEmptyCellsAsr«  )r«  r   rº  )rº  r   r»  )r»  r   r½  )r½  r   r¾  )r¾  r   r¼  )r¼  r   r±  )ZdisplayXAxisr   rm   )ZdisplayHiddenr   ZminAxisTypeZmaxAxisTyper§  r  r¬  )r–  rw  rx  )r&   r›  rÀ  r…  r,   r,   r-   r¯  R   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è  Ztint)r–  rw  rì  )r&   Úelementrß  r…  r,   r,   r-   Ú_write_spark_color«   s   


zWorksheet._write_spark_colorc                 C   ó   |   d|¡ d S )Nzx14:colorSeries©r»  rÞ  r,   r,   r-   r°  º   rf  zWorksheet._write_color_seriesc                 C   r¼  )Nzx14:colorNegativer½  rÞ  r,   r,   r-   r±  ¾   rf  zWorksheet._write_color_negativec                 C   s   |   dddi¡ d S )Nzx14:colorAxisrÙ  ZFF000000r½  rþ   r,   r,   r-   r²  Â   s   zWorksheet._write_color_axisc                 C   r¼  )Nzx14:colorMarkersr½  rÞ  r,   r,   r-   r³  Æ   rf  zWorksheet._write_color_markersc                 C   r¼  )Nzx14:colorFirstr½  rÞ  r,   r,   r-   r´  Ê   rf  zWorksheet._write_color_firstc                 C   r¼  )Nzx14:colorLastr½  rÞ  r,   r,   r-   rµ  Î   rf  zWorksheet._write_color_lastc                 C   r¼  )Nzx14:colorHighr½  rÞ  r,   r,   r-   r¶  Ò   rf  zWorksheet._write_color_highc                 C   r¼  )Nzx14:colorLowr½  rÞ  r,   r,   r-   r·  Ö   rf  zWorksheet._write_color_lowc                 C   s   ddg}|   d|¡ d S )N)ZfontIdÚ0)r"  ZnoConversionZ
phoneticPrrD  r  r,   r,   r-   rQ  Ú   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 )NZignoredErrorsr5  ZnumberStoredAsTextr0  Z	evalErrorr2  rA  r/  ZformulaRanger7  ZunlockedFormular1  ZemptyCellReferencer4  ZlistDataValidationr3  ZcalculatedColumnr6  ZtwoDigitTextYear)rú   rx  r–  Ú_write_ignored_errorr{  )r&   Úignored_ranger,   r,   r-   r]  ã   s>   









zWorksheet._write_ignored_errorsc                 C   s    d|f|dfg}|   d|¡ d S )NrÍ  r   ZignoredErrorrD  )r&   r"  rÀ  r…  r,   r,   r-   r¿  !  s   þzWorksheet._write_ignored_errorre  )Nr   )F)Nr   rK  )NNN)NF)r   r   )r   r   r   r   )NNr   )NN)rR   )rM   N)r   )rO   rO   rP   rP   )rM   NN)FF)r   )ðrÎ  Ú
__module__Ú__qualname__Ú__doc__rZ   r  r0   r  r  r'  r  r5  r  r>  r  rC  r  r9   rP  rG  rI  rH  rX  r   r\  r  r`  r  rp  ro  r‡  rŠ  rŒ  r  r¤  r¦  r©  r«  r­  r¯  r²  r³  r´  r¶  r¸  rº  r»  r@   rÂ  rÄ  rÖ  rØ  rÚ  rÛ  rÝ  rá  rì  rç  r*  r{  rŸ  rÉ  rÎ  rÏ  rÑ  rÕ  rØ  rÛ  rÜ  rÝ  rà  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.  r8  rE  rd  r,  rY  rÞ  rh  rå  ræ  rl  rò  r–  r˜  r›  rœ  r  r‰  rž  r©  rª  rÃ  rÙ  r¿  rù  rÉ  rÊ  rÍ  r–  rÄ  rÛ  r%  rn  rŒ  r™  ry  rï  rð  ró  rò  rÿ  r   rs  rG  rI  rJ  r  rK  rL  r  rM  rN  rX  rY  rW  rZ  r#  r$  r  r/  r'  r(  r*  r)  r7  r6  rH  r=  r;  r<  r[  r\  r@  rS  rF  rV  rI  rJ  rR  rR  rS  rT  rW  rU  r[  rO  rP  r\  r^  r^  r_  r`  ra  rU  rc  rf  rg  rT  rl  rn  rq  rs  rt  ru  rv  rw  rñ  r  r  r  r„  rƒ  r’  rb  r“  rc  r”  r–  rœ  r  rž  rŸ  r   r¡  r¢  r•  r¸  r~  r®  r¯  r»  r°  r±  r²  r³  r´  rµ  r¶  r·  rQ  r]  r¿  Ú__classcell__r,   r,   rÿ   r-   rK   Â   sL    [%
P ø,ø- >÷6k
y<=3F#ÿ@ÿ =ÿK
 <*  ÿ      M @
"ÿ3#MM
 /,d!(!Xw_<D` 
I3	5
6F#	;(D
N(%/3vOÿÿ0M	l8G-'.Y	-rK   )>r  r9  r—  r	  r@  Úcollectionsr   r   rÿ  r   Ú	fractionsr   Ú	functoolsr   Úior   r	   r
   Úwarningsr   rM   r   rD   r   rØ   r   r~  r   r   Zutilityr   r   r   r   r   r   r   r   r   r   r   r   r   Ú
exceptionsr    r!   rj  ÚVERBOSErE  r0   r9   r@   r0  r;  r?  r]  rJ  rZ  rT  r~  r   rK   r,   r,   r,   r-   Ú<module>   sj   	á( 
 




ÿ

