o
    ˷e                     @   s   d Z ddlmZ ddlmZmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZmZ 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 ZG dd dZdS )z2Write the workbook global settings to the archive.    )copy)absolute_coordinatequote_sheetname)ARC_APPARC_COREARC_WORKBOOK
PKG_REL_NSCUSTOMUI_NSARC_ROOT_RELS)tostring
fromstring)RelationshipRelationshipList)DefinedName)ExternalReference)
ChildSheetWorkbookPackage
PivotCache)WorkbookProperties)CALENDAR_MAC_1904c                 C   s`   dd t | jD }|std| j}| j}|r|jdkr|S ||d D ]}|| _|  S dS )z~
    Return the index of the active sheet.
    If the sheet set to active is hidden return the next visible sheet or None
    c                 S   s   g | ]\}}|j d kr|qS )visible)sheet_state).0idxsheet r   P/var/www/ideatree/venv/lib/python3.10/site-packages/openpyxl/workbook/_writer.py
<listcomp>   s    z$get_active_sheet.<locals>.<listcomp>z"At least one sheet must be visibler   N)	enumerate_sheets
IndexError_active_sheet_indexactiver   )wbvisible_sheetsr   r   r   r   r   get_active_sheet   s   r%   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )WorkbookWriterc                 C   s.   || _ t | _t | _|j| j_|j| j_d S )N)	r#   r   relsr   packagesecurityworkbookProtectioncalculationcalcPr)selfr#   r   r   r   __init__1   s
   
zWorkbookWriter.__init__c                 C   s:   t  }| jjd ur| jj|_| jjtkrd|_|| j_d S )NT)	r   r#   	code_namecodeNameexcel_base_dater   date1904r(   
workbookPr)r-   propsr   r   r   write_properties9   s   
zWorkbookWriter.write_propertiesc                 C   s   t | jjdD ]9\}}t|j|d|d}t|j|jd}| j	
| |jdks9t| jjdkr5td|j|_| jj
| qd S )N   zrId{0})namesheetIdidtypeTargetr   z1The only worksheet of a workbook cannot be hidden)r   r#   r   r   titleformatr   	_rel_typepathr'   appendr   len
ValueErrorstater(   sheets)r-   r   r   
sheet_noderelr   r   r   write_worksheetsC   s   
zWorkbookWriter.write_worksheetsc                 C   sX   | j jD ]%}t| j jd }t|j|jd}| j| t|j	d}| j
j| qd S )Nr6   r:   )r9   )r#   _external_linksrB   r'   r   r?   r@   rA   r   r9   r(   externalReferences)r-   linkrIdrG   extr   r   r   
write_refsP   s   zWorkbookWriter.write_refsc                    s   t | jj}t| jjD ]]\}  jj}|r.td|dd}dt	 j
t||_||  jrMtd|d}d fdd	 jdD |_||  jritd
|d}d fdd	 jD |_|| q|| j_d S )N_FilterDatabaseT)r7   localSheetIdhidden{0}!{1}Print_Titles)r7   rP   ,c                       g | ]}d  t j|qS rR   r>   r   r=   r   rr   r   r   r   k       z.WorkbookWriter.write_names.<locals>.<listcomp>
Print_Areac                    rU   rV   rW   rX   rZ   r   r   r   r   r[   )r   r#   defined_namesr   
worksheetsauto_filterrefr   r>   r   r=   r   valuerA   print_titlesjoinsplit
print_arear(   definedNames)r-   r]   r   r_   r7   r   rZ   r   write_namesZ   s.   





zWorkbookWriter.write_namesc                 C   sp   t  }| jjD ].}|j|vr5||j t|jd}| jj	| t
|jj|jjd}| j	| |j|_qd S )N)cacheIdTyper<   )setr#   _pivotscacheaddr   rh   r(   pivotCachesrA   r   rel_typer@   r'   r9   )r-   pivot_cachespivotcrG   r   r   r   write_pivotsy   s   
zWorkbookWriter.write_pivotsc                 C   s0   t | j}| jjr|| jjd _| jj| j_d S )Nr   )r%   r#   views	activeTabr(   	bookViews)r-   r"   r   r   r   write_views   s   
zWorkbookWriter.write_viewsc                 C   s>   |    |   |   |   |   |   t| j S )zWrite the core workbook xml.)	r5   rH   rg   rt   rx   rN   r   r(   to_tree)r-   r   r   r   write   s   zWorkbookWriter.writec                 C   sd   t ddd}| j| t ddd}| j| | jjr+t ddd}d|_| j| t| j S )	z%Write the workbook relationships xml.stylesz
styles.xmlr:   themeztheme/theme1.xml zvbaProject.binzAhttp://schemas.microsoft.com/office/2006/relationships/vbaProject)r   r'   rA   r#   vba_archiverj   r   ry   )r-   r{   r|   vbar   r   r   
write_rels   s   zWorkbookWriter.write_relsc                 C   s   t  }tdtd}|| tt dtd}|| tdtd}|| | jjdurHt	| jj
t}t |}|tD ]}|| q@t| S )zWrite the package relationshipsofficeDocumentr:   z/metadata/core-propertiesri   zextended-propertiesN)r   r   r   rA   r   r   r   r#   r~   r   readr
   	from_treefindr	   r   ry   )r-   r'   rG   xml	root_relsr   r   r   write_root_rels   s   



zWorkbookWriter.write_root_relsN)__name__
__module____qualname__r.   r5   rH   rN   rg   rt   rx   rz   r   r   r   r   r   r   r&   /   s    

r&   N) __doc__r   openpyxl.utilsr   r   openpyxl.xml.constantsr   r   r   r   r	   r
   openpyxl.xml.functionsr   r   openpyxl.packaging.relationshipr   r   openpyxl.workbook.defined_namer   $openpyxl.workbook.external_referencer   openpyxl.packaging.workbookr   r   r   openpyxl.workbook.propertiesr   openpyxl.utils.datetimer   r%   r&   r   r   r   r   <module>   s    