o
    Ü2¦Zè%  ã                   @   sº  d dl mZ 	 d dlmZmZmZ d dlmZ d dlm	Z	 d dl
Zd dlZd dlmZmZ d dlmZ zdd	lmZ W n eyF   d
ZY nw d dlmZ d dlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z' ddl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? ddl@mAZA dZBdZCdd„ ZDd d!„ ZEd"d#„ ZFd
ed
d
d$fd%d&„ZGdS )'é    )Úabsolute_import)ÚZipFileÚZIP_DEFLATEDÚ
BadZipfile)Úexc_info)ÚBytesION)ÚunicodeÚfile)ÚTableDefinitioné   )ÚKEEP_VBAF)ÚInvalidFileException)ÚARC_SHARED_STRINGSÚARC_COREÚARC_CONTENT_TYPESÚARC_WORKBOOKÚ	ARC_THEMEÚCOMMENTS_NSÚSHARED_STRINGSÚEXTERNAL_LINKÚXLTMÚXLTXÚXLSMÚXLSX)ÚCommentSheet)ÚWorkbooké   )Úread_string_table)Úapply_stylesheet)ÚDocumentProperties)ÚManifestÚOverride)ÚWorkbookParser)Úget_dependentsÚget_rels_path)ÚReadOnlyWorksheet)ÚTable)ÚSpreadsheetDrawing)Úfind_charts)Ú
fromstring)ÚWorkSheetParsers   PK)z.xlsxz.xlsmz.xltxz.xltmc                 C   sf   |r| nt | dƒ}| ¡ }| t¡}|dkr,t|ƒ}| |d ¡ | ¡  | d¡ |S | d¡ |S )z‰ trims trailing data from the central directory
    code taken from http://stackoverflow.com/a/7457686/570216, courtesy of Uri Cohen
    zrb+r   é   )ÚopenÚreadÚfindÚCENTRAL_DIRECTORY_SIGNATUREr   ÚseekÚtruncate)ÚzipFileÚis_file_instanceÚfÚdataÚposÚsio© r8   úG/var/www/html/env/lib/python3.10/site-packages/openpyxl/reader/excel.pyÚrepair_central_directoryD   s   


r:   c                 C   sÒ   t | dƒ}|s<tj | ¡r<tj | ¡d  ¡ }|tvr<|dkr%d}t|ƒ‚|dkr/d}t|ƒ‚d|d t¡f }t|ƒ‚|rJt	| d	d
ƒd
urJt
dƒ‚z	t| dtƒ}W |S  tyh   t| |ƒ}t|dtƒ}Y |S w )z+
    Check the file is a valid zipfile
    r-   éÿÿÿÿz.xlszŠopenpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.z.xlsbz|openpyxl does not support binary format .xlsb, please convert this file to .xlsx format if you want to open it with openpyxlzropenpyxl does not support %s file format, please check you can open it with Excel first. Supported formats are: %sú,ÚencodingNz)File-object must be opened in binary modeÚr)ÚhasattrÚosÚpathÚisfileÚsplitextÚlowerÚSUPPORTED_FORMATSÚjoinr   ÚgetattrÚIOErrorr   r   r   r:   )ÚfilenameÚis_file_likeÚfile_formatÚmsgÚarchiver4   r8   r8   r9   Ú_validate_archiveX   s6   
ö	ûÿýý
ýrN   c                 C   sj   t tttg}|D ]}|  |¡}|r|  S qtdd„ | jD ƒƒ}|t|ƒ@ }|r1tdt | 	¡ ƒS t
dƒ‚)Nc                 s   s   � | ]}|j V  qd S )N)ÚContentType)Ú.0Úpr8   r8   r9   Ú	<genexpr>ˆ   s   € z&_find_workbook_part.<locals>.<genexpr>ú/z$File contains no valid workbook part)r   r   r   r   r.   ÚsetÚDefaultr!   r   ÚpoprH   )ÚpackageÚworkbook_typesÚctÚpartÚdefaultsÚworkbook_typer8   r8   r9   Ú_find_workbook_part€   s   
ÿr]   Tc           )      C   s:  t | ƒ}| t¡}t|ƒ}t |¡}	t|	ƒ}
t||
jdd… ƒ}|j	}||_
||_||_||_|
jttfv |_| ¡  g |_|rG|rGt d¡ | ¡ }|rfttƒ dtƒ|_| ¡ D ]}|j || |¡¡ qY|rmt| ƒ|_t|v r~t| t¡ƒ}t |¡|_g }|	  t!¡}|dur—|jdd… }t"| |¡ƒ}t#|v r¡| t#¡|_$t%||ƒ |j&}| '¡ D ]å\}}|j(}|j)}t*|ƒ}g }||v rÆt+||ƒ}||vrËq­|rÜt,|||d|ƒ}|j -|¡ n¯| .|¡}| /|¡}||_0t1|||ƒ}| ¡  |�r‹|  t2¡D ]}| |j)¡}t3 t|ƒ¡}|j4D ]
\}}||| _5�qqû|jdu�r,|j6du�r,||j6 j)|_6|j7D ]} | | ¡}t|ƒ}!t8 |!¡}"| 9|"¡ �q/|  t:j;¡}#|#D ]}t<||j)ƒD ]
}$| =|$|$j>¡ �qV�qN|  t?j@¡}%|%D ]}|jA}&| |&¡}t|ƒ}'t? |'¡}(||(jB |(_C| D|(¡ �qk|jE|_Fg |_0q­| G¡  | H¡  |S )a#  Open the given filename and return the workbook

    :param filename: the path to open or a file-like object
    :type filename: string or a file-like object open in binary mode c.f., :class:`zipfile.ZipFile`

    :param read_only: optimised for reading, content cannot be edited
    :type read_only: bool

    :param keep_vba: preseve vba content (this does NOT mean you can use it)
    :type keep_vba: bool

    :param guess_types: guess cell content type and do not read it from the file
    :type guess_types: bool

    :param data_only: controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet
    :type data_only: bool

    :param keep_links: whether links to external workbooks should be preserved. The default is True
    :type keep_links: bool

    :rtype: :class:`openpyxl.workbook.Workbook`

    .. note::

        When using lazy load, all worksheets will be :class:`openpyxl.worksheet.iter_worksheet.IterableWorksheet`
        and the returned workbook will be read-only.

    r   Nz5Data types are not guessed when using iterator readerÚa)IrN   r-   r   r)   r    Ú	from_treer]   r"   ÚPartNameÚwbÚ
_data_onlyÚ
_read_onlyÚ_keep_linksÚguess_typesrO   r   r   ÚtemplateÚparseÚ_sheetsÚwarningsÚwarnÚnamelistr   r   r   Úvba_archiveÚwritestrÚ_archiver   r   Ú
propertiesr.   r   r   r   Úloaded_themer   Úpivot_cachesÚfind_sheetsÚnameÚtargetr$   r#   r%   Úappendr,   Úcreate_sheetÚ_relsr*   r   r   ÚcommentsÚcommentÚlegacy_drawingÚtablesr&   Ú	add_tabler'   Ú	_rel_typer(   Ú	add_chartÚanchorr
   Úrel_typeÚTargetÚcacheIdÚcacheÚ	add_pivotÚstateÚsheet_stateÚassign_namesÚclose))rI   Ú	read_onlyÚkeep_vbaÚ	data_onlyre   Ú
keep_linksrM   ÚsrcÚrootrW   Úwb_partÚparserra   Úvalid_filesrs   Úshared_stringsrY   Ústrings_pathrq   ÚsheetÚrelÚ
sheet_nameÚworksheet_pathÚ	rels_pathÚrelsÚwsÚfhÚ	ws_parserr>   Úcomment_sheetÚrefry   ÚtÚxmlÚtableÚdrawingsÚcÚ	pivot_relÚ
pivot_pathÚtreeÚpivotr8   r8   r9   Úload_workbook�   s®   







ÿ

ÿ


ÿ

r¨   )HÚ
__future__r   Úzipfiler   r   r   Úsysr   Úior   Úos.pathr@   ri   Úopenpyxl.compatr   r	   Úopenpyxl.pivot.tabler
   Útestsr   ÚImportErrorÚopenpyxl.utils.exceptionsr   Úopenpyxl.xml.constantsr   r   r   r   r   r   r   r   r   r   r   r   Úopenpyxl.comments.comment_sheetr   Úopenpyxl.workbookr   Ústringsr   Úopenpyxl.styles.stylesheetr   Úopenpyxl.packaging.corer   Úopenpyxl.packaging.manifestr    r!   Úopenpyxl.packaging.workbookr"   Úopenpyxl.packaging.relationshipr#   r$   Úopenpyxl.worksheet.read_onlyr%   Úopenpyxl.worksheet.tabler&   Ú$openpyxl.drawing.spreadsheet_drawingr'   Úopenpyxl.chart.readerr(   Úopenpyxl.xml.functionsr)   Ú	worksheetr*   r/   rE   r:   rN   r]   r¨   r8   r8   r8   r9   Ú<module>   sL    ÿ8(ÿ