o
    ]oi                     @   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* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl1m3Z3 ddl1m4Z4 ddl1m5Z5 ddlm6Z6 G dd dej7Z8G dd  d e9Z:G d!d" d"e9Z;dS )#    N)datetimetimezone)Decimal)Fraction)warn)ZipFileZipInfoZIP_DEFLATEDLargeZipFile   )	xmlwriter)	Worksheet)
Chartsheet)SharedStringTable)FormatPackager)xl_cell_to_rowcol)	ChartArea)ChartBar)ChartColumn)ChartDoughnut)	ChartLine)ChartPie)
ChartRadar)ChartScatter)
ChartStock)InvalidWorksheetName)DuplicateWorksheetName)FileCreateError)FileSizeError)get_image_propertiesc                       s  e Zd ZdZeZeZdt fdd	Zdd Z	dd Z
dtd	d
ZdtddZduddZdd ZdvddZ	dwddZdd Zdd ZduddZdd ZduddZdud d!Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zdud,d-Zd.d/ Zd0d1 Zd2d3 Zdud4d5Z dvd6d7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?  Z@S )xWorkbookz=
    A class for writing the Excel XLSX Workbook file.


    Nc                    s  |du ri }t 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 rzd| _|drd| _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/0t1j2| _3d| _4d| _5d| _6d| _7d| _8d| _9d| _:t; | _<d| _=d| _>d| _?d| _@d| _Ai | _Bg | _Cd| _Dd| _Ed| _Fd| _Gd| _Hd| _Id| _Jd| _Kd| _Ld| _Md| _Nd| _OtP | _Q| jr9d| _| jrF| Rddd n| Rd di | Rd!di| _S| jdurf| Rd"| ji| _dS 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)Tsuperr"   __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
add_formatdefault_url_format)selfr=   options	__class__ [/var/www/html/kuke-dev/django-kuke/venv/lib/python3.10/site-packages/xlsxwriter/workbook.pyr<   <   s   


zWorkbook.__init__c                 C   s   | S )z0Return self object to use with "with" statement.r}   ry   r}   r}   r~   	__enter__   s   zWorkbook.__enter__c                 C   s   |    dS )z-Close workbook when exiting "with" statement.N)close)ry   typevalue	tracebackr}   r}   r~   __exit__   s   zWorkbook.__exit__c                 C      |du 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)ry   namer   r}   r}   r~   add_worksheet      zWorkbook.add_worksheetc                 C   r   )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   )ry   r   r   r}   r}   r~   add_chartsheet   r   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)ry   
propertiesZformat_properties	xf_formatr}   r}   r~   rw      s   


zWorkbook.add_formatc                 C   s  | d}|du rtd dS |dkrt|}nP|dkr!t|}nG|dkr*t|}n>|dkr3t|}n5|dkr<t|}n,|d	krEt|}n#|d
krNt|}n|dkrWt	|}n|dkr`t
|}ntd|  dS d|v rq|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 '%s' in add_chart()r   T)r>   r   r   r   r   r   r   r   r   r   r   rE   Zembeddedr$   r-   rI   r   )ry   rz   Z
chart_typechartr}   r}   r~   	add_chart   s>   










zWorkbook.add_chartFc                 C   s@   |st j|std|  dS | jdu rd| _|| _|| _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:
            Nothing.

        z'VBA project binary file '%s' not found.r   NThisWorkbook)ospathexistsr   rf   rb   rc   )ry   rb   	is_streamr}   r}   r~   add_vba_project"  s   

zWorkbook.add_vba_projectc                 C   sD   |  ||dkr
dS |stj|st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:
            Nothing.

        r   z1VBA project signature binary file '%s' not found.N)r   r   r   r   r   rd   re   )ry   rb   	signatureZproject_is_streamZsignature_is_streamr}   r}   r~   add_signed_vba_project8  s   
zWorkbook.add_signed_vba_projectc              
   C   s~   | j s9z|   W n ty } zt|d}~w ty#   tdw d| _ | jr5|  D ]}|  q.dS dS 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   )ry   e	worksheetr}   r}   r~   r   S  s$   
zWorkbook.closec                 C   sB   |rt |d d | _nd| _|rt |d d | _dS 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_   )ry   widthheightr}   r}   r~   set_sizes  s   
zWorkbook.set_sizec                 C   s>   |du rdS |dk s|dkrt d|  dS 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 '%d' outside: 0 <= tab_ratio <= 100r   )r   r   r`   )ry   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   )ry   r   r}   r}   r~   set_properties     
zWorkbook.set_propertiesc                 C   s   |du s|du rt d dS |du r8t|trd}nt|tr"d}nt|tr*d}nt|ttttfr6d}nd}|dkrA|d	}|dkrQt	|d
krQt d|  t	|d
kr]t 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:
            Nothing.

        NzGThe name and value parameters must be non-None in set_custom_property()r   booldateZ
number_intnumbertextz%Y-%m-%dT%H:%M:%SZr1   zbLength of 'value' parameter exceeds Excel's limit of 255 characters in set_custom_property(): '%s'zaLength of 'name' parameter exceeds Excel's limit of 255 characters in set_custom_property(): '%s')r   
isinstancer   r   r   floatr   r   strftimelenrW   r   )ry   r   r   Zproperty_typer}   r}   r~   set_custom_property  s<   



zWorkbook.set_custom_propertyc                 C   s6   || _ |dkrd| _n|dkrd| _ |r|| _dS 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   )ry   modern   r}   r}   r~   set_calc_mode  s   
zWorkbook.set_calc_modec                 C   s   d}d}| dr|d}td}||}|r6|d}|d}| |}|du r5td|  dS nd}td	|tjrFtd
|rNtd|  dS td|r\td|  dS td|shtd|rpt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:
            Nothing.

        N =z^([^!]+)!([^!]+)$r      z)Unknown sheet name '%s' in defined_name()r   z^[\w\\][\w\\.]*$z^\dz0Invalid Excel characters in defined_name(): '%s'z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z3Name looks like a cell name in defined_name(): '%s'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$z6Invalid name '%s' like a RC cell ref in defined_name()F)
startswithlstriprecompilematchgroup_get_sheet_indexr   UNICODErT   r   )ry   r   Zformulasheet_index	sheetnameZsheet_partsr   r}   r}   r~   define_name  s6   






zWorkbook.define_namec                 C      | 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   .  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>   ry   r   r}   r}   r~   get_worksheet_by_name;  s   zWorkbook.get_worksheet_by_namec                 C   r   )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.

        )rx   r   r}   r}   r~   get_default_url_formatH  s   zWorkbook.get_default_url_formatc                 C   
   d| _ dS )z
        Allow ZIP64 extensions when writing xlsx file zip container.

        Args:
            None.

        Returns:
            Nothing.

        TN)r?   r   r}   r}   r~   r2   W  r   zWorkbook.use_zip64c                 C   s   |dur	|| _ dS 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_named  s   

zWorkbook.set_vba_namec                 C   r   )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_recommendedu  r   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y } z|d }~ww |  }|  s'|   | jj	dkr9d| j
d _d| j
d _|  D ]}|j| jj	krId|_q=| jr]|  D ]}|jd u r\|  qQ|   |   |   |   |   |   |   ||  || j || j | }d }t|D ]i\}}|\}}	}
| jrt |	d}|j!|_"|
r|#||$  q|#||$ %d qt&'d}t()|||f z|*||	 t(+| W q t,y } zt-|t.|d D ]}t(+|| d  q|d }~ww |/  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   )ry   Z	xlsx_filer   packagersheetZ	xml_filesZfile_id	file_dataZos_filenameZxml_filenameZ	is_binaryzipinfo	timestampir}   r}   r~   r     st   





zWorkbook._store_workbookc                 C   s   |r| }n|   }t| j}| |t|t}i d|d|d| jd| jd| jd| j	d| j
d| jd	| jd
| jd| jd| jd| jd| jd| jd| jd| jd| ji}|| | j| || j|< |S )Nr   r   ra   rA   r*   r#   r$   r%   r&   r'   r(   r)   rx   r,   r-   r0   r.   rv   )r   r   rH   _check_sheetnamer   r   ra   rA   r*   r#   r$   r%   r&   r'   r(   r)   rx   r,   r-   r0   r.   rv   _initializer   rK   )ry   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 u s|dkr1|r)| jt| j }n| jt| j }t|dkr=td| |	|rHtd| |
dsR|drXtd| |  D ]}| |j krmtd	| q\|S )
Nz[\[\]:*?/\\]r   r   r   z.Excel worksheet name '%s' must be <= 31 chars.z4Invalid Excel character '[]:*?/\' in sheetname '%s'.'z7Sheet name cannot start or end with an apostrophe "%s".z5Sheetname '%s', with case ignored, is already in use.)r   r   rG   rF   rE   strrD   r   r   searchr   endswithr   lowerr   r   )ry   r   Zis_chartsheetZinvalid_charr   r}   r}   r~   r  :  s6   

zWorkbook._check_sheetnamec                 C   s,   |    |   |   |   |   d S N)_prepare_formats_prepare_fonts_prepare_num_formats_prepare_borders_prepare_fillsr   r}   r}   r~   r   h  s
   z#Workbook._prepare_format_propertiesc                 C   s   g }g }| j D ]}|jd ur|| |jd ur|| qd gt| | _d gt| | _|D ]
}|j}|| j|< q0|D ]
}|j}|| j|< q=d S r
  )rL   r9   r   Z	dxf_indexr   rM   rO   )ry   rM   rO   r   r   Z
dxf_formatr}   r}   r~   r  z  s"   




zWorkbook._prepare_formatsc                 C   s6   t | j}|d= | jd ur|d= |D ]}|  qd S )Nr   )listrL   r)   Z_get_xf_index)ry   rL   r   r}   r}   r~   _set_default_xf_indices  s   


z Workbook._set_default_xf_indicesc                 C   s   i }d}| j D ]!}| }||v r|| |_d|_q|||< ||_d|_|d7 }q|| _| jD ]}|js@|js@|js@|j	s@|j
rCd|_q/d S Nr   r   )rM   Z_get_font_keyZ
font_indexZhas_fontrR   rO   Z
font_colorbolditalic	underlineZfont_strikeoutZhas_dxf_font)ry   Zfontsr   r   keyr}   r}   r~   r    s4   



zWorkbook._prepare_fontsc                 C   s   i }g }d}| j | j D ]E}|j}t|ts$t|}|dkr d}||_q|dkr,d|_q|dkr4d|_q||v r>|| |_q|||< ||_|d7 }|jrQ|| q|| _	d S )N   r   r   0ZGeneral)
rM   rO   r:   r   r  r   Znum_format_indexr9   r   rS   )ry   Zunique_num_formatsrS   r   r   r:   r}   r}   r~   r    s4   


zWorkbook._prepare_num_formatsc                 C   s   i }d}| j D ]!}| }||v r|| |_d|_q|||< ||_d|_|d7 }q|| _td}| jD ]}| }||rBd|_	q4d S )Nr   r   z[^0:])
rM   Z_get_border_keyZborder_index
has_borderri   r   r   rO   r  Zhas_dxf_border)ry   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s|js|jr%d|_|j|_|j|_q| jD ]e}|jdkrD|jdkrD|jdkrD|j}|j|_||_|jdkr]|jdkr]|jdkr]|j|_d|_d|_|jdkro|jdkro|jdkrod|_| }||v r|| |_	d|_
q)|||< ||_	d|_
|d7 }q)|| _d S )Nr   r   z0:0:0r   z17:0:0)rO   patternZbg_colorZfg_colorZhas_dxf_fillZdxf_bg_colorZdxf_fg_colorrM   Z_get_fill_keyZ
fill_indexZhas_fillrj   )ry   Zfillsr   r   tmpr  r}   r}   r~   r    sH   


	










zWorkbook._prepare_fillsc                 C   s   | j }|  D ]O}|jrd}|j}|d|j||g |jr-d}|j}|d|j||g |js3|jrVd}d}|jrF|jrF|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   )ry   rT   r   r   sheet_ranger}   r}   r~   r   U  s6   
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)ry   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 ]}|d }d| j|< |d r"d| _qt| j j}	|  D ]}
t|
j}t|
j}t|
j}t|
j}t|
j	}|
j
}d}|s[|s[|s[|s[|s[|s[q-|sa|sa|rg|d7 }d}|
j
r|
jrsd}|
j
}n|
j
}d }t||\}}}}}}}d| j|< ||v r|| }n|	d7 }	|	}|	||< | j|||g |
|| t|D ]K}|
j| d }|
j| d }t||\}}}}}}}d| j|< ||v r|| }n|	d7 }	|	}|	||< | j|||g |
||||||||||
 qt|D ]}|d7 }|
||| qt|D ]	}|
|| qt|D ]S}|
j| d }|
j| d }|
j| d }t||\}}}}}}}d| j|< ||v rQ|| }n|	d7 }	|	}|	||< | j|||g |
|||||||||	 qt|D ]S}|
j	| d }|
j	| d }|
j	| d }t||\}}}}}}}d| j|< ||v r|| }n|	d7 }	|	}|	||< | j|||g |
|||||||||	 qw|r|
j}| j| q-| jd d  D ]}|jd	kr| j| qt| jd
d d| _|| _d S )Nr   r   T   Fr   r   r   r   c                 S   r   r
  )id)r   r}   r}   r~   <lambda>i  s    z,Workbook._prepare_drawings.<locals>.<lambda>r#  )rv   rh   rg   rt   r   r   rI   ZshapesZheader_imagesZfooter_imagesZbackground_imageZbackground_bytesr!   r   Z_prepare_backgroundr   Z_prepare_imageZ_prepare_chartZ_prepare_shapeZ_prepare_header_imagedrawingrJ   r.  r   sortedrk   )ry   Zchart_ref_idZref_idZ
drawing_idZ	image_idsZheader_image_idsZbackground_idsZ
image_dataZ
image_typeZimage_ref_idr   Zchart_countZimage_countZshape_countZheader_image_countZfooter_image_counthas_backgroundZhas_drawingr=   r,  digestr   r   r   r   Zx_dpiZy_dpipositionr0  r   r}   r}   r~   r     sP  








	










zWorkbook._prepare_drawingsc           
      C   s   g }|D ]@}|d }|d }|d }|dkrqd|v rD| dd\}}|dr5|dd}	|d |	 }n
|dkr?|d | }|| q|S )	Nr   r   r   r  !r!  r   r   )splitr   r$  r   )
ry   rT   rU   r+  r   r   r   rD   r,  Z	xlnm_typer}   r}   r~   r  m  s"   

zWorkbook._extract_named_rangesc                 C   s$   | d}|| jv r| j| jS d S )Nr  )striprK   r   )ry   r   r}   r}   r~   r     s   

zWorkbook._get_sheet_indexc           
      C   s   d}d}d}d}d}d}d}|   D ]Y}|js|jsq|d7 }|jrT|jr0|d7 }|d7 }d| _|d7 }|||||}	|dtd|	 d  7 }|dtd|	 d  7 }|jre|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[   )
ry   Z
comment_idZvml_drawing_idZvml_data_idZvml_header_idZvml_shape_idZ	vml_filesZcomment_filesr   countr}   r}   r~   r     s:   zWorkbook._prepare_vmlc                 C   sB   d}i }|   D ]}t|j}|sq||d | ||7 }qd S r  )r   r   Ztablesr   )ry   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   )ry   r   r}   r}   r~   r     s   zWorkbook._prepare_metadatac                 C   sH  i }i }g }|   D ]}|||j< q
| jD ]}|| |jr%||j q|D ]y}|j D ]q}|j| }|j| d urQ||vsG|| d u rP|j| }|||< q/||v r]|| |j|< q/| |\}	}
|	d u riq/|		drxg |j|< g ||< q/|	|vrt
d|	|f  g |j|< g ||< q/||	 }|j|
 }||j|< |||< q/q(d S )N(zEUnknown worksheet reference '%s' in range '%s' passed to add_series())r   r   rI   r   combinedZformula_idskeysZformula_data_get_chart_ranger   r   Z_get_range_data)ry   r   Zseen_rangesrI   r   r   c_rangeZr_iddatar   cellsr}   r}   r~   r     sV   









zWorkbook._add_chart_datac                 C   s   | d}|dkr|d | }||d d  }ndS |ddkr*|dd\}}n||}}|d}|dd}zt|\}}t|\}	}
W n
 tyR   Y dS w ||	kr]||
kr]dS ||||	|
gfS )Nr5  r   r   NN:r  z'')rfindfindr6  r7  r$  r   AttributeError)ry   r?  posr   rA  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   B  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)ry   ZschemarH  Zxmlns_r
attributesr}   r}   r~   r   M  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)ry   Zapp_nameZlast_editedZlowest_editedZ	rup_buildrJ  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   rL  ry   rJ  r}   r}   r~   r   o  s   
zWorkbook._write_file_sharingc                 C   sL   d}g }| j r|d| j f | jr|d |d|f | d| d S )NiB rK  )Zdate1904r   ZdefaultThemeVersionZ
workbookPr)rf   r   r$   rL  )ry   Zdefault_theme_versionrJ  r}   r}   r~   r   x  s   
zWorkbook._write_workbook_prc                 C   s    |  d |   | d d S )NZ	bookViews)rI  _write_workbook_viewr   r   r}   r}   r~   r     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r2| jjd }|d	|f | jjdkrA|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   rL  )ry   rJ  rO  r}   r}   r~   rN    s   
zWorkbook._write_workbook_viewc                 C   sD   |  d d}|  D ]}| |j||j |d7 }q| d d S )NZsheetsr   )rI  r   _write_sheetr   r   r   )ry   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r| d | ddt| f | d	| d S )
Nr   ZsheetIdr   )stater   r   )rQ  Z
veryHiddenzr:idZrIdr   )r   r  rL  )ry   r   sheet_idr   rJ  r}   r}   r~   rP    s   
zWorkbook._write_sheetc                 C   sl   d| j fg}| jdkr|d| jf |d n| jdkr&|d| jf | jr.|d | d| d S )NZcalcIdr   ZcalcMode)Z
calcOnSaver  r   )ZfullCalcOnLoad1ZcalcPr)rn   rl   r   rm   rL  rM  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   rI  _write_defined_namer   )ry   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 |r'| d | d	|| d S )
Nr   r   r   r-  r   r   ZlocalSheetId)r   r   ZdefinedName)r   Z_xml_data_element)ry   r+  r   rR  r   r   rJ  r}   r}   r~   rT    s   

zWorkbook._write_defined_namerB  r
  )F)FF)A__name__
__module____qualname____doc__r   r   r   r   r<   r   r   r   r   rw   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   rN  r   rP  r   r   rT  __classcell__r}   r}   r{   r~   r"   -   s|    n



4
 


29
'
c
(."+C* T	(
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   rO  r   r}   r}   r~   r<        
zWorksheetMeta.__init__N)rU  rV  rW  rX  r<   r}   r}   r}   r~   r@     s    r@   c                   @   s(   e Zd ZdZdd Z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<     r[  zEmbeddedImages.__init__c                 C   s8   | j |}|d u r| j| t| j}|| j |< |S r
  )r\  r>   rh   r   r   )ry   imager3  Zimage_indexr}   r}   r~   get_image_index  s   

zEmbeddedImages.get_image_indexc                 C   s   t | jdkS rZ  )r   rh   r   r}   r}   r~   r:    s   zEmbeddedImages.has_imagesN)rU  rV  rW  rX  r<   r^  r:  r}   r}   r}   r~   ru     s
    
ru   )<r&  r   r   r   r   r   decimalr   	fractionsr   warningsr   zipfiler   r   r	   r
   r   r   r   r   Z
chartsheetr   Zsharedstringsr   formatr   r   r   Zutilityr   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   
exceptionsr   r   r   r    r!   Z	XMLwriterr"   objectr@   ru   r}   r}   r}   r~   <module>   s\   	             L