o
    ðäj+(  ã                   @   sú   d dl Z d dlmZ d dlmZ d dl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 ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZ d dl m!Z! g Z"e j#dd„ ƒZ$ddd„Z%G dd„ dƒZ&dS )é    N)Údefaultdict)ÚBytesIO)ÚNamedTemporaryFile)Úwarn)Úxmlfile)ÚSHEET_MAIN_NS)ÚCommentRecord)ÚRelationshipÚRelationshipList)ÚDifferentialStyleé   )ÚSheetDimension)ÚHyperlinkList)Ú	MergeCellÚ
MergeCells)ÚRelated)ÚTablePartList)Ú
write_cellc                  C   s$   t D ]} tj | ¡rt | ¡ qd S ©N)ÚALL_TEMP_FILESÚosÚpathÚexistsÚremove)r   © r   ú^/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/openpyxl/worksheet/_writer.pyÚ_openpyxl_shutdown   s
   
€þr   Ú c                 C   s,   t d| ddd�}|j}| ¡  t |¡ |S )Nzw+z	openpyxl.F)ÚmodeÚsuffixÚprefixÚdelete)r   ÚnameÚcloser   Úappend)r   ÚfobjÚfilenamer   r   r   Úcreate_temporary_file#   s   ÿ
r'   c                   @   s  e Zd ZdBd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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.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dS )CÚWorksheetWriterNc                 C   sJ   || _ g | j _g | j _|d u rtƒ }|| _tƒ | _|  ¡ | _t	| jƒ d S r   )
ÚwsÚ_hyperlinksÚ	_commentsr'   Úoutr
   Ú_relsÚ
get_streamÚxfÚnext)Úselfr)   r,   r   r   r   Ú__init__/   s   
zWorksheetWriter.__init__c                 C   ó   | j j}| j | ¡ ¡ d S r   )r)   Úsheet_propertiesr/   ÚsendÚto_tree)r1   Úpropsr   r   r   Úwrite_properties;   ó   z WorksheetWriter.write_propertiesc                 C   s4   t | jddƒ}|rt|ƒ ƒ}| j | ¡ ¡ dS dS )z/
        Write worksheet size if known
        Úcalculate_dimensionN)Úgetattrr)   r   r/   r5   r6   )r1   ÚrefÚdimr   r   r   Úwrite_dimensions@   s
   
þz WorksheetWriter.write_dimensionsc                 C   s,   | j jj| j j_| j j}| j | ¡ ¡ d S r   )r)   Úcolumn_dimensionsÚmax_outlineÚsheet_formatÚoutlineLevelColr/   r5   r6   )r1   Úfmtr   r   r   Úwrite_formatJ   s   zWorksheetWriter.write_formatc                 C   r3   r   )r)   Úviewsr/   r5   r6   )r1   rE   r   r   r   Úwrite_viewsP   r9   zWorksheetWriter.write_viewsc                 C   r3   r   )r)   r?   r/   r5   r6   )r1   Úcolsr   r   r   Ú
write_colsU   r9   zWorksheetWriter.write_colsc                 C   s,   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  dS )z€
        Write all elements up to rows:
        properties
        dimensions
        views
        format
        cols
        N)r8   r>   rF   rD   rH   ©r1   r   r   r   Ú	write_topZ   s
   	zWorksheetWriter.write_topc                 C   sb   t tƒ}t| jj ¡ ƒD ]\\}}}||  |¡ q| jj ¡ | ¡  D ]}g ||< q$t| ¡ ƒS )z0Return all rows, and any cells that they contain)	r   ÚlistÚsortedr)   Ú_cellsÚitemsr$   Úrow_dimensionsÚkeys)r1   ÚrowsÚrowÚcolÚcellr   r   r   rQ   j   s   
zWorksheetWriter.rowsc                 C   sf   | j  d¡}| d¡� |  ¡ D ]\}}|  |||¡ qW d   ƒ n1 s&w   Y  | j  d ¡ d S )NTÚ	sheetData)r/   r5   ÚelementrQ   Ú	write_row)r1   r/   Úrow_idxrR   r   r   r   Ú
write_rowsx   s   ÿÿzWorksheetWriter.write_rowsc                 C   s¬   d|› i}| j j}| | |i ¡¡ | d|¡�4 |D ](}|jd ur.t |¡}| j j 	|¡ |j
d u r:|js:|js:qt|| j ||jƒ qW d   ƒ d S 1 sOw   Y  d S )NÚrrR   )r)   rO   ÚupdateÚgetrV   Ú_commentr   Ú	from_cellr+   r$   Ú_valueÚ	has_styler   )r1   r/   rR   rX   ÚattrsÚdimsrT   Úcommentr   r   r   rW   ‚   s"   



ÿþö"þzWorksheetWriter.write_rowc                 C   ó$   | j j}|r| j | ¡ ¡ d S d S r   )r)   Ú
protectionr/   r5   r6   )r1   Úprotr   r   r   Úwrite_protection–   ó   ÿz WorksheetWriter.write_protectionc                 C   rd   r   )r)   Ú	scenariosr/   r5   r6   )r1   ri   r   r   r   Úwrite_scenariosœ   rh   zWorksheetWriter.write_scenariosc                 C   rd   r   )r)   Úauto_filterr/   r5   r6   )r1   Úfltr   r   r   Úwrite_filter¢   rh   zWorksheetWriter.write_filterc                 C   s   dS )z–
        As per discusion with the OOXML Working Group global sort state is not required.
        openpyxl never reads it from existing files
        Nr   rI   r   r   r   Ú
write_sort¨   s   zWorksheetWriter.write_sortc                 C   s<   | j j}|rdd„ | j jD ƒ}| j t|d� ¡ ¡ d S d S )Nc                 S   s   g | ]}t t|ƒƒ‘qS r   )r   Ústr)Ú.0r<   r   r   r   Ú
<listcomp>³   s    z6WorksheetWriter.write_merged_cells.<locals>.<listcomp>)Ú	mergeCell)r)   Úmerged_cellsr/   r5   r   r6   )r1   ÚmergedÚcellsr   r   r   Úwrite_merged_cells°   s
   þz"WorksheetWriter.write_merged_cellsc                 C   s\   t ƒ }| jj}| jjD ] }|jD ]}|jr"|j|kr"|j |j¡|_q| j	 
| ¡ ¡ qd S r   )r   r)   ÚparentÚconditional_formattingÚrulesÚdxfÚ_differential_stylesÚaddÚdxfIdr/   r5   r6   )r1   ÚdfÚwbÚcfÚruler   r   r   Úwrite_formatting·   s   
€üz WorksheetWriter.write_formattingc                 C   rd   r   )r)   Údata_validationsr/   r5   r6   )r1   Údvr   r   r   Úwrite_validationsÁ   rh   z!WorksheetWriter.write_validationsc                 C   s\   | j j}|D ]}|jrtdd|jd�}| j |¡ |j|_q|r,| j t	|ƒ 
¡ ¡ d S d S )NÚ	hyperlinkÚExternal)ÚtypeÚ
TargetModeÚTarget)r)   r*   Útargetr	   r-   r$   Úidr/   r5   r   r6   )r1   ÚlinksÚlinkÚrelr   r   r   Úwrite_hyperlinksÇ   s   €ÿz WorksheetWriter.write_hyperlinksc                 C   rd   r   )r)   Úprint_optionsr/   r5   r6   )r1   r‘   r   r   r   Úwrite_printÕ   rh   zWorksheetWriter.write_printc                 C   rd   r   )r)   Úpage_marginsr/   r5   r6   )r1   Úmarginsr   r   r   Úwrite_marginsÛ   rh   zWorksheetWriter.write_marginsc                 C   rd   r   )r)   Ú
page_setupr/   r5   r6   )r1   Úsetupr   r   r   Ú
write_pageá   rh   zWorksheetWriter.write_pagec                 C   rd   r   )r)   ÚHeaderFooterr/   r5   r6   )r1   Úhfr   r   r   Úwrite_headerç   rh   zWorksheetWriter.write_headerc                 C   s2   | j j| j jf}|D ]}|r| j | ¡ ¡ q
d S r   )r)   Ú
row_breaksÚ
col_breaksr/   r5   r6   )r1   ÚbrksÚbrkr   r   r   Úwrite_breaksí   s   €þzWorksheetWriter.write_breaksc                 C   sP   | j js| j jr&tddd�}| j |¡ tƒ }|j|_| j 	| 
d¡¡ d S d S )NÚdrawingr   )rˆ   rŠ   )r)   Ú_chartsÚ_imagesr	   r-   r$   r   rŒ   r/   r5   r6   )r1   r�   r¡   r   r   r   Úwrite_drawingsô   s   ûzWorksheetWriter.write_drawingsc                 C   s8   | j jdus
| j jrtdd�}| j | d¡¡ dS dS )zƒ
        Comments & VBA controls use VML and require an additional element
        that is no longer in the specification.
        NÚanysvml©rŒ   ÚlegacyDrawing)r)   Úlegacy_drawingr+   r   r/   r5   r6   )r1   Úlegacyr   r   r   Úwrite_legacyý   s   
þzWorksheetWriter.write_legacyc              	   C   sà   t ƒ }| jj ¡ D ]X}|jsG| ¡  |jrGz$| j|j d }t||jƒD ]\}}|j	dkr1t
dƒ t|jƒ|_q$W n tyF   t
dƒ Y nw t|jdd�}| j |¡ |j|_| t|jd�¡ q	|rn| j | ¡ ¡ d S d S )Nr   Úsz:File may not be readable: column headings must be strings.z5Column headings are missing, file may not be readabler   )ÚTyperŠ   r¦   )r   r)   ÚtablesÚvaluesÚtableColumnsÚ_initialise_columnsÚheaderRowCountr<   ÚzipÚ	data_typer   ro   Úvaluer"   Ú	TypeErrorr	   Ú	_rel_typer-   r$   ÚIdÚ_rel_idr   r/   r5   r6   )r1   r­   ÚtablerR   rT   rS   r�   r   r   r   Úwrite_tables  s,   
ýÿÿzWorksheetWriter.write_tablesc              
   c   s²   � t | jƒ�I}|jdtd��) z	 d V }|du r|V  n
|d u r!q| |¡ q ty/   Y nw W d   ƒ n1 s:w   Y  W d   ƒ d S W d   ƒ d S 1 sRw   Y  d S )NÚ	worksheet)ÚxmlnsT)r   r,   rV   r   ÚwriteÚGeneratorExit)r1   r/   Úelr   r   r   r.     s(   €
ùÿõÿ"ÿzWorksheetWriter.get_streamc                 C   s|   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  	¡  |  
¡  |  ¡  |  ¡  |  ¡  |  ¡  dS )aÉ  
        Write all elements after the rows
        calc properties
        protection
        protected ranges #
        scenarios
        filters
        sorts # always ignored
        data consolidation #
        custom views #
        merged cells
        phonetic properties #
        conditional formatting
        data validation
        hyperlinks
        print options
        page margins
        page setup
        header
        row breaks
        col breaks
        custom properties #
        cell watches #
        ignored errors #
        smart tags #
        drawing
        drawingHF #
        background #
        OLE objects #
        controls #
        web publishing #
        tables
        N)rg   rj   rm   rv   r‚   r…   r�   r’   r•   r˜   r›   r    r¤   rª   rº   rI   r   r   r   Ú
write_tail/  s   "zWorksheetWriter.write_tailc                 C   s$   |   ¡  |  ¡  |  ¡  |  ¡  dS )z
        High level
        N)rJ   rY   rÀ   r#   rI   r   r   r   r½   b  s   zWorksheetWriter.writec                 C   s   | j r
| j  ¡  dS dS )z+
        Close the context manager
        N)r/   r#   rI   r   r   r   r#   l  s   ÿzWorksheetWriter.closec                 C   sX   |   ¡  t| jtƒr| j ¡ S t| jdƒ�}| ¡ }W d  ƒ |S 1 s%w   Y  |S )zE
        Close the context manager and return serialised XML
        ÚrbN)r#   Ú
isinstancer,   r   ÚgetvalueÚopenÚread)r1   Úsrcr,   r   r   r   rÅ   t  s   


ÿýzWorksheetWriter.readc                 C   s   t  | j¡ t | j¡ dS )z!
        Remove tempfile
        N)r   r   r,   r   rI   r   r   r   Úcleanup�  s   zWorksheetWriter.cleanupr   )#Ú__name__Ú
__module__Ú__qualname__r2   r8   r>   rD   rF   rH   rJ   rQ   rY   rW   rg   rj   rm   rn   rv   r‚   r…   r�   r’   r•   r˜   r›   r    r¤   rª   rº   r.   rÀ   r½   r#   rÅ   rÇ   r   r   r   r   r(   ,   sB    



	
3
r(   )r   )'ÚatexitÚcollectionsr   Úior   r   Útempfiler   Úwarningsr   Úopenpyxl.xml.functionsr   Úopenpyxl.xml.constantsr   Úopenpyxl.comments.comment_sheetr   Úopenpyxl.packaging.relationshipr	   r
   Úopenpyxl.styles.differentialr   Ú
dimensionsr   r†   r   Úmerger   r   Úrelatedr   r¹   r   Úopenpyxl.cell._writerr   r   Úregisterr   r'   r(   r   r   r   r   Ú<module>   s,   

	