o
    g                      @   s   d dl mZ 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mZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ G dd dZdS )    )warn)
fromstring)get_dependentsget_rels_pathget_rel)WorkbookPackage)Workbook)DefinedNameList)read_external_link)CacheDefinition)
RecordList)PrintTitles	PrintArea)CALENDAR_MAC_1904c                   @   sJ   e Zd ZdZdddZedd Zdd Zd	d
 Zdd Z	edd Z
dS )WorkbookParserNTc                 C   s,   || _ || _t | _t | _|| _g | _d S N)archiveworkbook_part_namer	   defined_namesr   wb
keep_linkssheets)selfr   r   r    r   R/var/www/html/api-tag/env/lib/python3.10/site-packages/openpyxl/reader/workbook.py__init__   s   
zWorkbookParser.__init__c                 C   s(   | j d u rt| jt| j | _ | j S r   )_relsr   r   r   r   to_dict)r   r   r   r   rels$   s   
zWorkbookParser.relsc                 C   s   | j | j}t|}t|}|jjrt| j	_
|jj| j	_|j| j	_|j| j	_|j| _|j| j	_|j| _| js;g |_|jD ]}| j|j}| j	jt| j |j q>|jr[|j| _|j | j	_!d S r   )"r   readr   r   r   	from_tree
propertiesdate1904r   r   epochcodeName	code_nameactive	bookViewsviewsr   calcPrcalculationpivotCachescachesr   externalReferencesr   getid_external_linksappendr
   TargetdefinedNamesr   workbookProtectionsecurity)r   srcnodepackageext_refrelr   r   r   parse+   s*   




zWorkbookParser.parsec                 c   sH    | j D ]}|jsdd d|j}t| q|| j|j fV  qdS )z
        Find all sheets in the workbook and return the link to the source file.

        Older XLSM files sometimes contain invalid sheet elements.
        Warn user when these are removed.
        z+File contains an invalid specification for r   z. This will be removedN)r   r/   formatnamer   r   )r   sheetmsgr   r   r   find_sheetsI   s   
zWorkbookParser.find_sheetsc              
   C   s   | j   D ]p\}}|dkr|| j_ qz| jj| }W n ty-   td| d Y qw | D ]D\}}|j}|du rC||j |< q2|dkrVt	|j
}|j|_|j|_q2|dkrvz	t	|j
|_W q2 tyu   td|j
 d Y q2w q2qdS )	zX
        Bind defined names and other definitions to worksheets or the workbook
        globalzDefined names for sheet index z cannot be locatedNPrint_Titles
Print_Areaz*Print area cannot be set to Defined name: .)r   by_sheetitemsr   _sheets
IndexErrorr   is_reservedr   from_stringvaluerows_print_rowscols_print_colsr   _print_area	TypeError)r   idxnamesr>   r=   defnreservedtitlesr   r   r   assign_namesY   s8   
zWorkbookParser.assign_namesc                 C   sT   i }| j D ]"}t| j| j|jtd}|jr"t| j|j|jt}||_|||j	< q|S )z(
        Get PivotCache objects
        )r/   cls)
r,   r   r   r   r/   r   depsr   recordscacheId)r   dccacherZ   r   r   r   pivot_cachesy   s   
zWorkbookParser.pivot_caches)T)__name__
__module____qualname__r   r   propertyr   r;   r@   rW   r_   r   r   r   r   r      s    
	
 r   N)warningsr   openpyxl.xml.functionsr   openpyxl.packaging.relationshipr   r   r   openpyxl.packaging.workbookr   openpyxl.workbookr   openpyxl.workbook.defined_namer	   (openpyxl.workbook.external_link.externalr
   openpyxl.pivot.cacher   openpyxl.pivot.recordr   !openpyxl.worksheet.print_settingsr   r   openpyxl.utils.datetimer   r   r   r   r   r   <module>   s   