
    ,h                        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*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7  G d dejp                        Z9 G d d      Z: G d d      Z;y)     N)datetimetimezone)Decimal)Fraction)warn)ZIP_DEFLATEDLargeZipFileZipFileZipInfo)Image   )	xmlwriter)	ChartArea)ChartBar)ChartColumn)ChartDoughnut)	ChartLine)ChartPie)
ChartRadar)ChartScatter)
ChartStock)
Chartsheet)DuplicateWorksheetNameFileCreateErrorFileSizeErrorInvalidWorksheetName)FormatPackager)SharedStringTable)xl_cell_to_rowcol)	Worksheetc                       e Zd ZdZeZeZ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?d: Z@ xZAS )?Workbookz=
    A class for writing the Excel XLSX Workbook file.


    c                    |i }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^                  t`        jb                        | _2        d| _3        d| _4        d| _5        d| _6        d| _7        d| _8        d| _9        tu               | _;        d| _<        d| _=        d| _>        d| _?        d| _@        i | _A        g | _B        d| _C        d| _D        d| _E        d| _F        d| _G        d| _H        d| _I        d| _J        d| _K        d| _L        d| _M        d| _N        t               | _P        t               | _R        | j                  rd| _        | j                  r| j                  ddd       n| j                  d di       | j                  d!di      | _T        | 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)Usuper__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setfeature_property_bags
add_formatdefault_url_format)selfrD   options	__class__s      U/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/xlsxwriter/workbook.pyrC   zWorkbook.__init__?   s   
 ?G 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,  !!#( %*").&-/%(U" >>#(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                 4   |j                  d      }|t        d       y|dk(  rt        |      }n|dk(  rt        |      }n|dk(  rt	        |      }ns|dk(  rt               }nc|dk(  rt        |      }nR|d	k(  rt               }nB|d
k(  rt        |      }n1|dk(  rt        |      }n |dk(  rt               }nt        d| d       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 'z' 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:%!OE6!g&E5 JE7"w'E9$ )E7"LE'
|3CDE W&vE.. $ 4 45!r   c                     |s/t         j                  j                  |      st        d| d       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:
            0 on success.

        zVBA project binary file '' not found.r   ThisWorkbookr   )ospathexistsr   rq   rm   rn   )r   rm   	is_streams      r   add_vba_projectzWorkbook.add_vba_project'  sR     !<,[MFG$ .D&%."r   c                     | j                  ||      dk(  ry|s/t        j                  j                  |      st	        d| d       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:
            0 on success.

        r   z#VBA project signature binary file 'r   r   )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_project?  sW    " ->?2E"277>>)+D6ykNO%."/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.close\  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_size}  sF      #EDL2$5 6D %D!$Vd]R%7!8D!%Dr   c                 d    |y|dk  s|dkD  rt        d| d       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 'z ' outside: 0 <= tab_ratio <= 100r   )r   r   rk   )r   rk   s     r   set_tab_ratiozWorkbook.set_tab_ratio  s<     q=IO;yk)IJK 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t        |      j                         }|dk(  r|j                  d      }|d	v rt        |      }|dk(  rt        |      d
kD  rt        d| d       t        |      d
kD  rt        d| d       | 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:
            0 on success.

        zGThe name and value parameters must be non-None in set_custom_property()r   booldate
number_intnumbertextz%Y-%m-%dT%H:%M:%SZ)r   r   r4   z_Length of 'value' parameter exceeds Excel's limit of 255 characters in set_custom_property(): ''z^Length of 'name' parameter exceeds Excel's limit of 255 characters in set_custom_property(): 'r   )r   
isinstancer   r   r   floatr   r   strlowerstrftimelenra   r   )r   r   r   property_types       r   set_custom_propertyzWorkbook.set_custom_property  s(    <5=(  %& &E8, &E3' ,EE3#BC ( & F"J$$&EF"NN#78E44JEF"s5zC'799>qB
 t9s?99=aA
 	%%tUM&BCr   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	                  |      }|rE|j                  d      }|j                  d      }| j                  |      }|t        d| d       y	d	}t        j                  d
|t        j                        rt        j                  d|      rt        d| d       y	t        j                  d|      rt        d| d       y	t        j                  d|      st        j                  d|      rt        d| d       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:
            0 on success.

        N =z^([^!]+)!([^!]+)$r      zUnknown sheet name 'z' in defined_name()r   z^[\w\\][\w\\.]*$z^\dz-Invalid Excel characters in defined_name(): 'r   z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z0Name looks like a cell name in defined_name(): 'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$zInvalid name 'z&' like a RC cell ref in defined_name()Fr   )
startswithlstriprecompilematchgroup_get_sheet_indexr   UNICODEr]   r   )r   r   formulasheet_index	sheetnamesheet_partsr   s          r   define_namezWorkbook.define_name  sW    	 c"nnS)G jj!56!!$'AI;;q>D//	:K "+I;6IJK K xx+T2::>"((DC
 @aHI 886=CD6KL 88K&"((3JD*Q>$'MNO!!4gu"EFr   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.worksheetsC  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_nameP  s     ""4((r   c                     | j                   S )a  
        Get the default url format used when a user defined format isn't
        specified with write_url(). The format is the hyperlink style defined
        by Excel for the default theme.

        Args:
            None.

        Returns:
            A format object.

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

        Args:
            None.

        Returns:
            Nothing.

        TN)rF   r   s    r   r5   zWorkbook.use_zip64l  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_namey  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_recommended  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(                  | j*                  | j,                  d}|j/                  |       | j                  j1                  |       || j2                  |<   |S )Nr   r!  rl   rH   r-   r&   r'   r(   r)   r*   r+   r,   r   workbook_add_formatr/   r0   r3   )r1   r   )r   r   rQ   _check_sheetnamer   r   rl   rH   r-   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
 "4??
 t33
  t33!
" d11#
$ %)$=$=#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| d      |j                  |      rt        d| d      |j                  d	      s|j                  d	      rt        d
| d      | j                         D ]<  }|j                         |j                  j                         k(  s/t        d| d       |S )Nz[\[\]:*?/\\]r   r   r  zExcel worksheet name 'z' must be <= 31 chars.z0Invalid Excel character '[]:*?/\' in sheetname 'z'.r   z3Sheet name cannot start or end with an apostrophe "z".zSheetname 'z(', with case ignored, is already in use.)r   r   rP   rO   rN   r   rM   r   r   searchr   endswithr   r   r   r   )r   r   is_chartsheetinvalid_charr   s        r   rG  zWorkbook._check_sheetnameQ  sZ    zz/2   A%   A%  	R OOc$2F2F.GG	 OOc$2F2F.GG	 y>B&(3IJ 
 y)&CI;bQ 
 $	(:(:3(?&Ei[PRS  * 	I INN$8$8$::,!),TU 	 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_properties  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 rP  )rU   r>   r   	dxf_indexr   rV   rX   )r   rV   rX   r   r!  
dxf_formats         r   rQ  zWorkbook._prepare_formats  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   FTr   )rV   _get_font_key
font_indexhas_fontr[   rX   
font_colorbolditalic	underlinefont_strikeouthas_dxf_font)r   fontsr!  r   keys        r   rR  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   r   r   num_format_indexr>   r   r\   )r   unique_num_formatsr\   r!  r   rA   s         r   rS  zWorkbook._prepare_num_formats  s    4+;+;; #	3I"--J j#. _
 ?!"J-7	*S -.	*Y&-.	*//-?
-K	* 27":.-2	*
 %%&&z2G#	3J '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   FTr   z[^0:])
rV   _get_border_keyborder_index
has_borderrt   r   r   rX   rK  has_dxf_border)r   bordersr!  r   rh  rr  s         r   rT  zWorkbook._prepare_borders  s      	I++-Cg~)0	&',	$  %).	&'+	$
	 " ZZ)
)) 	0I++-C  %+/	(		0r   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:0TF)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   tmprh  s         r   rU  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                   sm| j                  D ]^  }|j                  r| j                   j                  d       |j                  7|j                  sD| j                   j                  d       ` | j                   S )NXFComplementsDXFComplements)r   rU   checkboxaddrW  )r   r   s     r   _has_feature_property_bagsz#Workbook._has_feature_property_bagsn  sv     ))!\\ E	%%..22?C&&2y7I7I..223CDE )))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]   r;  r   sheet_ranges        r   r%  zWorkbook._prepare_defined_names{  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   r   z::   rh  )replacer   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                    d}d}d}i }i }i }| j                   j                  D ]1  }|j                  }d| j                  |<   |j                  +d| _        3 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                  rv|
j                  }|j                  }|j                  }d| j                  |<   ||v r||   }n'|	dz  }	|	}|	||<   | j                  j                  |       |
j                  ||       t!        |      D ]|  }|
j                  |   }|j                  }|j                  }d| j                  |<   ||v r||   }n'|	dz  }	|	}|	||<   | j                  j                  |       |
j#                  |||       ~ t!        |      D ]  }|dz  }|
j%                  |||        t!        |      D ]  }|
j'                  ||        |
j                  D ]l  }|j                  }|j                  }d| j                  |<   ||v r||   }n'|	dz  }	|	}|	||<   | j                  j                  |       |
j)                  ||       n |
j                  D ]l  }|j                  }|j                  }d| j                  |<   ||v r||   }n'|	dz  }	|	}|	||<   | j                  j                  |       |
j)                  ||       n |s|
j*                  }| j,                  j                  |        | j                  d d  D ]-  }|j.                  dk(  s| j                  j1                  |       / t3        | j                  d       | _        || _        y )Nr   TFr   r   c                     | j                   S rP  )id)r   s    r   <lambda>z,Workbook._prepare_drawings.<locals>.<lambda>J  s
    EHH r   r  )r   rs   _image_extensionrr   descriptionr   r   r   rR   shapesheader_imagesfooter_imagesbackground_image_digestr   _prepare_backgroundr8  _prepare_image_prepare_chart_prepare_shape_prepare_header_imagedrawingrS   r  r7  sortedrv   )r   chart_ref_idref_id
drawing_id	image_idsheader_image_idsbackground_idsimageimage_extensionimage_ref_idr;  chart_countimage_countshape_countheader_image_countfooter_image_counthas_backgroundhas_drawingimage_digestr!  r  r   s                         r   r&  zWorkbook._prepare_drawings  s-   
	 ))00 	6E#44O04D_-  ,15.	6 4//667__& n	.Eell+Kell+Kell+K!$U%8%8!9!$U%8%8!9"33NK %%! k[a
" %%.."'"8"8$}}48  1>1+L9F A%L)F3?N<0KK&&u-))&/B {+ U+"'"8"8$}}48  19,&|4F A%L)F.:Il+KK&&u-$$, {+ F!$$UL*EF
 {+ 8$$UJ78 ,, ;"'"8"8$}}48  1#33-l;F A%L)F5A$\2KK&&u-++FE:;" ,, ;"'"8"8$}}48  1#33-l;F A%L)F5A$\2KK&&u-++FE:;  --$$W-]n	.b [[^ 	*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_rangesN  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 )Nr   )striprT   r!  )r   r   s     r   r   zWorkbook._get_sheet_indexk  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_filesr;  counts
             r   r$  zWorkbook._prepare_vmlt  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 )Nr   r   )r   r   tablesr(  )r   table_idseenr;  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   r;  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.7	{ C#9$<> 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:r   z'')rfindfindr  r  r  r!   AttributeError)r   r  posr   r  cell_1cell_2	row_start	col_startrow_endcol_ends              r   r  zWorkbook._get_chart_range  s    
 mmC 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 rP  )rl   _sort_string_datar   s    r   r#  z!Workbook._prepare_sst_string_data  s    ((*r   c                     t               S rP  r   r   s    r   r  zWorkbook._get_packager#  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_workbook.  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_sharingP  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_prY  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_viewsg  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_viewm  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rIdr;  )r   r   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)
calcOnSaverk  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   localSheetId)r   r   definedName)r   _xml_data_element)r   r  r   r+  r  r   r  s          r   r5  zWorkbook._write_defined_name  so    A?"1oatn%
r>~x89m,}k:Fr   r  rP  )F)FF)B__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   rG  r  rQ  r\  rR  rS  rT  rU  r  r%  r  r&  r  r   r$  r(  r)  r'  r  r#  r  r  r  r  r  r  r  r  r$  r  r  r5  __classcell__)r   s   @r   r$   r$   0   sT    "Om^
F G 82h2 TY:<B&.1&)9v#29v$)' /"&%NbH'R,\$18&  .D+'Z0>A F*(FT6L(\:&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)r;  r<  r=  r>  rC   r   r   r   rG   rG     s    r   rG   c                   (    e Zd ZdZd ZdefdZd Zy)r   zI
    A class to track duplicate embedded images between worksheets.

    c                      g | _         i | _        y rP  )rs   image_indexesr   s    r   rC   zEmbeddedImages.__init__  s    r   r  c                     | j                   j                  |j                        }|I| j                  j	                  |       t        | j                        }|| j                   |j                  <   |S )z
        Get the index of an embedded image.

        Args:
            image: The image to lookup.

        Returns:
            The image index.

        )rD  rE   r  rs   r   r   )r   r  image_indexs      r   get_image_indexzEmbeddedImages.get_image_index  s^     ((,,U]];KKu%dkk*K0;Du}}-r   c                 2    t        | j                        dkD  S )z
        Check if the worksheet has embedded images.

        Args:
            None.

        Returns:
            Boolean.

        r   )r   rs   r   s    r   r  zEmbeddedImages.has_images  s     4;;!##r   N)r;  r<  r=  r>  rC   r   rG  r  r   r   r   r   r     s    
 U ($r   r   )<r  r   r   r3  r   r   decimalr   	fractionsr   warningsr   zipfiler   r	   r
   r   xlsxwriter.imager   r   r   
chart_arear   	chart_barr   chart_columnr   chart_doughnutr   
chart_liner   	chart_pier   chart_radarr   chart_scatterr   chart_stockr   
chartsheetr   
exceptionsr   r   r   r   formatr   r:  r   sharedstringsr    utilityr!   r   r"   	XMLwriterr$   rG   r   r   r   r   <module>r]     s     	 	  '    @ @ "  !  % ) !  # ' # "    , &  YGy"" YGz4	 	)$ )$r   