
    	i                        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ejA                  ZB G d d          ZC G 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                       e Zd ZdZeZeZ	 	 dPdee	e
ee         ej        f                  deee
ef                  ddf fdZd ZdQdZ	 dPd	ee
         defd
Z	 dPd	ee
         defdZdRdefdZdee
ef         dee	eeeeeeeee f	                  fdZ!dSde
de"de#fdZ$	 	 dTde
de
de"de"de%d         f
dZ&dQdZ'de#de#ddfdZ(dRdee	e#e)f                  ddfdZ*dQdZ+	 dRd	e
de	e"e,e#e)e-e.ef         dee%d                   de%d         fd!Z/	 dRd"e%d#         ddfd$Z0d	e
d%e
de%d         fd&Z1de2e         fd'Z3d	e
dee         fd(Z4defd)Z5dQd*Z6dRd	ee
         ddfd+Z7dQd,Z8dQd-Z9dQd.Z:dRd/Z;dSd0Z<dQd1Z=dQd2Z>dQd3Z?dQd4Z@dQd5ZAdQd6ZBdQd7ZCd8 ZDdQd9ZEd: ZFdQd;ZGd< ZHd= ZIdQd>ZJdQd?ZKdQd@ZLdQdAZMdB ZNdQdCZOdD ZPdQdEZQdQdFZRdQdGZSdQdHZTdQdIZUdQdJZVdQdKZWdQdLZXdQdMZYdQdNZZdQdOZ[ xZ\S )UWorkbookz=
    A class for writing the Excel XLSX Workbook file.


    Nfilenameoptionsreturnc                 |   |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]          j/        t`          j1                  | _2        d| _3        d| _4        d| _5        d| _6        d| _7        d| _8        d| _9        tu                      | _;        d| _<        d| _=        d| _>        d| _?        d| _@        i | _A        g | _B        d| _C        d| _D        d| _E        d| _F        d| _G        d| _H        d| _I        d| _J        d| _K        d| _L        d| _M        d| _N        t                      | _P        t                      | _R        | j        rd| _        | j        r| S                    ddd           n| S                    d di           | S                    d!di          | _T        | j
        #| S                    d"| 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_familyrI   	hyperlink
num_format)Usuper__init__r-   getr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   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__s      K/srv/django_bis/venv311/lib/python3.11/site-packages/xlsxwriter/workbook.pyrN   zWorkbook.__init__@   s    ?G kk(D11 [%88")++.BE"J"J#*;;/Dd#K#K &{{+<dCC!(-@%!H!H#*;;/Dd#K#K &{{+<eDD [%88&{{+<eDD&{{+<eDD$+KK0F$N$N!)05PRT)U)U&%kk*:DAA$$"&D;;{## 	%#D$D+oo!!  !!#"$ !#",x|44!"!!*,,%*"%)"/4,  !!#( %*").&-//%(UU" > 	)#(D   	-OO1==>>>>OOZO,,, #'//;2E"F"F #/'+t78( (D$$$ 0/    c                     | S )z0Return self object to use with "with" statement. r   s    r   	__enter__zWorkbook.__enter__   s    r   c                 .    |                                   dS )z-Close workbook when exiting "with" statement.N)close)r   typevalue	tracebacks       r   __exit__zWorkbook.__exit__   s     	

r   namec                 B    || j         }|                     ||          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   s      r   add_worksheetzWorkbook.add_worksheet   s(     ""2Ot_EEEr   c                 B    || j         }|                     ||          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   s      r   add_chartsheetzWorkbook.add_chartsheet   s*     ##4t5EFFFr   c                     | 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=   copyr:   updater%   ra   rc   r_   append)r   
propertiesformat_properties	xf_formats       r   r   zWorkbook.add_format   s     !:??AA 	Y.5BQW X X 	1$$Z000t5t7N
 
	
 	I&&&r   c                    |                     d          }|t          d           dS |dk    rt          |          }n|dk    rt          |          }n|dk    rt	          |          }n|dk    rt                      }n|dk    rt          |          }nk|d	k    rt                      }nV|d
k    rt          |          }n@|dk    rt          |          }n*|dk    rt                      }nt          d| d           dS d|v 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()areabarcolumndoughnutlinepieradarscatterstockzUnknown chart type 'z' in add_chart()r   T)rO   r   r   r   r   r   r   r   r   r   r   rX   embeddedr2   r;   r\   r   )r   r.   
chart_typecharts       r   	add_chartzWorkbook.add_chart   s{   2 [[((
<===4g&&EE5  W%%EE8##((EE:%%!OOEE6!!g&&EE5  JJEE7""w''EE9$$ ))EE7""LLEED
DDDEEE4 W&vE. $ 45!!!r   Frw   	is_streamc                     |s4t           j                            |          st          d| d           dS | j        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   r{   rw   rx   )r   rw   r   s      r   add_vba_projectzWorkbook.add_vba_project<  sf      	!<!< 	F[FFFGGG2$ .D&%."qr   	signatureproject_is_streamsignature_is_stream)r   r   c                     |                      ||          dk    rdS |s4t          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   ry   rz   )r   rw   r   r   r   s        r   add_signed_vba_projectzWorkbook.add_signed_vba_projectT  sv    * ->??2EE2" 	27>>)+D+D 	NyNNNOOO2%."/B,qr   c                 J   | j         s	 |                                  n9# t          $ r}t          |          d}~wt          $ r t          d          w xY wd| _         | j        r+|                                 D ]}|                                 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.)
rT   _store_workbookIOErrorr"   r   r#   r8   
worksheets
_opt_closer   )r   e	worksheets      r   r   zWorkbook.closeu  s      	<$$&&&& ) ) )%a(((   #0   #DO # +!%!2!2 + +I((****+ ++ + :;;;;;s    
A7Awidthheightc                     |rt          |dz  dz            | _        nd| _        |rt          |dz  dz            | _        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  `   rE   rF   N)intrs   rt   )r   r   r   s      r   set_sizezWorkbook.set_size  se      	& #EDL2$5 6 6D %D 	&!$Vd]R%7!8!8D!%Dr   ru   c                 ~    |dS |dk     s|dk    rt          d| d           dS t          |dz            | _        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   ru   )r   ru   s     r   set_tab_ratiozWorkbook.set_tab_ratio  sW     Fq==IOOJyJJJKKKKK R00DNNNr   c                     || _         dS )z
        Set the document properties such as Title, Author etc.

        Args:
            properties: Dictionary of document properties.

        Returns:
            Nothing.

        N)rj   )r   r   s     r   set_propertieszWorkbook.set_properties  s     )r   r   property_type)booldatenumber
number_inttextc                    ||t          d           dS |ut          |t                    rd}n]t          |t                    rd}nEt          |t                    rd}n-t          |t
          t          t          t          f          rd}nd}|dk    r!t          |          	                                }|dk    r|
                    d	          }|d
v 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   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lenrk   r   )r   r   r   r   s       r   set_custom_propertyzWorkbook.set_custom_property  s   ( <5=(   2 %&& 	' &E8,, ' &E3'' ' ,EE3#BCC ' ( & F""JJ$$&&EF""NN#788E444JJEF""s5zzC'7'7B9>B B B  
 t99s??A9=A A A  
 	%%tUM&BCCCqr   mode)manualauto_except_tablesrH   c                 `    || _         |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   s      r   set_calc_modezWorkbook.set_calc_mode  sS      8 %D)))*DN  	#"DLLL	# 	#r   formulac                    d}d}|                     d          r|                    d          }t          j        d          }|                    |          }|rW|                    d          }|                    d          }|                     |          }|t          d| d           d	S nd	}t          j        d
|t          j                  rt          j        d|          rt          d| d           d	S t          j        d|          rt          d| d           d	S t          j        d|          st          j        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   UNICODErg   r   )r   r   r   sheet_index	sheetnamesheet_partsr   s          r   define_namezWorkbook.define_name*  s    	 c"" 	*nnS))G j!566!!$'' 	AI;;q>>D//	::K "JIJJJKKKr #
 K x+T2:>> 	"(DC
 C
 	 HHHHIII2 86== 	KDKKKLLL2 8K&& 	"(3JD*Q*Q 	N$NNNOOO2!!4gu"EFFFqr   c                     | j         S )z
        Return a list of the worksheet objects in the workbook.

        Args:
            None.

        Returns:
            A list of worksheet objects.

        )r[   r   s    r   r   zWorkbook.worksheetse  s     ##r   c                 6    | 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^   rO   r   r   s     r   get_worksheet_by_namezWorkbook.get_worksheet_by_namer  s     ""4(((r   c                     | 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.

        )r   r   s    r   get_default_url_formatzWorkbook.get_default_url_format  s     &&r   c                     d| _         dS )z
        Allow ZIP64 extensions when writing xlsx file zip container.

        Args:
            None.

        Returns:
            Nothing.

        TN)rP   r   s    r   r@   zWorkbook.use_zip64  s      r   c                 *    |	|| _         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   )r{   r	  s     r   set_vba_namezWorkbook.set_vba_name  s&      $D .Dr   c                     d| _         dS )z
        Set the Excel "Read-only recommended" option when saving a file.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r   s    r   read_only_recommendedzWorkbook.read_only_recommended  s     r   c                    |                                   |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  | 	                                 | 
                    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   s    r   _assemble_xml_filezWorkbook._assemble_xml_file  s     	''))) 	 	 	  """ 	  """ 	!!! 	    	 	!!### 	 	*%%% 	r   c                    	 t          | j        dt          | j                  }n# t          $ r}|d }~ww xY w|                                 }|                                 s|                                  | j        j	        dk    r$d| j
        d         _        d| j
        d         _        |                                 D ]}|j        | j        j	        k    rd|_        | j        r2|                                 D ]}|j        |                                 |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                    |            |                    | j                   |                    | j                   |                                }d }t?          |          D ]B\  }}|\  }}	}
| j        rtA          |	d          }|j!        |_"        |
r)|#                    ||$                                           Z|#                    ||$                                %                    d                     tM          j'        d          }tQ          j)        |||f           	 |*                    ||	           tQ          j+        |           # tX          $ rJ}t[          |t]          |          dz
            D ]"}tQ          j+        ||         d                    #|d }~ww xY 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   rP   r   _get_packagerr   r   rR   activesheetr[   rS   hiddenindexactiverw   r{   r  _prepare_sst_string_data_prepare_vml_prepare_defined_names_prepare_drawings_add_chart_data_prepare_tables_prepare_metadata_add_workbook_set_tmpdirr1   _set_in_memoryr9   _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is                 r   r   zWorkbook._store_workbook  s   	(+	  II  	 	 	G	 %%''    	!    *a///0D #,-.D #* __&& 	! 	!E{d1===   	)** ) )%-&&((( 	%%''' 	 	##%%% 	    	 	 	    	t$$$T[)))///,,..	  #,I"6"6 	 	GY3<0Ky~ !,0EFF )2(=% X&&w0D0D0F0FGGGG&&w0D0D0F0F0M0Mg0V0VWWWW !K(HII	y)&<===OOK>>>Ik****#   "7C	NNQ,>?? 3 3	)A,q/2222G	 	s)   "% 
616*K<<
MAMMc                 R   |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*  rv   rR   r8   r1   r2   r3   r4   r5   r6   r7   r   workbook_add_formatr:   r;   r>   )r<   r   )r   r   r[   _check_sheetnamer   r    rv   rR   r8   r1   r2   r3   r4   r5   r6   r7   r   r   r:   r;   r>   r<   r   _initializer   r^   )r   r   r   r   r  	init_datas         r   r   zWorkbook._add_sheetJ  s     	/'))II,,..I$.//$$T:i+L+LMM
D
[
 
 d1	

 t3
 dk
 
 !$"9
 "4#;
 t3
  !7
 "4#;
 !$"9
 "4?
 t3
  t3!
" d1#
$ %)$=#3'
 
 
	, 	i(((##I... )r   c                    t          j        d          }|r| xj        dz  c_        n| xj        dz  c_        ||dk    r;|r| j        t          | j                  z   }n| j        t          | j                  z   }t          |          dk    rt          d| d          |	                    |          rt          d| d          |
                    d	          s|                    d	          rt          d
| d          |                                 D ]D}|                                |j                                        k    rt          d| d          E|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   rZ   rY   rX   r   rW   r   r$   searchr   endswithr   r   r   r!   )r   r  is_chartsheetinvalid_charr   s        r   rP  zWorkbook._check_sheetnames  s    z/22  	&  A%     A%   	R H Oc$2F.G.GG		 Oc$2F.G.GG	 y>>B&JJJJ  
 y)) 	&QIQQQ  
 $$ 		(:(:3(?(? 	&SiSSS   ** 	 	I  IN$8$8$:$:::,U)UUU   ;
 r   c                     |                                   |                                  |                                  |                                  |                                  d S N)_prepare_formats_prepare_fonts_prepare_num_formats_prepare_borders_prepare_fillsr   s    r   r  z#Workbook._prepare_format_properties  sl     	 	 	!!### 	 	r   c                 J   g }g }| j         D ]:}|j        |                    |           |j        |                    |           ;d gt	          |          z  | _        d gt	          |          z  | _        |D ]}|j        }|| j        |<   |D ]}|j        }|| j        |<   d S rY  )r_   rI   r   	dxf_indexr   r`   rb   )r   r`   rb   r   r*  
dxf_formats         r   rZ  zWorkbook._prepare_formats  s     
  	. 	.I!-!!),,,".""9---  &3z??2 6C$4$44 $ 	/ 	/I&E%.DOE""% 	1 	1J(E&0DU##	1 	1r   c                 z    t          | j                  }|d= | j        |d= |D ]}|                                 d S )Nr   )listr_   r7   _get_xf_index)r   r_   r   s      r   _set_default_xf_indicesz Workbook._set_default_xf_indices  s^     t|$$ AJ #/
 ! 	& 	&I##%%%%	& 	&r   c                 "   i }d}| j         D ]G}|                                }||v r||         |_        d|_        /|||<   ||_        d|_        |dz  }H|| _        | j        D ],}|j        s|j        s|j        s|j	        s|j
        rd|_        -d S )Nr   FTr   )r`   _get_font_key
font_indexhas_fontre   rb   
font_colorbolditalic	underlinefont_strikeouthas_dxf_font)r   fontsr*  r   keys        r   r[  zWorkbook._prepare_fonts  s      	 	I))++Ce||',Sz	$%*	"" #c
',	$%)	"
 ) 
	. 
	.I $.>. #. &	.
 +. *.	&
	. 
	.r   c                 p   i }g }d}| j         | j        z   D ]}|j        }t          |t                    st          |          }|dk    rd}||_        =|dk    rd|_        K|dk    rd|_        Y||v r||         |_        k|||<   ||_        |dz  }|j        r|                    |           || _	        d S )N   r   r   0General)
r`   rb   rL   r   r   r   num_format_indexrI   r   rf   )r   unique_num_formatsrf   r*  r   rL   s         r   r\  zWorkbook._prepare_num_formats  s   4+;; #	3 #	3I"-J j#..  __
 ??!"J-7	*S  -.	*Y&&-.	*///-?
-K	** 27":.-2	*
 % 3&&z222&r   c                 V   i }d}| j         D ]G}|                                }||v r||         |_        d|_        /|||<   ||_        d|_        |dz  }H|| _        t          j        d          }| j        D ]2}|                                }|                    |          rd|_	        3d S )Nr   FTr   z	[^0None:])
r`   _get_border_keyborder_index
has_borderr~   r   r   rb   rT  has_dxf_border)r   bordersr*  r   rq  r{  s         r   r]  zWorkbook._prepare_borders.  s      	 	I++--Cg~~)0	&',	$$  %).	&'+	$
! Z--
) 	0 	0I++--C  %% 0+/	(		0 	0r   c                 V   i }d}d|d<   d|d<   | j         D ]6}|j        s|j        s|j        rd|_        |j        |_        |j        |_        7| j        D ]}|j        dk    r(|j        r!|j        r|j        }|j        |_        ||_        |j        dk    r(|j        r!|j        s|j        |_        d |_        d|_        |j        dk    r|j        s|j        rd|_        |                                }||v r||         |_	        d|_
        |||<   ||_	        d|_
        |dz  }|| _        d S )Nr   r   z0:None:Noner   z17:None:NoneTF)rb   patternbg_colorfg_colorhas_dxf_filldxf_bg_colordxf_fg_colorr`   _get_fill_key
fill_indexhas_fillr   )r   fillsr*  r   tmprq  s         r   r^  zWorkbook._prepare_fillsM  s   
   !m !n ) 	< 	<I  <I$6 <):L <)-	&)2);	&)2);	&  	  	I  A%%)*<%AS%(%.%7	"%(	" A%%)*<%YEW%%.%7	"%)	"$%	! A%%i.@%YEW%$%	!))++Ce||',Sz	$%*	"" #c
',	$%)	"
r   c                     | j         sS| j        D ]K}|j        r| j                             d           |j        !|j        r| j                             d           L| j         S )NXFComplementsDXFComplements)r   r_   checkboxaddr`  )r   r   s     r   _has_feature_property_bagsz#Workbook._has_feature_property_bags  sy     ) 	E!\ E E	% D.22?CCC&2y7I2.223CDDD))r   c                 &   | j         }|                                 D ]}|j        r'd}|j        }|                    d|j        ||g           |j        r'd}|j        }|                    d|j        ||g           |j        s|j        rRd}d}|j        r|j        r|j        dz   |j        z   }n|j        |j        z   }|                    d|j        ||g           |                     |          }|| _         | 	                    |          | _
        d S )Nr   _xlnm._FilterDatabaser   z_xlnm.Print_Arear   ,z_xlnm.Print_Titles)rg   r   autofilter_arear   r*  print_area_rangerepeat_col_rangerepeat_row_range_sort_defined_names_extract_named_rangesrh   )r   rg   rD  r)  sheet_ranges        r   r.  zWorkbook._prepare_defined_names  sb    *__&& 	 	E$ #3$$,ek;O  
 % #4$$'k6J  
 % 
)? 
 ) Re.D R"'"83">AW"WKK"'"85;Q"QK$$)5;VL   00??* 66}EEr   c                 t   |D ]s}|\  }}}}|                     dd                                          }|                    d                                          }|                    |dz   |z              t|                    t          j        d                     |D ]}|                                 |S )N_xlnm.r   r   z::   rq  )replacer   r   r   sortoperator
itemgetterpop)r   names	name_listdefined_name_rW   s         r   r  zWorkbook._sort_defined_names  s    
  	? 	?I/8,\1j! (//"==CCEEL $**3//5577J\D0:=>>>> 	

x*1--
...  	 	IMMOOOOr   c                    d}d}d}i }i }i }| j         j        D ]!}|j        }d| j        |<   |j        d| _        "t          | j         j                  }	|                                 D ]}
t          |
j                  }t          |
j                  }t          |
j	                  }t          |
j
                  }t          |
j                  }|
j        }d}|s|s	|s|s|s|s}|s|s|r|dz  }d}|
j        rh|
j        }|j        }|j        }d| j        |<   ||v r	||         }n&|	dz  }	|	}|	||<   | j                            |           |
                    ||           t!          |          D ]q}|
j        |         }|j        }|j        }d| j        |<   ||v r	||         }n&|	dz  }	|	}|	||<   | j                            |           |
                    |||           rt!          |          D ]}|dz  }|
                    |||           t!          |          D ]}|
                    ||           |
j
        D ]c}|j        }|j        }d| j        |<   ||v r	||         }n&|	dz  }	|	}|	||<   | j                            |           |
                    ||           d|
j        D ]c}|j        }|j        }d| j        |<   ||v r	||         }n&|	dz  }	|	}|	||<   | j                            |           |
                    ||           d|r!|
j        }| j                            |           | j        d d          D ]'}|j        dk    r| j                            |           (t3          | j        d           | _        || _        d S )Nr   TFr   r   c                     | j         S rY  )id)r   s    r   <lambda>z,Workbook._prepare_drawings.<locals>.<lambda>`  s    EH r   r  )r   r}   _image_extensionr|   descriptionr   r   r   r\   shapesheader_imagesfooter_imagesbackground_image_digestr   _prepare_backgroundrA  _prepare_image_prepare_chart_prepare_shape_prepare_header_imagedrawingr]   r  r@  sortedr   )r   chart_ref_idref_id
drawing_id	image_idsheader_image_idsbackground_idsimageimage_extensionimage_ref_idrD  chart_countimage_countshape_countheader_image_countfooter_image_counthas_backgroundhas_drawingimage_digestr*  r  r   s                         r   r/  zWorkbook._prepare_drawings  s   
	 )0 	6 	6E#4O04D_- ,15.4/677__&& n	. n	.Eel++Kel++Kel++K!$U%8!9!9!$U%8!9!9"3NK   &	
 & "   #k #[ #a
" % C."'"8$}48 1>11+L9FF A%L)F3?N<0K&&u---))&/BBB {++  U+"'"8$}48 19,,&|4FF A%L)F.:Il+K&&u---$$    {++ F F!$$UL*EEEE {++ 8 8$$UJ7777 , ; ;"'"8$}48 1#333-l;FF A%L)F5A$\2K&&u---++FE:::: , ; ;"'"8$}48 1#333-l;FF A%L)F5A$\2K&&u---++FE:::: .-$$W--- [^ 	* 	*Ex2~~""5))) T[.D.DEEE'r   c                 :   g }|D ]}|d         }|d         }|d         }|dk    r!d|v rp|                     dd          \  }}|                    d          r|                    dd          }	|dz   |	z   }n|dk    r|dz   |z   }|                    |           |S )	Nr   r   r   r  !r  r   r   )splitr   r  r   )
r   rg   rh   r  r   r*  r  rW   r  	xlnm_types
             r   r  zWorkbook._extract_named_rangesd  s     ) 	* 	*L?D OE&q/K ... k!! + 1 1#q 9 9
A ??8,, 3 $Xr : :I%+i7DDb[[%+d2D##D)))r   c                 f    |                     d          }|| j        v r| j        |         j        S d S )Nr   )stripr^   r*  )r   r  s     r   r  zWorkbook._get_sheet_index  s5    OOC((	''?9-33tr   c                    d}d}d}d}d}d}d}|                                  D ]}|j        s|j        s|dz  }|j        rk|j        r|dz  }|dz  }d| _        |dz  }|                    ||||          }	|dt          d|	z   dz            z  z  }|dt          d|	z   dz            z  z  }|j        r |dz  }|dz  }|                    ||           || _        || _        d S )Nr   r   i   T)	r   has_vmlhas_header_vmlr   _prepare_vml_objectsr   _prepare_header_vml_objectsro   rp   )
r   
comment_idvml_drawing_idvml_data_idvml_header_idvml_shape_id	vml_filescomment_filesrD  counts
             r   r-  zWorkbook._prepare_vml  sL   
	__&& 	3 	3E= )= NI} B% -!Q&M!OJ(,D%!#22~z 
 q3u'<#=#===sD5LD+@'A'A AA# Q"!#11-PPP!*D%2D""9	3 	3r   c                     d}i }|                                  D ]7}t          |j                  }|s|                    |dz   |           ||z  }8d S )Nr   r   )r   r   tablesr1  )r   table_idseenrD  table_counts        r   r1  zWorkbook._prepare_tables  so    __&& 	$ 	$Eel++K !!(Q,555#HH	$ 	$r   c                     | j                                         | _        | j        | _        |                                 D ]}|j        rd| _        d| _        d S )NT)r   
has_imagesr   r   r   has_dynamic_arraysr   )r   rD  s     r   r2  zWorkbook._prepare_metadata  sc    #'#7#B#B#D#D  4__&& 	2 	2E' 2$(!-1*	2 	2r   c           	         i }i }g }|                                  D ]}|||j        <   | j        D ]8}|                    |           |j        r|                    |j                   9|D ]}|j                                        D ]}|j        |         }|j        |         ||vs||         |j        |         }|||<   ;||v r||         |j        |<   P|                     |          \  }	}
|	k|		                    d          rg |j        |<   g ||<   |	|vr&t          d|	 d| d           g |j        |<   g ||<   ||	         } |j        |
 }||j        |<   |||<   ܌d S )N(zUnknown worksheet reference 'z' in range 'z' passed to add_series())r   r   r\   r   combinedformula_idskeysformula_data_get_chart_ranger   r   _get_range_data)r   r   seen_rangesr\   r   r   c_ranger_iddatar  cellss              r   r0  zWorkbook._add_chart_data  s    
 ** 	3 	3I)2Jy~&& [ 	. 	.EMM%   ~ .en--- 4	, 4	,E ,1133 3, 3,(1 %d+7k11[5I5Q$1$7/3G, k))/:7/CE&t, &*%:%:7%C%C"E $
 '',, /1E&t,+-K( J..>	 > >#> > >   02E&t,+-K( 'y1	 1y0%8 ,0"4( (,G$$g3,4	, 4	,r   c                    |                     d          }|dk    r|d |         }||dz   d          }ndS |                    d          dk    r|                    dd          \  }}n||}}|                    d          }|                    dd          }	 t          |          \  }}t          |          \  }	}
n# t          $ r Y dS w xY 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_ends              r   r  zWorkbook._get_chart_range  s%   
 mmC  77IC!GII&EE: ::c??Q${{322VVV %uVV OOC((	%%dC00		 &7v%>%>"Y	!26!:!:Wgg 	 	 	::	 I$8$8:9i'BBBs   $B> >
CCc                 8    | j                                          d S rY  )rv   _sort_string_datar   s    r   r,  z!Workbook._prepare_sst_string_data5  s    ((*****r   c                     t                      S rY  r&   r   s    r   r'  zWorkbook._get_packager9  s     zzr   c                 Z    d}|dz   }|dz   }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
attributess        r   r  zWorkbook._write_workbookD  sV     533?? e 


 	J
33333r   c                     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)rw   r   _xml_empty_tag)r   app_namelast_editedlowest_edited	rup_buildr  s         r   r  zWorkbook._write_file_versionR  s     	 !;']+#	

  	VTUUUM:66666r   c                 R    | j         dk    rd S dg}|                     d|           d S )Nr   )readOnlyRecommendedr   fileSharing)r   r  r   r  s     r   r  zWorkbook._write_file_sharingf  s8    >QF01
M:66666r   c                     d}g }| j         r|                    d| j         f           | j        r|                    d           |                    d|f           |                     d|           d S )NiB r  )date1904r   defaultThemeVersion
workbookPr)r{   r   r2   r  )r   default_theme_versionr  s      r   r  zWorkbook._write_workbook_pro  s     &
 	?z4+<=>>>> 	/o...02GHIIIL*55555r   c                     |                      d           |                                  |                     d           d S )N	bookViews)r  _write_workbook_viewr  r   s    r   r  zWorkbook._write_book_views}  sB    K(((!!###+&&&&&r   c                    d| j         fd| j        fd| j        fd| j        fg}| j        dk    r|                    d| j        f           | j        j        dk    r&| j        j        dz   }|                    d	|f           | j        j        dk    r!|                    d
| j        j        f           | 	                    d|           d S )NxWindowyWindowwindowWidthwindowHeightrG   tabRatior   r   
firstSheet	activeTabworkbookView)
rq   rr   rs   rt   ru   r   rR   
firstsheetr(  r  )r   r  r*  s      r   r   zWorkbook._write_workbook_view  s     &&D-.T/0	

 >S  z4>:;;; )A--,7!;J|Z8999 *Q..{D,?,KLMMMNJ77777r   c                     |                      d           d}|                                 D ](}|                     |j        ||j                   |dz  })|                     d           d S )Nsheetsr   )r  r   _write_sheetr   r)  r  )r   id_numr   s      r   r  zWorkbook._write_sheets  sv    H%%%** 	 	Iinfi6FGGGaKFF(#####r   c                     d|fd|fg}|dk    r|                     d           n|dk    r|                     d           |                     ddt          |          z   f           |                     d	|           d S )
Nr   sheetIdr   )stater)  r   )r1  
veryHiddenzr:idrIdrD  )r   r   r  )r   r   sheet_idr)  r  s        r   r-  zWorkbook._write_sheet  s     TN!


 Q;;12222q[[5666653x==#89:::GZ00000r   c                 F   d| j         fg}| j        dk    r2|                    d| j        f           |                    d           n'| j        dk    r|                    d| j        f           | j        r|                    d           |                     d|           d S )NcalcIdr   calcMode)
calcOnSavert  r   )fullCalcOnLoad1calcPr)r   r   r   r   r  r  s     r   r  zWorkbook._write_calc_pr  s    ./
>X%%z4>:;;;12222^},,z4>:;;; 	75666Hj11111r   c                     | j         sd S |                     d           | j         D ]}|                     |           |                     d           d S )NdefinedNames)rg   r  _write_defined_namer  )r   r  s     r   r  zWorkbook._write_defined_names  si    ! 	FN+++ . 	3 	3L$$\2222.)))))r   c                     |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   r4  r  r)  r  s          r   r>  zWorkbook._write_defined_name  s    A?"1oatn%
r>>~x8999 	-m,,,}k:FFFFFr   r  r/   NrY  )F)FF)]__name__
__module____qualname____doc__r    r   r*   r   r   r   r   r   r	   r   PathLiker
   r   rN   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   rP  r  rZ  re  r[  r\  r]  r^  r  r.  r  r/  r  r  r-  r1  r2  r0  r  r,  r'  r  r  r  r  r  r   r  r-  r  r  r>  __classcell__)r   s   @r   r,   r,   1   s         "O CG,0q q5bj"+!=>?q $sCx.)q 
	q q q q q qf      ;?F FSMF	F F F F& <@G GSMG	G G G G$ V    8>c3h >H
	
5 > > > >@ 3 4 C    8 #($)    	
 " 
   B< < < <B&c &3 &4 & & & &.1 1xc5j0A'B 1d 1 1 1 1&) ) ) )& @ @@ T8S%(CGH@  BC
	@ 
@ @ @ @F NR# #BC#	# # # #69 9c 9gen 9 9 9 9v$DO $ $ $ $)# )(92E ) ) ) )' ' ' ' '       / /# /$ / / / /"   &% % % %Nb b b bH' ' ' 'R, , , ,\   $1 1 1 18& & & &  .  .  .  .D+' +' +' +'Z0 0 0 0>5  5  5  5 n* * *(F (F (F (FT  6L( L( L( L(\  :  &3 &3 &3 &3P$ $ $ $2 2 2 2E, E, E, E,N"C "C "CH+ + + +  4 4 4 47 7 7 7(7 7 7 76 6 6 6' ' ' '8 8 8 80	$ 	$ 	$ 	$1 1 1 1 2 2 2 2
* 
* 
* 
*G G G G G G G Gr   r,   c                       e Zd ZdZddZdS )rQ   z]
    A class to track worksheets data such as the active sheet and the
    first sheet.

    r/   Nc                 "    d| _         d| _        d S )Nr   )r(  r*  r   s    r   rN   zWorksheetMeta.__init__  s    r   rD  )rE  rF  rG  rH  rN   r   r   r   rQ   rQ     s2              r   rQ   c                   ,    e Zd ZdZddZdefdZd ZdS )	r   zI
    A class to track duplicate embedded images between worksheets.

    r/   Nc                 "    g | _         i | _        d S rY  )r}   image_indexesr   s    r   rN   zEmbeddedImages.__init__  s    r   r  c                     | j                             |j                  }|=| j                            |           t          | j                  }|| j         |j        <   |S )z
        Get the index of an embedded image.

        Args:
            image: The image to lookup.

        Returns:
            The image index.

        )rO  rO   r  r}   r   r   )r   r  image_indexs      r   get_image_indexzEmbeddedImages.get_image_index  s\     (,,U];;Ku%%%dk**K0;Du}-r   c                 2    t          | j                  dk    S )z
        Check if the worksheet has embedded images.

        Args:
            None.

        Returns:
            Boolean.

        r   )r   r}   r   s    r   r  zEmbeddedImages.has_images  s     4;!##r   rD  )rE  rF  rG  rH  rN   r   rR  r  r   r   r   r   r     s\         
       U    ($ $ $ $ $r   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%   rC  r'   sharedstringsr(   utilityr)   r   r*   	XMLwriterr,   rQ   r   r   r   r   <module>ri     s    				 				  ' ' ' ' ' ' ' '             H H H H H H H H H H H H H H H H H H H H       @ @ @ @ @ @ @ @ @ @ @ @ " " " " " "       ! ! ! ! ! !       % % % % % % ) ) ) ) ) ) ! ! ! ! ! !       # # # # # # ' ' ' ' ' ' # # # # # # " " " " " "                        , , , , , , & & & & & &            nG nG nG nG nGy" nG nG nGd5	 	 	 	 	 	 	 	)$ )$ )$ )$ )$ )$ )$ )$ )$ )$r   