o
    ðäj÷?  ã                   @   s�  d 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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 ddlmZmZ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+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB de ZCd e ZDd!e ZEd"e ZFd#e ZGd$e ZHd%e ZId&e ZJd'e ZKd(e ZLd)e ZMd*e ZNd+e ZOd,e ZPd-e ZQd.e ZRd/e ZSd0e ZTd1e ZUd2e ZVd3e ZWd4e ZXd5e ZYd6e ZZd7e Z[d8e Z\d9e Z]d:e Z^d;d<„ Z_d=d>„ Z`G d?d@„ d@ƒZaG dAdB„ dBƒZbdCS )DzReader for a single worksheet.é    )Úcopy)Úwarn)Ú	iterparse)ÚCellÚ
MergedCell)ÚText)ÚColumnDimensionÚRowDimensionÚSheetFormatProperties)ÚSHEET_MAIN_NSÚ	EXT_TYPES)ÚConditionalFormatting)Ú
Translator)Úget_column_letterÚcoordinate_to_tuple)Ú
from_excelÚfrom_ISO8601ÚWINDOWS_EPOCH)ÚExtensionList)ÚCellRichTexté   )ÚDataTableFormulaÚArrayFormula)Ú
AutoFilter)ÚHeaderFooter)ÚHyperlinkList)Ú
MergeCells)ÚPageMarginsÚPrintOptionsÚPrintPageSetup)ÚRowBreakÚColBreak)ÚSheetProtection)ÚScenarioList)ÚSheetViewList)ÚDataValidationList)ÚTablePartList)ÚWorksheetProperties)ÚSheetDimension)ÚRelatedz{%s}cz{%s}vz{%s}fz{%s}mergeCellsz{%s}isz{%s}colz{%s}rowz{%s}conditionalFormattingz{%s}legacyDrawingz{%s}sheetProtectionz
{%s}extLstz{%s}hyperlinksz{%s}tablePartsz{%s}printOptionsz{%s}pageMarginsz{%s}pageSetupz{%s}headerFooterz{%s}autoFilterz{%s}dataValidationsz{%s}sheetPrz{%s}sheetViewsz{%s}sheetFormatPrz{%s}rowBreaksz{%s}colBreaksz{%s}scenariosz{%s}sheetDataz{%s}dimensionz{%s}customSheetViewsc                 C   s(   d| v sd| v sd| v rt | ƒS t| ƒS )z,Convert numbers as string to an int or floatÚ.ÚEÚe)ÚfloatÚint)Úvalue© r0   ú^/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/openpyxl/worksheet/_reader.pyÚ_cast_numberP   s   r2   c                 C   s4   t  | ¡pd}t|ƒdkrt|d tƒr|d }|S )z?
    Parse inline string and preserve rich text formatting
    Ú r   r   )r   Ú	from_treeÚlenÚ
isinstanceÚstr)Úelementr/   r0   r0   r1   Úparse_richtext_stringW   s   r9   c                   @   sŒ   e Zd Zdeeƒ eƒ df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S )ÚWorkSheetParserFc                 C   s–   d  | _ | _|| _|| _|| _|| _i | _d | _| _t	ƒ | _
|| _|| _i | _i | _g | _d| _tƒ | _g | _d | _d | _tƒ | _tƒ | _|| _d S )Nr   F)Úmin_rowÚmin_colÚepochÚsourceÚshared_stringsÚ	data_onlyÚshared_formulaeÚrow_counterÚcol_counterr&   ÚtablesÚdate_formatsÚtimedelta_formatsÚrow_dimensionsÚcolumn_dimensionsÚnumber_formatsÚkeep_vbar   Ú
hyperlinksÚ
formattingÚlegacy_drawingÚmerged_cellsr    Ú
row_breaksr!   Ú
col_breaksÚ	rich_text)ÚselfÚsrcr?   r@   r=   rE   rF   rQ   r0   r0   r1   Ú__init__c   s*   
zWorkSheetParser.__init__c           
      c   s:  � t | jt| jt| jt| jt| j	t
| jt| jt| ji}tdtftdtftdtftdtftdtftdtftdtftdtft d	t!ft"d
t#ft$dt%ft&dt'ft(dt)fi}t*| j+ƒ}|D ]B\}}|j,}||v rn|| |ƒ | -¡  qX||v rŠ|| }|d  .|¡}t/| |d |ƒ | -¡  qX|t0krš|  1|¡}	| -¡  |	V  qXd S )NÚprint_optionsÚpage_marginsÚ
page_setupr   Úauto_filterÚdata_validationsÚsheet_propertiesÚviewsÚsheet_formatÚ	scenariosrD   rK   rN   r   r   )2ÚCOL_TAGÚparse_column_dimensionsÚPROT_TAGÚparse_sheet_protectionÚEXT_TAGÚparse_extensionsÚCF_TAGÚparse_formattingÚ
LEGACY_TAGÚparse_legacyÚROW_BREAK_TAGÚparse_row_breaksÚCOL_BREAK_TAGÚparse_col_breaksÚCUSTOM_VIEWS_TAGÚparse_custom_viewsÚ	PRINT_TAGr   ÚMARGINS_TAGr   ÚPAGE_TAGr   Ú
HEADER_TAGr   Ú
FILTER_TAGr   ÚVALIDATION_TAGr%   ÚPROPERTIES_TAGr'   Ú	VIEWS_TAGr$   Ú
FORMAT_TAGr
   ÚSCENARIOS_TAGr#   Ú	TABLE_TAGr&   ÚHYPERLINK_TAGr   Ú	MERGE_TAGr   r   r>   ÚtagÚclearr4   ÚsetattrÚROW_TAGÚ	parse_row)
rR   Ú
dispatcherÚ
propertiesÚitÚ_r8   Útag_nameÚpropÚobjÚrowr0   r0   r1   Úparse}   sR   €øó



€ózWorkSheetParser.parsec                 C   sR   t | jƒ}|D ]\}}|jtkrt |¡}|j  S |jtkr" dS | ¡  qdS )z@
        Get worksheet dimensions if they are provided.
        N)	r   r>   r{   ÚDIMENSION_TAGr(   r4   Ú
boundariesÚDATA_TAGr|   )rR   r‚   Ú_eventr8   Údimr0   r0   r1   Úparse_dimensions¬   s   





øz WorkSheetParser.parse_dimensionsc           
   	   C   s¸  |  dd¡}|  d¡}|  dd¡}|rt|ƒ}|dkrd }n| td ¡p%d }|r2t|ƒ\}}|| _n|  jd7  _| j| j}}| jsR| t	¡d urRd}|  
|¡}n‚|d ur·|dkr�t|ƒ}|| jv r�d	}zt|| j|| jv d
�}W na ttfyŽ   d|› d|› d�}t|ƒ d}d}Y nFw nD|dkrœ| jt|ƒ }n8|dkr§tt|ƒƒ}n-|dkr®d}n&|d	kr¶t|ƒ}n|dkrÔ| t¡}	|	d urÔd}| jrÎt|	ƒ}nt |	¡j}|||||dœS )NÚtÚnÚrÚsr   Ú	inlineStrr   ÚfÚd)Ú	timedeltazCell z* is marked as a date but the serial value zG is outside the limits for dates. The cell will be treated as an error.r,   z#VALUE!Úbr7   )r‡   Úcolumnr/   Ú	data_typeÚstyle_id)Úgetr.   ÚfindtextÚ	VALUE_TAGr   rC   rB   r@   ÚfindÚFORMULA_TAGÚparse_formular2   rE   r   r=   rF   ÚOverflowErrorÚ
ValueErrorr   r?   Úboolr   ÚINLINE_STRINGrQ   r9   r   r4   Úcontent)
rR   r8   r™   Ú
coordinaterš   r/   r‡   r˜   ÚmsgÚchildr0   r0   r1   Ú
parse_cell½   sb   


ÿüú€

zWorkSheetParser.parse_cellc                 C   sÀ   |  t¡}| d¡}| d¡}d}|jdur||j7 }|dkr*t| d¡|d�}|S |dkrR| d	¡}|| jv rD| j| }| |¡}|S |dkrPt||ƒ| j|< |S |d
kr^tdi |j	¤Ž}|S )zC
        possible formulae types: shared, array, datatable
        r�   r‘   ú=NÚarrayÚref)r¬   ÚtextÚsharedÚsiÚ	dataTabler0   )
rž   rŸ   r›   r­   r   rA   Útranslate_formular   r   Úattrib)rR   r8   ÚformulaÚformula_typer¦   r/   ÚidxÚtransr0   r0   r1   r    ÷   s*   




õ



úýzWorkSheetParser.parse_formulac                 C   s0   t |jƒ}tt|d ƒƒ}||d< || j|< d S )NÚminÚindex)Údictr²   r   r.   rH   )rR   ÚcolÚattrsr˜   r0   r0   r1   r_     s   
z'WorkSheetParser.parse_column_dimensionsc                    sÄ   t |jƒ}d|v r5z	t|d ƒˆ _W n) ty4   t|d ƒ}| ¡ r)t|ƒˆ _n	t|d › d�ƒ‚Y nw ˆ  jd7  _dˆ _dd„ |D ƒ}|ddh rT|ˆ jt	ˆ jƒ< ‡ fdd	„|D ƒ}ˆ j|fS )
Nr‘   z is not a valid row numberr   r   c                 S   s   h | ]	}|  d ¡s|’qS )Ú{)Ú
startswith)Ú.0Úkr0   r0   r1   Ú	<setcomp>*  s    z,WorkSheetParser.parse_row.<locals>.<setcomp>Úspansc                    s   g | ]}ˆ   |¡‘qS r0   )r©   )r¾   Úel©rR   r0   r1   Ú
<listcomp>/  s    z-WorkSheetParser.parse_row.<locals>.<listcomp>)
r¹   r²   r.   rB   r¢   r-   Ú
is_integerrC   rG   r7   )rR   r‡   r»   ÚvalÚkeysÚcellsr0   rÃ   r1   r     s$   
þý
zWorkSheetParser.parse_rowc              
   C   sV   zt  |¡}| j |¡ W d S  ty* } zd|› �}t|ƒ W Y d }~d S d }~ww )NzKFailed to load a conditional formatting rule. It will be discarded. Cause: )r   r4   rL   ÚappendÚ	TypeErrorr   )rR   r8   Úcfr,   r§   r0   r0   r1   re   3  s   

€þz WorkSheetParser.parse_formattingc                 C   s2   t  |¡}| d¡}|d ur| |d¡ || _d S )NÚpasswordT)r"   r4   r›   Úset_passwordÚ
protection)rR   r8   rÎ   rÌ   r0   r0   r1   ra   <  s
   


z&WorkSheetParser.parse_sheet_protectionc                 C   s>   t  |¡}|jD ]}t |j ¡ d¡}d |¡}t|ƒ qd S )NÚUnknownz2{0} extension is not supported and will be removed)	r   r4   Úextr   r›   ÚuriÚupperÚformatr   )rR   r8   ÚextLstr,   Úext_typer§   r0   r0   r1   rc   D  s   



ýz WorkSheetParser.parse_extensionsc                 C   s   t  |¡}|j| _d S ©N)r)   r4   ÚidrM   )rR   r8   r†   r0   r0   r1   rg   L  s   
zWorkSheetParser.parse_legacyc                 C   ó   t  |¡}|| _d S rÖ   )r    r4   rO   ©rR   r8   Úbrkr0   r0   r1   ri   Q  ó   

z WorkSheetParser.parse_row_breaksc                 C   rØ   rÖ   )r!   r4   rP   rÙ   r0   r0   r1   rk   V  rÛ   z WorkSheetParser.parse_col_breaksc                 C   s   t ƒ | _tƒ | _d S rÖ   )r    rO   r!   rP   )rR   r8   r0   r0   r1   rm   [  s   z"WorkSheetParser.parse_custom_viewsN)Ú__name__Ú
__module__Ú__qualname__r   ÚsetrT   rˆ   rŽ   r©   r    r_   r   re   ra   rc   rg   ri   rk   rm   r0   r0   r0   r1   r:   a   s$    
þ/:	r:   c                   @   sh   e Zd 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d„ ZdS )ÚWorksheetReaderz4
    Create a parser and apply it to a workbook
    c                 C   s2   || _ t||||jj|jj|jj|ƒ| _g | _d S rÖ   )Úwsr:   Úparentr=   Ú_date_formatsÚ_timedelta_formatsÚparserrD   )rR   rá   Ú
xml_sourcer?   r@   rQ   r0   r0   r1   rT   g  s   þ
zWorksheetReader.__init__c                 C   s’   | j  ¡ D ]5\}}|D ].}| jjj|d  }t| j|d |d |d�}|d |_|d |_|| jj|d |d f< qq| jjrG| jj	| j_
d S d S )Nrš   r‡   r˜   )r‡   r˜   Ústyle_arrayr/   r™   )rå   rˆ   rá   râ   Ú_cell_stylesr   Ú_valuer™   Ú_cellsÚmax_rowÚ_current_row)rR   rµ   r‡   ÚcellÚstyleÚcr0   r0   r1   Ú
bind_cellso  s   

ûÿzWorksheetReader.bind_cellsc                 C   sF   | j jD ]}|jD ]}|jd ur| jjj|j |_|| jj|< q	qd S rÖ   )	rå   rL   ÚrulesÚdxfIdrá   râ   Ú_differential_stylesÚdxfÚconditional_formatting)rR   rË   Úruler0   r0   r1   Úbind_formatting|  s   

ýÿzWorksheetReader.bind_formattingc                 C   s2   | j jjD ]}| jj |j¡}| j |j¡ qd S rÖ   )	rå   rD   Ú	tablePartrá   Ú_relsr›   r×   rÉ   ÚTarget)rR   r�   Úrelr0   r0   r1   Úbind_tables„  s   þzWorksheetReader.bind_tablesc                 C   sl   ddl m} ddlm} | jjsd S g }| jjjD ]}|| j|jƒ}| j 	|¡ | 
|¡ q||ƒ| j_d S )Nr   )ÚMultiCellRange)ÚMergedCellRange)Úopenpyxl.worksheet.cell_rangerý   Úopenpyxl.worksheet.mergerþ   rå   rN   Ú	mergeCellrá   r¬   Ú_clean_merge_rangerÉ   )rR   rý   rþ   ÚrangesÚcrÚmcrr0   r0   r1   Úbind_merged_cellsŠ  s   z!WorksheetReader.bind_merged_cellsc                 C   s¢   | j jjD ]I}|jr| jj |j¡}|j|_d|j	v r:| j|j	 D ]}|D ]}zt
|ƒ|_W q% ty7   Y q%w q!q| j|j	 }t|tƒrK|  |j¡}||_qd S )Nú:)rå   rK   Ú	hyperlinkr×   rá   rù   r›   rú   Útargetr¬   r   ÚAttributeErrorr6   r   Únormalize_merged_cell_linkr¦   )rR   Úlinkrû   r‡   rí   r0   r0   r1   Úbind_hyperlinks˜  s&   
ÿýÿ
ðzWorksheetReader.bind_hyperlinksc                 C   s0   | j jD ]}||v r| j j|jd Ž   S qdS )zš
        Returns the appropriate cell to which a hyperlink, which references a merged cell at the specified coordinates,
        should be bound.
        r   N)rá   rN   rí   Útop)rR   ÚcoordÚrngr0   r0   r1   r  «  s
   ÿÿz*WorksheetReader.normalize_merged_cell_linkc                 C   sZ   | j j ¡ D ]$\}}d|v rt|d ƒ}| jjj| |d< t| jfi |¤Ž| jj|< qd S )Nrî   )rå   rH   Úitemsr.   rá   râ   rè   r   )rR   rº   ÚcdÚkeyr0   r0   r1   Úbind_col_dimensions´  s   üz#WorksheetReader.bind_col_dimensionsc                 C   s^   | j j ¡ D ]&\}}d|v rt|d ƒ}| jjj| |d< t| jfi |¤Ž| jjt|ƒ< qd S )Nr’   )rå   rG   r  r.   rá   râ   rè   r	   )rR   r‡   Úrdr  r0   r0   r1   Úbind_row_dimensions¼  s    üz#WorksheetReader.bind_row_dimensionsc                 C   s2   dD ]}t | j|d ƒ}|d urt| j||ƒ qd S )N)rU   rV   rW   r   rX   rY   rZ   r[   r\   rO   rP   r]   rM   rÎ   )Úgetattrrå   r}   rá   )rR   r¿   Úvr0   r0   r1   Úbind_propertiesÄ  s   €øzWorksheetReader.bind_propertiesc                 C   sD   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  d S rÖ   )rð   r  r  r÷   r  r  rü   r  rÃ   r0   r0   r1   Úbind_allÐ  s   zWorksheetReader.bind_allN)rÜ   rÝ   rÞ   Ú__doc__rT   rð   r÷   rü   r  r  r  r  r  r  r  r0   r0   r0   r1   rà   b  s    	rà   N)cr  r   Úwarningsr   Úopenpyxl.xml.functionsr   Úopenpyxl.cellr   r   Úopenpyxl.cell.textr   Úopenpyxl.worksheet.dimensionsr   r	   r
   Úopenpyxl.xml.constantsr   r   Úopenpyxl.formatting.formattingr   Úopenpyxl.formula.translater   Úopenpyxl.utilsr   r   Úopenpyxl.utils.datetimer   r   r   Úopenpyxl.descriptors.excelr   Úopenpyxl.cell.rich_textr   r³   r   r   Úfiltersr   Úheader_footerr   r  r   Úmerger   Úpager   r   r   Ú	pagebreakr    r!   rÎ   r"   Úscenarior#   r[   r$   Údatavalidationr%   Útabler&   r�   r'   Ú
dimensionsr(   Úrelatedr)   ÚCELL_TAGr�   rŸ   rz   r¤   r^   r~   rd   rf   r`   rb   ry   rx   rn   ro   rp   rq   rr   rs   rt   ru   rv   rh   rj   rw   r‹   r‰   rl   r2   r9   r:   rà   r0   r0   r0   r1   Ú<module>   s~   
  