o
    ]i                     @   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mZmZmZmZmZmZ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l0m1Z1 d	dl2m3Z3m4Z4m5Z5m6Z6 d	dl7m8Z8 d	dl9m:Z: d	dl;m<Z< d	dl=m>Z> d	dl?m@Z@ G dd dejAZBG dd dZCG dd  d ZDdS )!    N)datetimetimezone)Decimal)Fraction)IOAnyAnyStrDictListLiteralOptionalUnion)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		ddee	e
ee ejf  deee
ef  ddf fddZdd	 Zdd
dZ	ddee
 defddZ	ddee
 defddZddefddZdee
ef dee	eeeeeeeee f	  fddZ!dde
de"de#fddZ$		dde
de
de"de"de%d f
ddZ&dd d!Z'd"e#d#e#ddfd$d%Z(dd&ee	e#e)f  ddfd'd(Z*dd)d*Z+	dde
d+e	e"e,e#e)e-e.ef d,ee%d-  de%d fd.d/Z/	dd0e%d1 ddfd2d3Z0de
d4e
de%d fd5d6Z1de2e fd7d8Z3de
dee fd9d:Z4defd;d<Z5dd=d>Z6ddee
 ddfd?d@Z7ddAdBZ8ddCdDZ9ddEdFZ:ddGdHZ;ddIdJZ<ddKdLZ=ddMdNZ>ddOdPZ?ddQdRZ@ddSdTZAddUdVZBddWdXZCdYdZ ZDdd[d\ZEd]d^ ZFdd_d`ZGdadb ZHdcdd ZIddedfZJddgdhZKddidjZLddkdlZMdmdn ZNddodpZOdqdr ZPddsdtZQddudvZRddwdxZSddydzZTdd{d|ZUdd}d~ZVdddZWdddZXdddZYdddZZdddZ[  Z\S )Workbookz=
    A class for writing the Excel XLSX Workbook file.


    Nfilenameoptionsreturnc                    s  |du 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 rxd| _|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./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r;d| _| jrH| Sddd n| Sd di | Sd!di| _T| j
durh| Sd"| 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   SheetChart      >  %  X  autoig )xf_indexfont_familyrF   	hyperlink
num_format)Usuper__init__r+   getr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   allow_zip64WorksheetMetaworksheet_metaselected
fileclosed
filehandle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_rangescustom_colorsdoc_propertiescustom_propertiesr   nowr   utc
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+   r,   	__class__ X/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/xlsxwriter/workbook.pyrK   @   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__namec                 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)r   r   r   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   )r   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.

        Arial
   )	font_name	font_sizetheme)	r:   copyr7   updater$   r^   r`   r\   append)r   
propertiesformat_properties	xf_formatr   r   r   r      s   


zWorkbook.add_formatc                 C   s  | d}|du rtd dS |dkrt|}nO|dkr!t|}nF|dkr*t|}n=|dkr2t }n5|dkr;t|}n,|d	krCt }n$|d
krLt|}n|dkrUt	|}n|dkr]t
 }n
td| d dS d|v rp|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()areabarcolumndoughnutlinepieradarscatterstockzUnknown chart type 'z' in add_chart()r   T)rL   r   r   r   r   r   r   r   r   r   r   rU   embeddedr/   r8   rY   r   )r   r,   
chart_typechartr   r   r   	add_chart   s>   







zWorkbook.add_chartFrt   	is_streamc                 C   sD   |st j|std| 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:
            0 on success.

        zVBA project binary file '' not found.r   NThisWorkbookr   )ospathexistsr   rx   rt   ru   )r   rt   r   r   r   r   add_vba_project<  s   
zWorkbook.add_vba_project	signatureproject_is_streamsignature_is_stream)r   r   c                 C   sH   |  ||dkr
dS |stj|st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   rv   rw   )r   rt   r   r   r   r   r   r   add_signed_vba_projectT  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.)
rQ   _store_workbookIOErrorr!   r   r"   r5   
worksheets
_opt_closer   )r   e	worksheetr   r   r   r   u  s$   
zWorkbook.closewidthheightc                 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  `   rB   rC   N)intrp   rq   )r   r   r   r   r   r   set_size  s   
zWorkbook.set_sizerr   c                 C   sB   |du rdS |dk s|dkrt d| 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 'z ' outside: 0 <= tab_ratio <= 100r   )r   r   rr   )r   rr   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)rg   )r   r   r   r   r   set_properties     
zWorkbook.set_propertiesr   property_type)booldatenumber
number_inttextc                 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rBt|	 }|dkrK|
d	}|d
v rSt|}|dkret|dkret d| d t|dkrst 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   r   r   r   r   r   z%Y-%m-%dT%H:%M:%SZ)r   r   r<   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lenrh   r   )r   r   r   r   r   r   r   set_custom_property  sF   



zWorkbook.set_custom_propertymode)manualauto_except_tablesrE   c                 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.

        r   Fr   autoNoTableN)r~   r   r   )r   r   r   r   r   r   set_calc_mode  s   
zWorkbook.set_calc_modeformulac                 C   s  d}d}| dr|d}td}||}|r8|d}|d}| |}|du r7td| d d	S nd	}td
|tjrHtd|rRtd| d d	S td|rbtd| d d	S td|sntd|rxt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   UNICODErd   r   )r   r   r   sheet_index	sheetnamesheet_partsr   r   r   r   define_name*  s8   






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.

        )rX   r   r   r   r   r   e  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.

        )r[   rL   r   r   r   r   r   get_worksheet_by_namer  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.

        )r   r   r   r   r   get_default_url_format  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)rM   r   r   r   r   r=     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   )rx   r   r   r   r   set_vba_name  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)r   r   r   r   r   read_only_recommended  r   zWorkbook.read_only_recommendedc                 C   sf   |    |   |   |   |   |   |   |   |   | 	  | 
d |   d S )Nworkbook)_prepare_format_properties_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_tag
_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   rM   r   _get_packagerr   r   rO   activesheetrX   rP   hiddenindexactivert   rx   r   _prepare_sst_string_data_prepare_vml_prepare_defined_names_prepare_drawings_add_chart_data_prepare_tables_prepare_metadata_add_workbook_set_tmpdirr.   _set_in_memoryr6   _create_package	enumerater   r  compress_typewritestrgetvalueencodetimemktimer   utimewriteremover   ranger   r   )r   	xlsx_filer   packagersheet	xml_filesfile_id	file_dataos_filenamexml_filename	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| j| jd}|| | j| || j|< |S )Nr   r  rs   rO   r5   r.   r/   r0   r1   r2   r3   r4   r   workbook_add_formatr7   r8   r;   )r9   r   )r   r   rX   _check_sheetnamer   r   rs   rO   r5   r.   r/   r0   r1   r2   r3   r4   r   r   r7   r8   r;   r9   r   _initializer   r[   )r   r   r   r   r   	init_datar   r   r   r   J  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| d|	|rLtd| d|
d	sV|d	r^td
| d|  D ]}| |j krutd| dqb|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   rW   rV   rU   r   rT   r   r#   searchr   endswithr   r   r   r    )r   r   is_chartsheetinvalid_charr   r   r   r   r:  s  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     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 rA  )r\   rF   r   	dxf_indexr   r]   r_   )r   r]   r_   r   r  
dxf_formatr   r   r   rB    s"   




zWorkbook._prepare_formatsc                 C   s6   t | j}|d= | jd ur|d= |D ]}|  qd S )Nr   )listr\   r4   _get_xf_index)r   r\   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   FTr   )r]   _get_font_key
font_indexhas_fontrb   r_   
font_colorbolditalic	underlinefont_strikeouthas_dxf_font)r   fontsr  r   keyr   r   r   rC    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   0General)
r]   r_   rI   r   r   r   num_format_indexrF   r   rc   )r   unique_num_formatsrc   r  r   rI   r   r   r   rD    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   FTr   z	[^0None:])
r]   _get_border_keyborder_index
has_borderr{   r   r   r_   r=  has_dxf_border)r   bordersr  r   rV  r^  r   r   r   rE  .  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 ]Y}|jdkr@|jr@|jr@|j}|j|_||_|jdkrU|jrU|jsU|j|_d |_d|_|jdkrc|jsc|jrcd|_| }||v rt|| |_	d|_
q)|||< ||_	d|_
|d7 }q)|| _d S )Nr   r   z0:None:Noner   z17:None:NoneTF)r_   patternbg_colorfg_colorhas_dxf_filldxf_bg_colordxf_fg_colorr]   _get_fill_key
fill_indexhas_fillr|   )r   fillsr  r   tmprV  r   r   r   rF  M  s<   




zWorkbook._prepare_fillsc                 C   sF   | j s | jD ]}|jr| j d |jd ur|jr| j d q| j S )NXFComplementsDXFComplements)r   r\   checkboxaddrG  )r   r   r   r   r   _has_feature_property_bags  s   
z#Workbook._has_feature_property_bagsc                 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)rd   r   autofilter_arear   r  print_area_rangerepeat_col_rangerepeat_row_range_sort_defined_names_extract_named_rangesre   )r   rd   r/  r  sheet_ranger   r   r   r    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::   rV  )replacer   r   r   sortoperator
itemgetterpop)r   names	name_listdefined_name_rT   r   r   r   rw    s   
zWorkbook._sort_defined_namesc                 C   s  d}d}d}i }i }i }| j jD ]}|j}d| j|< |jd u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}|j}|j}d| j|< ||v r|| }n|	d7 }	|	}|	||< | j| |
|| t|D ]2}|
j| }|j}|j}d| j|< ||v r|| }n|	d7 }	|	}|	||< | j| |
||| qt|D ]}|d7 }|
||| qt|D ]}|
|| q|
j
D ]-}|j}|j}d| j|< ||v r|| }n|	d7 }	|	}|	||< | j| |
|| q|
jD ].}|j}|j}d| j|< ||v r8|| }n|	d7 }	|	}|	||< | j| |
|| q!|r\|
j}| j| q-| jd d  D ]}|jdkrr| j| qdt| jdd d| _|| _d S )	Nr   TFr   r   c                 S   r   rA  )id)r   r   r   r   <lambda>`  s    z,Workbook._prepare_drawings.<locals>.<lambda>r|  )r   rz   _image_extensionry   descriptionr   r   r   rY   shapesheader_imagesfooter_imagesbackground_image_digestr   _prepare_backgroundr,  _prepare_image_prepare_chart_prepare_shape_prepare_header_imagedrawingrZ   r  r+  sortedr}   )r   chart_ref_idref_id
drawing_id	image_idsheader_image_idsbackground_idsimageimage_extensionimage_ref_idr/  chart_countimage_countshape_countheader_image_countfooter_image_counthas_backgroundhas_drawingimage_digestr  r  r   r   r   r   r    s   




















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   rq  !rz  r   r   )splitr   r}  r   )
r   rd   re   r  r   r  ry  rT   r  	xlnm_typer   r   r   rx  d  s"   

zWorkbook._extract_named_rangesc                 C   s$   | d}|| jv r| j| jS d S )Nr   )stripr[   r  )r   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   has_vmlhas_header_vmlr   _prepare_vml_objectsr   _prepare_header_vml_objectsrl   rm   )
r   
comment_idvml_drawing_idvml_data_idvml_header_idvml_shape_id	vml_files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 )Nr   r   )r   r   tablesr  )r   table_idseenr/  table_countr   r   r   r    s   

zWorkbook._prepare_tablesc                 C   s8   | j  | _| j| _|  D ]}|jrd| _d| _qd S )NT)r   
has_imagesr   r   r   has_dynamic_arraysr   )r   r/  r   r   r   r    s   zWorkbook._prepare_metadatac                 C   sN  i }i }g }|   D ]}|||j< q
| jD ]}|| |jr%||j q|D ]|}|j D ]t}|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|	 d| d g |j|< g ||< q/||	 }|j|
 }||j|< |||< q/q(d S )N(zUnknown worksheet reference 'z' in range 'z' passed to add_series())r   r   rY   r   combinedformula_idskeysformula_data_get_chart_ranger   r   _get_range_data)r   r   seen_rangesrY   r   r   c_range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 )Nr  r   r   NN:r   z'')rfindfindr  r  r}  r(   AttributeError)r   r  posr   r  cell_1cell_2	row_start	col_startrow_endcol_endr   r   r   r    s&   


zWorkbook._get_chart_rangec                 C   s   | j   d S rA  )rs   _sort_string_datar   r   r   r   r  5  s   z!Workbook._prepare_sst_string_datac                 C   s   t  S rA  r%   r   r   r   r   r  9  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   schemar  xmlns_r
attributesr   r   r   r  D  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 )
Nxlr{  i  appName
lastEditedlowestEditedrupBuild)codeNamez&{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}fileVersion)rt   r   _xml_empty_tag)r   app_namelast_editedlowest_edited	rup_buildr  r   r   r   r  R  s   
zWorkbook._write_file_versionc                 C   s$   | j dkrd S dg}| d| d S )Nr   )readOnlyRecommendedr   fileSharing)r   r  r   r  r   r   r   r  f  s   
zWorkbook._write_file_sharingc                 C   sL   d}g }| j r|d| j f | jr|d |d|f | d| d S )NiB r  )date1904r   defaultThemeVersion
workbookPr)rx   r   r/   r  )r   default_theme_versionr  r   r   r   r  o  s   
zWorkbook._write_workbook_prc                 C   s    |  d |   | d d S )N	bookViews)r  _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 )NxWindowyWindowwindowWidthwindowHeightrD   tabRatior   r   
firstSheet	activeTabworkbookView)
rn   ro   rp   rq   rr   r   rO   
firstsheetr  r  )r   r  r  r   r   r   r    s   
zWorkbook._write_workbook_viewc                 C   sD   |  d d}|  D ]}| |j||j |d7 }q| d d S )Nsheetsr   )r  r   _write_sheetr   r  r
  )r   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   sheetIdr   )stater  r   )r  
veryHiddenzr:idrIdr/  )r   r   r  )r   r   sheet_idr  r  r   r   r   r    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 )NcalcIdr   calcMode)
calcOnSaverX  r   )fullCalcOnLoad1calcPr)r   r~   r   r   r  r  r   r   r   r	    s   


zWorkbook._write_calc_prc                 C   s8   | j sd S | d | j D ]}| | q| d d S )NdefinedNames)rd   r  _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 |r'| d | d	|| d S )
Nr   r   r      r   r   localSheetId)r  r   definedName)r   _xml_data_element)r   r  r   r   ry  r  r  r   r   r   r    s   

zWorkbook._write_defined_namer  r-   NrA  )F)FF)]__name__
__module____qualname____doc__r   r   r)   r   r   r   r   r   r   r   PathLiker	   r   rK   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   rB  rK  rC  rD  rE  rF  rp  r  rw  r  rx  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  __classcell__r   r   r   r   r*   1   s    s


@

!! 

C
;



'
d
)
.



"
-
7
*
 
	
(


G
$



	





r*   c                   @   s   e Zd ZdZdddZdS )rN   z]
    A class to track worksheets data such as the active sheet and the
    first sheet.

    r-   Nc                 C   s   d| _ d| _d S )Nr   )r  r  r   r   r   r   rK        
zWorksheetMeta.__init__r  )r  r  r  r  rK   r   r   r   r   rN     s    rN   c                   @   s0   e Zd ZdZdddZdefddZd	d
 ZdS )r   zI
    A class to track duplicate embedded images between worksheets.

    r-   Nc                 C   s   g | _ i | _d S rA  )rz   image_indexesr   r   r   r   rK     r  zEmbeddedImages.__init__r  c                 C   s<   | j |j}|du r| 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  rL   r  rz   r   r   )r   r  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   rz   r   r   r   r   r    s   zEmbeddedImages.has_imagesr  )r  r  r  r  rK   r   r  r  r   r   r   r   r     s
    
r   )Er  r   r   r'  r   r   decimalr   	fractionsr   typingr   r   r   r	   r
   r   r   r   warningsr   zipfiler   r   r   r   xlsxwriter.imager   r   r   
chart_arear   	chart_barr   chart_columnr   chart_doughnutr   
chart_liner   	chart_pier   chart_radarr   chart_scatterr   chart_stockr   
chartsheetr   
exceptionsr    r!   r"   r#   formatr$   r.  r&   sharedstringsr'   utilityr(   r   r)   	XMLwriterr*   rN   r   r   r   r   r   <module>   sX   
(             ?