o
    b                     @   s  d dl Z d dlZd dlZd dlZd dl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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l0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl4m6Z6 ddl4m7Z7 ddl4m8Z8 ddl4m9Z9 ddl4m:Z: G dd dej;Z<G d d! d!e=Z>dS )"    N)warn)datetime)ZipFileZipInfoZIP_DEFLATEDLargeZipFileunpack   )	int_types	num_types	str_typesforce_unicode)	xmlwriter)	Worksheet)
Chartsheet)SharedStringTable)FormatPackager)xl_cell_to_rowcol)	ChartArea)ChartBar)ChartColumn)ChartDoughnut)	ChartLine)ChartPie)
ChartRadar)ChartScatter)
ChartStock)InvalidWorksheetName)DuplicateWorksheetName)UndefinedImageSize)UnsupportedImageFormat)FileCreateError)FileSizeErrorc                       s&  e Zd ZdZeZeZd fdd	Zdd Z	dd Z
dd	d
ZdddZdddZdd ZdddZdd Zdd ZdddZdd ZdddZdddZd d! Zd"d# Zd$d% Zd&d' Zd(d) Zdd*d+Zd,d- Zd.d/ Zd0d1 Zdd2d3Zdd4d5Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*dJdK Z+dLdM Z,dNdO Z-dPdQ Z.dRdS Z/dTdU Z0dVdW Z1dXdY Z2dZd[ Z3d\d] Z4d^d_ Z5d`da Z6dbdc Z7ddde Z8dfdg Z9dhdi Z:djdk Z;dldm Z<dndo Z=dpdq Z>drds Z?dtdu Z@dvdw ZAdxdy ZBdzd{ ZCd|d} ZDd~d ZE  ZFS )Workbookz=
    A class for writing the Excel XLSX Workbook file.


    Nc                    s  |du ri }t t|   || _|dd| _|dd| _|dd| _|dd| _|dd| _	|d	d| _
|d
d| _|dd| _|dd| _|dd| _|dd| _|dd| _|di | _|dd| _| jdk rzd| _|drd| _nd| _t | _d| _d| _d| _d| _d| _d| _d| _d| _g | _g | _g | _ i | _!g | _"g | _#i | _$g | _%i | _&g | _'d| _(d| _)g | _*g | _+g | _,i | _-g | _.t/0 | _1d| _2d| _3d| _4d| _5d| _6d| _7d| _8t9 | _:d| _;d| _<d| _=i | _>g | _?d| _@d| _Ad| _Bd| _Cd| _Dd| _Ed| _Fd| _Gd| _H| jr$d| _| jr1| Iddd n| Id di | Id!di| _J| jdurQ| Id"| ji| _dS dS )#z
        Constructor.

        Ntmpdir	date_1904Fstrings_to_numbersstrings_to_formulasTstrings_to_urlsnan_inf_to_errorsdefault_date_formatconstant_memory	in_memoryexcel2003_styleremove_timezoneuse_future_functionsdefault_format_propertiesmax_url_lengthi     	use_zip64r   ZSheetZChart      >  %  X  autoig )xf_indexZfont_familyr=   Z	hyperlink
num_format)Ksuperr&   __init__filenamegetr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   allow_zip64WorksheetMetaworksheet_metaselected
fileclosedZ
filehandleZ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_format_countdefined_namesnamed_rangesZcustom_colorsdoc_propertiescustom_propertiesr   utcnowZ
createtimenum_vml_filesnum_comment_filesx_windowy_windowwindow_widthwindow_height	tab_ratior   	str_tablevba_projectvba_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
add_formatdefault_url_format)selfrA   options	__class__ R/var/www/secure340b-portal/env/lib/python3.10/site-packages/xlsxwriter/workbook.pyr@   =   s   



zWorkbook.__init__c                 C   s   | S )z0Return self object to use with "with" statement.ry   ru   ry   ry   rz   	__enter__   s   zWorkbook.__enter__c                 C   s   |    dS )z-Close workbook when exiting "with" statement.N)close)ru   typevalue	tracebackry   ry   rz   __exit__   s   zWorkbook.__exit__c                 C      |du r| j }| j||dS )z
        Add a new worksheet to the Excel workbook.

        Args:
            name: The worksheet name. Defaults to 'Sheet1', etc.

        Returns:
            Reference to a worksheet object.

        Nworksheet_class)r   
_add_sheet)ru   namer   ry   ry   rz   add_worksheet      zWorkbook.add_worksheetc                 C   r   )z
        Add a new chartsheet to the Excel workbook.

        Args:
            name: The chartsheet name. Defaults to 'Sheet1', etc.

        Returns:
            Reference to a chartsheet object.

        Nr   )chartsheet_classr   )ru   r   r   ry   ry   rz   add_chartsheet   r   zWorkbook.add_chartsheetc                 C   sJ   | j  }| jrdddd}|r|| t|| j| j}| j| |S )z
        Add a new Format to the Excel Workbook.

        Args:
            properties: The format properties.

        Returns:
            Reference to a Format object.

        ZArial
   )Z	font_nameZ	font_sizetheme)	r3   copyr0   updater   rR   rT   rP   append)ru   
propertiesZformat_properties	xf_formatry   ry   rz   rs      s   

zWorkbook.add_formatc                 C   s  | d}|du rtd dS |dkrt|}nP|dkr!t|}nG|dkr*t|}n>|dkr3t|}n5|dkr<t|}n,|d	krEt|}n#|d
krNt|}n|dkrWt	|}n|dkr`t
|}ntd|  dS d|v rq|d |_d|_| j|_| j|_| j| |S )z
        Create a chart object.

        Args:
            options: The chart type and subtype options.

        Returns:
            Reference to a Chart object.

        r~   Nz)Chart type must be defined in add_chart()areabarcolumndoughnutlinepieZradarZscatterZstockz&Unknown chart type '%s' in add_chart()r   T)rB   r   r   r   r   r   r   r   r   r   r   rI   Zembeddedr(   r1   rM   r   )ru   rv   Z
chart_typechartry   ry   rz   	add_chart   s>   










zWorkbook.add_chartFc                 C   sD   |st j|stdt|  dS | jdu rd| _|| _|| _dS )z
        Add a vbaProject binary to the Excel workbook.

        Args:
            vba_project: The vbaProject binary file name.
            is_stream:   vba_project is an in memory byte stream.

        Returns:
            Nothing.

        z'VBA project binary file '%s' not found.r   NThisWorkbook)ospathexistsr   r   rg   re   rf   )ru   re   	is_streamry   ry   rz   add_vba_project  s   

zWorkbook.add_vba_projectc              
   C   s   | j s>z|   W n ty } zt|d}~w ty( } ztdd}~ww d| _ | jr:|  D ]}|  q3dS dS t	d dS )z
        Call finalization code and close file.

        Args:
            None.

        Returns:
            Nothing.

        NzBFilesize would require ZIP64 extensions. Use workbook.use_zip64().Tz'Calling close() on already closed file.)
rG   _store_workbookIOErrorr$   r   r%   r.   
worksheetsZ
_opt_closer   )ru   e	worksheetry   ry   rz   r}   5  s"   
zWorkbook.closec                 C   sB   |rt |d d | _nd| _|rt |d d | _dS d| _dS )z
        Set the size of a workbook window.

        Args:
            width:  Width  of the window in pixels.
            height: Height of the window in pixels.

        Returns:
            Nothing.

        i  `   r9   r:   N)intra   rb   )ru   widthheightry   ry   rz   set_sizeT  s   
zWorkbook.set_sizec                 C   s>   |du rdS |dk s|dkrt d|  dS t|d | _dS )z
        Set the ratio between worksheet tabs and the horizontal slider.

        Args:
            tab_ratio: The tab ratio, 0 <= tab_ratio <= 100

        Returns:
            Nothing.

        Nr   d   z-Tab ratio '%d' outside: 0 <= tab_ratio <= 100r   )r   r   rc   )ru   rc   ry   ry   rz   set_tab_ratiok  s
   zWorkbook.set_tab_ratioc                 C   s
   || _ dS )z
        Set the document properties such as Title, Author etc.

        Args:
            properties: Dictionary of document properties.

        Returns:
            Nothing.

        N)rZ   )ru   r   ry   ry   rz   set_properties~     
zWorkbook.set_propertiesc                 C   s   |du s|du rt d dS |du r4t|trd}nt|tr"d}nt|tr*d}n
t|tr2d}nd}|dkr=|d	}|dkrOt|d
krOt dt|  t|d
kr]t dt|  | j	
|||f dS )a'  
        Set a custom document property.

        Args:
            name:          The name of the custom property.
            value:         The value of the custom property.
            property_type: The type of the custom property. Optional.

        Returns:
            Nothing.

        NzGThe name and value parameters must be non-None in set_custom_property()r   booldateZ
number_intnumbertextz%Y-%m-%dT%H:%M:%SZr5   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   r   strftimelenr   r[   r   )ru   r   r   Zproperty_typery   ry   rz   set_custom_property  s0   




zWorkbook.set_custom_propertyc                 C   s6   || _ |dkrd| _n|dkrd| _ |r|| _dS dS )z
        Set the Excel calculation mode for the workbook.

        Args:
            mode: String containing one of:
                * manual
                * auto_except_tables
                * auto

        Returns:
            Nothing.

        manualFZauto_except_tablesautoNoTableN)rm   rn   ro   )ru   modero   ry   ry   rz   set_calc_mode  s   
zWorkbook.set_calc_modec                 C   s  d}d}| dr|d}td}||}|r8|d}|d}| |}|du r7tdt|  dS nd}td	|tj	rHtd
|rRtdt|  dS td|rbtdt|  dS td|sntd|rxtdt|  dS | j
|||dg dS )z
        Create a defined name in the workbook.

        Args:
            name:    The defined name.
            formula: The cell or range that the defined name refers to.

        Returns:
            Nothing.

        N =z^(.*)!(.*)$r
      z)Unknown sheet name '%s' in defined_name()r   z^[\w\\][\w\\.]*$z^\dz0Invalid Excel characters in defined_name(): '%s'z"^[a-zA-Z][a-zA-Z]?[a-dA-D]?[0-9]+$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   r   UNICODErX   r   )ru   r   Zformulasheet_index	sheetnameZsheet_partsr   ry   ry   rz   define_name  sJ   








zWorkbook.define_namec                 C      | j S )z
        Return a list of the worksheet objects in the workbook.

        Args:
            None.

        Returns:
            A list of worksheet objects.

        )rL   r{   ry   ry   rz   r     s   zWorkbook.worksheetsc                 C   s   | j |S )z
        Return a worksheet object in the workbook using the sheetname.

        Args:
            name: The name of the worksheet.

        Returns:
            A worksheet object or None.

        )rO   rB   ru   r   ry   ry   rz   get_worksheet_by_name  s   zWorkbook.get_worksheet_by_namec                 C   r   )a  
        Get the default url format used when a user defined format isn't
        specified with write_url(). The format is the hyperlink style defined
        by Excel for the default theme.

        Args:
            None.

        Returns:
            A format object.

        )rt   r{   ry   ry   rz   get_default_url_format)  s   zWorkbook.get_default_url_formatc                 C   
   d| _ dS )z
        Allow ZIP64 extensions when writing xlsx file zip container.

        Args:
            None.

        Returns:
            Nothing.

        TN)rC   r{   ry   ry   rz   r6   8  r   zWorkbook.use_zip64c                 C   s   |dur	|| _ dS d| _ dS )z
        Set the VBA name for the workbook. By default the workbook is referred
        to as ThisWorkbook in VBA.

        Args:
            name: The VBA name for the workbook.

        Returns:
            Nothing.

        Nr   )rg   r   ry   ry   rz   set_vba_nameE  s   

zWorkbook.set_vba_namec                 C   r   )z
        Set the Excel "Read-only recommended" option when saving a file.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rq   r{   ry   ry   rz   read_only_recommendedV  r   zWorkbook.read_only_recommendedc                 C   sf   |    |   |   |   |   |   |   |   |   | 	  | 
d |   d S )Nworkbook)_prepare_format_propertiesZ_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_tagZ
_xml_closer{   ry   ry   rz   _assemble_xml_filei  s   
zWorkbook._assemble_xml_filec                 C   s  zt | jdt| jd}W n ty } z|d }~ww |  }|  s'|   | jj	dkr9d| j
d _d| j
d _|  D ]}|j| jj	krId|_q=| jr]|  D ]}|jd u r\|  qQ|   |   |   |   |   |   |   ||  || j || j | }d }t|D ]i\}}|\}}	}
| jrt |	d}|j!|_"|
r|#||$  q|#||$ %d qt&'d}t()|||f z|*||	 t(+| W q t,y } zt-|t.|d D ]}t(+|| d  q|d }~ww |/  d S )Nw)compression
allowZip64r   r
   )  r
   r
   r   r   r   zutf-8)	r   r
      r   r   r   r   r   r   )0r   rA   r   rC   r   _get_packagerr   r   rE   activesheetrL   rF   hiddenindexactivere   rg   r   _prepare_sst_string_data_prepare_vml_prepare_defined_names_prepare_drawings_add_chart_data_prepare_tables_prepare_metadataZ_add_workbookZ_set_tmpdirr'   Z_set_in_memoryr/   Z_create_package	enumerater   r   compress_typewritestrgetvalueencodetimemktimer   utimewriteremover   ranger   r}   )ru   Z	xlsx_filer   packagersheetZ	xml_filesZfile_idZ	file_dataZos_filenameZxml_filenameZ	is_binaryzipinfo	timestampiry   ry   rz   r     sr   






zWorkbook._store_workbookc                 C   s   |r| }n|   }t| j}| |t|t}i d|d|d| jd| jd| jd| j	d| j
d| jd	| jd
| jd| jd| jd| jd| jd| jd| jd| j}|| | j| || j|< |S )Nr   r   rd   rE   r.   r'   r(   r)   r*   r+   r,   r-   rt   r0   r1   r4   r2   )r   r   rL   _check_sheetnamer   r   rd   rE   r.   r'   r(   r)   r*   r+   r,   r-   rt   r0   r1   r4   r2   _initializer   rO   )ru   r   r   r   r   Z	init_datary   ry   rz   r     sX   
	


zWorkbook._add_sheetc                 C   s   t d}|r|  jd7  _n|  jd7  _|d u s|dkr1|r)| jt| j }n| jt| j }t|dkr=td| |	|rHtd| |
dsR|drXtd| |  D ]}| |j krmtd	| q\|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   rK   rJ   rI   strrH   r   r    searchr   endswithr   lowerr   r!   )ru   r   Zis_chartsheetZinvalid_charr   ry   ry   rz   r     sF   

zWorkbook._check_sheetnamec                 C   s,   |    |   |   |   |   d S N)_prepare_formats_prepare_fonts_prepare_num_formats_prepare_borders_prepare_fillsr{   ry   ry   rz   r   G  s
   z#Workbook._prepare_format_propertiesc                 C   s   g }g }| j D ]}|jd ur|| |jd ur|| qd gt| | _d gt| | _|D ]
}|j}|| j|< q0|D ]
}|j}|| j|< q=d S r  )rP   r=   r   Z	dxf_indexr   rQ   rS   )ru   rQ   rS   r   r   Z
dxf_formatry   ry   rz   r  Y  s"   




zWorkbook._prepare_formatsc                 C   s6   t | j}|d= | jd ur|d= |D ]}|  qd S )Nr
   )listrP   r-   Z_get_xf_index)ru   rP   r   ry   ry   rz   _set_default_xf_indicesu  s   


z Workbook._set_default_xf_indicesc                 C   s   i }d}| j D ]!}| }||v r|| |_d|_q|||< ||_d|_|d7 }q|| _| jD ]}|js@|js@|js@|j	s@|j
rCd|_q/d S Nr   r
   )rQ   Z_get_font_keyZ
font_indexZhas_fontrV   rS   Z
font_colorbolditalic	underlineZfont_strikeoutZhas_dxf_font)ru   Zfontsr   r   keyry   ry   rz   r    s*   



zWorkbook._prepare_fontsc                 C   s   i }d}d}| j | j D ]D}|j}t|ts$t|}|dkr d}||_q|dkr,d|_q|dkr4d|_q||v r>|| |_q|||< ||_|d7 }|jrP|d7 }q|| _d S )N   r   r
   0ZGeneral)	rQ   rS   r>   r   r   r   Znum_format_indexr=   rW   )ru   Znum_formatsr   rW   r   r>   ry   ry   rz   r    s4   

zWorkbook._prepare_num_formatsc                 C   s   i }d}| j D ]!}| }||v r|| |_d|_q|||< ||_d|_|d7 }q|| _td}| jD ]}| }||rBd|_	q4d S )Nr   r
   z[^0:])
rQ   Z_get_border_keyZborder_index
has_borderrj   r   r   rS   r  Zhas_dxf_border)ru   Zbordersr   r   r  r  ry   ry   rz   r    s&   





zWorkbook._prepare_bordersc                 C   s.  i }d}d|d< d|d< | j D ]}|js|js|jr%d|_|j|_|j|_q| jD ]h}|jdkrD|jdkrD|jdkrD|j}|j|_||_|jdkr]|jdkr]|jdkr]|j|_d|_d|_|jdkrr|jdkrr|jdkrrd|_d|_| }||v r|| |_	d|_
q)|||< ||_	d|_
|d7 }q)|| _d S )Nr   r   z0:0:0r
   z17:0:0)rS   patternZbg_colorZfg_colorZhas_dxf_fillZdxf_bg_colorZdxf_fg_colorrQ   Z_get_fill_keyZ
fill_indexZhas_fillrk   )ru   Zfillsr   r   tmpr  ry   ry   rz   r	    sJ   




zWorkbook._prepare_fillsc                 C   s   | j }|  D ]O}|jrd}|j}|d|j||g |jr-d}|j}|d|j||g |js3|jrVd}d}|jrF|jrF|jd |j }n|j|j }|d|j||g q| |}|| _ | 	|| _
d S )Nr
   _xlnm._FilterDatabaser   z_xlnm.Print_Arear   ,z_xlnm.Print_Titles)rX   r   Zautofilter_arear   r   Zprint_area_rangeZrepeat_col_rangeZrepeat_row_range_sort_defined_names_extract_named_rangesrY   )ru   rX   r   r   sheet_rangery   ry   rz   r   '  s>   
zWorkbook._prepare_defined_namesc                 C   sn   |D ] }|\}}}}| dd }|d }||d |  q|jtdd |D ]}|  q.|S )N_xlnm.r   r   z::   r  )replacer  r   r   sortoperator
itemgetterpop)ru   names	name_listdefined_name_rH   ry   ry   rz   r  P  s   
zWorkbook._sort_defined_namesc                 C   s  d}d}d}d}i }i }i }|   D ]}t|j}	t|j}
t|j}t|j}t|j}|j}d}|	s@|
s@|s@|s@|s@|s@q|	sF|
sF|rL|d7 }d}|jr|jrXd}|j}n|j}d }| 	||\}}}}}}}||v rs|| }n|d7 }|}|||< | j
|||g ||| t|
D ]G}|j| d }|j| d }| 	||\}}}}}}}||v r|| }n|d7 }|}|||< | j
|||g |||||||||||
 qt|	D ]}|d7 }|||| qt|D ]}||| qt|D ]N}|j| d }|j| d }|j| d }| 	||\}}}}}}}||v r)|| }n|d7 }|}|||< | j
|||g ||||||||||	 qt|D ]O}|j| d }|j| d }|j| d }| 	||\}}}}}}}||v r||| }n|d7 }|}|||< | j
|||g ||||||||||	 qN|r|j}| j
| q| jd d  D ]}|jdkr| j| qt| jd	d
 d| _|| _d S )Nr   Fr
   Tr   r   r   r   c                 S   r   r  )id)r   ry   ry   rz   <lambda>  s    z,Workbook._prepare_drawings.<locals>.<lambda>r  )r   r   rM   ri   ZshapesZheader_imagesZfooter_imagesZbackground_imageZbackground_bytes_get_image_propertiesr   Z_prepare_backgroundr   Z_prepare_imageZ_prepare_chartZ_prepare_shapeZ_prepare_header_imagedrawingrN   r'  r   sortedrl   )ru   Zchart_ref_idZimage_ref_idZref_idZ
drawing_idZ	image_idsZheader_image_idsZbackground_idsr   Zchart_countZimage_countZshape_countZheader_image_countZfooter_image_countZhas_backgroundZhas_drawingrA   
image_data
image_typer   r   r   x_dpiy_dpidigestr   positionr*  r   ry   ry   rz   r   k  s   


















zWorkbook._prepare_drawingsc                 C   s,  d}d}d}d}|st |d}| }n| }t| }	tj|}
t	d|dd d }t	d|d d d }t	d	|d d d }t	d
|d d d }t	d|dd d }t	d|d d d }d}d}d}d}||krd| j
d< | |\}}}}}nl|dkrd| j
d< | |\}}}}}nX||krd| j
d< | |\}}}nF|dkrd| j
d< | |\}}}}}n2|dkr||krd| j
d< | |\}}}}}n||krd| j
d< | |\}}}}}ntd| |r|std| |s|  |dkrd}|dkrd}||||
|||	fS )Nr   r   rbZ3sr
   r  >Hr   Z2s<LZ4s(   ,   s   PNGs   BMs    EMFs   GIF8Tpngi  jpegbmpl   M5 wmfemfgifz-%s: Unknown or unsupported image file format.z%%s: no size data found in image file.)openreadr   hashlibsha256	hexdigestr   r   basenamer	   rh   _process_png_process_jpg_process_bmp_process_wmf_process_emf_process_gifr#   r"   r}   )ru   rA   r,  r   r   r.  r/  fhdatar0  Z
image_nameZmarker1Zmarker2Zmarker3Zmarker4Zmarker5Zmarker6Z
png_markerZ
bmp_markerZ
emf_markerZ
gif_markerr-  ry   ry   rz   r)    sh   









zWorkbook._get_image_propertiesc                 C   sf  d}t |}d}d}d}d}d}d}	d}
d}|s||k rtd||d |d	  d }td||d	 |d  d }||	kr\td||d |d
  d }td||d
 |d  d }||
krtd||d |d
  d }td||d
 |d  d }td||d |d  d }|dkr|d }|d }||krd}q|| d
 }|s||k sd||||fS )N   Fr   r   iRDHIisYHpiDNEIz>Ir        b   r
   g
F%u?Tr7  r   r	   )ru   rJ  offsetdata_length
end_markerr   r   r.  r/  Zmarker_ihdrZmarker_physZmarker_iendlengthmarker	x_density	y_densityunitsry   ry   rz   rC  B  s:   zWorkbook._process_pngc                 C   s  d}t |}d}d}d}d}d}|s||k rtd||d |d  d }	td||d |d  d }
|	d@ dkrd|	d	krd|	d
krd|	dkrdtd||d |d  d }td||d |d  d }|	dkrtd||d |d  d }td||d |d  d }td||d |d  d }|dkr|}|}|dkr|d }|d }|dkrd}|dkrd}|	dkrd}q||
 d }|s||k sd||||fS )Nr   Fr   r   r3  r  i  i  i  i  i        	   i  rN     rL     rM  r
   gRQ@i  Tr8  rP  )ru   rJ  rQ  rR  rS  r   r   r.  r/  rU  rT  rX  rV  rW  ry   ry   rz   rD  o  sN   (zWorkbook._process_jpgc                 C   sB   d}d}t d|dd d }t d|dd d }d||||fS )Nr   <h   rK  r   r   r<  r   )ru   rJ  r.  r/  r   r   ry   ry   rz   rH    s
   zWorkbook._process_gifc                 C   s6   t d|dd d }t d|dd d }d||fS )Nr4        r      r9  r   )ru   rJ  r   r   ry   ry   rz   rE    s   
zWorkbook._process_bmpc                 C   s   d}d}t d|dd d }t d|dd d }t d|dd d }t d|dd d }t d	|dd
 d }t|| | | }	t|| | | }
d|	|
||fS )Nr   r^  r_  rK  r   r   rL  r]  z<HrM  r:  )r	   float)ru   rJ  r.  r/  x1y1Zx2y2Zinchr   r   ry   ry   rz   rF    s   zWorkbook._process_wmfc                 C   s  t d|dd d }t d|dd d }t d|dd d }t d|dd d }|| }|| }t d|dd d }t d|dd	 d }	t d|d	d
 d }
t d|d
d d }d|
|  }d||	  }|d | }|d | }|d7 }|d7 }d||||fS )Nz<lrK  rL  r   rM               $   r5  g{Gz?gffffff9@r
   r;  r   )ru   rJ  Zbound_x1Zbound_y1Zbound_x2Zbound_y2r   r   Zframe_x1Zframe_y1Zframe_x2Zframe_y2Zwidth_mmZ	height_mmr.  r/  ry   ry   rz   rG    s"   zWorkbook._process_emfc           
      C   s   g }|D ]@}|d }|d }|d }|dkrqd|v rD| dd\}}|dr5|dd}	|d |	 }n
|dkr?|d | }|| q|S )	Nr   r
   r   r  !r  r   r   )splitr   r  r   )
ru   rX   rY   r%  r   r   r  rH   r&  Z	xlnm_typery   ry   rz   r    s"   

zWorkbook._extract_named_rangesc                 C   s$   | d}|| jv r| j| jS d S )Nr   )striprO   r   )ru   r   ry   ry   rz   r     s   

zWorkbook._get_sheet_indexc           
      C   s   d}d}d}d}d}d}d}|   D ]Y}|js|jsq|d7 }|jrT|jr0|d7 }|d7 }d| _|d7 }|||||}	|dtd|	 d  7 }|dtd|	 d  7 }|jre|d7 }|d7 }||| || _|| _qd S )Nr   r
   i   T)	r   Zhas_vmlZhas_header_vmlrp   Z_prepare_vml_objectsr   Z_prepare_header_vml_objectsr]   r^   )
ru   Z
comment_idZvml_drawing_idZvml_data_idZvml_header_idZvml_shape_idZ	vml_filesZcomment_filesr   country   ry   rz   r     sB   zWorkbook._prepare_vmlc                 C   sB   d}i }|   D ]}t|j}|sq||d | ||7 }qd S r  )r   r   Ztablesr   )ru   Ztable_idseenr   Ztable_country   ry   rz   r   ;  s   

zWorkbook._prepare_tablesc                 C   s   |   D ]}|jrd| _qd S )NT)r   Zhas_dynamic_arraysrr   )ru   r   ry   ry   rz   r   I  s
   zWorkbook._prepare_metadatac                 C   sP  i }i }g }|   D ]}|||j< q
| jD ]}|| |jr%||j q|D ]}}|j D ]u}|j| }|j| d urQ||vsG|| d u rP|j| }|||< q/||v r]|| |j|< q/| |\}	}
|	d u riq/|		drxg |j|< g ||< q/|	|vrt
dt|	t|f  g |j|< g ||< q/||	 }|j|
 }||j|< |||< q/q(d S )N(zEUnknown worksheet reference '%s' in range '%s' passed to add_series())r   r   rM   r   combinedZformula_idskeysZformula_data_get_chart_ranger   r   r   Z_get_range_data)ru   r   Zseen_rangesrM   r   r   c_rangeZr_idrJ  r   cellsry   ry   rz   r   O  sV   










zWorkbook._add_chart_datac                 C   s   | d}|dkr|d | }||d d  }ndS |ddkr*|dd\}}n||}}|d}|dd}zt|\}}t|\}	}
W n
 tyR   Y dS w ||	kr]||
kr]dS ||||	|
gfS )Nrl  r   r
   NN:r   z'')rfindfindrm  rn  r  r   AttributeError)ru   ru  posr   rv  Zcell_1Zcell_2Z	row_startZ	col_startZrow_endZcol_endry   ry   rz   rt    s&   


zWorkbook._get_chart_rangec                 C   s   | j   d S r  )rd   Z_sort_string_datar{   ry   ry   rz   r     s   z!Workbook._prepare_sst_string_datac                 C   s   t  S r  r   r{   ry   ry   rz   r     s   zWorkbook._get_packagerc                 C   s4   d}|d }|d }d|fd|fg}|  d| d S )Nz!http://schemas.openxmlformats.orgz/spreadsheetml/2006/mainz"/officeDocument/2006/relationshipsxmlnszxmlns:rr   )_xml_start_tag)ru   Zschemar}  Zxmlns_r
attributesry   ry   rz   r     s   zWorkbook._write_workbookc                 C   sL   d}d}d}d}d|fd|fd|fd|fg}| j r|d | d	| d S )
NZxlr  i  ZappNameZ
lastEditedZlowestEditedZrupBuild)codeNamez&{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}ZfileVersion)re   r   _xml_empty_tag)ru   Zapp_nameZlast_editedZlowest_editedZ	rup_buildr  ry   ry   rz   r     s   zWorkbook._write_file_versionc                 C   s$   | j dkrd S dg}| d| d S )Nr   )ZreadOnlyRecommendedr
   ZfileSharing)rq   r  ru   r  ry   ry   rz   r     s   
zWorkbook._write_file_sharingc                 C   sL   d}g }| j r|d| j f | jr|d |d|f | d| d S )NiB r  )Zdate1904r
   ZdefaultThemeVersionZ
workbookPr)rg   r   r(   r  )ru   Zdefault_theme_versionr  ry   ry   rz   r     s   
zWorkbook._write_workbook_prc                 C   s    |  d |   | d d S )NZ	bookViews)r~  _write_workbook_viewr   r{   ry   ry   rz   r     s   
zWorkbook._write_book_viewsc                 C   s   d| j fd| jfd| jfd| jfg}| jdkr|d| jf | jjdkr2| jjd }|d	|f | jjdkrA|d
| jjf | 	d| d S )NZxWindowZyWindowZwindowWidthZwindowHeightr;   ZtabRatior   r
   Z
firstSheetZ	activeTabZworkbookView)
r_   r`   ra   rb   rc   r   rE   
firstsheetr   r  )ru   r  r  ry   ry   rz   r    s   
zWorkbook._write_workbook_viewc                 C   sD   |  d d}|  D ]}| |j||j |d7 }q| d d S )NZsheetsr
   )r~  r   _write_sheetr   r   r   )ru   Zid_numr   ry   ry   rz   r   $  s   

zWorkbook._write_sheetsc                 C   sD   d|fd|fg}|r| d | ddt| f | d| d S )Nr   ZsheetId)stater   zr:idZrIdr   )r   r   r  )ru   r   sheet_idr   r  ry   ry   rz   r  /  s   
zWorkbook._write_sheetc                 C   sl   d| j fg}| jdkr|d| jf |d n| jdkr&|d| jf | jr.|d | d| d S )NZcalcIdr   calcMode)Z
calcOnSaver  r   )ZfullCalcOnLoad1ZcalcPr)ro   rm   r   rn   r  r  ry   ry   rz   r   =  s   


zWorkbook._write_calc_prc                 C   s8   | j sd S | d | j D ]}| | q| d d S )NZdefinedNames)rX   r~  _write_defined_namer   )ru   r%  ry   ry   rz   r   L  s   

zWorkbook._write_defined_namesc                 C   s`   |d }|d }|d }|d }d|fg}|dkr | d|f |r'| d | d	|| d S )
Nr   r
   r      r   r   ZlocalSheetId)r   r
   ZdefinedName)r   Z_xml_data_element)ru   r%  r   r  r  r   r  ry   ry   rz   r  X  s   

zWorkbook._write_defined_namerw  r  )F)G__name__
__module____qualname____doc__r   r   r   r   r@   r|   r   r   r   rs   r   r   r}   r   r   r   r   r   r   r   r   r   r6   r   r   r   r   r   r   r   r  r  r  r  r  r	  r   r  r   r)  rC  rD  rH  rE  rF  rG  r  r   r   r   r   r   rt  r   r   r   r   r   r   r   r  r   r  r   r   r  __classcell__ry   ry   rw   rz   r&   .   s    h



4


.=
'
b
'.+;) M-5
"	*J$	r&   c                   @   s   e Zd ZdZdd ZdS )rD   z]
    A class to track worksheets data such as the active sheet and the
    first sheet.

    c                 C   s   d| _ d| _d S )Nr   )r   r  r{   ry   ry   rz   r@   q  s   
zWorksheetMeta.__init__N)r  r  r  r  r@   ry   ry   ry   rz   rD   j  s    rD   )?r?  r   r   r   r   warningsr   r   zipfiler   r   r   r   structr	   compatibilityr   r   r   r   r   r   r   r   Z
chartsheetr   Zsharedstringsr   formatr   r   r   Zutilityr   Z
chart_arear   Z	chart_barr   Zchart_columnr   Zchart_doughnutr   Z
chart_liner   Z	chart_pier   Zchart_radarr   Zchart_scatterr   Zchart_stockr   
exceptionsr    r!   r"   r#   r$   r%   Z	XMLwriterr&   objectrD   ry   ry   ry   rz   <module>   s`                 J