a
    èÞJb’) ã                   @   sØ  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( e )d¡Z*e )d¡Z+e )dej,¡Z-dd „ Z.d!d"„ Z/d#d$„ Z0ed%d&ƒZ1ed'd(ƒZ2ed)d*ƒZ3ed+d,ƒZ4ed-d.ƒZ5ed/d0ƒZ6G d1d2„ d2ejƒZ7dS )3é    N)Údefaultdict)Ú
namedtuple)ÚDecimal)ÚFraction)Ú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)Úget_sparkline_style)Úsupported_datetime)Údatetime_to_excel_datetime)Úpreserve_whitespace)Úquote_sheetname)ÚDuplicateTableNamez(_x[0-9a-fA-F]{4}_)z([\x00-\x08\x0b-\x1f])zû
    \bSORT\(       |
    \bLET\(        |
    \bLAMBDA\(     |
    \bSINGLE\(     |
    \bSORTBY\(     |
    \bUNIQUE\(     |
    \bXMATCH\(     |
    \bFILTER\(     |
    \bXLOOKUP\(    |
    \bSEQUENCE\(   |
    \bRANDARRAY\(  |
    \bANCHORARRAY\(c                    s   ‡ fdd„}|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                    s^   zt |ƒr|d }t|ƒ W n* tyF   t|ƒ}||dd …  }Y n0 ˆ | g|¢R i |¤ŽS ©Nr   r
   )ÚlenÚintÚ
ValueErrorr   )ÚselfÚargsÚkwargsZ	first_argÚnew_args©Úmethod© ú3lib/python3.9/site-packages/xlsxwriter/worksheet.pyÚcell_wrapperI   s    z'convert_cell_args.<locals>.cell_wrapperr'   ©r&   r)   r'   r%   r(   Úconvert_cell_argsC   s    r+   c                    s   ‡ fdd„}|S )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c           
         s¶   zt |ƒrt|d ƒ W n† tyž   d|d v r^|d  d¡\}}t|ƒ\}}t|ƒ\}}nt|d ƒ\}}|| }}||||g}	|	 |dd … ¡ |	}Y n0 ˆ | g|¢R i |¤ŽS )Nr   ú:r
   ©r   r   r    Úsplitr   Úextend)
r!   r"   r#   Úcell_1Úcell_2Zrow_1Úcol_1Zrow_2Úcol_2r$   r%   r'   r(   r)   `   s    

z(convert_range_args.<locals>.cell_wrapperr'   r*   r'   r%   r(   Úconvert_range_argsZ   s    r4   c                    s   ‡ fdd„}|S )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c           	         s”   zt |ƒrt|d ƒ W nd ty|   dd„ |d  d¡D ƒ\}}t|ƒ\}}t|ƒ\}}||g}| |dd … ¡ |}Y n0 ˆ | g|¢R i |¤ŽS )Nr   c                 S   s   g | ]}|d  ‘qS )Ú1r'   )Ú.0Úcolr'   r'   r(   Ú
<listcomp>‡   ó    z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>r,   r
   r-   )	r!   r"   r#   r0   r1   Ú_r2   r3   r$   r%   r'   r(   Úcolumn_wrapper   s    
z+convert_column_args.<locals>.column_wrapperr'   )r&   r;   r'   r%   r(   Úconvert_column_argsy   s    r<   ÚStringzstring, formatÚNumberznumber, formatÚBlankÚformatÚBooleanzboolean, formatÚFormulazformula, format, valueÚArrayFormulaz$formula, format, value, range, atypec                       sV
  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!„ 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/d0„Zed1d2„ ƒZd3d4„ Zd5d6„ Zedäd7d8„ƒZedåd9d:„ƒZ edæd;d<„ƒZ!edçd=d>„ƒZ"edèd?d@„ƒZ#edédAdB„ƒZ$dCdD„ Z%dêdFdG„Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,e-dëdTdU„ƒZ.e-dìdVdW„ƒZ/dídXdY„Z0dîdZd[„Z1dïd\d]„Z2edðd^d_„ƒZ3ed`da„ ƒZ4dbdc„ Z5ddde„ Z6edñdfdg„ƒZ7edòdhdi„ƒZ8edódjdk„ƒZ9edôdldm„ƒZ:edndo„ ƒZ;edõdpdq„ƒZ<dödsdt„Z=ed÷dudv„ƒZ>edødwdx„ƒZ?dùdzd{„Z@d|d}„ ZAd~d„ ZBd€d„ ZCdúdƒd„„ZDdûd…d†„ZEedüd‡dˆ„ƒZFd‰dŠ„ ZGd‹dŒ„ ZHddŽ„ ZIdd„ ZJd‘d’„ ZKd“d”„ ZLdýd—d˜„ZMdþd™dš„ZNdÿd›dœ„ZOd ddž„ZPe-ddŸd „ƒZQdd¡d¢„ZRd£d¤„ ZSd¥d¦„ ZTed§d¨„ ƒZUd©dª„ ZVd«d¬„ ZWd­d®„ ZXd¯d°„ ZYd±d²„ ZZd³d´„ Z[dµd¶„ Z\dd·d¸„Z]dd¹dº„Z^d»d¼„ Z_d½d¾„ Z`dd¿dÀ„ZadÁdÂ„ ZbdÃdÄ„ ZcdÅdÆ„ ZddÇdÈ„ ZedÉdÊ„ ZfdËdÌ„ ZgdÍdÎ„ ZhdÏdÐ„ ZidÑdÒ„ ZjdÓdÔ„ ZkdÕdÖ„ Zld×dØ„ ZmdÙdÚ„ ZndÛdÜ„ ZoddÝdÞ„Zpddßdà„Zqdádâ„ Zrdãdä„ Zsdådæ„ Ztdçdè„ Zudédê„ Zvdëdì„ Zwdídî„ Zxdïdð„ Zydñdò„ Zzdó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'd(„ Z•d)d*„ Z–d+d,„ Z—dd-d.„Z˜d/d0„ Z™dd1d2„Zšdd3d4„Z›d5d6„ Zœd7d8„ Zd9d:„ 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¨ddOdP„Z©ddQdR„ZªdSdT„ Z«dUdV„ Z¬dWdX„ Z­dYdZ„ Z®d[d\„ Z¯d]d^„ Z°d_d`„ Z±dadb„ Z²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‰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| _\i | _]g | _^tGtHƒ| __g | _`i | _ad| _bd| _cd| _dtGtHƒ| _eg | _fd| _gd| _hd| _ig | _jd| _kd| _ld| _mg | _nd| _oi | _pi | _qi | _ri | _si | _td| _ud| _vd
| _wd| _xd| _yg | _zg | _{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| _id| _£d| _¤d| _§d| _¨d| _©i | _ªd| _«d| _¬d| _­dS )z
        Constructor.

        Nr   Fi×  i   i @  éÿ  Ú é   r
   Tçffffffæ?ç      è?ç333333Ó?éd   é   é   ç\Âõ(Ü @é@   é   i  )®ÚsuperrD   Ú__init__ÚnameÚindexÚ	str_tableZ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ÚcolinfoÚ
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_row_zeroedÚnamesZwrite_matchÚtableÚmergeÚ	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Ú	col_sizesÚ	row_sizesÚcol_formatsÚ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©r!   ©Ú	__class__r'   r(   rR   ²   sZ   



zWorksheet.__init__c                 G   st  |dkr| j ||g|¢R Ž S | jr@| d¡r@| j||g|¢R Ž S | d¡rh| d¡rh| j||g|¢R Ž S d|v râ| jr–t d|¡r–| j||g|¢R Ž S | jr¼t d|¡r¼| j||g|¢R Ž S | jrât d|¡râ| j||g|¢R Ž S | j	r\zHt
|ƒ}| jst|ƒs0t|ƒs0| j|||g|d	d … ¢R Ž W S W n tyF   Y n0 | j||g|¢R Ž S | j||g|¢R Ž S d S )
NrF   ú=z{=Ú}r,   ú(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Úrowr7   r"   Úfr'   r'   r(   Ú_write_token_as_string‰  s4    ÿÿ$z Worksheet._write_token_as_stringc                 G   s   | 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  r7   r"   r'   r'   r(   Úwrite¬  s    zWorksheet.writec           	      G   s,  t |ƒstdƒ‚|d }t|ƒ}|| jv rV| j| }|| ||g|¢R Ž }|d u rRn|S |d u rr| j||g|¢R Ž S |tu rŽ| j||g|¢R Ž S |ttt	t
fv r²| j||g|¢R Ž S |tu rÐ| j|||g|¢R Ž S |tjtjtjtjfv rü| j||g|¢R Ž S t|ttt	t
fƒr$| j||g|¢R Ž S t|tƒrF| j|||g|¢R Ž S t|tƒrf| 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|ƒ ƒ‚Y n0 zt|ƒ | j||g|¢R Ž W S  ty&   tdt|ƒ ƒ‚Y n0 d S )Nz,write() takes at least 4 arguments (3 given)r   r
   zUnsupported type %s in write())r   Ú	TypeErrorÚtyperî   rù   ÚboolÚ_write_booleanr   r   r   r   r  Ústrr  ÚdatetimeÚdateÚtimeZ	timedeltaÚ_write_datetimeÚ
isinstancer   r    r  )	r!   r  r7   r"   r  Ú
token_typeZwrite_handlerZfunction_returnr  r'   r'   r(   r  À  sX    

ý
 zWorksheet._writeNc                 C   s   |   ||||¡S )a›  
        Write a string to a worksheet cell.

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

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

        )r  )r!   r  r7   ÚstringÚcell_formatr'   r'   r(   Úwrite_string  s    zWorksheet.write_stringc                 C   s~   d}|   ||¡rdS t|ƒ| jkr4|d | j… }d}| jsH| j |¡}n|}| jrf|| jkrf|  |¡ t||ƒ| j	| |< |S ©Nr   éÿÿÿÿéþÿÿÿ)
Ú_check_dimensionsr   r]   rV   rU   Ú_get_shared_string_indexrÕ   Ú_write_single_rowÚcell_string_tupler¥   )r!   r  r7   r  r  Ú	str_errorÚstring_indexr'   r'   r(   r  "  s    
zWorksheet._write_stringc                 C   s   |   ||||¡S )a„  
        Write a number to a worksheet cell.

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

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

        )r  ©r!   r  r7   Únumberr  r'   r'   r(   Úwrite_number>  s    zWorksheet.write_numberc                 C   s–   t |ƒst|ƒrT| jrLt |ƒr0|  ||d|d¡S t|ƒrT|  ||d|d¡S ntdƒ‚|  ||¡rddS | jr~|| jkr~|  |¡ t	||ƒ| j
| |< dS )Nú#NUM!z1/0ú#DIV/0!zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr  r   )r   r   rá   rû   r  r  rV   rÕ   r  Úcell_number_tupler¥   r"  r'   r'   r(   r  Q  s&    ÿÿÿ
zWorksheet._write_numberc                 C   s   |   ||||¡S )aè  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

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

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

        )rù   ©r!   r  r7   Úblankr  r'   r'   r(   Úwrite_blankm  s    zWorksheet.write_blankc                 C   sL   |d u rdS |   ||¡rdS | jr6|| jkr6|  |¡ t|ƒ| j| |< dS )Nr   r  )r  rV   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  r7   Ú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 |¡rL|  |||||||¡S | d¡rv| d¡rv|  |||||||¡S |  |¡}| j	rš|| j
krš|  |¡ t|||ƒ| j| |< dS )Nr  rF   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_formularV   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)r1  r2  r3  r4  )r!   Ú	first_rowÚ	first_colÚlast_rowÚlast_colr-  r  r.  r'   r'   r(   Úwrite_array_formulaÈ  s    
ý
þzWorksheet.write_array_formulac           	   
   C   s*   |   |||||||d¡}|dkr&d| _|S )a|  
        Write a dynamic array formula to a worksheet cell/range.

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

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

        Údynamicr   T)r4  rð   )	r!   r8  r9  r:  r;  r-  r  r.  Úerrorr'   r'   r(   r3  ç  s    
þz%Worksheet.write_dynamic_array_formulac                 C   s¢  |  d¡r|dd … }|  d¡r,|dd … }| d¡rB|d d… }d|v rN|S t dd|¡}t d	d
|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}| js|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/d0|¡}t d1d2|¡}t d3d4|¡}t d5d6|¡}t d7d8|¡}t d9d:|¡}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 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|¡}|S (  Nr0  r
   rõ   rö   r  z_xlfn.z\bLET\(z
_xlfn.LET(z
\bLAMBDA\(z_xlfn.LAMBDA(z
\bSINGLE\(z_xlfn.SINGLE(z
\bSORTBY\(z_xlfn.SORTBY(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bXMATCH\(z_xlfn.XMATCH(z\bSORT\(z_xlfn._xlws.SORT(z\bXLOOKUP\(z_xlfn.XLOOKUP(z\bSEQUENCE\(z_xlfn.SEQUENCE(z
\bFILTER\(z_xlfn._xlws.FILTER(z\bRANDARRAY\(z_xlfn.RANDARRAY(z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z\bCOT\(z
_xlfn.COT(z\bCSC\(z
_xlfn.CSC(z\bIFS\(z
_xlfn.IFS(z\bPHI\(z
_xlfn.PHI(z\bRRI\(z
_xlfn.RRI(z\bSEC\(z
_xlfn.SEC(z\bXOR\(z
_xlfn.XOR(z\bACOT\(z_xlfn.ACOT(z\bBASE\(z_xlfn.BASE(z\bCOTH\(z_xlfn.COTH(z\bCSCH\(z_xlfn.CSCH(z\bDAYS\(z_xlfn.DAYS(z\bIFNA\(z_xlfn.IFNA(z\bSECH\(z_xlfn.SECH(z	\bACOTH\(z_xlfn.ACOTH(z	\bBITOR\(z_xlfn.BITOR(z	\bF.INV\(z_xlfn.F.INV(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z	\bIMCOT\(z_xlfn.IMCOT(z	\bIMCSC\(z_xlfn.IMCSC(z	\bIMSEC\(z_xlfn.IMSEC(z	\bIMTAN\(z_xlfn.IMTAN(z	\bMUNIT\(z_xlfn.MUNIT(z	\bSHEET\(z_xlfn.SHEET(z	\bT.INV\(z_xlfn.T.INV(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z
\bARABIC\(z_xlfn.ARABIC(z
\bBITAND\(z_xlfn.BITAND(z
\bBITXOR\(z_xlfn.BITXOR(z
\bCONCAT\(z_xlfn.CONCAT(z
\bF.DIST\(z_xlfn.F.DIST(z
\bF.TEST\(z_xlfn.F.TEST(z
\bIMCOSH\(z_xlfn.IMCOSH(z
\bIMCSCH\(z_xlfn.IMCSCH(z
\bIMSECH\(z_xlfn.IMSECH(z
\bIMSINH\(z_xlfn.IMSINH(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z
\bSHEETS\(z_xlfn.SHEETS(z
\bSKEW.P\(z_xlfn.SKEW.P(z
\bSWITCH\(z_xlfn.SWITCH(z
\bT.DIST\(z_xlfn.T.DIST(z
\bT.TEST\(z_xlfn.T.TEST(z
\bZ.TEST\(z_xlfn.Z.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z\bDECIMAL\(z_xlfn.DECIMAL(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bBETA.INV\(z_xlfn.BETA.INV(z\bF.INV.RT\(z_xlfn.F.INV.RT(z\bNORM.INV\(z_xlfn.NORM.INV(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bT.INV.2T\(z_xlfn.T.INV.2T(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bAGGREGATE\(z_xlfn.AGGREGATE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z\bFILTERXML\(z_xlfn.FILTERXML(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bPDURATION\(z_xlfn.PDURATION(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY()rú   rü   rý   Úsubrñ   ©r!   r-  r'   r'   r(   r5    sL   


ÿÿÿÿÿÿÿÿÿÿÿÿzWorksheet._prepare_formular7  c	                 C   s
  ||kr|| }}||kr$|| }}|   ||¡r4dS |   ||¡rDdS ||kr`||kr`t||ƒ}	nt||ƒd t||ƒ }	|  |¡}| jrœ|| jkrœ|  |¡ t||||	|ƒ| j| |< | jst||d ƒD ]8}
t||d ƒD ]$}|
|ksò||krÞ|  	|
|d|¡ qÞqÌdS )Nr  r,   r
   r   )
r  r   r5  rV   rÕ   r  Úcell_arformula_tupler¥   Úranger  )r!   r8  r9  r:  r;  r-  r  r.  ÚatypeÚ
cell_ranger  r7   r'   r'   r(   r4  ¯  s8    

ÿ

üzWorksheet._write_array_formulac                 C   s   |   ||||¡S )aŽ  
        Write a date or time to a worksheet cell.

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

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

        )r  )r!   r  r7   r  r  r'   r'   r(   Úwrite_datetimeÝ  s    zWorksheet.write_datetimec                 C   sZ   |   ||¡rdS | jr*|| jkr*|  |¡ |  |¡}|d u rB| j}t||ƒ| j| |< dS )Nr  r   )r  rV   rÕ   r  Ú_convert_date_timerã   r'  r¥   )r!   r  r7   r  r  r#  r'   r'   r(   r  ð  s    

zWorksheet._write_datetimec                 C   s   |   ||||¡S )aˆ  
        Write a boolean value to a worksheet cell.

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

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

        )r  )r!   r  r7   Úbooleanr  r'   r'   r(   Úwrite_boolean  s    zWorksheet.write_booleanc                 C   sP   |   ||¡rdS | jr*|| jkr*|  |¡ |r4d}nd}t||ƒ| j| |< dS )Nr  r
   r   )r  rV   rÕ   r  Úcell_boolean_tupler¥   )r!   r  r7   rG  r  r.  r'   r'   r(   r    s    
zWorksheet._write_booleanc                 C   s   |   ||||||¡S )aˆ  
        Write a hyperlink to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )rÿ   )r!   r  r7   Úurlr  r  Útipr'   r'   r(   Ú	write_url5  s    zWorksheet.write_urlc                 C   sô  |   ||¡rdS |d u r|}d}| d¡rF| dd¡}| dd¡}d}d}| d¡rˆ| dd¡}| dd	¡}| dd¡}| dd	¡}d
}| dd¡}d}	t|ƒ| jkr²tdƒ dS |}
|dkr0d|v rÚ| dd¡\}}
nd }
|  |¡}|
d urþ|sþ|  |
¡}
t 	d|¡st 	d|¡r"d| }t 
dd|¡}|
p8d}| j}t|ƒ|ks\t|ƒ|krptd||f ƒ dS |  jd7  _| jdkrštd| ƒ dS | jr¸|| jkr¸|  |¡ |d u rÈ| j}|  ||||¡ |||
|dœ| j| |< |	S )Nr  r
   ú	internal:rF   é   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_typerJ  r  rK  )r  rú   Úreplacer   r]   r	   r.   Ú_escape_urlrý   rþ   r?  ræ   r¾   rV   rÕ   r  rä   r  rÞ   )r!   r  r7   rJ  r  r  rK  rX  Zexternalr   Zurl_strZtmp_url_strZmax_urlr'   r'   r(   rÿ   L  sp    





þÿ

üzWorksheet._write_urlc                 G   s   | j ||g|¢R Ž S )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

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

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

        )Ú_write_rich_stringr	  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 ]’}t|tƒsà|dkr®|
 |	¡ |
 |¡ n
|
 |¡ |dkrÎt
dƒ  d	S |t	|ƒ7 }d
}n,|dkrþ|dkrþt
dƒ  dS |
 |¡ d}|d7 }q‚t|
d tƒs2| j d¡ |
D ]^}t|tƒr^| j d¡ |  |¡ n4g }t|ƒrv| d¡ | j d||¡ | j d¡ q6| jj ¡ }|| jkrºt
dƒ dS | jsÐ| j |¡}n|}| jrò|| jkrò|  |¡ t||ƒ| j| |< dS )Nr   r  r@   rN  zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().éûÿÿÿrF   zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().rW  r  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().rV  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Úgetvaluer]   rV   rU   r  rÕ   r  r  r¥   )r!   r  r7   r"   Útokensr  Z
str_lengthr!  rh  ÚdefaultZ	fragmentsZpreviousÚposr  Ú
attributesr  r'   r'   r(   r[  Ë  sr    







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  r7   Údatar  r  r>  r'   r'   r(   Ú	write_rowJ  s    
zWorksheet.write_rowc                 C   s2   |D ](}|   ||||¡}|r$|  S |d7 }qdS )a‰  
        Write a column of data starting from (row, col).

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

        r
   r   r  rp  r'   r'   r(   Úwrite_columna  s    
zWorksheet.write_columnc                 C   sþ   |   ||dd¡r$td||f ƒ dS |du r0i }| dd¡}| dd¡}| dd	¡}| d
d	¡}| dd¡}	| dd¡}
| dd¡}| dd¡}| dd¡}| dd¡}| d|¡}|sÔtj |¡sÔt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_scalerJ  rK  Úobject_positionrN  Ú
image_dataÚdescriptionÚ
decorativeFZpositioningúImage file '%s' not found.)r  r	   ÚgetÚosÚpathÚexistsrÉ   rc  )r!   r  r7   ÚfilenameÚoptionsrt  ru  rv  rw  rJ  rK  Úanchorry  rz  r{  r'   r'   r(   Úinsert_imagex  s0    þzWorksheet.insert_imagec                 C   s¶   |   ||dd¡r$td||f ƒ dS |du r0d}|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  NrF   rt  r   ru  rv  r
   rw  rx  rz  r{  F)r  r	   r}  rÌ   rc  )r!   r  r7   Útextr‚  rt  ru  rv  rw  rƒ  rz  r{  r'   r'   r(   Úinsert_textbox§  s&    
þzWorksheet.insert_textboxc                 C   s  |   ||dd¡r$td||f ƒ dS |du r0i }|jsD|jrP|jjrPtdƒ dS d|_|jrdd|j_| dd¡}| dd¡}| d	d
¡}| dd
¡}| dd
¡}	| dd¡}
| dd¡}|jd
krÈ|j}|jd
krØ|j}|jrä|j}|jrð|j}| j	 
||||||||	|
|g
¡ dS )a„  
        Insert an chart with its top-left corner in a worksheet cell.

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

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

        Tz Cannot insert chart at (%d, %d).r  Nz7Chart cannot be inserted in a worksheet more than once.rt  r   ru  rv  r
   rw  rx  rz  r{  F)r  r	   Zalready_insertedZcombinedr}  rv  rw  rt  ru  rÈ   rc  )r!   r  r7   Úchartr‚  rt  ru  rv  rw  rƒ  rz  r{  r'   r'   r(   Úinsert_chartÏ  sF    ÿ

ü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   r]   r¨   rª   r«   )r!   r  r7   Zcommentr‚  r'   r'   r(   Úwrite_comment  s    zWorksheet.write_commentc                 C   s
   d| _ dS )z†
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        r
   N)r®   rò   r'   r'   r(   Úshow_comments3  s    zWorksheet.show_commentsFc                 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   s
   || _ 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_authorS  s    zWorksheet.set_comments_authorc                 C   s   | j S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rS   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)rd   ri   rT   ré   Zactivesheetrò   r'   r'   r(   Úactivaten  s    zWorksheet.activatec                 C   s   d| _ d| _dS )zó
        Set current worksheet as a selected worksheet, i.e. the worksheet
        has its tab highlighted.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r
   r   N)ri   rd   rò   r'   r'   r(   Úselect€  s    zWorksheet.selectc                 C   s   d| _ d| _dS )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r
   r   N)rd   ri   rò   r'   r'   r(   Úhide‘  s    zWorksheet.hidec                 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)rd   rT   ré   Z
firstsheetrò   r'   r'   r(   Úset_first_sheet¤  s    zWorksheet.set_first_sheetc                 C   s  |du ri }||kr|| }}d}|  dd¡}|  dd¡}|  dd¡}	|sR|rX|rXd}
nd}
|  d|||
¡rpdS |  d|||
¡r„dS |	dk rd}	|	d	krœd	}	|	| jkr¬|	| _||||||	|g| jd
| < d| _|du rÜ| j}t||d ƒD ] }||g| j|< |rê|| j|< qê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.

        NTrd   FÚ	collapsedÚlevelr   r  é   z%05dr
   )	r}  r  r˜   rb   r»   r¡   rB  r¸   rº   )r!   r9  r;  Úwidthr  r‚  Ú
ignore_rowrd   r“  r”  Ú
ignore_colr7   r'   r'   r(   Ú
set_column¶  sB    

þ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!   r9  r;  r–  r  r‚  r'   r'   r(   Úset_column_pixels  s
    

ÿzWorksheet.set_column_pixelsc           	      C   sÊ   |du ri }| j dur| j }nd}|  ||¡r2dS |du r@| j}| dd¡}| dd¡}| dd¡}|dkrvd}| j}|dk r‚d}|d	krŽd	}|| jkrž|| _|||||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  rd   Fr“  r”  r
   r•  T)r`   r  rŸ   r}  r—   r‘   r¼   r¹   )	r!   r  Úheightr  r‚  Zmin_colrd   r“  r”  r'   r'   r(   Úset_row  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_pixelsW  s    
zWorksheet.set_row_pixelsc                 C   s2   |du r| j }|| jkr$d| _|| _ |r.d| _dS )zý
        Set the default row properties.

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

        Returns:
            Nothing.

        NTr
   )rŸ   rž   r¼   r£   )r!   rœ  Zhide_unused_rowsr'   r'   r(   Úset_default_rowk  s    
zWorksheet.set_default_rowc           	      C   sÒ   ||kr||krt dƒ dS ||kr.|| }}||kr@|| }}|  ||¡rPdS |  ||¡r`dS | 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
   rF   r   )r	   r  r¦   rc  r  rB  rù   )	r!   r8  r9  r:  r;  rq  r  r  r7   r'   r'   r(   Úmerge_range‚  s&    

zWorksheet.merge_rangec                 C   s\   ||k r|| }}||k r$|| }}|   ||||¡}t||||ƒ}|| _|| _||g| _d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.

        N)Ú_convert_name_arear   r²   r³   r´   )r!   r8  r9  r:  r;  ÚareaÚrefr'   r'   r(   Ú
autofilter¹  s    

ÿzWorksheet.autofilterc                 C   sh  | j stdƒ dS zt|ƒ W nB ty`   |}t|d ƒ\}}|| jkr\td| ƒ Y dS Y n0 | j\}}||k s|||kr’td|||f ƒ dS |  |¡}t|ƒdksÀt|ƒdksÀtd| ƒ |  	||¡}t|ƒd	krø|d
 d	krø|  
||d g¡ nft|ƒdkrJ|d
 d	krJ|d	 dkrJ|d d	krJ|  
||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()Nr5   úInvalid column '%s'z6Column '%d' outside autofilter() column range (%d, %d)rG   r•  z+Incorrect number of tokens in criteria '%s'rN  r   r
   é   é   )r²   r	   r   r    r   r\   r´   Ú_extract_filter_tokensr   Ú_parse_filter_expressionÚfilter_column_listr¶   r·   rµ   )r!   r7   ÚcriteriaÚ
col_letterr:   Ú	col_firstÚcol_lastrj  r'   r'   r(   Úfilter_column×  s<    

ÿ
*
ÿ

zWorksheet.filter_columnc                 C   s°   | j stdƒ dS zt|ƒ W nB ty`   |}t|d ƒ\}}|| jkr\td| ƒ Y dS Y n0 | j\}}||k s|||kr’t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¦  Nr5   r§  z5Column '%d' outside autofilter() column range (%d,%d)r
   )
r²   r	   r   r    r   r\   r´   r¶   r·   rµ   )r!   r7   Úfiltersr®  r:   r¯  r°  r'   r'   r(   r¬    s(    

ÿ

zWorksheet.filter_column_listc                 C   sš  |   ||dd¡rdS |   ||dd¡r(dS |du r6i }n| ¡ }dddddddddddddddddœ}| ¡ D ]}||vrltd| ƒ  dS qld|v r |d |d< d	|v r´|d	 |d< d
|vrÈtdƒ dS dddddddddddddœ}|d
 |vrtd|d
  ƒ dS ||d
  |d
< |d
 dkrJ| d¡du rJ| d¡du rJdS |d
 dkst|d
 dkst|d
 dkr„d|d< d|d< d|vrštdƒ dS 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< |d dks|d dkr&d|vr.td%ƒ dS nd|d< d&d'd(d)œ}
d*|vrNd&|d*< n2|d* |
vrptd+|d*  ƒ dS |
|d*  |d*< |d
 dksœ|d
 dkr |d rÎt|d ƒrÎ|  |d ¡}d,| |d< |d r t|d ƒr |  |d ¡}d,| |d< | d¡r2t|d ƒd-kr2td.|d  ƒ dS | d/¡rdt|d/ ƒd-krdtd0|d/  ƒ dS | d¡r–t|d ƒd1kr–td2|d  ƒ dS | d3¡rÈt|d3 ƒd1krÈtd4|d3  ƒ dS |d
 dkrt|d ƒt	u r| j
|d Ž }t|ƒd1krtd5| ƒ dS d6|vr&d'|d6< d7|vr8d'|d7< d8|vrJd'|d8< d9|vr\d'|d9< ||||gg|d:< d;|v rŠ|d:  |d; ¡ | j |¡ d&S )<a  
        Add a data validation to a worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr  N)Úvalidater­  r.  ÚsourceÚminimumÚmaximumÚignore_blankÚdropdownÚ
show_inputÚinput_titleÚinput_messageÚ
show_errorÚerror_titleÚerror_messageÚ
error_typeÚother_cellsz+Unknown parameter '%s' in data_validation()r  r´  r.  rµ  r³  z5Parameter 'validate' is required in data_validation()ÚnoneÚwholeÚdecimalra  r  r  Z
textLengthÚcustom)Úanyz	any valuezwhole numberrÂ  ZintegerrÃ  ra  r  r  ztext lengthÚlengthrÄ  zJUnknown validation type '%s' for parameter 'validate' in data_validation()rº  r»  Úbetweenr­  r¶  z5Parameter 'criteria' is required in data_validation()Ú
notBetweenÚequalÚnotEqualÚgreaterThanÚlessThanÚgreaterThanOrEqualÚlessThanOrEqual)rÇ  únot betweenúequal torõ   ú==únot equal toú!=ú<>úgreater thanú>ú	less thanú<úgreater than or equal toú>=úless than or equal toú<=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
   rN  )ÚstopÚwarningÚinformationr¿  zJUnknown criteria type '%s' for parameter 'error_type' in data_validation()ú%.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  ÚcopyÚkeysr	   r}  r   rF  r   r  ra  Ú	_csv_joinr/   rÖ   rc  )r!   r8  r9  r:  r;  r‚  Úvalid_parametersÚ	param_keyÚvalid_typesZcriteria_typesZerror_typesÚ	date_timer-  r'   r'   r(   Údata_validation:  sJ   ðôÿÿþ
ÿ
þ
ðÿ
ÿ
ý

ÿ

ÿÿÿÿÿÿ ÿ




zWorksheet.data_validationc              %   C   s  |   ||dd¡rdS |   ||dd¡r(dS |du r6i }n| ¡ }dddddddddddddddddddddddddddddddddddddœ$}| ¡ D ]}||vr”td| ƒ  dS q”d|vrÈtdƒ dS 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< 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/d0d1d2d3d0d3d4œ}	d5|v r¨|d5 |	v r¨|	|d5  |d5< |d d
ksÄ|d dkr†d	|d< d6|v r
t|d6 ƒsðtd7ƒ dS |  |d6 ¡}
d8|
 |d6< d9|v rHt|d9 ƒs.td:ƒ dS |  |d9 ¡}
d8|
 |d9< d;|v r†t|d; ƒsltd<ƒ dS |  |d; ¡}
d8|
 |d;< d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNœ}|d dkr\| dO¡sÔtdPƒ dQS |dO |vrötdR|dO  ƒ dS ||dO  |dO< dS|dT< |dO  dU¡r(dV|dT< n|dO  dW¡r@dX|dT< |  | dT¡| dY¡¡|dY< ||krp|| }}||kr„|| }}t	||||ƒ}t
||ƒ}dZ|v rº|dZ }| d[d\¡}d]|v rÞ|d] rÞ|d]  ¡ |d]< | j|d^< |  jd_7  _| js‚| d`¡s‚| da¡s‚| db¡s‚| dc¡s‚| dd¡s‚| de¡s‚| df¡s‚| dg¡s‚| dh¡s‚| di¡s‚| dj¡rŠd|dk< |d dkrl|d5 d'krÄd'|d< dl|d6 |f |dm< n¨|d5 d(krðdn|d< do|d6 |f |dm< n||d5 d)kr&d)|d< dp|t|d6 ƒ|d6 f |dm< nF|d5 d*kr\d*|d< dq|t|d6 ƒ|d6 f |dm< ntdr|d5  ƒ |d dkrÈ|d5 d+kr˜ds| |dm< n0|d5 d,kr¶dt| |dm< n|d5 dukrÒdv| |dm< nö|d5 d-kròdw||f |dm< nÖ|d5 d.krdx||f |dm< n¶|d5 d/kr2dy||f |dm< n–|d5 d0krRdz||f |dm< nv|d5 d1krtd{|||f |dm< nT|d5 d2kr”d|||f |dm< n4|d5 d3kr¸d}||||f |dm< ntd~|d5  ƒ |d dkrâd| |dm< |d dkrüd€| |dm< |d dkrd| |dm< |d dkr0d‚| |dm< |d dkrÆdƒ|d< d|d]< d|d„< d|d…< | d†d‡¡ | dˆd‰¡ | dŠd‹¡ | dŒd‹¡ | ddŽ¡ | dd¡ t|d ƒ|d< t|d ƒ|d< |d dkr†dƒ|d< d|d]< | d†d‡¡ | d„d‘¡ | dˆd‰¡ | dŠd‹¡ | dŒd‹¡ | dd’¡ | d…d“¡ | dd”¡ 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œ¡ | db|d› ¡ | ddž¡ | dgdž¡ | dadž¡ | djd\¡ | dcdŸ¡ | dedŸ¡ | dddž¡ | dfdž¡ | dhd\¡ | did ¡ t|d› ƒ|d›< t|db ƒ|db< t|di ƒ|di< t|dc ƒ|dc< t|de ƒ|de< | dk¡
rNd¡| _|d† d‡k
r"|dŠ d‹k
r"d|dŠ< |dˆ d‰k
rF|dŒ d‹k
rFd|dŒ< ||d¢< z|dŠ  d£¡|dŠ< W n ttf
y|   Y n0 z|d•  d£¡|d•< W n ttf
y¬   Y n0 z|dŒ  d£¡|dŒ< W n ttf
yÜ   Y n0 || jv 
rü| j|  |¡ n|g| j|< d‹S )¤a#  
        Add a conditional format to a worksheet.

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

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr  N)$r  r@   r­  r.  rµ  r¶  Ústop_if_trueÚmin_typeÚmid_typeÚmax_typeÚ	min_valueÚ	mid_valueÚ	max_valueÚ	min_colorÚ	mid_colorÚ	max_colorÚ
min_lengthÚ
max_lengthÚmulti_rangeÚ	bar_colorÚbar_negative_colorÚbar_negative_color_sameÚ	bar_solidÚbar_border_colorÚbar_negative_border_colorÚbar_negative_border_color_sameÚbar_no_borderÚbar_directionÚbar_axis_positionÚbar_axis_colorÚbar_onlyÚdata_bar_2010Ú
icon_styleÚreverse_iconsÚ
icons_onlyÚiconsz.Unknown parameter '%s' in conditional_format()r  r  z4Parameter 'type' is required in conditional_format()ÚcellIsr  r  ÚaboveAverageÚduplicateValuesÚuniqueValuesÚtop10r…  Ú
timePeriodÚcontainsBlanksÚnotContainsBlanksÚcontainsErrorsÚnotContainsErrorsÚ2_color_scaleÚ3_color_scaleÚdataBarÚ
expressionÚiconSet)Úcellr  r  ÚaverageZ	duplicateÚuniqueÚtopÚbottomr…  Ztime_periodÚblanksZ	no_blanksÚerrorsZ	no_errorsr  r  Údata_barr-  Zicon_setz?Unknown value '%s' for parameter 'type' in conditional_format()r  Ú	directionrÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  ÚcontainsTextZnotContainsÚ
beginsWithÚendsWithÚ	yesterdayÚtodayZ	last7DaysZlastWeekZthisWeekZnextWeekZ	lastMonthZ	thisMonthZ	nextMonth)rÇ  rÏ  rÐ  rõ   rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  Z
containingznot containingzbegins withz	ends withr%  r&  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthr­  r.  z5Conditional format 'value' must be a datetime object.rà  rµ  z7Conditional format 'minimum' must be a datetime object.r¶  z7Conditional format 'maximum' must be a datetime object.Z3ArrowsZ3FlagsZ3TrafficLights2Z3SymbolsZ4ArrowsZ4RedToBlackZ4TrafficLightsZ5ArrowsGrayZ	5QuartersZ3ArrowsGrayÚ3TrafficLightsZ3SignsZ	3Symbols2Z4ArrowsGrayZ4RatingZ5ArrowsZ5Rating)Z3_arrowsZ3_flagsZ3_traffic_lights_rimmedZ3_symbols_circledZ4_arrowsZ4_red_to_blackZ4_traffic_lightsZ5_arrows_grayZ
5_quartersZ3_arrows_grayZ3_traffic_lightsZ3_signsZ	3_symbolsZ4_arrows_grayZ	4_ratingsZ5_arrowsZ	5_ratingsr  z^The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format()rV  z/Unknown icon_style '%s' in conditional_format()rG   Útotal_iconsÚ4r©  Ú5r¨  r	  rø  ú$rF   r@   Úpriorityr
   r  rü  rý  rú  rû  rþ  rÿ  r   r  r  r  Úis_data_bar_2010zNOT(ISERROR(SEARCH("%s",%s)))r-  Ú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))Ú
colorScalerî  rô  rí  Úminrï  Úmaxrð  r   rò  ró  z#FF7128rõ  z#FFEF9CÚ
percentilez#F8696Bz#FFEB84z#63BE7Brñ  é2   ÚautoMinÚx14_min_typeÚautoMaxÚx14_max_typerù  z#638EC6r  Fz#FF0000z#000000éÚ  rB  rõ   )r  rä  rå  r	   r   rF  r}  rú   Ú_set_icon_propsr   r   rY  Ú_get_dxf_indexrÚ   rÙ   r   Ú
setdefaultr   rY   ÚlstripÚKeyErrorÚAttributeErrorr×   rc  )r!   r8  r9  r:  r;  r‚  Úvalid_parameterrè  Z
valid_typeZcriteria_typerê  Zvalid_iconsrD  Ú
start_cellr'   r'   r(   Úconditional_format&	  sì   Ü'ÿíÿà#


ïÿ
ÿ






ÿþýüûúùø	÷
öõ
ÿ

ÿ

þÿ

þÿ
ÿÿÿþÿþÿþÿþÿÿÿ
þÿÿ



ÿ
ÿzWorksheet.conditional_formatc                 C   s  i }i }|du ri }n|  ¡ }| jr0tdƒ dS |  ||dd¡rDdS |  ||dd¡rXdS ||krj|| }}||kr||| }}ddddddddddd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¡rÔt d|¡rätd| ƒ dS t d |¡rtd!| ƒ dS t d"|¡st d#|¡r.td$| ƒ dS d%|v rp|d% |d%< |d% du rZd&|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 ]B}|d+t|ƒ d&d&dd&ddd,œ}d*|v r|t|d* ƒkrd|d* |d  }nd}|r| d-d¡}| d.¡r’|d. |d< |d }| ¡ }||v r¾td/| ƒ  dS d||< | d0¡|d1< d2|v r@|d2 r@|d2 }| d3¡r| d3¡}| 	d4d5¡}||d2< t||d ƒD ]}|  ||||¡ q(| d6¡rÈ|d6 }| ¡ }| 	d7d&¡}| 	dd&¡}|d8kr‚d9}|d:krd;}||d6< |  ||d ¡}| d<d¡}|  |||||¡ n2| d=¡rú|d= }||d=< |  |||| d-¡¡ |dur| ¡ |d-< |||d < |d*  |¡ |d
 rL|  |||d |d1 ¡ |d7 }qd>|v r
|d> }d}t||d ƒD ]Œ}d}t||d ƒD ]j}|t|ƒk rò|t|| ƒk rò|| | }||v râ|  ||||| ¡ n|  |||d¡ |d7 }q’|d7 }q|| j |¡ dS )?aY  
        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: Not supported in constant_memory mode.
            -2: Row or column is out of worksheet bounds.
            -3: Incorrect parameter or option.
        Nz5add_table() isn't supported in 'constant_memory' moder  Tr  )r¥  Úbanded_columnsÚbanded_rowsÚcolumnsrq  Úfirst_columnÚ
header_rowÚlast_columnrS   ÚstyleÚ	total_rowz%Unknown parameter '%s' in add_table()rV  rC  rF  r¥  r
   r   z1Must have at least one data row in in add_table()rE  FZshow_first_colrG  Zshow_last_colZshow_row_stripesrB  Zshow_col_stripesZheader_row_countrI  Ztotals_row_shownrS   ú 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]?[0-9]+$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()rH  rF   ZTableStyleMedium9rB  Za_rangerD  ZColumn)ÚidrS   Útotal_stringÚtotal_functionÚtotal_valuer-  r@   Úname_formatr@   ru   z*Duplicate header name in add_table(): '%s'Zheader_formatrO  r-  rõ   ú@z[#This Row],rM  r:   Z	countnumsÚ	countNumsZstddevÚstdDevrN  rL  rq  )rä  rV   r	   r  rå  r}  rý   rþ   ÚUNICODErY  r   rB  r  r   Úlowerrú   r<  rû   Ú_table_function_to_formular  r:  rc  r  rÊ   )r!   r8  r9  r:  r;  r‚  r¥   rº   r?  rè  Znum_rowsrS   Zfirst_data_rowZlast_data_rowÚcol_idZ
seen_namesÚcol_numZcol_dataZ	user_dataZxformatZheader_namer-  r  Úfunctionr.  rL  rq  ÚiÚjr7   r  r'   r'   r(   Ú	add_table  s`   

õ




ÿ
ÿÿ
ÿÿ


ø

ÿ


ÿÿ
ÿ
ÿ

ÿ
 
zWorksheet.add_tablec                 C   sø  |   ||dd¡rdS dt||ƒgi}|du r0i }dddddddddddddddddddddddddddœ}| ¡ D ]}||vrrtd| ƒ  dS qrd|vr¦tdƒ d	S | d
d¡}|dvrÆtdƒ d	S |dkrÒd}||d
< d|v rt|d ƒtu r|d |d< n|d g|d< t|d ƒtu r2|d |d< n|d g|d< t|d ƒ}t|d ƒ}	||	krnt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rÔd,|d-< n|d.krèd/|d-< nd0|d-< | d1¡}|rd|vr|
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)ÚlocationrB  r  Ú
high_pointÚ	low_pointÚnegative_pointsÚfirst_pointÚ
last_pointÚmarkersrH  Úseries_colorÚnegative_colorÚmarkers_colorÚfirst_colorÚ
last_colorÚ
high_colorÚ	low_colorr1  r0  ÚaxisÚreverseÚempty_cellsÚshow_hiddenZplot_hiddenÚ	date_axisÚweightz)Unknown parameter '%s' in add_sparkline()rB  z0Parameter 'range' is required in add_sparkline()r  r  Úline)rq  ÚcolumnÚwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()rs  Zstackedr]  ÚrangeszMMust have the same number of location and range parameters in add_sparkline()Úcountr+  rF   rõ   ú!r^  Úhighr_  Úlowr`  Únegativera  Úfirstrb  Úlastrc  r0  r1  rk  rl  rn  rd   rp  rm  Zzeror   ÚemptyZconnectÚspanZgapro  rH  Zseriesrd  re  rf  rg  rh  ri  rj  )r  r   rå  r	   r}  r  ra  r   r   rS   rY  r<  rc  r   Ú_set_spark_colorrË   )r!   r  r7   r‚  Ú	sparklinerç  rè  Z
spark_typeZrange_countZlocation_countÚ	sheetnameZ
new_rangesÚspark_rangeZnew_locationsr]  r|  Z
date_rangeZstyle_idrH  r'   r'   r(   Úadd_sparkline*  sâ    æ









zWorksheet.add_sparklinec                 C   s^   d}t ||ƒ}||kr || }}||kr2|| }}t||||ƒ}|dkrLdS |||gg| _dS )a‰  
        Set the selected cell or cells in a worksheet

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

        Returns:
            0:  Nothing.
        NÚA1)r   r   rc   )r!   r8  r9  r:  r;  Ú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   rf   )r!   r  r7   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)rg   )r!   r  r7   Útop_rowÚleft_colÚ	pane_typer'   r'   r(   Úfreeze_panes3  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.

        rN  N)rŽ  )r!   ÚxÚyr‹  rŒ  r'   r'   r(   Úsplit_panesJ  s    zWorksheet.split_panesrK   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 <= 400rK   N)r	   r   r’   )r!   r’   r'   r'   r(   Úset_zoom\  s    zWorksheet.set_zoomc                 C   s
   d| _ dS )zš
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        r
   N)r•   rò   r'   r'   r(   Úright_to_leftn  s    zWorksheet.right_to_leftc                 C   s
   d| _ dS )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r–   rò   r'   r'   r(   Ú	hide_zero{  s    zWorksheet.hide_zeroc                 C   s   t |ƒ| _dS )z“
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   re   ©r!   Úcolorr'   r'   r(   Úset_tab_colorˆ  s    zWorksheet.set_tab_colorrF   c                 C   s„   |dkr|   |¡}|si }ddddddddddddddddddœ}| ¡ D ]&}||v rd|| ||< qJtd| ƒ qJ||d< || _dS )zù
        Set the password and protection options of the worksheet.

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

        Returns:
            Nothing.

        rF   TF)ÚsheetÚcontentÚobjectsÚ	scenariosÚformat_cellsÚformat_columnsÚformat_rowsÚinsert_columnsÚinsert_rowsÚinsert_hyperlinksÚdelete_columnsÚdelete_rowsÚselect_locked_cellsÚsortr¥  Úpivot_tablesÚselect_unlocked_cellszUnknown protection object: '%s'ÚpasswordN)Ú_encode_passwordrå  r	   r   )r!   rª  r‚  ÚdefaultsÚkeyr'   r'   r(   Úprotect•  s8    
ïzWorksheet.protectc                 C   sr   |du rt dƒ dS | d¡}| dd¡}|  jd7  _|du rNd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+  rF   r
   ZRange)r	   r<  rY  r   r  r«  rŽ   rc  ©r!   rD  Ú
range_namerª  r'   r'   r(   Úunprotect_rangeÈ  s    

zWorksheet.unprotect_rangec                 C   sT   |   ||dd¡r$td||f ƒ dS |du r0i }|  |||¡}| 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°   rc  r¨   )r!   r  r7   r‚  Úbuttonr'   r'   r(   Úinsert_buttonç  s    zWorksheet.insert_buttonc                 C   s   d| _ d| _dS )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TN©rl   rj   rò   r'   r'   r(   Úset_landscape  s    zWorksheet.set_landscapec                 C   s   d| _ d| _dS )z€
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r
   TNrµ  rò   r'   r'   r(   Úset_portrait  s    zWorksheet.set_portraitc                 C   s
   d| _ dS )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        r
   N)rÛ   rò   r'   r'   r(   Úset_page_view'  s    zWorksheet.set_page_viewc                 C   s   |r|| _ d| _dS )z˜
        Set the paper type. US Letter = 1, A4 = 9.

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)rk   rj   )r!   rk   r'   r'   r(   Ú	set_paper4  s    zWorksheet.set_paperc                 C   s   d| _ d| _dS )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr
   N)rm   rn   rò   r'   r'   r(   Úcenter_horizontallyC  s    zWorksheet.center_horizontallyc                 C   s   d| _ d| _dS )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr
   N)rm   ro   rò   r'   r'   r(   Úcenter_verticallyQ  s    zWorksheet.center_verticallyrH   rI   c                 C   s   || _ || _|| _|| _dS )zò
        Set all the page margins in inches.

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

        Returns:
            Nothing.

        N)r|   r}   r~   r   )r!   ÚleftÚrightr  r  r'   r'   r(   Úset_margins_  s    zWorksheet.set_marginsc                 C   sj  |}|  dd¡}t|ƒdkr(tdƒ dS |durDt|tƒsHd|i}ni }| ¡ }|dur`||d< g | _| d¡rŽ| j | d¡| d¡d	g¡ | d
¡r¶| j | d
¡| d¡dg¡ | d¡rÞ| 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| _|rfd| _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_docrJ   T)rY  r   r	   r  r   rä  ry   r}  rc  ru  rw   rx   ru   r€   rt   r©   )r!   ru   r‚  rÁ  Zheader_origÚplaceholder_countÚimage_countr'   r'   r(   Ú
set_headerr  sZ    


þ
þ
þ


þ



zWorksheet.set_headerc                 C   sj  |}|  dd¡}t|ƒdkr(tdƒ dS |durDt|tƒsHd|i}ni }| ¡ }|dur`||d< g | _| d¡rŽ| j | d¡| d¡d	g¡ | d
¡r¶| j | d
¡| d¡dg¡ | d¡rÞ| 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| _|rfd| _dS )zù
        Set the page footer caption and optional margin.

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

        Returns:
            Nothing.

        r¿  rÀ  râ  zCFooter string cannot be longer than Excel's limit of 255 charactersNrÁ  rÂ  rÃ  ZLFrÄ  rÅ  ZCFrÆ  rÇ  ZRFzONumber of footer images (%s) doesn't match placeholder count (%s) in string: %srÈ  rÉ  rJ   T)rY  r   r	   r  r   rä  rz   r}  rc  ru  rw   rx   rv   r   rt   r©   )r!   rv   r‚  rÁ  Zfooter_origrÊ  rË  r'   r'   r(   Ú
set_footer¾  sZ    


þ
þ
þ


þ



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:$%drv  )r   rS   r‚   )r!   r8  r:  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
   r,   rv  )r   r   rS   rƒ   )r!   r9  r;  r£  r€  r'   r'   r(   Úrepeat_columns$  s    


zWorksheet.repeat_columnsc                 C   sB   |dkrd| _ d| _d| _n"|dkr2d| _ d| _nd| _ d| _dS )a1  
        Set the option to hide gridlines on the screen and the printed page.

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

        Returns:
            Nothing.

        r   r
   TN)rp   rq   rm   )r!   Úoptionr'   r'   r(   Úhide_gridlines?  s    zWorksheet.hide_gridlinesc                 C   s   d| _ d| _dS )z¢
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

        TN)rr   rm   rò   r'   r'   r(   Úprint_row_col_headersW  s    zWorksheet.print_row_col_headersc                 C   s
   d| _ dS )zž
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)rs   rò   r'   r'   r(   Úhide_row_col_headerse  s    zWorksheet.hide_row_col_headersc                 C   sJ   |dkr0|dkr0|| j d kr0|| jd kr0dS |  ||||¡}|| _dS )aÃ  
        Set the print area in the current worksheet.

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

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

        r   r
   N)r[   r\   r¢  r„   )r!   r8  r9  r:  r;  r£  r'   r'   r(   Ú
print_arear  s    ÿþÿzWorksheet.print_areac                 C   s   d| _ d| _dS )z„
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r
   TN)r…   rj   rò   r'   r'   r(   Úprint_across‘  s    zWorksheet.print_acrossc                 C   s   d| _ || _|| _d| _dS )a  
        Fit the printed area to a specific number of pages both vertically and
        horizontally.

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

        Returns:
            Nothing.

        r
   TN)rˆ   r‰   rŠ   rj   )r!   r–  rœ  r'   r'   r(   Úfit_to_pagesŸ  s    zWorksheet.fit_to_pagesc                 C   s
   || _ dS )zœ
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r‡   )r!   Z
start_pager'   r'   r(   Úset_start_page±  s    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”   rj   )r!   Úscaler'   r'   r(   Úset_print_scale¾  s    
zWorksheet.set_print_scalec                 C   s   d| _ d| _dS )z”
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r†   rj   rò   r'   r'   r(   Úprint_black_and_whiteÔ  s    zWorksheet.print_black_and_whitec                 C   s
   || _ dS )z¿
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)r‹   ©r!   Úbreaksr'   r'   r(   Úset_h_pagebreaksâ  s    zWorksheet.set_h_pagebreaksc                 C   s
   || _ dS )zÂ
        Set the horizontal page breaks on a worksheet.

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

        Returns:
            Nothing.

        N)rŒ   rÛ  r'   r'   r(   Úset_v_pagebreaksï  s    zWorksheet.set_v_pagebreaksc                 C   s(   |dur|| _ ndt| jd ƒ | _ dS )zç
        Set the VBA name for the worksheet. By default this is the
        same as the sheet name: i.e., Sheet1 etc.

        Args:
            name: The VBA name for the worksheet.

        Returns:
            Nothing.

        NZSheetr
   )rÜ   r  rT   )r!   rS   r'   r'   r(   Úset_vba_nameü  s    zWorksheet.set_vba_namec              
   C   s^   |du rdS |  ¡ }ddddddddddœ	}| ¡ D ]}||vr4td| ƒ  dS q4|| _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  T)	Únumber_stored_as_textÚ
eval_errorÚformula_differsÚformula_rangeÚformula_unlockedÚempty_cell_referenceÚlist_data_validationÚcalculated_columnÚtwo_digit_text_yearz)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   s2  |d | _ |d | _|d | _|d | _|d | _|d | _|d | _|d | _|d	 | _|d
 | _	|d | _
|d | _|d | _|d | _|d | _|d | _|d | _| jrìd| _d| _d| _d| _d| _d| _d| _d| _d| _d| _| jr.tj| jd\}}t |¡ || _t |ddd| _!| j!| _"d S )NrS   rT   rU   ré   rV   rW   rÝ   rß   râ   rà   rá   rã   rä   rZ   rå   ræ   rñ   g     €)@é   rI   r
   ç      à?F)Údirzw+úutf-8©ÚmodeÚencoding)#rS   rT   rU   ré   rV   rW   rÝ   rß   râ   rà   rá   rã   rä   rZ   rå   ræ   rñ   rž   rŸ   r    r|   r}   r~   r   r€   r   rw   ÚtempfileZmkstempr~  Úcloserç   Úopenrè   rh  )r!   Z	init_dataÚfdr  r'   r'   r(   Ú_initialize<  sD    

















zWorksheet._initializec                 C   s  |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | jsH|  ¡  n|  	¡  |  
¡  |  ¡  | jrn|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |   d¡ |  !¡  d S )NÚ	worksheet)"Z_xml_declarationÚ_write_worksheetÚ_write_sheet_prÚ_write_dimensionÚ_write_sheet_viewsÚ_write_sheet_format_prÚ_write_colsrV   Ú_write_sheet_dataÚ_write_optimized_sheet_dataÚ_write_sheet_protectionÚ_write_protected_rangesrZ   Ú_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_listrg  Z
_xml_closerò   r'   r'   r(   Ú_assemble_xml_fileg  sD    

zWorksheet._assemble_xml_filec                 C   s¼   |dk s|dk rdS || j ks(|| jkr,dS |sH|sH| jrH|| jk rHdS |s€| jd u s`|| jk rf|| _| jd u sz|| jkr€|| _|s¸| jd u s˜|| jk rž|| _| jd u s²|| jkr¸|| _dS r  )r[   r\   rV   rÕ   r^   r_   r`   ra   )r!   r  r7   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(   rF  ì  s    þzWorksheet._convert_date_timec                 C   sÔ   d}d}d}d}t |dƒ}	t |dƒ}
dt|d ƒ }dt|d ƒ }|dkrh|| jd krh|	}|
}d}n4|dkrŒ|| jd krŒ|}|}d}n|	| }|
| }||kr®|s®|}n|d | }t| jƒ}|d | }|S )NrF   r   r
   r+  r,   rv  )r   r  r[   r\   r   rS   )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rN|d |… }|S )Nr   iÿ  )ÚsetÚremovera  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 ]F}| d¡r>|dd … }| d¡rT|d d… }| dd¡}| |¡ q$|S )Nz"(?:[^"]|"")*"|\S+ú"r
   r  z"")rý   ÚcompileÚfindallrú   rü   rY  rc  )r!   r  Ztoken_rerj  Z
new_tokensr  r'   r'   r(   rª  4  s    



z Worksheet._extract_filter_tokensc                 C   sŽ   t |ƒdkr~|d }t d|¡r&d}n"t d|¡r8d}ntd||f ƒ |  ||dd… ¡}|  ||dd… ¡}||g | S |  ||¡S d S )	Nr•  rG   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!   r  rj  ZconditionalZexpression_1Zexpression_2r'   r'   r(   r«  U  s    ÿz"Worksheet._parse_filter_expressionc                 C   s  dddddddddddddœ}|  |d d ¡}|d }t d|d	  ¡ ¡rÔt|d ƒ}|dk sf|d
krvtd||f ƒ | ¡ }|dkrž|dkržtd||f ƒ |d	  ¡ dkr´d}nd}|d dkrÌ|d7 }t|ƒ}|sô|d	 rôtd|d	 |f ƒ t d| ¡ ¡rl|dkr.|dkr.td|d |f ƒ | ¡ }|dkrP|dkrld}n|dkrdd}d}nd}d}|dkrˆt d|¡rˆd}||gS )NrN  r¨  r
   rG   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 500Úitemsú%z?The type '%s' in expression '%s' must be either 'items' or '%%'r  é   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'r  rJ  z[*?]é   )r}  rý   rþ   rT  r   r	   r  r2  )r!   r  rj  Ú	operatorsÚoperatorr  r.  r'   r'   r(   r  q  sj    òÿÿ
ÿ
þ


zWorksheet._parse_filter_tokensc           
      C   s†   d}t |ƒ}g }|D ]B}|d7 }t|ƒ|> }|d@ }|d@ }|dL }||B }| |¡ qd}|D ]}	||	N }q`||N }|dN }d| S )Nr   r
   rE   i €ÿ?rL   iKÎ  z%X)r   Úordrc  )
r!   Z	plaintextrY  ru  ÚdigitsÚcharZlow_15Zhigh_15Zpassword_hashÚdigitr'   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r6||d< |rTd }d}d}t
 d|¡r`|  |¡}t
 d|¡rx|  |¡}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rTt|ƒ| jkr&td#|| jf ƒ n.| j |¡sF| j |||g¡ |  |¡|d< | j |
¡s‚| j d$d%t|ƒ d& | g¡ |  |
¡|d< d S )'NrN  g      X@rë  é5%  r
   ú/drawingú../drawings/drawingú.xmlr  Ú
dimensionsr–  rœ  rz  Úshaperƒ  r   Ú	rel_indexÚurl_rel_indexrK  r{  ú
/hyperlinkÚExternalr÷   ú^mailto:rO  rF   rR  ú%23rS  rT  rU  rQ  rP  rM  ú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Á   rc  r  Ú_add_drawing_objectrý   rþ   rZ  rY  r   ræ   r	   rÎ   r}  rÆ   Ú_get_drawing_rel_index)r!   rT   Úimage_idÚ
drawing_idr–  rœ  rS   Ú
image_typeÚx_dpiÚy_dpiÚdigestÚdrawing_typer  r7   r:   rt  ru  rv  rw  rJ  rK  rƒ  rz  r{  r.  rÍ   Údrawing_objectÚtargetÚrel_typeÚtarget_moder'   r'   r(   Ú_prepare_imageÝ  s¢    þÿÿþý





þ
ÿÿÿÿþÿzWorksheet._prepare_imagec                 C   s@  d}| j | \}}}}}}	}
}}}}| d| jd ¡}| d| jd ¡}||9 }||	9 }|  |||||||¡}td|d  ƒ}td|d  ƒ}| jsÆtƒ }d|_|| _| j	 
dd	t|ƒ d
 d g¡ n| j}tdd|ƒ}|
|_| ¡ }||d< ||d< ||d< ||d< ||d< ||d< ||d< d|d< d|d< | d¡|d< ||d< | dd ¡}|r<d }d}d}t d|¡rz|  |¡}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 ƒ n.| j |¡s.| j 
|||g¡ |  |¡|d< d S )"NrG   r–  rœ  r  rë  r*  r
   r+  r,  r-  ZrectZTextBoxr  r.  rz  r/  rƒ  r   r0  r1  rK  r{  rJ  r2  r3  r÷   r4  rO  rU  rR  r5  rM  r6  )rÌ   r}  r¢   r    r:  r   rÍ   r   r;  rÁ   rc  r  r   r…  r<  rý   rþ   rZ  rY  r   ræ   r	   rÎ   rÆ   r=  )r!   rT   r?  rD  r  r7   rt  ru  rv  rw  r…  rƒ  r‚  rz  r{  r–  rœ  r.  rÍ   r/  rE  rJ  rF  rG  rH  r'   r'   r(   Ú_prepare_shape?  s†    ÿÿÿþý



þ
ÿÿzWorksheet._prepare_shapec
              	   C   sb   t  dd|¡}| j |	¡s:| j ddt|ƒ d | g¡ |  |	¡}
| j |||||||
g¡ d S )Nz\..*$rF   r7  r8  r9  )	rý   r?  rÐ   r}  rÇ   rc  r  Ú_get_vml_drawing_rel_indexr{   )r!   r>  r–  rœ  rS   r@  ZpositionrA  rB  rC  Zref_idr'   r'   r(   Ú_prepare_header_image“  s    ÿÿþÿ
ÿzWorksheet._prepare_header_imagec                 C   s$   | j  ddt|ƒ d | g¡ d S )Nr7  r8  r9  )rÅ   rc  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s¢tƒ }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ë  r+  r,  r-  r  r.  r–  rœ  rS   r/  rƒ  r0  r   r1  rK  rz  r{  z/chartz../charts/chart)rÈ   rK  r   r–  rœ  r:  Z
chart_namerÍ   r   r;  rÁ   rc  r  r<  r=  rÆ   )r!   rT   Zchart_idr?  rD  r  r7   r‡  rt  ru  rv  rw  rƒ  rz  r{  r–  rœ  r.  rS   rÍ   rE  r'   r'   r(   Ú_prepare_chart­  sV    ÿ
ÿÿþÿÿþÿzWorksheet._prepare_chartc              
   C   s¢   |   |||||||¡\
}}}}}}	}
}}}tdd|  ƒ}tdd|  ƒ}tdd|
  ƒ}
tdd|  ƒ}tdd|  ƒ}tdd|  ƒ}||||||	|
|||f
S )Nrë  r*  )Ú_position_object_pixelsr   )r!   Ú	col_startÚ	row_startÚx1Úy1r–  rœ  rƒ  Úcol_endÚrow_endÚx2Úy2Úx_absÚy_absr'   r'   r(   r:  à  s    
ÿþ
ÿzWorksheet._position_object_emusc              
   C   sú  d}d}	|dk r4|dkr4||   |d ¡7 }|d8 }q|dk r`|dkr`||  |d ¡7 }|d8 }q4|dk rld}|dk rxd}| jrœt|ƒD ]}
||   |
¡7 }q†n|| j| 7 }||7 }| jrÖt|ƒD ]}|	|  |¡7 }	qÀn|	| j| 7 }	|	|7 }	||   ||¡kr||   |¡8 }|d7 }qì||  ||¡krB||  |¡8 }|d7 }q|}|}|   ||¡dkrd|| }|  ||¡dkr~|| }||   ||¡kr¬||   ||¡8 }|d7 }q~||  ||¡krÚ||  ||¡8 }|d7 }q¬|}|}||||||||||	g
S r   )Ú	_size_colÚ	_size_rowr»   rB  r¢   r¼   r    )r!   rP  rQ  rR  rS  r–  rœ  rƒ  rX  rY  rV  Zrow_idrT  rU  rV  rW  r'   r'   r(   rO    sZ    


ÿz!Worksheet._position_object_pixelsc                 C   s‚   d}d}d}|| j v rx| j | d }| j | d }|rD|dkrDd}q~|dk rbt|||  d ƒ}q~t|| d ƒ| }n| j}|S )Nr•  r¨  r   r
   r©  rë  )r¸   r   r¢   )r!   r7   rƒ  Úmax_digit_widthÚpaddingÚpixelsr–  rd   r'   r'   r(   rZ  z  s    
zWorksheet._size_colc                 C   s\   d}|| j v rJ| j | d }| j | d }|r<|dkr<d}qXtd| ƒ}ntd| j ƒ}|S )Nr   r
   r©  gUUUUUUõ?)r¹   r   rŸ   )r!   r  rƒ  r^  rœ  rd   r'   r'   r(   r[  •  s    
zWorksheet._size_rowc                 C   s.   d}d}|dkr|||  }n|| | }|S )Ng      @g      @é   r'   )r!   r^  r\  r]  r–  r'   r'   r(   rš  ª  s    zWorksheet._pixels_to_widthc                 C   s   d| S )NrI   r'   )r!   r^  r'   r'   r(   rž  ¶  s    zWorksheet._pixels_to_heightc                 C   sl  d}d}d}d dd d d d ||d dd ddddd	œ}|  ¡ D ]}	||	 ||	< q8|d
 sZ||d
< |d sj||d< t|d ƒ ¡ |d< |d  ddd¡|d< |d d urÀt|d ƒ\}
}|
|d< ||d< | j}| j}|d d u rL|dkrìd|d< n`||d kr|d |d< nD||d kr$|d |d< n(||d kr@|d |d< n|d |d< |d d u r¾|dkrnd|d< nP||d kr†d|d< n8||d kržd|d< n ||d kr¶d|d< nd|d< |d d u r,||d krè|d |d< nD||d kr|d |d< n(||d kr |d |d< n|d |d< |d d u rŠ||d krRd|d< n8||d krjd|d< n ||d kr‚d|d< nd|d< |d r¨|d
 |d  |d
< |d rÆ|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é   rN  )rŒ  r˜  r@  Ú	start_colÚ	start_rowr‰  r–  rœ  rt  rv  ru  rw  Ú	font_nameÚ	font_sizeÚfont_familyr–  rœ  r˜  ZffrR  r@  rd  rc  rG   r•  r  r¨  ru  é   é   r’  r©  rt  é1   rL   rv  rw  rë  rŒ  r‰  re  rf  rg  )
rå  r   rT  rY  r   r[   r\   r   rO  rc  )r!   r  r7   r  r‚  Údefault_widthÚdefault_heightrƒ  Úparamsr­  rd  rc  Ú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 ]}
||
 |	|
< q6|	 d¡}|d u rbd| }||d d< |	 d¡rŠd|	d  |d< nd	| |d< |	 d
¡|d
< |	 d|¡|	d< |	 d|¡|	d< |	 dd¡|	d< |	 dd¡|	d< |	d |	 dd¡ |	d< |	d |	 dd¡ |	d< td|	d  ƒ|	d< td|	d  ƒ|	d< ||	d< ||	d< |  |	d |	d |	d |	d |	d |	d |¡}| |	d ¡ | |	d ¡ ||d< |S )Nr   r
   )r  r7   ÚfontÚcaptionz	Button %drr  Zmacroz[0]!z[0]!Button%d_Clickrz  r–  rœ  rt  ru  rv  rw  rë  rd  rc  rp  )	r    r¢   r   r°   rå  r}  r   rO  rc  )r!   r  r7   r‚  rl  rk  rƒ  Zbutton_numberr³  rm  r­  rs  rp  r'   r'   r(   r²  6  sD    

þzWorksheet._button_paramsc                 C   sX  g }t | j ¡ ƒ}|D ]²}t | j|  ¡ ƒ}|D ]–}	| j| |	 }
| j|
Ž }|| j| |	< | jrˆ| j| |	 d d u rˆd| j| |	 d< | j| |	 d d u r²| j| j| |	 d< | | j| |	 ¡ q0q| 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
   rG   ú/vmlDrawingú../drawings/vmlDrawingú.vmlz	/commentsz../commentsr-  rP   z%s,%d)Úsortedr«   rå  rq  r®   r­   rc  rÃ   r  rª   r¬   rÂ   r   rB  r   rê   r¯   )r!   rê   r¯   Úvml_drawing_idZ
comment_idr«   Úrow_numsr  Úcol_numsr7   Zuser_optionsrm  ru  Zstart_data_idrY  r'   r'   r(   Ú_prepare_vml_objectsy  sJ    
ÿþÿÿþÿzWorksheet._prepare_vml_objectsc                 C   s&   || _ | j ddt|ƒ d g¡ d S )Nrt  ru  rv  )r±   rÃ   rc  r  )r!   r±   rx  r'   r'   r(   Ú_prepare_header_vml_objects­  s    ÿÿÿz%Worksheet._prepare_header_vml_objectsc                 C   sˆ   | j D ]|}||d< | d¡d u r0dt|ƒ |d< |d  ¡ }||v rVtd|d  ƒ‚nd||< | j ddt|ƒ d g¡ |d	7 }qd S )
NrK  rS   ZTablez2Duplicate name '%s' used in worksheet.add_table().Tz/tablez../tables/tabler-  r
   )rÊ   r}  r  rT  r   rÄ   rc  )r!   Ztable_idÚseenr¥   rS   r'   r'   r(   Ú_prepare_tables¶  s(    
ÿÿÿþÿzWorksheet._prepare_tablesc              	   C   sx   d}|  dd¡}|  dd¡}|  dd¡}|  dd	¡}d
ddddddddœ}||v rh|| }d||f }ntd| ƒ |S )NrF   ú'z''rR  z'#ú]z']ú[z'[ée   éf   ég   éh   éi   ék   ém   én   )r  rQ  ru  r1  r0  rR  ÚsumÚvarzSUBTOTAL(%s,[%s])z(Unsupported function '%s' in add_table())rY  r	   )r!   rX  Zcol_namer-  Z	subtotalsZfunc_numr'   r'   r(   rU  Ð  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 ]à}|| jvr6| d ¡ qt||d ƒD ]¶}|| j| v rð| j| | }t|ƒj}	|	dkrˆ| d|j ¡ qú|	dkr®|j}
| j 	|
¡}| |¡ qú|	dks¾|	dkrÜ|j
}|d u rÐd}| |¡ qú|	d	krú| d
¡ qD| d ¡ qDq|S )Nr'   r
   r>   rà  r=   rB   rC   r   r?   rF   )rV   rB  r¥   rc  r  Ú__name__r#  r  rU   Z_get_shared_stringr.  )r!   rQ  rP  rU  rT  rq  Úrow_numrW  r  Útype_cell_namerT   r  r.  r'   r'   r(   Ú_get_range_dataô  s8    


ÿzWorksheet._get_range_datac                 G   s   dd„ |D ƒ}d  |¡S )Nc                 S   s"   g | ]}t |tƒst|ƒn|‘qS r'   )r  r  )r6   Úitemr'   r'   r(   r8   0  s   ÿz'Worksheet._csv_join.<locals>.<listcomp>ú,)Újoin)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}r!  z%25r  z%22rJ  z%20rØ  z%3crÖ  z%3er  z%5br€  z%5dú^z%5eú`z%60r0  z%7brö   z%7d)rý   r2  rY  )r!   rJ  r'   r'   r(   rZ  5  s    zWorksheet._escape_urlc                 C   sV   |d u r|  j d7  _ | j S | j |¡r2| j| S |  j d7  _ | j | j|< | j S d S ©Nr
   )rÏ   rÎ   r}  ©r!   rF  r'   r'   r(   r=  I  s    
z Worksheet._get_drawing_rel_indexc                 C   s:   | j  |¡r| j | S |  jd7  _| j| j |< | jS d S r–  )rÐ   r}  rÑ   r—  r'   r'   r(   rK  U  s
    
z$Worksheet._get_vml_drawing_rel_indexc                 C   sr  | j }| d¡ |jr | d¡ |jr0| d¡ |jr@| d¡ |jrP| d¡ |jr`| d¡ |jrr|  	|j¡ |j
dkr†|  d¡ |j
d	krš|  d
¡ | dd|jfg¡ |jdkrºnZ|jrÐ|  d|j¡ nD|jræ|  d|j¡ n.|jr|  |j¡}|  d|¡ n|  dd¡ | dd|jfg¡ | dd|jfg¡ |jdkrd|jsd| dd|jfg¡ | d¡ d S )NZrPrÚbrY  ZstrikeZoutlineZshadowr
   ZsuperscriptrN  Z	subscriptZszÚvalr  ÚthemeZindexedrŒ  ZrFontZfamilyZCalibriÚscheme)rÔ   rd  ZboldÚ_xml_empty_tagZitalicZfont_strikeoutZfont_outlineZfont_shadowÚ	underlineÚ_write_underlineZfont_scriptÚ_write_vert_alignrf  rš  Ú_write_colorZcolor_indexedZ
font_colorÚ_get_palette_colorÚ_write_rstring_colorre  rg  Ú	hyperlinkZfont_schemerg  )r!   Z	xf_formatZ
xml_writerr˜  r'   r'   r(   re  d  sH    











ÿzWorksheet._write_fontc                 C   sD   g }|dkrdg}n|dkr$dg}n|dkr2dg}| j  d|¡ d S )NrN  )r™  Zdoubleé!   )r™  ZsingleAccountingé"   )r™  ZdoubleAccountingÚu©rÔ   rœ  )r!   r  rm  r'   r'   r(   rž  ›  s    zWorksheet._write_underlinec                 C   s   d|fg}| j  d|¡ d S )Nr™  Z	vertAlignr§  ©r!   r™  rm  r'   r'   r(   rŸ  ©  s    
zWorksheet._write_vert_alignc                 C   s   ||fg}| j  d|¡ d S ©Nr˜  r§  ©r!   rS   r.  rm  r'   r'   r(   r¢  ¯  s    
zWorksheet._write_rstring_colorc                 C   s$   |d dkr|dd … }d|  ¡  S )Nr   rR  r
   ZFF)Úupperr—  r'   r'   r(   r¡  µ  s    zWorksheet._get_palette_colorc                 C   s   | j s| j ¡  d| _ d S )NT)rë   rè   rò  rò   r'   r'   r(   Ú
_opt_close¼  s    
zWorksheet._opt_closec                 C   s.   | j r*| j}t|ddd| _d| _ | j| _d S )Nza+rí  rî  F)rë   rç   ró  rè   rh  )r!   r  r'   r'   r(   Ú_opt_reopenÂ  s
    zWorksheet._opt_reopenc           
      C   sÊ  g }t |ƒD ]}| ddddœ¡ q|dkrDd|d d< d|d	 d< |d
krpd|d d< d|d	 d< d|d d< |dkr¨d|d d< d|d	 d< d|d d< d|d d< |rÆt|ƒ}||krÆ|d	 }t |ƒD ]ö}||  d¡d ur0|| d || d< || d }t|tƒr0| d¡r0| d¡|| d< ||  d¡ržd}|| d |vrltd|| d  ƒ n2|| d || d< || d dkržd|| d< ||  d¡}	|	rÎ|	dkrÎd|| d< qÎ|S )NFr   Úpercent)r­  r.  r  rG   éC   r.  r¤  r
   r©  éK   r3  é   rN  r¨  éP   é<   é(   rM   rõ   r  )r®  r2  r#  r-  zOUnknown icon property type '%s' for sub-property 'type' in conditional_format()r#  Znumr­  rÖ  T)	rB  rc  r   r}  r  r  rú   r<  r	   )
r!   r(  Z
user_propsZpropsr:   Zmax_datarY  Útmpré  r­  r'   r'   r(   r9  Ê  sR    þ

þzWorksheet._set_icon_propsc                 C   sx   d}|d }|d }|d }d}|d }d|fd|fg}| j d	krh| d
|f¡ | d|f¡ | d¡ |  d|¡ d S )Nz"http://schemas.openxmlformats.org/zspreadsheetml/2006/mainz!officeDocument/2006/relationshipszmarkup-compatibility/2006zhttp://schemas.microsoft.com/zoffice/spreadsheetml/2009/9/acÚxmlnszxmlns:rr8  zxmlns:mczxmlns:x14ac)zmc:IgnorableZx14acrö  )rY   rc  rd  )r!   Úschemar¶  Zxmlns_rZxmlns_mcZ	ms_schemaZxmlns_x14acrm  r'   r'   r(   r÷    s    þ

zWorksheet._write_worksheetc                 C   sÔ   | j d u r| jd u rd}n¤| j d u rn| jd urn| j| jkrHtd| jƒ}q¾td| jƒ}td| jƒ}|d | }nP| j | jkr–| j| jkr–t| j | jƒ}n(t| j | jƒ}t| j| jƒ}|d | }|  dd|fg¡ d S )Nrƒ  r   r,   Z	dimensionr¤  )r^   r`   ra   r   r_   rœ  )r!   r¤  r0   r1   r'   r'   r(   rù  +  s     
ÿzWorksheet._write_dimensionc                 C   s    |   d¡ |  ¡  |  d¡ d S )NZ
sheetViews)rd  Ú_write_sheet_viewrg  rò   r'   r'   r(   rú  O  s    
zWorksheet._write_sheet_viewsc                 C   s  g }| j s| d¡ | jr$| d¡ | js4| d¡ | jrD| d¡ | jrT| d¡ | jsd| d¡ | jrt| d¡ | jdkrŽ| d	| jf¡ | j	d
krÄ| jsÄ| d| j	f¡ | j
rÄ| d| j	f¡ | d¡ | jsàt| jƒr|  d|¡ |  ¡  |  ¡  |  d¡ n|  d|¡ d S )N)ZshowGridLinesr   )ZshowRowColHeadersr   )Z	showZerosr   ©ÚrightToLeftr
   )ZtabSelectedr
   ©ZshowOutlineSymbolsr   )ÚviewZ
pageLayoutrF   ÚtopLeftCellrK   Z	zoomScaleZzoomScaleNormal)ZworkbookViewIdr   Z	sheetView)rq   rc  rs   r–   r•   ri   rœ   rÛ   rf   r’   r“   rg   r   rc   rd  Ú_write_panesÚ_write_selectionsrg  rœ  ©r!   rm  r'   r'   r(   r¸  X  s:    









zWorksheet._write_sheet_viewc                 C   sŠ   | j }| j}| j}d|fg}| j | jkr2| d¡ | jrB| d¡ |rT| d|f¡ |rf| d|f¡ | jdkrz| d¡ |  d|¡ d S )	NZdefaultRowHeight©ZcustomHeightr
   )Z
zeroHeightr
   ZoutlineLevelRowZoutlineLevelColr8  ©zx14ac:dyDescentz0.25ZsheetFormatPr)rŸ   r—   r˜   rž   rc  r£   rY   rœ  )r!   rŸ   Z	row_levelZ	col_levelrm  r'   r'   r(   rû    s    




z Worksheet._write_sheet_format_prc                 C   sF   | j s
d S |  d¡ t| j  ¡ ƒD ]}|  | j | ¡ q"|  d¡ d S )NZcols)rb   rd  rw  rå  Ú_write_col_inforg  )r!   r7   r'   r'   r(   rü  ¥  s    
zWorksheet._write_colsc                 C   s>  |\}}}}}}}d}	d}
|r&|  ¡ }
|d u rB|s<d}d}	qNd}n|dkrNd}	|dkr¸d}d}|dk rtt|||  d ƒt|ƒ d ƒd }n(tt|| d ƒ| t|ƒ d ƒd }d|d fd	|d fd
d| fg}|
rì| d|
f¡ |rú| d¡ |	r
| d¡ |r| d|f¡ |r.| d¡ |  d|¡ d S )Nr
   r   rN   r•  r¨  rë  g      p@r0  r1  r–  rà  rH  )rd   r5   )ZcustomWidthr5   ÚoutlineLevel)r“  r5   r7   )Ú_get_xf_indexr   r   rc  rœ  )r!   Zcol_infoÚcol_minro  r–  r  rd   r”  r“  Zcustom_widthÚxf_indexr\  r]  rm  r'   r'   r(   rÃ  ³  s^    ÿ
ÿÿÿÿÿÿ


ý


zWorksheet._write_col_infoc                 C   s6   | j d u r|  d¡ n|  d¡ |  ¡  |  d¡ d S )NÚ	sheetData)r^   rœ  rd  Ú_write_rowsrg  rò   r'   r'   r(   rý  ê  s
    

zWorksheet._write_sheet_datac                 C   s~   | j d u r|  d¡ nd|  d¡ d}| j d¡ | j |¡}|rZ| j |¡ | j |¡}q<| j ¡  t	 
| j¡ |  d¡ d S )NrÈ  i   r   )r^   rœ  rd  rè   ÚseekÚreadrh  r
  rò  r~  Úunlinkrç   rg  )r!   Z	buff_sizerq  r'   r'   r(   rþ  õ  s    


z%Worksheet._write_optimized_sheet_datac                 C   sD   d| j fd| jfd| jfd| jfd| jfd| jfg}|  d|¡ d S )Nr¼  r½  r  r  ru   rv   ZpageMargins)r|   r}   r~   r   r€   r   rœ  rÀ  r'   r'   r(   r    s    úzWorksheet._write_page_marginsc                 C   sb  g }| j sd S | jr$| d| jf¡ | jdkr>| d| jf¡ | jr^| jdkr^| d| jf¡ | jr~| jdkr~| d| jf¡ | jrŽ| d¡ | jdkr¨| d| jf¡ | j	rº| d	¡ n
| d
¡ | j
rÔ| d¡ | jdkrè| d¡ | jr"| jr| d| jf¡ | jrR| d| jf¡ n0| jr:| d| jf¡ | jrR| d| jf¡ |  d|¡ d S )NZ	paperSizerK   rØ  r
   Z
fitToWidthZfitToHeight)Z	pageOrderZoverThenDownZfirstPageNumber)rl   Zportrait)rl   Z	landscape)ZblackAndWhiter5   r   )ZuseFirstPageNumberr5   ZhorizontalDpiZverticalDpiZ	pageSetup)rj   rk   rc  r”   rˆ   r‰   rŠ   r…   r‡   rl   r†   rX   rí   rì   rœ  rÀ  r'   r'   r(   r	    s@    






zWorksheet._write_page_setupc                 C   s^   g }| j sd S | jr| d¡ | jr.| d¡ | jr>| d¡ | jrN| d¡ |  d|¡ d S )N)ZhorizontalCenteredr
   )ZverticalCenteredr
   )Zheadingsr
   )Z	gridLinesr
   ZprintOptions)rm   rn   rc  ro   rr   rp   rœ  rÀ  r'   r'   r(   r  g  s    



zWorksheet._write_print_optionsc                 C   st   g }| j s| d¡ | js$| d¡ | jr^|  d|¡ | jrD|  ¡  | jrR|  ¡  |  	d¡ n| j
rp|  d|¡ d S )N)ZscaleWithDocr   )ZalignWithMarginsr   ZheaderFooter)rx   rc  rw   rt   rd  ru   Ú_write_odd_headerrv   Ú_write_odd_footerrg  rZ   rœ  rÀ  r'   r'   r(   r
  €  s    

zWorksheet._write_header_footerc                 C   s   |   d| j¡ d S )NZ	oddHeader)rf  ru   rò   r'   r'   r(   rÍ  ”  s    zWorksheet._write_odd_headerc                 C   s   |   d| j¡ d S )NZ	oddFooter)rf  rv   rò   r'   r'   r(   rÎ  ˜  s    zWorksheet._write_odd_footerc                 C   s$  |   ¡  t| j| jd ƒD ]}|| jv s>|| jv s>| j| rt|d ƒ}|| jv r`| j| }nd }| j| rè|| jvr†|  	||¡ n|  	||| j| ¡ t| j
| jd ƒD ].}|| j| v r¬| j| | }|  |||¡ q¬|  d¡ q|| jv r
|  ||| j| ¡ q|  ||| j| ¡ qd S )Nr
   rh  r  )Ú_calculate_spansrB  r^   r_   r‘   r«   r¥   r   r§   Ú
_write_rowr`   ra   Ú_write_cellrg  Ú_write_empty_row)r!   rŽ  Ú
span_indexr}  rW  Úcol_refr'   r'   r(   rÉ  œ  s2    ÿ


ÿÿzWorksheet._write_rowsc                 C   sÔ   | j }|| _ || jv s*|| jv s*| j| rÆd }| j| r²|| jvrP|  ||¡ n|  ||| j| ¡ t| j| jd ƒD ].}|| j| v rv| j| | }|  |||¡ qv|  	d¡ n|  
||| j| ¡ | j ¡  d S )Nr
   r  )rÕ   r‘   r«   r¥   rÐ  rB  r`   ra   rÑ  rg  rÒ  Úclear)r!   Zcurrent_row_numrŽ  r}  rW  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 rd|}|}q@||k rp|}||kr@|}q@|| jv rât | j| jd ƒD ]F}|| jv rš|| j| v rš|d u rÈ|}|}qš||k rÔ|}||krš|}qš|d d dksü|| jkrt|d ƒ}|d ur|d7 }|d7 }d||f ||< d }q|| _d S )Nr
   rh  r   z%s:%s)	rB  r^   r_   r¥   r`   ra   r«   r   r§   )r!   ÚspansZspan_minZspan_maxrŽ  rW  rÓ  r'   r'   r(   rÏ  ê  sD    


ÿzWorksheet._calculate_spansc                 C   s  d}|r|\}}}}	}
nd\}}}}	}
|d u r4| j }d|d fg}|rN| ¡ }|r`| d|f¡ |rr| d|f¡ |r€| d¡ || jkrœ| dd	| f¡ |rª| d
¡ || jkr¾| d¡ |	rÐ| d|	f¡ |
rÞ| d¡ | jdkrò| d¡ |r|  d|¡ n|  d|¡ d S )Nr   )NNr   r   r   r^  r
   rÖ  Ús)ZcustomFormatr
   Zhtz%g)rd   r
   rÁ  rÄ  )r“  r
   r8  rÂ  r  )rŸ   rÅ  rc  rž   rY   Z_xml_empty_tag_unencodedZ_xml_start_tag_unencoded)r!   r  rÖ  Ú
propertiesÚ	empty_rowrÇ  rœ  r  rd   r”  r“  rm  r'   r'   r(   rÐ    s<    







zWorksheet._write_rowc                 C   s   | j |||dd d S )NT)rÙ  )rÐ  )r!   r  rÖ  rØ  r'   r'   r(   rÒ  N  s    zWorksheet._write_empty_rowc                 C   s¶  t ||ƒ}d|fg}|jr4|j ¡ }| d|f¡ n`|| jv rn| j| d rn| j| d }| d| ¡ f¡ n&|| jv r”| j| }| d| ¡ f¡ t|ƒj}	|	dkr¸|  |j	|¡ nú|	dkrP|j
}
| jsÜ|  |
|¡ npt d|
¡}
t dd„ |
¡}
|
 d	d
¡}
|
 dd¡}
|
 d¡r6|
 d¡r6|  |
|¡ nt|
ƒ}|  |
||¡ nb|	dkrâ|j}t|jƒtkrŽ| d¡ |jrˆd}nd}nBt|jtƒrÐd}|jdkr®n"|j|v rÆ| d¡ n
| d¡ |  |j||¡ nÐ|	dkrd|jdkr| d¡ zt|jƒ W n ty.   | d¡ Y n0 |  d|¡ |   |j|j!¡ |  "|j¡ |  #d¡ nN|	dkr||  $d|¡ n6|	dkr²| d¡ |  d|¡ |  "|j%¡ |  #d¡ d S )Nr^  r×  r
   r>   r=   z_x005F\1c                 S   s   dt |  d¡ƒ S )Nz_x%04X_r
   )r&  Úgroup)rþ   r'   r'   r(   Ú<lambda>z  s   ÿz'Worksheet._write_cell.<locals>.<lambda>u   ï¿¾Z_xFFFE_u   ï¿¿Z_xFFFF_z<r>z</r>rB   )r`  r˜  r   )r&  z#N/Az#NAME?z#NULL!r%  z#REF!z#VALUE!rF   )r`  Úe)r`  r  rC   r=  )Úcmr
   Úcr?   rA   )&r   r@   rÅ  rc  r‘   rº   r  r  Z_xml_number_elementr#  r  rV   Z_xml_string_elementÚre_control_chars_1r?  Úre_control_chars_2rY  rú   rü   Z_xml_rich_inline_stringr   Z_xml_inline_stringr.  r  r  r  Z_xml_formula_elementr-  rC  r   r    rd  Ú_write_cell_array_formularB  Ú_write_cell_valuerg  rœ  rG  )r!   r  r7   r  rD  rm  rÇ  Zrow_xfZcol_xfr  r  r_  r.  Zerror_codesr'   r'   r(   rÑ  R  sz    







ÿ







zWorksheet._write_cellc                 C   s   |d u rd}|   d|¡ d S )NrF   Úv©rf  )r!   r.  r'   r'   r(   râ  ¿  s    zWorksheet._write_cell_valuec                 C   s   dd|fg}|   d||¡ d S )N)r`  Zarrayr¤  r  rä  )r!   r-  rD  rm  r'   r'   r(   rá  Æ  s    þz#Worksheet._write_cell_array_formulac                 C   sž   g }| j s&| js&| js&| js&| js&d S | jr<| d| jf¡ | jrL| d¡ | j s^| js^| jrŽ|  d|¡ |  ¡  |  ¡  |  	¡  |  
d¡ n|  d|¡ d S )NZcodeName)Z
filterModer
   ZsheetPr)rˆ   rµ   re   r   rÜ   rc  rd  Ú_write_tab_colorÚ_write_outline_prÚ_write_page_set_up_prrg  rœ  rÀ  r'   r'   r(   rø  Ï  s4    ÿþýü
ÿþ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ç  ë  s    zWorksheet._write_page_set_up_prc                 C   s(   | j }|sd S d|fg}|  d|¡ d S )NrŒ  ZtabColor)re   rœ  )r!   r˜  rm  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sN| d¡ |  d|¡ d S )N)ZapplyStylesr
   )ZsummaryBelowr   )ZsummaryRightr   r»  Z	outlinePr)r   r™   rc  rš   r›   rœ   rœ  rÀ  r'   r'   r(   ræ  þ  s    



zWorksheet._write_outline_prc                 C   s\   |   | j¡}|sd S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q<|  d¡ d S )Nru  ÚmanualBreakCountZ	rowBreaksiÿ?  )r  r‹   r   rd  Ú
_write_brkrg  )r!   Úpage_breaksru  rm  rŽ  r'   r'   r(   r    s    þzWorksheet._write_row_breaksc                 C   s\   |   | j¡}|sd S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q<|  d¡ d S )Nru  rè  Z	colBreaksiÿÿ )r  rŒ   r   rd  ré  rg  )r!   rê  ru  rm  rW  r'   r'   r(   r  %  s    þzWorksheet._write_col_breaksc                 C   s"   d|fd|fdg}|   d|¡ d S )NrK  r1  )Zmanr
   Zbrk©rœ  )r!   Zbrk_idZbrk_maxrm  r'   r'   r(   ré  :  s
    ýzWorksheet._write_brkc                 C   sN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q0|  d¡ d S )Nru  Z
mergeCells)r¦   r   rd  Ú_write_merge_cellrg  )r!   Zmerged_cellsru  rm  Úmerged_ranger'   r'   r(   r  C  s    
zWorksheet._write_merge_cellsc           
      C   sF   |\}}}}t ||ƒ}t ||ƒ}|d | }d|fg}	|  d|	¡ d S )Nr,   r¤  Z	mergeCell)r   rœ  )
r!   rí  Zrow_minrÆ  rn  ro  r0   r1   r¤  rm  r'   r'   r(   rì  V  s    


zWorksheet._write_merge_cellc                 C   sf  g }d }t | j ¡ ƒ}|sd S |D ]ê}t | j|  ¡ ƒ}|D ]Î}| j| | }|d }| jr˜| j| r˜| j| | r˜| j| | }	t|	ƒjdkr˜|d }|dkrè|  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|
Ž  n|dkr| j|
Ž  q|  d	¡ d S )NrX  r=   rJ  r
   r  rK  r2  r3  rÞ   r   rN  )rw  rÞ   rå  r¥   r  r  r½   rc  rÀ   rd  rb  Ú_write_hyperlink_externalÚ_write_hyperlink_internalrg  )r!   r¿   Údisplayry  rŽ  rz  rW  ÚlinkrX  r  r"   r'   r'   r(   r  c  s\    ÿþú	ÿû




zWorksheet._write_hyperlinksc           
      C   sx   t ||ƒ}dt|ƒ }d|fd|fg}	|d ur<|	 d|f¡ |d urR|	 d|f¡ |d urh|	 d|f¡ |  d|	¡ d S )NÚrIdr¤  úr:idr]  rð  Útooltipr£  )r   r  rc  rœ  )
r!   r  r7   Zid_numr]  rð  rô  r¤  Úr_idrm  r'   r'   r(   rî  ª  s    
þz#Worksheet._write_hyperlink_externalc                 C   sN   t ||ƒ}d|fd|fg}|d ur0| d|f¡ | d|f¡ |  d|¡ d S )Nr¤  r]  rô  rð  r£  )r   rc  rœ  )r!   r  r7   r]  rð  rô  r¤  rm  r'   r'   r(   rï  ½  s    
þz#Worksheet._write_hyperlink_internalc                 C   sL   | j s
d S d| j fg}| jr<|  d|¡ |  ¡  |  d¡ n|  d|¡ d S )Nr¤  Ú
autoFilter)r³   rµ   rd  Ú_write_autofiltersrg  rœ  rÀ  r'   r'   r(   r  Ì  s    zWorksheet._write_auto_filterc                 C   sT   | j \}}t||d ƒD ]6}|| jvr(q| j| }| j| }|  || ||¡ qd S r–  )r´   rB  r¶   r·   Ú_write_filter_column)r!   Zcol1Zcol2r7   rj  r·   r'   r'   r(   r÷  Ý  s    



zWorksheet._write_autofiltersc                 C   sB   d|fg}|   d|¡ |dkr*|  |¡ n
|  |¡ |  d¡ d S )NZcolIdZfilterColumnr
   )rd  Ú_write_filtersÚ_write_custom_filtersrg  )r!   rV  r·   r²  rm  r'   r'   r(   rø  î  s    

zWorksheet._write_filter_columnc                 C   s€   dd„ |D ƒ}g }t |ƒt |ƒkr(dg}t |ƒdkrNt |ƒdkrN|  d|¡ n.|  d|¡ t|ƒD ]}|  |¡ qb|  d¡ d S )Nc                 S   s    g | ]}t |ƒ ¡ d kr|‘qS )r  )r  rT  )r6   Úfilterr'   r'   r(   r8   ÿ  s   ÿz,Worksheet._write_filters.<locals>.<listcomp>)r)  r
   r
   r   r²  )r   rœ  rd  rw  Ú_write_filterrg  )r!   r²  Z
non_blanksrm  r¥  r'   r'   r(   rù  ý  s    zWorksheet._write_filtersc                 C   s   d|fg}|   d|¡ d S )Nr™  rû  rë  r¨  r'   r'   r(   rü    s    
zWorksheet._write_filterc                 C   sŒ   t |ƒdkr,|  d¡ | j|Ž  |  d¡ n\g }|d dkrDdg}ndg}|  d|¡ |  |d |d ¡ |  |d |d ¡ |  d¡ d S )	NrN  ZcustomFiltersr   )Úandr
   )rý  r   r
   rG   r©  )r   rd  Ú_write_custom_filterrg  )r!   rj  rm  r'   r'   r(   rú    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sP| d	|f¡ | d
|f¡ |  d|¡ d S )NrÌ  rÉ  rÎ  rË  rÊ  rÍ  )r
   rN  rG   r©  r¨  r  r#  zUnknown operator = %sr%  r™  ZcustomFilter)r	   rc  rœ  )r!   r%  r™  rm  r$  r'   r'   r(   rþ  /  s     ù
zWorksheet._write_custom_filterc                 C   s|  g }| j sd S | j }|d r.| d|d f¡ |d r@| d¡ |d rR| d¡ |d sd| d¡ |d sv| d	¡ |d
 rˆ| d¡ |d rš| d¡ |d r¬| d¡ |d r¾| d¡ |d rÐ| d¡ |d râ| d¡ |d rô| d¡ |d r| d¡ |d s| d¡ |d r0| d¡ |d rD| d¡ |d  rX| d!¡ |d" sl| d#¡ |  d$|¡ d S )%Nrª  rš  )rš  r
   r›  )r›  r
   rœ  )rœ  r
   r  )r  r
   rž  )ZformatCellsr   rŸ  )ZformatColumnsr   r   )Z
formatRowsr   r¡  )ZinsertColumnsr   r¢  )Z
insertRowsr   r£  )ZinsertHyperlinksr   r¤  )ZdeleteColumnsr   r¥  )Z
deleteRowsr   r¦  )ZselectLockedCellsr
   r§  )r§  r   r¥  )rö  r   r¨  )ZpivotTablesr   r©  )ZselectUnlockedCellsr
   ZsheetProtection)r   rc  rœ  )r!   rm  r‚  r'   r'   r(   rÿ  J  sR    






















z!Worksheet._write_sheet_protectionc                 C   sF   | j dkrd S |  d¡ | jD ]\}}}|  |||¡ q|  d¡ d S )Nr   ZprotectedRanges)r   rd  rŽ   Ú_write_protected_rangerg  r¯  r'   r'   r(   r   z  s    

z!Worksheet._write_protected_rangesc                 C   sB   g }|r|  d|f¡ |  d|f¡ |  d|f¡ |  d|¡ d S )Nrª  r†  rS   ZprotectedRange©rc  rœ  )r!   rD  r°  rª  rm  r'   r'   r(   rÿ  †  s    z Worksheet._write_protected_rangec                 C   s(   | j s
d S |  jd7  _|  | j¡ d S r–  )rÍ   r½   Ú_write_drawingrò   r'   r'   r(   r  ’  s    zWorksheet._write_drawingsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nrò  ró  rÍ   ©r  rœ  )r!   r?  rõ  rm  r'   r'   r(   r  š  s    
zWorksheet._write_drawingc                 C   s@   | j s
d S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr
   rò  ró  ZlegacyDrawing)r¨   r½   r  rœ  ©r!   rõ  rm  r'   r'   r(   r  ¢  s    
zWorksheet._write_legacy_drawingc                 C   s@   | j s
d S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr
   rò  ró  ZlegacyDrawingHF)r©   r½   r  rœ  r  r'   r'   r(   r  ¯  s    
z"Worksheet._write_legacy_drawing_hfc                 C   s@   | j s
d S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr
   rò  ró  Zpicture)rÒ   r½   r  rœ  r  r'   r'   r(   r  ¼  s    
zWorksheet._write_picturec                 C   sN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q0|  d¡ d S )Nru  ZdataValidations)rÖ   r   rd  Ú_write_data_validationrg  )r!   rÖ   ru  rm  Z
validationr'   r'   r(   r  É  s    
z!Worksheet._write_data_validationsc           	      C   s  d}g }|d D ]V}|dkr$|d7 }|\}}}}||krB|| }}||krT|| }}|t ||||ƒ7 }q|d dkr¤| d|d f¡ |d dkr¤| d	|d f¡ d
|v rØ|d
 dkrÂ| d¡ |d
 dkrØ| d¡ |d rê| d¡ |d  sþ| d¡ |d r| d¡ |d r&| d¡ d|v rB| d|d f¡ d|v r^| d|d f¡ d|v rz| d|d f¡ d|v r–| d|d f¡ | d|f¡ |d dkrÀ|  d |¡ n@|  d |¡ |  |d! ¡ |d" d urö|  |d" ¡ |  d ¡ d S )#NrF   rã  rJ  r³  rÁ  r  r­  rÇ  r%  r¿  r
   )Ú
errorStylerÞ  rN  )r  rß  r·  )Z
allowBlankr
   r¸  )ZshowDropDownr
   r¹  )ZshowInputMessager
   r¼  )ZshowErrorMessager
   r½  Z
errorTitler¾  r>  rº  ZpromptTitler»  Úpromptr†  ZdataValidationr.  r¶  )r   rc  rœ  rd  Ú_write_formula_1Ú_write_formula_2rg  )	r!   r‚  r†  rm  rã  Z	row_firstr¯  Zrow_lastr°  r'   r'   r(   r  Ü  sX    














z Worksheet._write_data_validationc                 C   sd   t |ƒtu r | j|Ž }d| }n4zt|ƒ W n& tyR   | d¡rN| d¡}Y n0 |  d|¡ d S )Nz"%s"rõ   Zformula1)r  ra  ræ  r   r    rú   r<  rf  r@  r'   r'   r(   r  '  s    


zWorksheet._write_formula_1c                 C   sD   zt |ƒ W n& ty2   | d¡r.| d¡}Y n0 |  d|¡ d S )Nrõ   Zformula2©r   r    rú   r<  rf  r@  r'   r'   r(   r  8  s    
zWorksheet._write_formula_2c                 C   s6   t | j ¡ ƒ}|sd S |D ]}|  || j| ¡ qd S r  )rw  r×   rå  Ú_write_conditional_formatting)r!   rt  Ú
cond_ranger'   r'   r(   r  E  s    ÿz$Worksheet._write_conditional_formatsc                 C   s8   d|fg}|   d|¡ |D ]}|  |¡ q|  d¡ d S )Nr†  ZconditionalFormatting)rd  Ú_write_cf_rulerg  )r!   r  rm  rm  Úparamr'   r'   r(   r
  P  s
    
z'Worksheet._write_conditional_formattingc                 C   s
  d|d fg}d|v r4|d d ur4|  d|d f¡ |  d|d f¡ | d¡rZ|  d¡ |d dkrÎ|  d|d	 f¡ |  d
|¡ d|v r²d|v r²|  |d ¡ |  |d ¡ n|  |d ¡ |  d
¡ n8|d dkrXt d|d	 ¡rö|  d¡ t d|d	 ¡r|  d¡ t d|d	 ¡rHt d|d	 ¡}|  d| d¡f¡ |  d
|¡ n®|d dkrÈd	|v rˆ|d	 dkrˆ|  d¡ d|v rœ|  d¡ |d p¨d}|  d|f¡ |  d
|¡ n>|d dkræ|  d
|¡ n |d dkr|  d
|¡ n|d d ks<|d d!ks<|d d"ks<|d d#krˆ|  d|d	 f¡ |  d$|d f¡ |  d
|¡ |  |d% ¡ |  d
¡ n~|d d&krÐ|  d&|d	 f¡ |  d
|¡ |  |d% ¡ |  d
¡ n6|d d'ks|d d(ks|d d)ks|d d*kr.|  d
|¡ |  |d% ¡ |  d
¡ nØ|d d+kr^|  d
|¡ |  	|¡ |  d
¡ n¨|d d,kr¤|  d
|¡ |  
|¡ | d-¡r˜|  |¡ |  d
¡ nb|d d.krØ|  d
|¡ |  |d	 ¡ |  d
¡ n.|d d/kr|  d
|¡ |  |¡ |  d
¡ d S )0Nr  r@   ZdxfIdr,  rì  )Z
stopIfTruer
   r
  r%  r­  ZcfRulerµ  r¶  r.  r  Zbelow)r  r   rÉ  )ZequalAverager
   z[123] std devz([123]) std devrR  r
   r  r!  )r®  r
   r!  )r  r
   r’  Úrankr  r  r"  r.  r#  r$  r…  r-  r  r  r  r  r  r/  r  r-  r  r  )rc  r}  rd  Ú_write_formula_elementrg  rý   r2  rÚ  rœ  Ú_write_color_scaleÚ_write_data_barÚ_write_data_bar_extÚ_write_icon_set)r!   rm  rm  rþ   r  r'   r'   r(   r  Y  s     







ÿ
þ
ý
ÿ
þ
ý



zWorksheet._write_cf_rulec                 C   sD   zt |ƒ W n& ty2   | d¡r.| d¡}Y n0 |  d|¡ d S )Nrõ   r-  r	  r@  r'   r'   r(   r  Á  s    
z Worksheet._write_formula_elementc                 C   sœ   |   d¡ |  |d |d ¡ |d d ur>|  |d |d ¡ |  |d |d ¡ |  d|d	 ¡ |d
 d ur~|  d|d
 ¡ |  d|d ¡ |  d¡ d S )Nr/  rí  rð  rî  rñ  rï  rò  rŒ  ró  rô  rõ  )rd  Ú_write_cfvor   rg  )r!   r  r'   r'   r(   r  Î  s    
zWorksheet._write_color_scalec                 C   s¢   g }|  d¡r | d|d f¡ |  d¡r<| d|d f¡ |  d¡rP| d¡ |  d|¡ |  |d |d	 ¡ |  |d
 |d ¡ |  d|d ¡ |  d¡ d S )Nrö  Ú	minLengthr÷  Ú	maxLengthr  ©Z	showValuer   r  rí  rð  rï  rò  rŒ  rù  )r}  rc  rd  r  r   rg  )r!   r  rm  r'   r'   r(   r  ã  s    



zWorksheet._write_data_barc                 C   sp   | j d }t| jƒd }d||f }||d< | j |¡ |  d¡ |  d¡ |  d|¡ |  d¡ |  d¡ d S )Nr
   z{DA7ABA51-AAAA-BBBB-%04X-%012X}ÚguidÚextLstz&{B025F937-C7B1-47D3-B67F-A62EFF666E3E}zx14:idÚext)rT   r   rØ   rc  rd  Ú
_write_extrf  rg  )r!   r  Zworksheet_countZdata_bar_countr  r'   r'   r(   r  ú  s    
ÿ


zWorksheet._write_data_bar_extc                 C   sŒ   g }|d dkrd|d fg}|  d¡r2| d¡ |  d¡rF| d¡ |  d|¡ t|d ƒD ]}|  |d	 |d
 |d ¡ q^|  d¡ d S )Nr  r'  r  r  r  r  )rl  r
   r	  r  r.  r­  )r}  rc  rd  Úreversedr  rg  )r!   r  rm  Ziconr'   r'   r(   r    s    



ýzWorksheet._write_icon_setc                 C   s>   d|fg}|d ur |  d|f¡ |r.|  d¡ |  d|¡ d S )Nr  r™  )Zgter   Zcfvor   )r!   Zcf_typer™  r­  rm  r'   r'   r(   r  &  s    

zWorksheet._write_cfvoc                 C   s   ||fg}|   d|¡ d S r©  rë  rª  r'   r'   r(   r   2  s    
zWorksheet._write_colorc                 C   s   | j D ]}| j|Ž  qd S r  )rc   Ú_write_selection)r!   Ú	selectionr'   r'   r(   r¿  8  s    
zWorksheet._write_selectionsc                 C   sJ   g }|r|  d|f¡ |r(|  d|f¡ |r:|  d|f¡ |  d|¡ d S )Nr„  Z
activeCellr†  r  r   )r!   r„  r…  r†  rm  r'   r'   r(   r  =  s    zWorksheet._write_selectionc                 C   s8   | j }t|ƒsd S |d dkr*| j|Ž  n
| j|Ž  d S )Nr©  rN  )rg   r   Ú_write_split_panesÚ_write_freeze_panes)r!   rg   r'   r'   r(   r¾  L  s    zWorksheet._write_panesc                 C   sL  g }|}|}t ||ƒ}	d}
d}d}d}| jrB| jd \}}}g | _|rš|ršd}
t |dƒ}t d|ƒ}| j d||g¡ | j d||g¡ | j d||g¡ n2|r¶d}
| j d||g¡ nd}
| j d||g¡ |dkrÚd}n|dkrèd}nd	}|rþ| d
|f¡ |r| d|f¡ | d|	f¡ | d|
f¡ | d|f¡ |  d|¡ d S )NrF   r   ÚbottomRightÚtopRightÚ
bottomLeftÚfrozenr
   ZfrozenSplitr.   ÚxSplitÚySplitr½  Ú
activePaneÚstater„  )r   rc   rc  rœ  )r!   r  r7   r‹  rŒ  r  rm  Úy_splitÚx_splitrf   rh   r(  r…  r†  r:   Úrow_cellÚcol_cellr'   r'   r(   r   X  sH    


zWorksheet._write_freeze_panesc                 C   s®  g }d}d}d}	d}
|}|}| j r<| j d \}}	}
g | _ d}|rPtd| d ƒ}|r^|  |¡}||kr¦||kr¦td|d d d  ƒ}td|d d d	 d
 d  ƒ}t||ƒ}|s¼|}	|}
|r|rd}t|dƒ}td|ƒ}| j  d||g¡ | j  d||g¡ | j  d|	|
g¡ n4|r6d}| j  d|	|
g¡ nd}| j  d|	|
g¡ |rd| dd| f¡ |r|| dd| f¡ | d|f¡ |rž| d|f¡ |  d|¡ d S )Nr   rF   r
   rM   i,  rë  rL   é†  rG   r©  rO   r!  r"  r#  r%  rà  r&  r½  r'  r„  )rc   r   Ú_calculate_x_split_widthr   rc  rœ  )r!   r  r7   r‹  rŒ  r  rm  Zhas_selectionrh   r…  r†  r)  r*  r:   rf   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ë  rG   r©  rM   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¡ q0|  d¡ d S )Nru  Z
tablePartsr
   )rÊ   r   rd  r½   Ú_write_table_partrg  )r!   rÊ   ru  rm  r:   r'   r'   r(   r  î  s    
zWorksheet._write_table_partsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nrò  ró  Z	tablePartr  r  r'   r'   r(   r/    s    
zWorksheet._write_table_partc                 C   sP   t | jƒ}t | jƒ}|s |s d S |  d¡ |r6|  ¡  |rB|  ¡  |  d¡ d S )Nr  )r   rØ   rË   rd  Ú_write_ext_list_data_barsÚ_write_ext_list_sparklinesrg  )r!   Zhas_data_barsZhas_sparklinesr'   r'   r(   r    s    


zWorksheet._write_ext_listc                 C   sB   |   d¡ |  d¡ | jD ]}|  |¡ q|  d¡ |  d¡ d S )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsr  )r  rd  rØ   Ú"_write_conditional_formatting_2010rg  )r!   r   r'   r'   r(   r0    s    



z#Worksheet._write_ext_list_data_barsc                 C   sì   d}d|fg}|   d|¡ |  |¡ |  |¡ |  |d |d ¡ |  |d |d ¡ |d sl|  |d	 ¡ |d
 s‚|  |d ¡ |d s |d s |  |d ¡ |d dkrº|  |d ¡ |  d¡ |  d¡ |  	d|d ¡ |  d¡ d S )Nú3http://schemas.microsoft.com/office/excel/2006/mainúxmlns:xmzx14:conditionalFormattingr5  rð  r7  rò  r   rý  rû  rú  rÿ  rþ  r  rÁ  r  úx14:dataBarú
x14:cfRuleúxm:sqrefrB  )
rd  Ú_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_colorrg  rf  )r!   r   Úxmlns_xmrm  r'   r'   r(   r2  -  s2    


ÿÿÿ

z,Worksheet._write_conditional_formatting_2010c                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nr  r  r  rK  r6  ©rd  )r!   r   Ú	rule_typer  rm  r'   r'   r(   r8  Z  s    zWorksheet._write_x14_cf_rulec                 C   sÐ   d}d}d|fd|fg}|d s*|  d¡ |d r<|  d¡ |d	 d
krR|  d¡ |d	 dkrh|  d¡ |d rz|  d¡ |d s”|d s”|  d¡ |d dkrª|  d¡ |d dkrÀ|  d¡ |  d|¡ d S )Nr   rK   r  r  r   )Zborderr
   rü  )Zgradientr   r  r¼  )r!  ZleftToRightr½  )r!  rº  rû  )ZnegativeBarColorSameAsPositiver
   rÿ  )Z$negativeBarBorderColorSameAsPositiver   r  Úmiddle)ÚaxisPositionrB  rÁ  )rC  rÁ  r5  )rc  rd  )r!   r   rö  r÷  rm  r'   r'   r(   r9  b  s0    þ




ÿ


zWorksheet._write_x14_data_barc                 C   sF   d|fg}|dv r |   d|¡ n"|  d|¡ |  d|¡ |  d¡ d S )Nr  )r0  r1  r4  r6  zx14:cfvoúxm:f)rœ  rd  rf  rg  )r!   rA  r.  rm  r'   r'   r(   r:  ‡  s    
zWorksheet._write_x14_cfvoc                 C   s   d|fg}|   d|¡ d S )NrŒ  zx14:borderColorrë  ©r!   rŒ  rm  r'   r'   r(   r;  ’  s    
z!Worksheet._write_x14_border_colorc                 C   s   d|fg}|   d|¡ d S )NrŒ  zx14:negativeFillColorrë  rE  r'   r'   r(   r<  —  s    
z(Worksheet._write_x14_negative_fill_colorc                 C   s   d|fg}|   d|¡ d S )NrŒ  zx14:negativeBorderColorrë  rE  r'   r'   r(   r=  œ  s    
z*Worksheet._write_x14_negative_border_colorc                 C   s   d|fg}|   d|¡ d S )NrŒ  zx14:axisColorrë  rE  r'   r'   r(   r>  ¡  s    
zWorksheet._write_x14_axis_colorc                 C   sÚ   |   d¡ |  ¡  t| jƒD ]¤}|  |¡ |  |d ¡ |  |d ¡ |  ¡  |  |d ¡ |  	|d ¡ |  
|d ¡ |  |d ¡ |  |d ¡ |d	 r¬|  d
|d	 ¡ |  |¡ |  d¡ q|  d¡ |  d¡ d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}rd  re  rf  rg  rh  ri  rj  ro  rD  ú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_lowrf  Ú_write_sparklinesrg  )r!   r  r'   r'   r(   r1  ¦  s$    



z$Worksheet._write_ext_list_sparklinesc                 C   sn   |   d¡ t|d ƒD ]H}|d | }|d | }|   d¡ |  d|¡ |  d|¡ |  d¡ q|  d¡ d S )Nzx14:sparklinesru  rt  r\  zx14:sparklinerD  r7  )rd  rB  rf  rg  )r!   r  rY  r  r]  r'   r'   r(   rR  Õ  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!   rS  r·  Z	xmlns_x14rm  r'   r'   r(   r  æ  s    þzWorksheet._write_extc                 C   s   d}d|fg}|   d|¡ d S )Nr3  r4  rG  r@  )r!   r?  rm  r'   r'   r(   rH  ò  s    
z!Worksheet._write_sparkline_groupsc                 C   sú  |  d¡}g }|  d¡d urL|d dkr2d|d< n| d|d f¡ d|d< |  d¡d urŠ|d dkrpd|d< n| d	|d f¡ d|d< |d
 dkr¨| d
|d
 f¡ |  d¡rÄ| d|d f¡ |  d¡rØ| d¡ |rê| d|f¡ |  d¡rþ| d¡ |  d¡r| d¡ |  d¡r*| d¡ |  d¡r@| d¡ |  d¡rV| d¡ |  d¡rl| d¡ |  d¡r‚| d¡ |  d¡r˜| d ¡ |  d¡r¶| d!|d f¡ |  d¡rÔ| d"|d f¡ |  d#¡rê| d$¡ |  d%|¡ d S )&Nr|  r1  rÚ  Zcust_maxZ	manualMaxrÄ  r0  Zcust_minZ	manualMinr  rq  rp  Z
lineWeightro  )ZdateAxisr
   ZdisplayEmptyCellsAsrc  )rc  r
   rw  )rw  r
   rx  )rx  r
   rz  )rz  r
   r{  )r{  r
   ry  )ry  r
   rk  )ZdisplayXAxisr
   rd   )ZdisplayHiddenr
   ZminAxisTypeZmaxAxisTyperl  r¹  rF  )r}  rc  rd  )r!   r‚  r|  rm  r'   r'   r(   rI  ú  sV    















z Worksheet._write_sparkline_groupc                 C   sh   g }|  d¡r | d|d f¡ |  d¡r<| d|d f¡ |  d¡rX| d|d f¡ |  ||¡ d S )NrŒ  rš  Ztint)r}  rc  rœ  )r!   Úelementr˜  rm  r'   r'   r(   Ú_write_spark_colorT  s    


zWorksheet._write_spark_colorc                 C   s   |   d|¡ d S )Nzx14:colorSeries©rU  r—  r'   r'   r(   rJ  c  s    zWorksheet._write_color_seriesc                 C   s   |   d|¡ d S )Nzx14:colorNegativerV  r—  r'   r'   r(   rK  g  s    zWorksheet._write_color_negativec                 C   s   |   dddi¡ d S )Nzx14:colorAxisrŒ  ZFF000000rV  rò   r'   r'   r(   rL  k  s    zWorksheet._write_color_axisc                 C   s   |   d|¡ d S )Nzx14:colorMarkersrV  r—  r'   r'   r(   rM  o  s    zWorksheet._write_color_markersc                 C   s   |   d|¡ d S )Nzx14:colorFirstrV  r—  r'   r'   r(   rN  s  s    zWorksheet._write_color_firstc                 C   s   |   d|¡ d S )Nzx14:colorLastrV  r—  r'   r'   r(   rO  w  s    zWorksheet._write_color_lastc                 C   s   |   d|¡ d S )Nzx14:colorHighrV  r—  r'   r'   r(   rP  {  s    zWorksheet._write_color_highc                 C   s   |   d|¡ d S )Nzx14:colorLowrV  r—  r'   r'   r(   rQ    s    zWorksheet._write_color_lowc                 C   s   ddg}|   d|¡ d S )N)ZfontIdÚ0)r  ZnoConversionZ
phoneticPrrë  rÀ  r'   r'   r(   r  ƒ  s    þzWorksheet._write_phonetic_prc                 C   sZ  | j s
d S |  d¡ | j  d¡r6| j d }|  d|¡ | j  d¡rX| j d }|  d|¡ | j  d¡rz| j d }|  d|¡ | j  d¡rœ| j d }|  d	|¡ | j  d
¡r¾| j d
 }|  d|¡ | j  d¡rà| j d }|  d|¡ | j  d¡r| j d }|  d|¡ | j  d¡r(| j d }|  d|¡ | j  d¡rL| j d }|  d|¡ |  d¡ d S )NZignoredErrorsrà  ZnumberStoredAsTextrá  Z	evalErrorrâ  r-  rã  ZformulaRangerä  ZunlockedFormularå  ZemptyCellReferenceræ  ZlistDataValidationrç  ZcalculatedColumnrè  ZtwoDigitTextYear)rï   rd  r}  Ú_write_ignored_errorrg  )r!   rB  r'   r'   r(   r  Œ  s>    









zWorksheet._write_ignored_errorsc                 C   s    d|f|dfg}|   d|¡ d S )Nr†  r
   ZignoredErrorrë  )r!   r  rB  rm  r'   r'   r(   rX  ¹  s    þzWorksheet._write_ignored_error)N)N)N)N)N)N)Nr   )Nr   )Nr   )Nr   )Nr   r7  )N)N)N)N)NNN)NNN)N)N)N)N)N)N)F)NNN)NNN)NNN)NNN)NF)N)N)N)N)N)r   r   )r
   r
   r
   r   )NNr   )NN)rK   )rF   N)NN)N)rH   rH   rI   rI   )rF   NN)rF   NN)N)N)r
   )N)N)FF)r   )r   )N)N)N)r   )NF)N)NNN)NNN)N)ìr  Ú
__module__Ú__qualname__Ú__doc__rR   r  r+   r
  r  r  r  r$  r  r*  rù   r/  rû   r4   r<  r3  r5  r4  rE  r  rH  r  rL  rÿ   r\  r[  ro  rr  rs  r„  r†  rˆ  r‰  rŠ  r‹  r  rŽ  r  r  r‘  r’  r<   r™  r›  r  rŸ  r   r¡  r¥  r±  r¬  rë  rA  r[  r‚  r‡  rˆ  rŠ  rŽ  r‘  r”  r•  r–  r™  r®  r±  r´  r¶  r·  r¸  r¹  rº  r»  r¾  rÌ  rÍ  rÎ  rÏ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rÙ  rÚ  rÝ  rÞ  rß  ré  rõ  r  r  rF  r¢  r  rª  r«  r  r«  rI  rJ  rL  rM  rN  r:  rO  rZ  r[  rš  rž  rq  r²  r{  r|  r~  rU  r~  r  ræ  rZ  r=  rK  re  rž  rŸ  r¢  r¡  r¬  r­  r9  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   r  r.  r  r/  r  r0  r2  r8  r9  r:  r;  r<  r=  r>  r1  rR  r  rH  rI  rU  rJ  rK  rL  rM  rN  rO  rP  rQ  r  r  rX  Ú__classcell__r'   r'   ró   r(   rD   ¦   sH   X#
Nÿþ * þ
. ÿ ÿ
g
p.'?# ÿJ ÿ=ÿ6
;(ÿ lÿ   hÿ   =
" ÿ
3#LL
/+d!(!RbT3:`|C4	8	7
K$	57N(&13m		G ÿ ÿ0K	h8G	-%/Z	-rD   )8r  r~  rý   rñ  Úcollectionsr   r   rÃ  r   Z	fractionsr   Úior   Zmathr   r   Úwarningsr	   rF   r   r@   r   rÍ   r   r/  r   r   Zutilityr   r   r   r   r   r   r   r   r   r   r   Ú
exceptionsr   r  rß  rà  ÚVERBOSEr1  r+   r4   r<   r  r'  r+  rI  r6  rA  rD   r'   r'   r'   r(   Ú<module>
   sZ   

ô




ÿ	