
    f                        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ej7                  Z8 G d d e9          Z: G 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                       e Zd ZdZeZeZd< fd	Zd Z	d Z
d<dZd<dZd=dZd	 Zd>dZ	 d?dZd Zd Zd=dZd Zd=dZd=dZd Zd Zd Zd Zd Zd=dZd Zd Zd Zd=dZ d>dZ!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>d; Z? xZ@S )@Workbookz=
    A class for writing the Excel XLSX Workbook file.


    Nc                 d   |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     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_          j0        tb          j2                  | _3        d| _4        d| _5        d| _6        d| _7        d| _8        d| _9        d| _:        tw                      | _<        d| _=        d| _>        d| _?        d| _@        d| _A        i | _B        g | _C        d| _D        d| _E        d| _F        d| _G        d| _H        d| _I        d| _J        d| _K        d| _L        d| _M        d| _N        d| _O        t                      | _Q        | j        rd| _        | j        r| R                    ddd           n| R                    d di           | R                    d!di          | _S        | j        #| R                    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_familyr>   	hyperlink
num_format)Tsuperr$   __init__filenamegetr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   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
add_formatdefault_url_format)selfrD   options	__class__s      U/var/www/ffwdstore.be/apps/py-env/lib/python3.11/site-packages/xlsxwriter/workbook.pyrC   zWorkbook.__init__<   s   
 ?Gh&&((( 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,  !!#( %*").&-// > 	)#(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   c                 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   namer   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)	r2   copyr/   updater   rW   rY   rU   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          |          }nl|d	k    rt          |          }nV|d
k    rt          |          }n@|dk    rt          |          }n*|dk    rt          |          }nt          d|z             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 '%s' in add_chart()r   T)rE   r   r   r   r   r   r   r   r   r   r   rN   embeddedr'   r0   rR   r   )r   r   
chart_typecharts       r   	add_chartzWorkbook.add_chart   s    [[((
<===Fg&&EE5  W%%EE8##((EE:%%!'**EE6!!g&&EE5  W%%EE7""w''EE9$$ ))EE7""w''EE9JFGGGF W&vE. $ 45!!!r   Fc                     |s3t           j                            |          st          d|z             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:
            Nothing.

        z'VBA project binary file '%s' not found.r   NThisWorkbook)ospathexistsr   rq   rm   rn   )r   rm   	is_streams      r   add_vba_projectzWorkbook.add_vba_project"  sa      	!<!< 	:[HIII2$ .D&%."""r   c                     |                      ||          dk    rdS |s3t          j                            |          st	          d|z             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   ro   rp   )r   rm   	signatureproject_is_streamsignature_is_streams        r   add_signed_vba_projectzWorkbook.add_signed_vba_project8  sq    " ->??2EE2" 	27>>)+D+D 	DyPQQQ2%."/B,,,r   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.)
rJ   _store_workbookIOErrorr    r   r!   r-   
worksheets
_opt_closer   )r   e	worksheets      r   r   zWorkbook.closeS  s      	<$$&&&& ) ) )%a(((   #0   #DO # +!%!2!2 + +I((****+ ++ + :;;;;;s    
A7Ac                     |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  `   r:   r;   N)intri   rj   )r   widthheights      r   set_sizezWorkbook.set_sizes  se      	& #EDL2$5 6 6D %D 	&!$Vd]R%7!8!8D!%Dr   c                 |    |dS |dk     s|dk    rt          d|z             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 '%d' outside: 0 <= tab_ratio <= 100r   )r   r   rk   )r   rk   s     r   set_tab_ratiozWorkbook.set_tab_ratio  sQ     Fq==IOO@9LMMMMM 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)r`   )r   r   s     r   set_propertieszWorkbook.set_properties  s     )r   c                 .   ||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|                    d	          }|dk    r%t          |          d
k    rt          d|z             t          |          d
k    rt          d|z             | 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date
number_intnumbertextz%Y-%m-%dT%H:%M:%SZr4   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lenra   r   )r   r   r   property_types       r   set_custom_propertyzWorkbook.set_custom_property  sR    <5=(   2 %&& 	' &E8,, ' &E3'' ' ,EE3#BCC ' ( &F""NN#788EF""s5zzC'7'7<>CD  
 t99s??<>BC  
 	%%tUM&BCCCCCr   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.

        manualFauto_except_tablesautoNoTableN)rw   rx   ry   )r   modery   s      r   set_calc_modezWorkbook.set_calc_mode  sS     8 %D)))*DN  	#"DLLL	# 	#r   c                    d}d}|                     d          r|                    d          }t          j        d          }|                    |          }|rV|                    d          }|                    d          }|                     |          }|t          d|z             dS nd}t          j        d	|t          j                  rt          j        d
|          rt          d|z             dS t          j        d|          rt          d|z             dS t          j        d|          st          j        d|          rt          d|z             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   UNICODEr]   r   )r   r   formula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 "@9LMMMr #
 K x+T2:>> 	"(DC
 C
 	 CdJKKK2 86== 	FMNNN2 8K&& 	"(3JD*Q*Q 	IDPQQQ2!!4gu"EFFFFFr   c                     | j         S )z
        Return a list of the worksheet objects in the workbook.

        Args:
            None.

        Returns:
            A list of worksheet objects.

        )rQ   r   s    r   r   zWorkbook.worksheets.  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.

        )rT   rE   r   r   s     r   get_worksheet_by_namezWorkbook.get_worksheet_by_name;  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_formatH  s     &&r   c                     d| _         dS )z
        Allow ZIP64 extensions when writing xlsx file zip container.

        Args:
            None.

        Returns:
            Nothing.

        TN)rF   r   s    r   r5   zWorkbook.use_zip64W  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   )rq   r   s     r   set_vba_namezWorkbook.set_vba_named  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_recommendedu  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   rD   r
   rF   r   _get_packagerr   r   rH   activesheetrQ   rI   hiddenindexactiverm   rq   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_memoryr.   _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                 F   |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  rl   rH   r-   r&   r'   r(   r)   r*   r+   r,   r   r/   r0   r3   r1   r   )r   r   rQ   _check_sheetnamer   r   rl   rH   r-   r&   r'   r(   r)   r*   r+   r,   r   r/   r0   r3   r1   r   _initializer   rT   )r   r   r   r   r   	init_datas         r   r   zWorkbook._add_sheet  s     	/'))II,,..I$.//$$T:i+L+LMM
D
[
 
 d1	

 t3
 dk
 
 !$"9
 "4#;
 t3
  !7
 "4#;
 !$"9
 t3
 t3
  d1!
" #D$=#
$ t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|z            |	                    |          rt          d|z            |
                    d          s|                    d          rt          d|z            |                                 D ]C}|                                |j                                        k    rt          d	|z            D|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   rP   rO   rN   strrM   r   r   searchr   endswithr   lowerr   r   )r   r   is_chartsheetinvalid_charr   s        r   r@  zWorkbook._check_sheetname:  s    z/22  	&  A%     A%   	R H Oc$2F.G.GG		 Oc$2F.G.GG	 y>>B&@9L  
 y)) 	&G)S  
 $$ 		(:(:3(?(? 	&IIU   ** 	 	I  IN$8$8$:$:::,KiW   ;
 r   c                     |                                   |                                  |                                  |                                  |                                  d S N)_prepare_formats_prepare_fonts_prepare_num_formats_prepare_borders_prepare_fillsr   s    r   r  z#Workbook._prepare_format_propertiesh  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 rL  )rU   r>   r   	dxf_indexr   rV   rX   )r   rV   rX   r   r  
dxf_formats         r   rM  zWorkbook._prepare_formatsz  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   )listrU   r,   _get_xf_index)r   rU   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   r   )rV   _get_font_key
font_indexhas_fontr[   rX   
font_colorbolditalic	underlinefont_strikeouthas_dxf_font)r   fontsr  r   keys        r   rN  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)
rV   rX   rA   r   rE  r   num_format_indexr>   r   r\   )r   unique_num_formatsr\   r  r   rA   s         r   rO  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   r   z[^0:])
rV   _get_border_keyborder_index
has_borderrt   r   r   rX   rF  has_dxf_border)r   bordersr  r   re  ro  s         r   rP  zWorkbook._prepare_borders  s      	 	I++--Cg~~)0	&'(	$$  %).	&'(	$
! Z))
) 	- 	-I++--C  %% -+,	(		- 	-r   c                    i }d}d|d<   d|d<   | j         D ]6}|j        s|j        s|j        rd|_        |j        |_        |j        |_        7| j        D ]}|j        dk    r0|j        dk    r%|j        dk    r|j        }|j        |_        ||_        |j        dk    r0|j        dk    r%|j        dk    r|j        |_        d|_        d|_        |j        dk    r|j        dk    r|j        dk    rd|_        |                                }||v r||         |_	        d|_
        |||<   ||_	        d|_
        |dz  }|| _        d S )Nr   r   z0:0:0r   z17:0:0)rX   patternbg_colorfg_colorhas_dxf_filldxf_bg_colordxf_fg_colorrV   _get_fill_key
fill_indexhas_fillru   )r   fillsr  r   tmpre  s         r   rQ  zWorkbook._prepare_fills  s   
  gh ) 	< 	<I  <I$6 <):L <)*	&)2);	&)2);	& ,	 ,	I !Q&&&!++&!++(%.%7	"%(	" !Q&&&!++&!++%.%7	"%&	"$%	! !Q&&&!++&!++$%	!))++Ce||',Sz	$%&	"" #c
',	$%&	"
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)r]   r   autofilter_arear   r  print_area_rangerepeat_col_rangerepeat_row_range_sort_defined_names_extract_named_rangesr^   )r   r]   r5  r  sheet_ranges        r   r  zWorkbook._prepare_defined_namesU  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   rD  z::   re  )replacerH  r   r   sortoperator
itemgetterpop)r   names	name_listdefined_name_rM   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 ]#}|d         }d| j        |<   |d         r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
        r|
j        r
d}|
j
        }n	|
j
        }d }t          ||          \  }}}}}}}d| j        |<   ||v r	||         }n)|	dz  }	|	}|	||<   | j                            |||g           |
                    ||           t          |          D ]}|
j        |         d         }|
j        |         d         }t          ||          \  }}}}}}}d| j        |<   ||v r	||         }n)|	dz  }	|	}|	||<   | j                            |||g           |
                    ||||||||||
  
         t          |          D ]}|dz  }|
                    |||           t          |          D ]}|
                    ||           t          |          D ]}|
j        |         d         }|
j        |         d         }|
j        |         d         }t          ||          \  }}}}}}}d| j        |<   ||v r	||         }n)|	dz  }	|	}|	||<   | j                            |||g           |
                    |||||||||	  	         t          |          D ]}|
j	        |         d         }|
j	        |         d         }|
j	        |         d         }t          ||          \  }}}}}}}d| j        |<   ||v r	||         }n)|	dz  }	|	}|	||<   | j                            |||g           |
                    |||||||||	  	         |r!|
j        }| j                            |           | j        d d          D ]'}|j        d	k    r| j                            |           (t1          | j        d
           | _        || _        d S )Nr   r   T   Fr   r   r   r   c                     | j         S rL  )id)r   s    r   <lambda>z,Workbook._prepare_drawings.<locals>.<lambda>i  s    EH r   r  )r   rs   rr   r   r   r   rR   shapesheader_imagesfooter_imagesbackground_imagebackground_bytesr"   r   _prepare_backgroundr2  _prepare_image_prepare_chart_prepare_shape_prepare_header_imagedrawingrS   r  r1  sortedrv   )r   chart_ref_idref_id
drawing_id	image_idsheader_image_idsbackground_ids
image_data
image_typeimage_ref_idr5  chart_countimage_countshape_countheader_image_countfooter_image_counthas_backgroundhas_drawingrD   r  digestr  r   r   r   x_dpiy_dpipositionr  r   s                                 r   r   zWorkbook._prepare_drawings  s;   
	 .5 	6 	6J#AJ+/DZ(!} 615.4/677__&& t	. t	.Eel++Kel++Kel++K!$U%8!9!9!$U%8!9!9"3NK   &	
 & "   #k #[ #a
" % >) &!H!&!7JJ$5H!%J ):>> 04 ,^+++F3FF A%L)F-9N6*K&&*j'IJJJ))&*=== {++ " " <.q1"\%04
 ):>> 04 ,Y&&&v.FF A%L)F(4If%K&&*j'IJJJ$$    {++ F F!$$UL*EEEE {++ 8 8$$UJ7777 122 # # .u5a8"07:
 .u5a8 ):>> 04 ,----f5FF A%L)F/;$V,K&&*j'IJJJ++
 
 
 
 122 # # .u5a8"07:
 .u5a8 ):>> 04 ,----f5FF A%L)F/;$V,K&&*j'IJJJ++
 
 
 
  .-$$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   r]   r^   r  r   r  r  rM   r  	xlnm_types
             r   r  zWorkbook._extract_named_rangesm  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 )NrD  )striprT   r  )r   r   s     r   r   zWorkbook._get_sheet_index  s5    OOC((	''?9-334r   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_vmlrz   _prepare_vml_objectsr   _prepare_header_vml_objectsre   rf   )
r   
comment_idvml_drawing_idvml_data_idvml_header_idvml_shape_id	vml_filescomment_filesr5  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 rZ  )r   r   tablesr"  )r   table_idseenr5  table_counts        r   r"  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   r5  s     r   r#  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   rR   r   combinedformula_idskeysformula_data_get_chart_ranger   r   _get_range_data)r   r   seen_rangesrR   r   r   c_ranger_iddatar   cellss              r   r!  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..D9BGGGM   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:rD  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 rL  )rl   _sort_string_datar   s    r   r  z!Workbook._prepare_sst_string_data>  s    ((*****r   c                     t                      S rL  r   r   s    r   r  zWorkbook._get_packagerB  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_workbookM  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)rm   r   _xml_empty_tag)r   app_namelast_editedlowest_edited	rup_buildr  s         r   r  zWorkbook._write_file_version[  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_sharingo  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)rq   r   r'   r   )r   default_theme_versionr  s      r   r
  zWorkbook._write_workbook_prx  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windowHeightr<   tabRatior   r   
firstSheet	activeTabworkbookView)
rg   rh   ri   rj   rk   r   rH   
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   )r!  
veryHiddenzr:idrIdr5  )r   rE  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)
calcOnSaverh  r   )fullCalcOnLoad1calcPr)ry   rw   r   rx   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)r]   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   r   localSheetId)r  r   definedName)r   _xml_data_element)r   r  r   r$  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  rL  )F)FF)A__name__
__module____qualname____doc__r   r   r   r   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r  r  r   r   r@  r  rM  rX  rN  rO  rP  rQ  r  r  r   r  r   r  r"  r#  r!  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r.  __classcell__)r   s   @r   r$   r$   -   s         "Ol l l l l l\    F F F F G G G G    82 2 2h/ / / /. TYC C C C6< < <@& & &.1 1 1 1&) ) )0D 0D 0D 0Dd# # # #27G 7G 7Gr$ $ $) ) )' ' '     / / / /"  &% % %Na a aF& & & &P, , , ,\  $1 1 18& & &  +  +  +D)' )' )'V- - ->A  A  A F(F (F (FT  6Q( Q( Q(f  :  &3 &3 &3P$ $ $2 2 2E, E, E,N"C "C "CH+ + +  4 4 47 7 7(7 7 76 6 6' ' '8 8 80	$ 	$ 	$1 1 1 2 2 2
* 
* 
*G G G G G G Gr   r$   c                       e Zd ZdZd ZdS )rG   z]
    A class to track worksheets data such as the active sheet and the
    first sheet.

    c                 "    d| _         d| _        d S Nr   )r  r  r   s    r   rC   zWorksheetMeta.__init__  s    r   N)r3  r4  r5  r6  rC   r   r   r   rG   rG     s-             r   rG   c                   $    e Zd ZdZd Zd Zd ZdS )r   zI
    A class to track duplicate embedded images between worksheets.

    c                 "    g | _         i | _        d S rL  )rs   image_indexesr   s    r   rC   zEmbeddedImages.__init__  s    r   c                     | j                             |          }|8| j                            |           t	          | j                  }|| j         |<   |S rL  )r=  rE   rs   r   r   )r   imager  image_indexs       r   get_image_indexzEmbeddedImages.get_image_index  sV    (,,V44Ku%%%dk**K)4Dv&r   c                 2    t          | j                  dk    S r:  )r   rs   r   s    r   r  zEmbeddedImages.has_images  s    4;!##r   N)r3  r4  r5  r6  rC   rA  r  r   r   r   r   r     sK         
       $ $ $ $ $r   r   )<r  r   r   r-  r   r   decimalr   	fractionsr   warningsr   zipfiler   r	   r
   r   r   r   r   r   
chartsheetr   sharedstringsr   formatr   r4  r   utilityr   
chart_arear   	chart_barr   chart_columnr   chart_doughnutr   
chart_liner   	chart_pier   chart_radarr   chart_scatterr   chart_stockr   
exceptionsr   r   r    r!   r"   	XMLwriterr$   objectrG   r   r   r   r   <module>rW     s    				 				  ' ' ' ' ' ' ' '                   @ @ @ @ @ @ @ @ @ @ @ @                   " " " " " " , , , , , ,             & & & & & & ! ! ! ! ! !       % % % % % % ) ) ) ) ) ) ! ! ! ! ! !       # # # # # # ' ' ' ' ' ' # # # # # # , , , , , , . . . . . . ' ' ' ' ' ' % % % % % % ) ) ) ) ) ){G {G {G {G {Gy" {G {G {G~5	 	 	 	 	F 	 	 	$ $ $ $ $V $ $ $ $ $r   