
    >wg                        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jn                        Z8 G d d e9      Z: G d! d"e9      Z;y)#    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- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z=d8 Z>d9 Z? xZ@S )>Workbookz=
    A class for writing the Excel XLSX Workbook file.


    c                    |i }t         t        |           || _        |j	                  dd      | _        |j	                  dd      | _        |j	                  dd      | _        |j	                  dd      | _        |j	                  dd      | _	        |j	                  d	d      | _
        |j	                  d
d      | _        |j	                  dd      | _        |j	                  dd      | _        |j	                  dd      | _        |j	                  dd      | _        |j	                  dd      | _        |j	                  di       | _        |j	                  dd      | _        | j$                  dk  rd| _        |j	                  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`                  tb        jd                        | _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| j                  ddd       n| j                  d di       | j                  d!di      | _S        | j                  #| j                  d"| j                  i      | _        yy)#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      J/var/www/horilla/myenv/lib/python3.12/site-packages/xlsxwriter/workbook.pyrC   zWorkbook.__init__<   s   
 ?Gh&( kk(D1 [%8")++.BE"J#*;;/Dd#K &{{+<dC!(-@%!H#*;;/Dd#K &{{+<eD [%8&{{+<eD&{{+<eD$+KK0F$N!)05PRT)U&%kk*:DA$"&D;;{##D$D+o!!  !!#"$ !#",,x||4!"!!*,%*"%)"/4,  !!#( %*").&-/ >>#(D  OO1=>OOZO, #'//;2E"F ##/'+t778(D$ 0    c                     | S )z0Return self object to use with "with" statement. r   s    r   	__enter__zWorkbook.__enter__   s    r   c                 $    | j                          y)z-Close workbook when exiting "with" statement.N)close)r   typevalue	tracebacks       r   __exit__zWorkbook.__exit__   s    

r   c                 D    || j                   }| 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.

        worksheet_class)r   
_add_sheet)r   namer   s      r   add_worksheetzWorkbook.add_worksheet   s(     ""22Ot_EEr   c                 D    || j                   }| 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.

        r   )chartsheet_classr   )r   r   r   s      r   add_chartsheetzWorkbook.add_chartsheet   s*     ##44t5EFFr   c                     | j                   j                         }| j                  rdddd}|r|j                  |       t	        || j
                  | 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   sx     !::??A.5BQW X$$Z0t55t7N7N
	
 	I&r   c                 8   |j                  d      }|t        d       y|dk(  rt        |      }n|dk(  rt        |      }n|dk(  rt	        |      }nu|dk(  rt        |      }nd|dk(  rt        |      }nS|d	k(  rt        |      }nB|d
k(  rt        |      }n1|dk(  rt        |      }n |dk(  rt        |      }nt        d|z         yd|v r
|d   |_        d|_        | j                  |_        | 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$    [[(
<=g&E5 W%E8#(E:%!'*E6!g&E5 W%E7"w'E9$ )E7"w'E9JFG W&vE.. $ 4 45!r   c                     |s.t         j                  j                  |      st        d|z         y| j                  d| _        || _        || _        y)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"  sK     !<:[HI$ .D&%."r   c                     | j                  ||      dk(  ry|s.t        j                  j                  |      st	        d|z         y|| _        || _        y)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  sP    " ->?2E"277>>)+DDyPQ%."/B,r   c                 &   | j                   sK	 | j                          d| _         | j                  r&| j                         D ]  }|j                           yyt        d       y# t        $ r}t        |      d}~wt        $ r t        d      w xY w)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     $$& #DO ##!%!2 +I((*+ $
 :;!  )%a(( #0 s   A$ $	B-A88Bc                     |rt        |dz  dz        | _        nd| _        |rt        |dz  dz        | _        yd| _        y)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  sF      #EDL2$5 6D %D!$Vd]R%7!8D!%Dr   c                 b    |y|dk  s|dkD  rt        d|z         yt        |dz        | _        y)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  s8     q=IO@9LM R0DNr   c                     || _         y)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       y|^t        |t              rd}nKt        |t              rd}n8t        |t              rd}n%t        |t
        t        t        t        f      rd}nd}|dk(  r|j                  d	      }|dk(  rt        |      d
kD  rt        d|z         t        |      d
kD  rt        d|z         | j                  j                  |||f       y)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  s     <5=(  %& &E8, &E3' ,EE3#BC ( &F"NN#78EF"s5zC'7<>CD
 t9s?<>BC
 	%%tUM&BCr   c                 X    || _         |dk(  rd| _        n|dk(  rd| _         |r|| _        yy)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  s<     8 %D))*DN "DL r   c                    d}d}|j                  d      r|j                  d      }t        j                  d      }|j	                  |      }|rD|j                  d      }|j                  d      }| j                  |      }|t        d|z         yd}t        j                  d	|t        j                        rt        j                  d
|      rt        d|z         yt        j                  d|      rt        d|z         yt        j                  d|      st        j                  d|      rt        d|z         y| j                  j                  |||dg       y)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  sC    	 c"nnS)G jj!56!!$'AI;;q>D//	:K "@9LM K xx+T2::>"((DC
 CdJK 886=FMN 88K&"((3JD*QIDPQ!!4gu"E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                 8    | j                   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| _         y)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                 &    ||| _         yd| _         y)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| _         y)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                    | j                          | j                          | j                          | j                          | j	                          | j                          | j                          | j                          | j                          | j                          | j                  d       | j                          y )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   	 t        | j                  dt        | j                        }| j                         }| j                         s| j                          | j                  j                  dk(  r(d| j                  d   _        d| j                  d   _        | j                         D ]-  }|j                  | j                  j                  k(  s'd|_        / | j                  r2| j                         D ]  }|j                   |j#                          ! | j%                          | j'                          | j)                          | j+                          | j-                          | j/                          | j1                          |j3                  |        |j5                  | j6                         |j9                  | j:                         |j=                         }d }t?        |      D ]  \  }}|\  }}	}
| j:                  rptA        |	d      }|jB                  |_"        |
r!|jG                  ||jI                                X|jG                  ||jI                         jK                  d             tM        jN                  d      }tQ        jR                  |||f       	 |jU                  ||	       tQ        jV                  |        |j_                          y # t        $ r}|d }~ww xY w# tX        $ r?}t[        |t]        |      dz
        D ]  }tQ        jV                  ||   d           |d }~ww xY w)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   	(++	I %%'    **a//0D  #,-.D  #* __& 	!E{{d11=== 	!
 * )%%-&&()
 	%%' 	 	##% 	  	 	 	  	t$T[[)/,,.	  #,I"6 	GY3<0Ky~~!,0EF )2(=(=%&&w0D0D0FG&&w0D0D0F0M0Mg0VW !KK(HI	y)&<=OOK>IIk*1	> 	q  	G	d $ "7C	NQ,>? 3		)A,q/23G	s/   'K "'K/	K,%K''K,/	L78:L22L7c                    |r |       }n| j                         }t        | j                        }| 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                  j/                  |       || j0                  |<   |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    ')I,,.I$../$$T:i+LM
D
[
 
 d11	

 t33
 dkk
 
 !$"9"9
 "4#;#;
 t33
  !7!7
 "4#;#;
 !$"9"9
 t33
 t33
  d11!
" #D$=$=#
$ t33%
	* 	i(##I. )r   c                    t        j                  d      }|r| xj                  dz  c_        n| xj                  dz  c_        ||dk(  rG|r#| j                  t        | j                        z   }n"| j                  t        | j                        z   }t        |      dkD  rt        d|z        |j                  |      rt        d|z        |j                  d      s|j                  d      rt        d|z        | j                         D ];  }|j                         |j                  j                         k(  s/t        d	|z         |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:  sG    zz/2   A%   A%  	R OOc$2F2F.GG	 OOc$2F2F.GG	 y>B&@9L 
 y)&G)S 
 $	(:(:3(?&IIU  * 	I INN$8$8$::,KiW 	 r   c                     | j                          | j                          | j                          | j                          | j	                          y N)_prepare_formats_prepare_fonts_prepare_num_formats_prepare_borders_prepare_fillsr   s    r   r  z#Workbook._prepare_format_propertiesh  sH     	 	 	!!# 	 	r   c                 |   g }g }| j                   D ]=  }|j                  |j                  |       |j                  -|j                  |       ? d gt	        |      z  | _        d gt	        |      z  | _        |D ]  }|j                  }|| j
                  |<    |D ]  }|j                  }|| j                  |<    y 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 $ 	/I&&E%.DOOE"	/ & 	1J((E&0DU#	1r   c                     t        | j                        }|d= | j                  |d= |D ]  }|j                           y )Nr   )listrU   r,   _get_xf_index)r   rU   r   s      r   _set_default_xf_indicesz Workbook._set_default_xf_indices  sM     t||$ AJ ##/
 ! 	&I##%	&r   c                 b   i }d}| j                   D ]@  }|j                         }||v r||   |_        d|_        )|||<   ||_        d|_        |dz  }B || _        | j
                  D ]F  }|j                  s1|j                  s%|j                  s|j                  s|j                  s@d|_        H y 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                 v   i }g }d}| j                   | j                  z   D ]  }|j                  }t        |t              st        |      }|dk(  rd}||_        9|dk(  rd|_        F|dk(  rd|_        S||v r||   |_        b|||<   ||_        |dz  }|j                  s|j                  |        || _	        y )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+;+;; !	3I"--J j#. _
 ?!"J-7	*s"-.	*y(-.	*//-?
-K	* 27":.-2	*
 %%&&z2C!	3F 'r   c                 V   i }d}| j                   D ]@  }|j                         }||v r||   |_        d|_        )|||<   ||_        d|_        |dz  }B || _        t        j                  d      }| j                  D ]+  }|j                         }|j                  |      s%d|_	        - y )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	&'(	$  %).	&'(	$
	 " ZZ)
)) 	-I++-C  %+,	(		-r   c                 0   i }d}d|d<   d|d<   | j                   D ]P  }|j                  s|j                  s|j                  s(d|_        |j                  |_        |j                  |_        R | j                  D ]  }|j                  dk(  rB|j                  dk7  r3|j                  dk7  r$|j                  }|j                  |_        ||_        |j                  dk  r=|j                  dk7  r.|j                  dk(  r|j                  |_        d|_        d|_        |j                  dk  r%|j                  dk(  r|j                  dk7  rd|_        |j                         }||v r||   |_	        d|_
        |||<   ||_	        d|_
        |dz  } || _        y )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$6):L:L)*	&)2););	&)2););	&		<  ,	I !!Q&&&!+&&!+((%.%7%7	"%(	" !!Q&&&!+&&!+%.%7%7	"%&	"$%	! !!Q&&&!+&&!+$%	!))+Ce|',Sz	$%&	" #c
',	$%&	"
Y,	\  r   c                    | j                   }| j                         D ]  }|j                  r-d}|j                  }|j                  d|j                  ||g       |j
                  r-d}|j
                  }|j                  d|j                  ||g       |j                  s|j                  sd}d}|j                  r)|j                  r|j                  dz   |j                  z   }n|j                  |j                  z   }|j                  d|j                  ||g        | j                  |      }|| _         | j                  |      | _
        y )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  s@    **__& 	E$$#33$$,ekk;O
 %%#44$$'k6J
 %%)?)? ))e.D.D"'"8"83">AWAW"WK"'"8"85;Q;Q"QK$$)5;;VL9	@ 00?* 66}Er   c                 F   |D ]_  }|\  }}}}|j                  dd      j                         }|j                  d      j                         }|j                  |dz   |z          a |j	                  t        j                  d             |D ]  }|j                           |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EL $**3/557J\D0:=>	? 	

x**1-
.  	IMMO	 r   c                 0	   d}d}d}i }i }i }| j                   j                  D ]#  }|d   }d| j                  |<   |d   sd| _        % t	        | j                   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                  j                  |||g       |
j                  ||       t        |      D ]  }|
j                  |   d   }|
j                  |   d   }t        ||      \  }}}}}}}d| j                  |<   ||v r||   }n*|	dz  }	|	}|	||<   | j                  j                  |||g       |
j!                  ||||||||||
        t        |      D ]  }|dz  }|
j#                  |||        t        |      D ]  }|
j%                  ||        t        |      D ]  }|
j                  |   d   }|
j                  |   d   }|
j                  |   d   }t        ||      \  }}}}}}}d| j                  |<   ||v r||   }n*|	dz  }	|	}|	||<   | j                  j                  |||g       |
j'                  |||||||||	        t        |      D ]  }|
j                  |   d   }|
j                  |   d   }|
j                  |   d   }t        ||      \  }}}}}}}d| j                  |<   ||v r||   }n*|	dz  }	|	}|	||<   | j                  j                  |||g       |
j'                  |||||||||	        |s|
j(                  }| j*                  j                  |        | j                  d d  D ]-  }|j,                  d	k(  s| j                  j/                  |       / t1        | j                  d
       | _        || _        y )Nr   r   T   Fr   r   r   r   c                     | j                   S rL  )id)r   s    r   <lambda>z,Workbook._prepare_drawings.<locals>.<lambda>i  s
    EHH 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5 	6J#AJ+/DZ(!}15.		6 4//667__& t	.Eell+Kell+Kell+K!$U%8%8!9!$U%8%8!9"33NK %%! k[a
" %%))!H!&!7!7J$55H!%J ):> 04  ,^++F3F A%L)F-9N6*KK&&*j'IJ))&*= {+ " <<.q1"\\%04
 ):> 04  ,Y&&v.F A%L)F(4If%KK&&*j'IJ$$/"J {+ F!$$UL*EF
 {+ 8$$UJ78 12 # ..u5a8"007:
 ..u5a8 ):> 04  ,---f5F A%L)F/;$V,KK&&*j'IJ++
3#L 12 # ..u5a8"007:
 ..u5a8 ):> 04  ,---f5F A%L)F/;$V,KK&&*j'IJ++
3#J --$$W-it	.n [[^ 	*Exx2~""5)	* T[[.DE'r   c                 
   g }|D ]{  }|d   }|d   }|d   }|dk(  rd|v s|j                  dd      \  }}|j                  d      r|j                  dd      }	|dz   |	z   }n|dk7  r|dz   |z   }|j                  |       } |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
A ??8, $Xr :I%+i7Db[%+d2D##D))	*, r   c                 t    |j                  d      }|| j                  v r| j                  |   j                  S y )NrD  )striprT   r  )r   r   s     r   r   zWorkbook._get_sheet_index  s4    OOC(	'??9-333r   c                    d}d}d}d}d}d}d}| j                         D ]  }|j                  s|j                  s|dz  }|j                  rd|j                  r|dz  }|dz  }d| _        |dz  }|j	                  ||||      }	|dt        d|	z   dz        z  z  }|dt        d|	z   dz        z  z  }|j                  r|dz  }|dz  }|j                  ||       || _        || _         y )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  s   
	__& 	3E==)=)=NI}}%%!Q&M!OJ(,D%!#22~z
 q3u'<#===sD5LD+@'A AA##"!#11-P!*D%2D"9	3r   c                     d}i }| j                         D ]4  }t        |j                        }|s|j                  |dz   |       ||z  }6 y rZ  )r   r   tablesr"  )r   table_idseenr5  table_counts        r   r"  zWorkbook._prepare_tables  sT    __& 	$Eell+K!!(Q,5#H	$r   c                     | j                   j                         | _        | j                  | _        | j	                         D ]  }|j
                  sd| _        d| _         y )NT)r   
has_imagesr}   r|   r   has_dynamic_arraysr~   )r   r5  s     r   r#  zWorkbook._prepare_metadata  sV    #'#7#7#B#B#D  44__& 	2E''$(!-1*	2r   c           	         i }i }g }| j                         D ]  }|||j                  <    | j                  D ];  }|j                  |       |j                  s!|j                  |j                         = |D ]  }|j
                  j                         D ]  }|j
                  |   }|j                  |   ||vs||   |j                  |   }|||<   ?||v r||   |j                  |<   V| j                  |      \  }	}
|	m|	j                  d      rg |j                  |<   g ||<   |	|vr't        d|	d|d       g |j                  |<   g ||<   ||	   } |j                  |
 }||j                  |<   |||<     y )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    
 * 	3I)2Jy~~&	3 [[ 	.EMM% ~~enn-	.
  4	,E ,,113 3,((1 %%d+7k1[5I5Q$11$7/3G, k)/:7/CE&&t, &*%:%:7%C"E $
 '',/1E&&t,+-K( J.9BGM 02E&&t,+-K( 'y1	 1y00%8 ,0""4( (,G$g3,4	,r   c                 l   |j                  d      }|dkD  r|d | }||dz   d  }ny|j                  d      dkD  r|j                  dd      \  }}n||}}|j                  d      }|j	                  dd      }	 t        |      \  }}t        |      \  }	}
||	k7  r||
k7  ry||||	|
gfS # t        $ r Y yw xY w)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 7IC!GI&E ::c?Q${{32VV %uVV OOC(	%%dC0		 &7v%>"Y	!26!:Wg
 I$89i'BBB  		s   8B' '	B32B3c                 8    | j                   j                          y 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     zr   c                 P    d}|dz   }|dz   }d|fd|fg}| j                  d|       y )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  sJ     533?? e 


 	J
3r   c                     d}d}d}d}d|fd|fd|fd|fg}| j                   r|j                  d       | j                  d	|       y )
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[  sk     	 !;']+#	

 TUM:6r   c                 N    | j                   dk(  ry dg}| j                  d|       y )Nr   )readOnlyRecommendedr   fileSharing)r{   r   r   r  s     r   r	  zWorkbook._write_file_sharingo  s)    >>Q01
M:6r   c                     d}g }| j                   r|j                  d| j                   f       | j                  r|j                  d       |j                  d|f       | j                  d|       y )NiB r  )date1904r   defaultThemeVersion
workbookPr)rq   r   r'   r   )r   default_theme_versionr  s      r   r
  zWorkbook._write_workbook_prx  si     &
z4+<+<=>>>o.02GHIL*5r   c                 h    | j                  d       | j                          | j                  d       y )N	bookViews)r  _write_workbook_viewr  r   s    r   r  zWorkbook._write_book_views  s*    K(!!#+&r   c                    d| j                   fd| j                  fd| j                  fd| j                  fg}| j                  dk7  r|j                  d| j                  f       | j                  j                  dkD  r,| j                  j                  dz   }|j                  d	|f       | j                  j                  dkD  r'|j                  d
| j                  j                  f       | j                  d|       y )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7!;J|Z89 **Q.{D,?,?,K,KLMNJ7r   c                     | j                  d       d}| j                         D ].  }| j                  |j                  ||j                         |dz  }0 | j                  d       y )Nsheetsr   )r  r   _write_sheetr   r  r  )r   id_numr   s      r   r  zWorkbook._write_sheets  s`    H%* 	Iinnfi6F6FGaKF	 	(#r   c                     d|fd|fg}|dk(  r|j                  d       n|dk(  r|j                  d       |j                  ddt        |      z   f       | j                  d	|       y )
Nr   sheetIdr   )stater  r   )r!  
veryHiddenzr:idrIdr5  )r   rE  r   )r   r   sheet_idr  r  s        r   r  zWorkbook._write_sheet  st     TN!


 Q;12q[56653x=#89:GZ0r   c                 T   d| j                   fg}| j                  dk(  r/|j                  d| j                  f       |j                  d       n,| j                  dk(  r|j                  d| j                  f       | j                  r|j                  d       | j	                  d|       y )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^^},z4>>:;56Hj1r   c                     | j                   sy | j                  d       | j                   D ]  }| j                  |        | j                  d       y )NdefinedNames)r]   r  _write_defined_namer  )r   r  s     r   r  zWorkbook._write_defined_names  sO    !!N+ .. 	3L$$\2	3 	.)r   c                     |d   }|d   }|d   }|d   }d|fg}|dk7  r|j                  d|f       |r|j                  d       | j                  d	||       y )
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  so    A?"1oatn%
r>~x89m,}k: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$   -   sR    "Ol\F G 82h/. TYC6<@&.1&)0Dd#27Gr$)' /"&%NaF&P,\$18&  +D)'V->A F(FT6Q(f:&3P$2E,N"CH+47(76'80	$1 2
*Gr   r$   c                       e Zd ZdZd Zy)rG   z]
    A class to track worksheets data such as the active sheet and the
    first sheet.

    c                      d| _         d| _        y 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y)r   zI
    A class to track duplicate embedded images between worksheets.

    c                      g | _         i | _        y rL  )rs   image_indexesr   s    r   rC   zEmbeddedImages.__init__  s    r   c                     | j                   j                  |      }|?| j                  j                  |       t	        | j                        }|| j                   |<   |S rL  )r=  rE   rs   r   r   )r   imager  image_indexs       r   get_image_indexzEmbeddedImages.get_image_index  sT    ((,,V4KKu%dkk*K)4Dv&r   c                 2    t        | j                        dkD  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     s    
 $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y"" {G~5	F 	$V $r   