o
    b                     @   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   X/var/www/secure340b-portal/env/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
IndexErrorZ_active_sheet_indexactiver   )wbZ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securityZworkbookProtectionZcalculationZ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"   Z	code_nameZcodeNameZexcel_base_dater   Zdate1904r&   Z
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})nameZ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&   Zsheets)r(   r   r   Z
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 )Nr,   r/   )r.   )r"   Z_external_linksr7   r%   r   r4   r5   r6   r   r.   r&   ZexternalReferences)r(   linkZrIdr:   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 )NZ_FilterDatabaseT)r-   localSheetIdhidden{0}!{1}ZPrint_Titles)r-   r?   ,c                       g | ]}d  t j|qS rA   r3   r   r2   r   rr   r   r   r   k       z.WorkbookWriter.write_names.<locals>.<listcomp>Z
Print_Areac                    rC   rD   rE   rF   rH   r   r   r   r   rI   )r   r"   defined_namesr   Z
worksheetsauto_filterrefr   r3   r   r2   r   valuer6   Zprint_titlesjoinsplitZ
print_arear&   ZdefinedNames)r(   rJ   r   rK   r-   r   rH   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Typer1   )setr"   Z_pivotscacheaddr   rQ   r&   ZpivotCachesr6   r   Zrel_typer5   r%   r.   )r(   Zpivot_cachesZpivotcr:   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"   ZviewsZ	activeTabr&   Z	bookViews)r(   r!   r   r   r   write_views   s   
zWorkbookWriter.write_viewsc                 C   s>   |    |   |   |   |   |   t| j S )zWrite the core workbook xml.)	r+   r;   rP   rX   rY   r>   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%   r6   r"   vba_archiverS   r   rZ   )r(   r\   r]   Z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 relationshipsZofficeDocumentr/   z/metadata/core-propertiesrR   zextended-propertiesN)r   r   r   r6   r   r   r   r"   r_   r   readr
   Z	from_treefindr	   r   rZ   )r(   r%   r:   xmlZ	root_relsr   r   r   write_root_rels   s   



zWorkbookWriter.write_root_relsN)__name__
__module____qualname__r)   r+   r;   r>   rP   rX   rY   r[   r`   rd   r   r   r   r   r$   /   s    

r$   N) __doc__r   Zopenpyxl.utilsr   r   Zopenpyxl.xml.constantsr   r   r   r   r	   r
   Zopenpyxl.xml.functionsr   r   Zopenpyxl.packaging.relationshipr   r   Zopenpyxl.workbook.defined_namer   Z$openpyxl.workbook.external_referencer   Zopenpyxl.packaging.workbookr   r   r   Zopenpyxl.workbook.propertiesr   Zopenpyxl.utils.datetimer   r#   r$   r   r   r   r   <module>   s    