U
    ª…7hïã  ã                   @   s‚  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ 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*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 G dd„ dej8ƒZ9G dd„ dƒZ:G dd„ dƒZ;dS ) é    N)ÚdatetimeÚtimezone)ÚDecimal)ÚFraction)Úwarn)ÚZIP_DEFLATEDÚLargeZipFileÚZipFileÚZipInfo)ÚImageé   )Ú	xmlwriter)Ú	ChartArea)ÚChartBar)ÚChartColumn)ÚChartDoughnut)Ú	ChartLine)ÚChartPie)Ú
ChartRadar)ÚChartScatter)Ú
ChartStock)Ú
Chartsheet)ÚDuplicateWorksheetNameÚFileCreateErrorÚFileSizeErrorÚInvalidWorksheetName)ÚFormat©ÚPackager)ÚSharedStringTable)Úxl_cell_to_rowcol)Ú	Worksheetc                       s   e Zd ZdZeZeZdv‡ fdd„	Zdd„ Z	dd„ Z
dwd	d
„Zdxdd„Zdydd„Zdd„ Zdzdd„Zd{dd„Zdd„ Zdd„ Zd|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,d-„Zd.d/„ Zd0d1„ Zd2d3„ Zd€d4d5„Z dd6d7„Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dFdG„ Z)dHdI„ Z*dJdK„ Z+dLdM„ Z,dNdO„ Z-dPdQ„ Z.dRdS„ Z/dTdU„ Z0dVdW„ Z1dXdY„ Z2dZd[„ Z3d\d]„ Z4d^d_„ Z5d`da„ Z6dbdc„ Z7ddde„ Z8dfdg„ Z9dhdi„ Z:djdk„ Z;dldm„ Z<dndo„ Z=dpdq„ Z>drds„ Z?dtdu„ Z@‡  ZAS )‚ÚWorkbookz=
    A class for writing the Excel XLSX Workbook file.


    Nc                    sÒ  |dkri }t ƒ  ¡  || _| 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i ¡| _| dd¡| _| jdk rðd| _| d¡rd| _nd| _tƒ | _d| _d| _d| _d| _d| _d| _d| _d| _g | _g | _g | _i | _ g | _!g | _"i | _#g | _$i | _%g | _&d| _'g | _(g | _)g | _*g | _+i | _,g | _-t. /t0j1¡| _2d| _3d| _4d| _5d| _6d| _7d| _8d| _9t:ƒ | _;d| _<d| _=d| _>d| _?d| _@i | _Ag | _Bd| _Cd| _Dd| _Ed| _Fd| _Gd| _Hd| _Id| _Jd| _Kd| _Ld| _Md| _NtOƒ | _PtQƒ | _R| jrxd| _| jr’|  Sdddœ¡ n|  Sd di¡ |  Sd!di¡| _T| j
dk	rÎ|  Sd"| j
i¡| _
dS )#z
        Constructor.

        NÚtmpdirÚ	date_1904FÚstrings_to_numbersÚstrings_to_formulasTÚstrings_to_urlsÚnan_inf_to_errorsÚdefault_date_formatÚconstant_memoryÚ	in_memoryÚexcel2003_styleÚremove_timezoneÚuse_future_functionsÚdefault_format_propertiesÚmax_url_lengthi  éÿ   Ú	use_zip64r   ZSheetZChartéð   é   éß>  é¼%  éX  Úautoigæ )Úxf_indexZfont_familyr9   Z	hyperlinkÚ
num_format)UÚsuperÚ__init__ÚfilenameÚgetr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Úallow_zip64ÚWorksheetMetaÚworksheet_metaÚselectedÚ
fileclosedZ
filehandleZinternal_fhÚ
sheet_nameÚ
chart_nameÚsheetname_countÚchartname_countÚworksheets_objsÚchartsÚdrawingsÚ
sheetnamesÚformatsÚ
xf_formatsÚxf_format_indicesÚdxf_formatsÚdxf_format_indicesÚpaletteÚ
font_countÚnum_formatsÚdefined_namesÚnamed_rangesZcustom_colorsÚdoc_propertiesÚcustom_propertiesr   Únowr   ÚutcZ
createtimeÚnum_vml_filesÚnum_comment_filesÚx_windowÚy_windowÚwindow_widthÚwindow_heightÚ	tab_ratior   Ú	str_tableÚvba_projectÚvba_project_is_streamÚvba_project_signatureÚvba_project_signature_is_streamÚvba_codenameÚimage_typesÚimagesÚborder_countÚ
fill_countÚdrawing_countÚ	calc_modeÚcalc_on_loadÚcalc_idÚhas_commentsÚ	read_onlyÚhas_metadataÚhas_embedded_imagesÚhas_dynamic_functionsÚhas_embedded_descriptionsÚEmbeddedImagesÚembedded_imagesÚsetÚfeature_property_bagsÚ
add_formatÚdefault_url_format)Úselfr=   Úoptions©Ú	__class__© úM/var/www/formularioweb/env/lib/python3.8/site-packages/xlsxwriter/workbook.pyr<   ?   s²    

ÿzWorkbook.__init__c                 C   s   | S )z0Return self object to use with "with" statement.r   ©r{   r   r   r€   Ú	__enter__®   s    zWorkbook.__enter__c                 C   s   |   ¡  dS )z-Close workbook when exiting "with" statement.N)Úclose)r{   ÚtypeÚvalueÚ	tracebackr   r   r€   Ú__exit__²   s    zWorkbook.__exit__c                 C   s   |dkr| j }| j||dS )zÌ
        Add a new worksheet to the Excel workbook.

        Args:
            name: The worksheet name. Defaults to 'Sheet1', etc.

        Returns:
            Reference to a worksheet object.

        N©Úworksheet_class)r‰   Ú
_add_sheet)r{   Únamer‰   r   r   r€   Úadd_worksheet·   s    zWorkbook.add_worksheetc                 C   s   |dkr| j }| j||dS )zÏ
        Add a new chartsheet to the Excel workbook.

        Args:
            name: The chartsheet name. Defaults to 'Sheet1', etc.

        Returns:
            Reference to a chartsheet object.

        Nrˆ   )Úchartsheet_classrŠ   )r{   r‹   r   r   r   r€   Úadd_chartsheetÇ   s    zWorkbook.add_chartsheetc                 C   sJ   | j  ¡ }| jrddddœ}|r*| |¡ t|| j| jƒ}| j |¡ |S )z´
        Add a new Format to the Excel Workbook.

        Args:
            properties: The format properties.

        Returns:
            Reference to a Format object.

        ZArialé
   éÿÿÿÿ)Z	font_nameZ	font_sizeÚtheme)	r/   Úcopyr,   Úupdater   rN   rP   rL   Úappend)r{   Ú
propertiesZformat_propertiesÚ	xf_formatr   r   r€   ry   ×   s    

  ÿzWorkbook.add_formatc                 C   s  |  d¡}|dkrtdƒ dS |dkr0t|ƒ}nž|dkrBt|ƒ}nŒ|dkrTt|ƒ}nz|dkrdtƒ }nj|dkrvt|ƒ}nX|d	kr†tƒ }nH|d
kr˜t|ƒ}n6|dkrªt	|ƒ}n$|dkrºt
ƒ }ntd|› dƒ dS d|krà|d |_d|_| j|_| j|_| j |¡ |S )z¬
        Create a chart object.

        Args:
            options: The chart type and subtype options.

        Returns:
            Reference to a Chart object.

        r„   Nz)Chart type must be defined in add_chart()ZareaÚbarÚcolumnÚdoughnutÚlineÚpieZradarZscatterZstockzUnknown chart type 'z' in add_chart()r‹   T)r>   r   r   r   r   r   r   r   r   r   r   rE   Zembeddedr$   r-   rI   r”   )r{   r|   Z
chart_typeÚchartr   r   r€   Ú	add_chartó   s>    







zWorkbook.add_chartFc                 C   sD   |s$t j |¡s$td|› dƒ dS | jdkr4d| _|| _|| _dS )zø
        Add a vbaProject binary to the Excel workbook.

        Args:
            vba_project: The vbaProject binary file name.
            is_stream:   vba_project is an in memory byte stream.

        Returns:
            0 on success.

        zVBA project binary file 'ú' not found.r   NÚThisWorkbookr   )ÚosÚpathÚexistsr   rf   rb   rc   )r{   rb   Ú	is_streamr   r   r€   Úadd_vba_project'  s    
zWorkbook.add_vba_projectc                 C   sH   |   ||¡dkrdS |s8tj |¡s8td|› dƒ dS || _|| _dS )aÌ  
        Add a vbaProject binary and a vbaProjectSignature binary to the
        Excel workbook.

        Args:
            vba_project:           The vbaProject binary file name.
            signature:             The vbaProjectSignature binary file name.
            project_is_stream:     vba_project is an in memory byte stream.
            signature_is_stream:   signature is an in memory byte stream.

        Returns:
            0 on success.

        r   z#VBA project signature binary file 'rž   r   )r¤   r    r¡   r¢   r   rd   re   )r{   rb   Ú	signatureZproject_is_streamZsignature_is_streamr   r   r€   Úadd_signed_vba_project?  s    zWorkbook.add_signed_vba_projectc              
   C   sˆ   | j s|z|  ¡  W nD tk
r< } zt|ƒ‚W 5 d}~X Y n tk
rV   tdƒ‚Y nX d| _ | jr„|  ¡ D ]}| ¡  qlnt	dƒ dS )z
        Call finalization code and close file.

        Args:
            None.

        Returns:
            Nothing.

        NzBFilesize would require ZIP64 extensions. Use workbook.use_zip64().Tz'Calling close() on already closed file.)
rC   Ú_store_workbookÚIOErrorr   r   r   r*   Ú
worksheetsZ
_opt_closer   )r{   ÚeÚ	worksheetr   r   r€   rƒ   \  s    ÿ
zWorkbook.closec                 C   s@   |rt |d d ƒ| _nd| _|r6t |d d ƒ| _nd| _dS )zÓ
        Set the size of a workbook window.

        Args:
            width:  Width  of the window in pixels.
            height: Height of the window in pixels.

        Returns:
            Nothing.

        i   é`   r5   r6   N)Úintr^   r_   )r{   ÚwidthÚheightr   r   r€   Úset_size}  s    zWorkbook.set_sizec                 C   s@   |dkrdS |dk s|dkr.t d|› dƒ nt|d ƒ| _dS )zÄ
        Set the ratio between worksheet tabs and the horizontal slider.

        Args:
            tab_ratio: The tab ratio, 0 <= tab_ratio <= 100

        Returns:
            Nothing.

        Nr   éd   zTab ratio 'z ' outside: 0 <= tab_ratio <= 100r   )r   r­   r`   )r{   r`   r   r   r€   Úset_tab_ratio”  s
    zWorkbook.set_tab_ratioc                 C   s
   || _ dS )zº
        Set the document properties such as Title, Author etc.

        Args:
            properties: Dictionary of document properties.

        Returns:
            Nothing.

        N)rV   )r{   r•   r   r   r€   Úset_properties§  s    zWorkbook.set_propertiesc                 C   sü   |dks|dkrt dƒ dS |dkrpt|tƒr4d}n<t|tƒrDd}n,t|tƒrTd}nt|ttttfƒrld}nd}|dkr„t|ƒ 	¡ }|dkr–| 
d	¡}|d
kr¦t|ƒ}|dkrÊt|ƒdkrÊt d|› dƒ t|ƒdkræt d|› dƒ | j |||f¡ dS )a,  
        Set a custom document property.

        Args:
            name:          The name of the custom property.
            value:         The value of the custom property.
            property_type: The type of the custom property. Optional.

        Returns:
            0 on success.

        NzGThe name and value parameters must be non-None in set_custom_property()r   ÚboolÚdateÚ
number_intÚnumberÚtextz%Y-%m-%dT%H:%M:%SZ)r·   r¶   r1   z_Length of 'value' parameter exceeds Excel's limit of 255 characters in set_custom_property(): 'ú'z^Length of 'name' parameter exceeds Excel's limit of 255 characters in set_custom_property(): 'r   )r   Ú
isinstancer´   r   r­   Úfloatr   r   ÚstrÚlowerÚstrftimeÚlenrW   r”   )r{   r‹   r…   Zproperty_typer   r   r€   Úset_custom_property´  s>    ÿ




ÿ
ÿzWorkbook.set_custom_propertyc                 C   s2   || _ |dkrd| _n|dkr$d| _ |r.|| _dS )zú
        Set the Excel calculation mode for the workbook.

        Args:
            mode: String containing one of:
                * manual
                * auto_except_tables
                * auto

        Returns:
            Nothing.

        ÚmanualFZauto_except_tablesÚautoNoTableN)rl   rm   rn   )r{   Úmodern   r   r   r€   Úset_calc_modeï  s    zWorkbook.set_calc_modec                 C   s  d}d}|  d¡r| d¡}t d¡}| |¡}|rp| d¡}| d¡}|  |¡}|dkrttd|› dƒ d	S nd	}t d
|tj¡rt d|¡r¤td|› dƒ d	S t d|¡rÄtd|› dƒ d	S t d|¡sÜt d|¡rðtd|› dƒ d	S | j	 
|||dg¡ dS )zã
        Create a defined name in the workbook.

        Args:
            name:    The defined name.
            formula: The cell or range that the defined name refers to.

        Returns:
            0 on success.

        NÚ ú=z^([^!]+)!([^!]+)$r   é   zUnknown sheet name 'z' in defined_name()r   z^[\w\\][\w\\.]*$z^\dz-Invalid Excel characters in defined_name(): 'r¹   z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z0Name looks like a cell name in defined_name(): 'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$zInvalid name 'z&' like a RC cell ref in defined_name()Fr   )Ú
startswithÚlstripÚreÚcompileÚmatchÚgroupÚ_get_sheet_indexr   ÚUNICODErT   r”   )r{   r‹   ZformulaÚsheet_indexÚ	sheetnameZsheet_partsrÌ   r   r   r€   Údefine_name  s8    






 ÿzWorkbook.define_namec                 C   s   | j S )z¦
        Return a list of the worksheet objects in the workbook.

        Args:
            None.

        Returns:
            A list of worksheet objects.

        )rH   r   r   r   r€   r©   C  s    zWorkbook.worksheetsc                 C   s   | j  |¡S )zÇ
        Return a worksheet object in the workbook using the sheetname.

        Args:
            name: The name of the worksheet.

        Returns:
            A worksheet object or None.

        )rK   r>   ©r{   r‹   r   r   r€   Úget_worksheet_by_nameP  s    zWorkbook.get_worksheet_by_namec                 C   s   | j S )a  
        Get the default url format used when a user defined format isn't
        specified with write_url(). The format is the hyperlink style defined
        by Excel for the default theme.

        Args:
            None.

        Returns:
            A format object.

        )rz   r   r   r   r€   Úget_default_url_format]  s    zWorkbook.get_default_url_formatc                 C   s
   d| _ dS )z—
        Allow ZIP64 extensions when writing xlsx file zip container.

        Args:
            None.

        Returns:
            Nothing.

        TN)r?   r   r   r   r€   r2   l  s    zWorkbook.use_zip64c                 C   s   |dk	r|| _ nd| _ dS )zã
        Set the VBA name for the workbook. By default the workbook is referred
        to as ThisWorkbook in VBA.

        Args:
            name: The VBA name for the workbook.

        Returns:
            Nothing.

        NrŸ   )rf   rÓ   r   r   r€   Úset_vba_namey  s    zWorkbook.set_vba_namec                 C   s
   d| _ dS )z›
        Set the Excel "Read-only recommended" option when saving a file.

        Args:
            None.

        Returns:
            Nothing.

        rÇ   N)rp   r   r   r   r€   Úread_only_recommendedŠ  s    zWorkbook.read_only_recommendedc                 C   sf   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  	¡  |  
d¡ |  ¡  d S )NÚworkbook)Ú_prepare_format_propertiesZ_xml_declarationÚ_write_workbookÚ_write_file_versionÚ_write_file_sharingÚ_write_workbook_prÚ_write_book_viewsÚ_write_sheetsÚ_write_defined_namesÚ_write_calc_prÚ_xml_end_tagZ
_xml_closer   r   r   r€   Ú_assemble_xml_file  s    
zWorkbook._assemble_xml_filec                 C   s(  zt | jdt| jd}W n& tk
r> } z|‚W 5 d }~X Y nX |  ¡ }|  ¡ sX|  ¡  | jj	dkr|d| j
d _d| j
d _|  ¡ D ]}|j| jj	kr„d|_q„| jrÄ|  ¡ D ]}|jd kr¬| ¡  q¬|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | | ¡ | | j¡ | | j¡ | ¡ }d }t|ƒD ]è\}}|\}}	}
| jrŽt |	dƒ}|j!|_"|
rv| #|| $¡ ¡ n| #|| $¡  %d¡¡ nŠt& 'd¡}t( )|||f¡ z| *||	¡ t( +|¡ W nT t,k
r } z4t-|t.|ƒd ƒD ]}t( +|| d ¡ qè|‚W 5 d }~X Y nX q2| /¡  d S )NÚw)ÚcompressionÚ
allowZip64r   r   )é¼  r   r   r   r   r   zutf-8)	rç   r   é   r   r   r   r   r   r   )0r	   r=   r   r?   r¨   Ú_get_packagerr©   rŒ   rA   ÚactivesheetrH   rB   ÚhiddenÚindexZactiverb   rf   rÖ   Ú_prepare_sst_string_dataÚ_prepare_vmlÚ_prepare_defined_namesÚ_prepare_drawingsÚ_add_chart_dataÚ_prepare_tablesÚ_prepare_metadataZ_add_workbookZ_set_tmpdirr#   Z_set_in_memoryr+   Z_create_packageÚ	enumerater
   rå   Úcompress_typeÚwritestrÚgetvalueÚencodeÚtimeÚmktimer    ÚutimeÚwriteÚremover   Úranger¿   rƒ   )r{   Z	xlsx_filerª   ÚpackagerÚsheetZ	xml_filesZfile_idÚ	file_dataZos_filenameZxml_filenameZ	is_binaryÚzipinfoÚ	timestampÚir   r   r€   r§   Ä  sh    ü






zWorkbook._store_workbookc                 C   s¢   |r|ƒ }n|   ¡ }t| jƒ}|  |t|tƒ¡}||| j| j| j| j	| j
| j| j| j| j| j| j| j| j| j| j| j| jdœ}| |¡ | j |¡ || j|< |S )N)r‹   rì   ra   rA   r*   r#   r$   r%   r&   r'   r(   r)   rz   Zworkbook_add_formatr,   r-   r0   r.   rv   )r‰   r¿   rH   Ú_check_sheetnamerº   r   ra   rA   r*   r#   r$   r%   r&   r'   r(   r)   rz   ry   r,   r-   r0   r.   rv   Ú_initializer”   rK   )r{   r‹   r‰   r«   rÐ   Z	init_datar   r   r€   rŠ   (  s:    
í

zWorkbook._add_sheetc                 C   sð   t  d¡}|r|  jd7  _n|  jd7  _|d ks<|dkrb|rR| jt| jƒ }n| jt| jƒ }t|ƒdkr~td|› dƒ‚| 	|¡r˜td|› dƒ‚| 
d	¡s¬| d	¡r¼td
|› dƒ‚|  ¡ D ]&}| ¡ |j ¡ krÄtd|› dƒ‚qÄ|S )Nz[\[\]:*?/\\]r   rÅ   rè   zExcel worksheet name 'z' must be <= 31 chars.z0Invalid Excel character '[]:*?/\' in sheetname 'z'.r¹   z3Sheet name cannot start or end with an apostrophe "z".zSheetname 'z(', with case ignored, is already in use.)rÊ   rË   rG   rF   rE   r¼   rD   r¿   r   ÚsearchrÈ   Úendswithr©   r½   r‹   r   )r{   rÑ   Zis_chartsheetZinvalid_charr«   r   r   r€   r  Q  s4    

ÿ

ÿ
ÿ
ÿzWorkbook._check_sheetnamec                 C   s,   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  d S ©N)Ú_prepare_formatsÚ_prepare_fontsÚ_prepare_num_formatsÚ_prepare_bordersÚ_prepare_fillsr   r   r   r€   rÙ     s
    z#Workbook._prepare_format_propertiesc                 C   s”   g }g }| j D ],}|jd k	r&| |¡ |jd k	r| |¡ qd gt|ƒ | _d gt|ƒ | _|D ]}|j}|| j|< q`|D ]}|j}|| j|< qzd S r	  )rL   r9   r”   Ú	dxf_indexr¿   rM   rO   )r{   rM   rO   r–   rì   Z
dxf_formatr   r   r€   r
  ‘  s    



zWorkbook._prepare_formatsc                 C   s6   t | jƒ}|d= | jd k	r |d= |D ]}| ¡  q$d S )Nr   )ÚlistrL   r)   Z_get_xf_index)r{   rL   r–   r   r   r€   Ú_set_default_xf_indices­  s    

z Workbook._set_default_xf_indicesc                 C   sŒ   i }d}| j D ]B}| ¡ }||kr4|| |_d|_q|||< ||_d|_|d7 }q|| _| jD ](}|js€|js€|js€|j	s€|j
r^d|_q^d S )Nr   FTr   )rM   Z_get_font_keyZ
font_indexZhas_fontrR   rO   Z
font_colorÚboldÚitalicÚ	underlineZfont_strikeoutZhas_dxf_font)r{   Zfontsrì   r–   Úkeyr   r   r€   r  ½  s0    



ÿþýüûzWorkbook._prepare_fontsc                 C   s®   i }g }d}| j | j D ]Š}|j}t|tƒsHt|ƒ}|dkr@d}||_q|dkrXd|_q|dkrhd|_q||kr||| |_q|||< ||_|d7 }|jr| |¡ q|| _	d S )Né¤   r   r   Ú0ZGeneral)
rM   rO   r:   rº   r¼   r­   Znum_format_indexr9   r”   rS   )r{   Zunique_num_formatsrS   rì   r–   r:   r   r   r€   r  ß  s2    
zWorkbook._prepare_num_formatsc                 C   sŠ   i }d}| j D ]B}| ¡ }||kr4|| |_d|_q|||< ||_d|_|d7 }q|| _t d¡}| jD ]}| ¡ }| |¡rhd|_	qhd S )Nr   FTr   z[^0:])
rM   Z_get_border_keyZborder_indexÚ
has_borderri   rÊ   rË   rO   r  Zhas_dxf_border)r{   Zbordersrì   r–   r  r  r   r   r€   r    s"    





zWorkbook._prepare_bordersc                 C   s*  i }d}d|d< d|d< | j D ],}|js4|js4|jrd|_|j|_|j|_q| jD ]Ì}|jdkrˆ|jdkrˆ|jdkrˆ|j}|j|_||_|jdkrº|jdkrº|jdkrº|j|_d|_d|_|jdkrÞ|jdkrÞ|jdkrÞd|_| ¡ }||kr|| |_	d|_
qR|||< ||_	d|_
|d7 }qR|| _d S )NrÇ   r   z0:0:0r   z17:0:0TF)rO   ÚpatternZbg_colorZfg_colorZhas_dxf_fillZdxf_bg_colorZdxf_fg_colorrM   Z_get_fill_keyZ
fill_indexZhas_fillrj   )r{   Zfillsrì   r–   Útmpr  r   r   r€   r  +  sX    


	ÿþýÿþýÿþý


zWorkbook._prepare_fillsc                 C   sF   | j s@| jD ]2}|jr"| j  d¡ |jd k	r|jr| j  d¡ q| j S )NZXFComplementsZDXFComplements)rx   rL   ZcheckboxÚaddr  )r{   r–   r   r   r€   Ú_has_feature_property_bagsn  s    
z#Workbook._has_feature_property_bagsc                 C   sÎ   | j }|  ¡ D ]ž}|jr6d}|j}| d|j||g¡ |jrZd}|j}| d|j||g¡ |jsf|jrd}d}|jrŒ|jrŒ|jd |j }n|j|j }| d|j||g¡ q|  |¡}|| _ |  	|¡| _
d S )Nr   ú_xlnm._FilterDatabaser   z_xlnm.Print_ArearÅ   ú,z_xlnm.Print_Titles)rT   r©   Zautofilter_arear”   rì   Zprint_area_rangeZrepeat_col_rangeZrepeat_row_rangeÚ_sort_defined_namesÚ_extract_named_rangesrU   )r{   rT   r   rë   Úsheet_ranger   r   r€   rï   {  s4    ÿÿÿ
zWorkbook._prepare_defined_namesc                 C   sn   |D ]@}|\}}}}|  dd¡ ¡ }| d¡ ¡ }| |d | ¡ q|jt d¡d |D ]}| ¡  q\|S )Nú_xlnm.rÅ   r¹   z::é   ©r  )Úreplacer½   rÉ   r”   ÚsortÚoperatorÚ
itemgetterÚpop)r{   ÚnamesÚ	name_listÚdefined_nameÚ_rD   r   r   r€   r  ¥  s    
zWorkbook._sort_defined_namesc                 C   s  d}d}d}i }i }i }| j jD ]$}|j}d| j|< |jd k	r d| _q t| j jƒ}	|  ¡ D ]h}
t|
jƒ}t|
jƒ}t|
j	ƒ}t|
j
ƒ}t|
jƒ}|
j}d}|s¶|s¶|s¶|s¶|s¶|s¶qZ|sÂ|sÂ|rÎ|d7 }d}|
jr2|
j}|j}|j}d| j|< ||kr|| }n |	d7 }	|	}|	||< | j |¡ |
 ||¡ t|ƒD ]h}|
j| }|j}|j}d| j|< ||krr|| }n |	d7 }	|	}|	||< | j |¡ |
 |||¡ q:t|ƒD ]}|d7 }|
 |||¡ q¬t|ƒD ]}|
 ||¡ qÒ|
j
D ]\}|j}|j}d| j|< ||kr|| }n |	d7 }	|	}|	||< | j |¡ |
 ||¡ qì|
jD ]\}|j}|j}d| j|< ||kr~|| }n |	d7 }	|	}|	||< | j |¡ |
 ||¡ qP|rZ|
j}| j |¡ qZ| jd d … D ]}|jdkrÔ| j |¡ qÔt| jdd„ d| _|| _d S )	Nr   TFr   r   c                 S   s   | j S r	  )Úid)rœ   r   r   r€   Ú<lambda>J  ó    z,Workbook._prepare_drawings.<locals>.<lambda>r$  )rv   rh   Z_image_extensionrg   Údescriptionrt   r¿   r©   rI   ZshapesZheader_imagesZfooter_imagesZbackground_imageÚ_digestr”   Z_prepare_backgroundrþ   Z_prepare_imageZ_prepare_chartZ_prepare_shapeZ_prepare_header_imageÚdrawingrJ   r.  rý   Úsortedrk   )r{   Zchart_ref_idZref_idZ
drawing_idZ	image_idsZheader_image_idsZbackground_idsÚimageZimage_extensionZimage_ref_idr   Zchart_countZimage_countZshape_countZheader_image_countZfooter_image_countÚhas_backgroundZhas_drawingZimage_digestrì   r3  rœ   r   r   r€   rð   À  sÆ    






ÿþýüûú






ý







zWorkbook._prepare_drawingsc           
      C   sŽ   g }|D ]€}|d }|d }|d }|dkr.qd|kr|  dd¡\}}| d¡rj| dd¡}	|d |	 }n|dkr~|d | }| |¡ q|S )	Nr   r   rÇ   r  ú!r"  rÅ   r   )ÚsplitrÈ   r%  r”   )
r{   rT   rU   r,  r‹   rì   r!  rD   r-  Z	xlnm_typer   r   r€   r   N  s     
zWorkbook._extract_named_rangesc                 C   s$   |  d¡}|| jkr | j| jS d S )Nr¹   )ÚstriprK   rì   )r{   rÑ   r   r   r€   rÎ   k  s    

zWorkbook._get_sheet_indexc           
      C   sÜ   d}d}d}d}d}d}d}|   ¡ D ]²}|js6|js6q$|d7 }|jr¨|jr`|d7 }|d7 }d| _|d7 }| ||||¡}	|dtd|	 d ƒ 7 }|dtd|	 d ƒ 7 }|jrÊ|d7 }|d7 }| ||¡ || _|| _q$d S )Nr   r   i   T)	r©   Zhas_vmlZhas_header_vmlro   Z_prepare_vml_objectsr­   Z_prepare_header_vml_objectsrZ   r[   )
r{   Z
comment_idZvml_drawing_idZvml_data_idZvml_header_idZvml_shape_idZ	vml_filesZcomment_filesr   Úcountr   r   r€   rî   t  s>       ÿzWorkbook._prepare_vmlc                 C   sB   d}i }|   ¡ D ],}t|jƒ}|s$q| |d |¡ ||7 }qd S )Nr   r   )r©   r¿   Ztablesrò   )r{   Ztable_idÚseenr   Ztable_countr   r   r€   rò   œ  s    
zWorkbook._prepare_tablesc                 C   s8   | j  ¡ | _| j| _|  ¡ D ]}|jrd| _d| _qd S )NT)rv   Ú
has_imagesrr   rq   r©   Zhas_dynamic_arraysrs   )r{   r   r   r   r€   ró   ª  s    zWorkbook._prepare_metadatac                 C   sP  i }i }g }|   ¡ D ]}|||j< q| jD ] }| |¡ |jr*| |j¡ q*|D ]ú}|j ¡ D ]ê}|j| }|j| d k	r¢||ksŽ|| d kr^|j| }|||< q^||krº|| |j|< q^|  |¡\}	}
|	d krÒq^|	 	d¡rðg |j|< g ||< q^|	|kr$t
d|	› d|› dƒ g |j|< g ||< q^||	 }|j|
Ž }||j|< |||< q^qPd S )Nú(zUnknown worksheet reference 'z' in range 'z' passed to add_series())r©   r‹   rI   r”   ÚcombinedZformula_idsÚkeysZformula_dataÚ_get_chart_rangerÈ   r   Z_get_range_data)r{   r©   Zseen_rangesrI   r«   rœ   Úc_rangeZr_idÚdatarÑ   Úcellsr   r   r€   rñ   ´  sL    






ÿ


zWorkbook._add_chart_datac                 C   sÌ   |  d¡}|dkr0|d |… }||d d … }ndS | d¡dkrT| dd¡\}}n
|| }}| d¡}| dd¡}zt|ƒ\}}t|ƒ\}	}
W n tk
r¦   Y dS X ||	kr¼||
kr¼dS ||||	|
gfS )Nr7  r   r   )NNú:r¹   z'')ÚrfindÚfindr8  r9  r%  r    ÚAttributeError)r{   rA  ÚposrÑ   rC  Zcell_1Zcell_2Z	row_startZ	col_startZrow_endZcol_endr   r   r€   r@  û  s$    


zWorkbook._get_chart_rangec                 C   s   | j  ¡  d S r	  )ra   Z_sort_string_datar   r   r   r€   rí     s    z!Workbook._prepare_sst_string_datac                 C   s   t ƒ S r	  r   r   r   r   r€   ré   #  s    zWorkbook._get_packagerc                 C   s4   d}|d }|d }d|fd|fg}|   d|¡ d S )Nz!http://schemas.openxmlformats.orgz/spreadsheetml/2006/mainz"/officeDocument/2006/relationshipsÚxmlnszxmlns:rrØ   )Ú_xml_start_tag)r{   ZschemarI  Zxmlns_rÚ
attributesr   r   r€   rÚ   .  s    þzWorkbook._write_workbookc                 C   sL   d}d}d}d}d|fd|fd|fd|fg}| j r<| d¡ |  d	|¡ d S )
NZxlr#  i™  ZappNameZ
lastEditedZlowestEditedZrupBuild)ÚcodeNamez&{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}ZfileVersion)rb   r”   Ú_xml_empty_tag)r{   Zapp_nameZlast_editedZlowest_editedZ	rup_buildrK  r   r   r€   rÛ   <  s    ü
zWorkbook._write_file_versionc                 C   s$   | j dkrd S dg}|  d|¡ d S )Nr   )ZreadOnlyRecommendedr   ZfileSharing)rp   rM  ©r{   rK  r   r   r€   rÜ   P  s    
zWorkbook._write_file_sharingc                 C   sL   d}g }| j r| d| j f¡ | jr.| d¡ | d|f¡ |  d|¡ d S )NiBå rL  )Zdate1904r   ZdefaultThemeVersionZ
workbookPr)rf   r”   r$   rM  )r{   Zdefault_theme_versionrK  r   r   r€   rÝ   Y  s    
zWorkbook._write_workbook_prc                 C   s    |   d¡ |  ¡  |  d¡ d S )NZ	bookViews)rJ  Ú_write_workbook_viewrâ   r   r   r   r€   rÞ   g  s    
zWorkbook._write_book_viewsc                 C   s’   d| j fd| jfd| jfd| jfg}| jdkr>| d| jf¡ | jjdkrd| jjd }| d	|f¡ | jjdkr‚| d
| jjf¡ |  	d|¡ d S )NZxWindowZyWindowZwindowWidthZwindowHeightr7   ZtabRatior   r   Z
firstSheetZ	activeTabZworkbookView)
r\   r]   r^   r_   r`   r”   rA   Ú
firstsheetrê   rM  )r{   rK  rP  r   r   r€   rO  m  s    ü
zWorkbook._write_workbook_viewc                 C   sD   |   d¡ d}|  ¡ D ]}|  |j||j¡ |d7 }q|  d¡ d S )NZsheetsr   )rJ  r©   Ú_write_sheetr‹   rë   râ   )r{   Zid_numr«   r   r   r€   rß   …  s    

zWorkbook._write_sheetsc                 C   s\   d|fd|fg}|dkr$|  d¡ n|dkr6|  d¡ |  ddt|ƒ f¡ |  d	|¡ d S )
Nr‹   ZsheetIdr   )Ústaterë   rÇ   )rR  Z
veryHiddenzr:idZrIdr   )r”   r¼   rM  )r{   r‹   Úsheet_idrë   rK  r   r   r€   rQ    s    þ
zWorkbook._write_sheetc                 C   sl   d| j fg}| jdkr2| d| jf¡ | d¡ n| jdkrL| d| jf¡ | jr\| d¡ |  d|¡ d S )NZcalcIdrÁ   ZcalcMode)Z
calcOnSaver  rÂ   )ZfullCalcOnLoadÚ1ZcalcPr)rn   rl   r”   rm   rM  rN  r   r   r€   rá      s    


zWorkbook._write_calc_prc                 C   s8   | j s
d S |  d¡ | j D ]}|  |¡ q|  d¡ d S )NZdefinedNames)rT   rJ  Ú_write_defined_namerâ   )r{   r,  r   r   r€   rà   ¯  s    

zWorkbook._write_defined_namesc                 C   s`   |d }|d }|d }|d }d|fg}|dkr@|  d|f¡ |rN|  d¡ |  d	||¡ d S )
Nr   r   rÇ   é   r‹   r   ZlocalSheetId)rë   r   ZdefinedName)r”   Z_xml_data_element)r{   r,  r‹   rS  r!  rë   rK  r   r   r€   rU  »  s    

zWorkbook._write_defined_name)NN)NN)NN)N)F)FF)N)N)N)N)N)F)BÚ__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r‰   r<   r‚   r‡   rŒ   rŽ   ry   r   r¤   r¦   rƒ   r°   r²   r³   rÀ   rÄ   rÒ   r©   rÔ   rÕ   r2   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Þ   rO  rß   rQ  rá   rà   rU  Ú__classcell__r   r   r}   r€   r"   0   s~   o


4
   ÿ
!

;
;
'd
)
."-C* 	(
G$	r"   c                   @   s   e Zd ZdZdd„ ZdS )r@   z]
    A class to track worksheets data such as the active sheet and the
    first sheet.

    c                 C   s   d| _ d| _d S )Nr   )rê   rP  r   r   r   r€   r<   Ô  s    zWorksheetMeta.__init__N)rW  rX  rY  rZ  r<   r   r   r   r€   r@   Í  s   r@   c                   @   s.   e Zd ZdZdd„ Zedœdd„Zdd„ Zd	S )
ru   zI
    A class to track duplicate embedded images between worksheets.

    c                 C   s   g | _ i | _d S r	  )rh   Úimage_indexesr   r   r   r€   r<   à  s    zEmbeddedImages.__init__)r5  c                 C   s<   | j  |j¡}|dkr8| j |¡ t| jƒ}|| j |j< |S )zœ
        Get the index of an embedded image.

        Args:
            image: The image to lookup.

        Returns:
            The image index.

        N)r\  r>   r2  rh   r”   r¿   )r{   r5  Zimage_indexr   r   r€   Úget_image_indexä  s    
zEmbeddedImages.get_image_indexc                 C   s   t | jƒdkS )z†
        Check if the worksheet has embedded images.

        Args:
            None.

        Returns:
            Boolean.

        r   )r¿   rh   r   r   r   r€   r<  ø  s    zEmbeddedImages.has_imagesN)rW  rX  rY  rZ  r<   r   r]  r<  r   r   r   r€   ru   Ú  s   ru   )<r'  r    rÊ   rù   r   r   Údecimalr   Ú	fractionsr   Úwarningsr   Úzipfiler   r   r	   r
   Zxlsxwriter.imager   rÅ   r   Z
chart_arear   Z	chart_barr   Zchart_columnr   Zchart_doughnutr   Z
chart_liner   Z	chart_pier   Zchart_radarr   Zchart_scatterr   Zchart_stockr   Z
chartsheetr   Ú
exceptionsr   r   r   r   Úformatr   rÿ   r   Zsharedstringsr   Zutilityr    r«   r!   Z	XMLwriterr"   r@   ru   r   r   r   r€   Ú<module>   sT                *