o
    ðäjM  ã                   @   s^   d 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	„ ZG d
d„ dƒZdS )z Read worksheets on-demand
é   )Ú	Worksheeté    )ÚReadOnlyCellÚ
EMPTY_CELL)Úget_column_letter)ÚWorkSheetParser)ÚDefinedNameDictc                 C   s   t | g ƒ}| ¡ S ©N)r   Úparse_dimensions)ÚsourceÚparser© r   úa/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/openpyxl/worksheet/_read_only.pyÚread_dimension   s   
r   c                   @   s¾   e Zd ZdZdZd ZZejZej	Z	ej
Z
ejZejZejZdd„ Zdd„ Zdd„ Zdd
d„Zddd„Zdd„ Zddd„Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdS ) ÚReadOnlyWorksheetr   Nc                 C   s8   || _ || _d| _d | _|| _|| _|  ¡  tƒ | _d S )NÚvisible)	ÚparentÚtitleÚsheet_stateÚ_current_rowÚ_worksheet_pathÚ_shared_stringsÚ	_get_sizer   Údefined_names)ÚselfÚparent_workbookr   Úworksheet_pathÚshared_stringsr   r   r   Ú__init__#   s   zReadOnlyWorksheet.__init__c                 C   sF   |   ¡ }t|g ƒ}| ¡ }| ¡  |d ur!|\| _| _| _| _d S d S r	   )Ú_get_sourcer   r
   ÚcloseÚ_min_columnÚ_min_rowÚ_max_columnÚ_max_row)r   Úsrcr   Ú
dimensionsr   r   r   r   .   s   
ÿzReadOnlyWorksheet._get_sizec                 C   s   | j j | j¡S )z0Parse xml source on demand, must close after use)r   Ú_archiveÚopenr   ©r   r   r   r   r   7   s   zReadOnlyWorksheet._get_sourceFc              	   c   s6  � t }|rd}|p| j}|p| j}g }|dur |f|d |  }|}d}	|  ¡ �P}
t|
| j| jj| jj| jj	| jj
d�}| ¡ D ]0\}	}|durN|	|krN n#t||	ƒD ]	}|d7 }|V  qS||	krp|  ||||¡}|d7 }|V  q@W d  ƒ n1 s{w   Y  |dur•||	k r—t||d ƒD ]	}|V  q�dS dS dS )zt
        The source worksheet file may have columns or rows missing.
        Missing cells will be created.
        Nr   )Ú	data_onlyÚepochÚdate_formatsÚtimedelta_formats)r   Ú
max_columnÚmax_rowr   r   r   r   r*   r+   Ú_date_formatsÚ_timedelta_formatsÚparseÚrangeÚ_get_row)r   Úmin_colÚmin_rowÚmax_colr/   Úvalues_onlyÚfillerÚ	empty_rowÚcounterÚidxr%   r   ÚrowÚ_r   r   r   Ú_cells_by_row<   sH   €


û€ëþzReadOnlyWorksheet._cells_by_rowc           
      C   sž   |s|sdS |p|d d }|d | }t g| }|r dg| }|D ](}|d }||  kr2|krJn q"|| }	|d ||	< |sJt| fi |¤Ž||	< q"t|ƒS )zT
        Make sure a row contains always the same number of cells or values
        r   éÿÿÿÿÚcolumnr   NÚvalue)r   r   Útuple)
r   r=   r5   r7   r8   Ú	row_widthÚnew_rowÚcellr;   r<   r   r   r   r4   i   s    

€zReadOnlyWorksheet._get_rowc                 C   s*   |   ||||¡D ]
}|r|d   S qtS )z4Cells are returned by a generator which can be emptyr   )r?   r   )r   r=   rA   r   r   r   Ú	_get_cell‚   s
   ÿzReadOnlyWorksheet._get_cellc                 C   sL   t | j| jgƒs|r|  ¡  ntdƒ‚t| jƒ› | j› dt| jƒ› | j› �S )Nz9Worksheet is unsized, use calculate_dimension(force=True)ú:)Úallr.   r/   Ú_calculate_dimensionÚ
ValueErrorr   Ú
min_columnr6   )r   Ú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   r@   N)ÚrowsÚmaxrA   r=   r$   r#   )r   r7   ÚrrF   r   r   r   rJ   “   s   

z&ReadOnlyWorksheet._calculate_dimensionc                 C   s   d | _ | _dS )zÈ
        Remove worksheet dimensions if these are incorrect in the worksheet source.
        NB. This probably indicates a bug in the library or application that created
        the workbook.
        N)r$   r#   r)   r   r   r   Úreset_dimensions¤   s   z"ReadOnlyWorksheet.reset_dimensionsc                 C   ó   | j S r	   )r"   r)   r   r   r   r6   ­   ó   zReadOnlyWorksheet.min_rowc                 C   rS   r	   )r$   r)   r   r   r   r/   ²   rT   zReadOnlyWorksheet.max_rowc                 C   rS   r	   )r!   r)   r   r   r   rL   ·   rT   zReadOnlyWorksheet.min_columnc                 C   rS   r	   )r#   r)   r   r   r   r.   ¼   rT   zReadOnlyWorksheet.max_column)F)r   NF)Ú__name__Ú
__module__Ú__qualname__r!   r"   r#   r$   r   rF   Ú	iter_rowsÚvaluesrO   Ú__getitem__Ú__iter__r   r   r   r?   r4   rG   rN   rJ   rR   Úpropertyr6   r/   rL   r.   r   r   r   r   r      s6    	

-
		


r   N)Ú__doc__Ú	worksheetr   Úopenpyxl.cell.read_onlyr   r   Úopenpyxl.utilsr   Ú_readerr   Úopenpyxl.workbook.defined_namer   r   r   r   r   r   r   Ú<module>   s   