o
    �?ƒZÖ  ã                   @   sÎ   d dl mZ 	 d dlmZ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mZmZ d dlmZ d d	lmZmZ d
d„ Zde Zde Zde Zde Zde Zde ZG dd„ deƒZdS )é    )Úabsolute_import)ÚrangeÚ
deprecated)ÚText)Ú	iterparseÚsafe_iterator)ÚSHEET_MAIN_NS)Ú	Worksheet)Úcolumn_index_from_stringÚget_column_letterÚcoordinate_to_tuple)ÚSheetDimension)ÚReadOnlyCellÚ
EMPTY_CELLc                 C   s†   t | dƒrd S d  } } }}dt }dt }t| ||gd�}|D ]\}}	|	j|kr4t |	¡}
|
j  S |	j|kr< d S |	 ¡  q!d S )NÚencodeú{%s}dimensionz{%s}sheetData)Útag)Úhasattrr   r   r   r   Ú	from_treeÚ
boundariesÚclear)ÚsourceÚmin_rowÚmin_colÚmax_rowÚmax_colÚDIMENSION_TAGÚDATA_TAGÚitÚ_eventÚelementÚdim© r"   úN/var/www/html/env/lib/python3.10/site-packages/openpyxl/worksheet/read_only.pyÚread_dimension   s   





ør$   z{%s}rowz{%s}cz{%s}vz{%s}fz{%s}isr   c                   @   s  e Zd ZdZdZdZd ZZdd„ Zdd„ Z	e
dd„ ƒZejd	d„ ƒZed
ƒdd„ ƒZdd„ Zd(dd„Zdd„ Ze
dd„ ƒZdd„ Zd)dd„Zdd„ Ze
dd„ ƒZejdd„ ƒZe
dd „ ƒZejd!d „ ƒZe
d"d#„ ƒZejd$d#„ ƒZe
d%d&„ ƒZejd'd&„ ƒZdS )*ÚReadOnlyWorksheetNé   c                 C   sr   || _ || _d | _|| _|| _|j| _|| _t| jƒ}|d ur)|\| _	| _
| _| _tj | ¡| _tj | ¡| _d S ©N)ÚparentÚtitleÚ_current_rowÚworksheet_pathÚshared_stringsÚexcel_base_dateÚ	base_dateÚ
xml_sourcer$   Ú
min_columnr   Ú
max_columnr   r	   ÚcellÚ__get__Ú	iter_rows)ÚselfÚparent_workbookr)   r+   r/   r,   Ú
dimensionsr"   r"   r#   Ú__init__@   s   
zReadOnlyWorksheet.__init__c                 C   s   t j | ¡}||ƒS r'   )r	   Ú__getitem__r3   )r5   ÚkeyÚmethr"   r"   r#   r9   R   s   zReadOnlyWorksheet.__getitem__c                 C   s    | j du r| jj | j¡S | j S )z4Parse xml source on demand, default to Excel archiveN)Ú_xmlr(   Ú_archiveÚopenr+   ©r5   r"   r"   r#   r/   X   s   
zReadOnlyWorksheet.xml_sourcec                 C   ó
   || _ d S r'   )r<   ©r5   Úvaluer"   r"   r#   r/   `   ó   
zUse ws.iter_rows()c                 C   s   |   ||||¡S r'   )Ú_cells_by_row)r5   r   r   r   r   r"   r"   r#   Úget_squared_rangee   s   z#ReadOnlyWorksheet.get_squared_rangec                 c   sÒ   � |durt dd„ t||d ƒD ƒƒ}ng }|}t| jtgdd�}|D ]C\}}	|	jtkrft|	 d|¡ƒ}
|dur?|
|kr? dS t||
ƒD ]	}|d7 }|V  qD||
krbt | j|	|||d�ƒV  |d7 }|	 	¡  q#dS )	zt
        The source worksheet file may have columns or rows missing.
        Missing cells will be created.
        Nc                 s   s   � | ]}t V  qd S r'   )r   )Ú.0Úcolumnr"   r"   r#   Ú	<genexpr>p   s   € z2ReadOnlyWorksheet._cells_by_row.<locals>.<genexpr>r&   T)r   Úremove_blank_textÚr)Úrow_counter)
Útupler   r   r/   ÚROW_TAGr   ÚintÚgetÚ_get_rowr   )r5   r   r   r   r   Ú	empty_rowrK   Úpr   r    Úrow_idr"   r"   r#   rD   j   s(   €
€îzReadOnlyWorksheet._cells_by_rowc                 c   sT  � |}t | jddƒ}t|tƒD ]‚}| d¡}|rt|ƒ\}	}
n||}	}
|dur.|
|kr. nd||
kr�||
k rDtt||ƒ|
ƒD ]}tV  q>| dd¡}t	| dd¡ƒ}d}| 
t¡}|durf|sfd	}d
| }n|dkr|| t¡}|dur{t |¡}|j}n| 
t¡p‚d}t| |	|
|||ƒV  |
d }q|dur¦tt||ƒ|d ƒD ]}tV  q dS dS )z"Return cells from a particular rowÚ	data_onlyFrJ   NÚtÚnÚsr   Úfz=%sÚ	inlineStrr&   )Úgetattrr(   r   ÚCELL_TAGrO   r   r   Úmaxr   rN   ÚfindtextÚFORMULA_TAGÚfindÚ
INLINE_TAGr   r   ÚcontentÚ	VALUE_TAGr   )r5   r    r   r   rK   Úcol_counterrT   r2   Ú
coordinateÚrowrG   Ú	data_typeÚstyle_idrB   ÚformulaÚchildÚrichtextÚ_r"   r"   r#   rP   ‹   sJ   €





€ÿ
þzReadOnlyWorksheet._get_rowc                 C   s*   |   ||||¡D ]
}|r|d   S qtS )z4Cells are returned by a generator which can be emptyr   )rD   r   )r5   re   rG   r"   r"   r#   Ú	_get_cell»   s
   ÿzReadOnlyWorksheet._get_cellc                 C   ó   |   ¡ S r'   ©r4   r?   r"   r"   r#   ÚrowsÃ   s   zReadOnlyWorksheet.rowsc                 C   rm   r'   rn   r?   r"   r"   r#   Ú__iter__È   s   zReadOnlyWorksheet.__iter__Fc                 C   sF   t | j| jgƒs|r|  ¡  ntdƒ‚dt| jƒ| jt| jƒ| jf S )Nz9Worksheet is unsized, use calculate_dimension(force=True)z	%s%d:%s%d)Úallr1   r   Ú_calculate_dimensionÚ
ValueErrorr   r0   r   )r5   Úforcer"   r"   r#   Úcalculate_dimensionÌ   s   
þz%ReadOnlyWorksheet.calculate_dimensionc                 C   s<   d}| j D ]}|s
q|d }t||jƒ}q|j| _|| _dS )z€
        Loop through all the cells to get the size of a worksheet.
        Do this only if it is explicitly requested.
        r   éÿÿÿÿN)ro   r\   rG   re   r   r1   )r5   r   rJ   r2   r"   r"   r#   rr   Ø   s   

z&ReadOnlyWorksheet._calculate_dimensionc                 C   ó   | j S r'   ©Ú_min_rowr?   r"   r"   r#   r   é   ó   zReadOnlyWorksheet.min_rowc                 C   r@   r'   rx   rA   r"   r"   r#   r   í   rC   c                 C   rw   r'   ©Ú_max_rowr?   r"   r"   r#   r   ò   rz   zReadOnlyWorksheet.max_rowc                 C   r@   r'   r{   rA   r"   r"   r#   r   ö   rC   c                 C   rw   r'   ©Ú_min_columnr?   r"   r"   r#   r0   û   rz   zReadOnlyWorksheet.min_columnc                 C   r@   r'   r}   rA   r"   r"   r#   r0   ÿ   rC   c                 C   rw   r'   ©Ú_max_columnr?   r"   r"   r#   r1     rz   zReadOnlyWorksheet.max_columnc                 C   r@   r'   r   rA   r"   r"   r#   r1   	  rC   )r&   NN)F)Ú__name__Ú
__module__Ú__qualname__r<   r~   ry   r€   r|   r8   r9   Úpropertyr/   Úsetterr   rE   rD   rP   rl   ro   rp   ru   rr   r   r   r0   r1   r"   r"   r"   r#   r%   9   sJ    



!0








r%   N) Ú
__future__r   Úopenpyxl.compatr   r   Úopenpyxl.cell.textr   Úopenpyxl.xml.functionsr   r   Úopenpyxl.xml.constantsr   Úopenpyxl.worksheetr	   Úopenpyxl.utilsr
   r   r   Úopenpyxl.worksheet.dimensionsr   Úopenpyxl.cell.read_onlyr   r   r$   rM   r[   rb   r^   r`   r   Úobjectr%   r"   r"   r"   r#   Ú<module>   s$    