
    MwgM                     b    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 Z G d	 d
      Zy)z Read worksheets on-demand
   )	Worksheet    )ReadOnlyCell
EMPTY_CELL)get_column_letter)WorkSheetParser)DefinedNameDictc                 :    t        | g       }|j                         S N)r   parse_dimensions)sourceparsers     T/var/www/horilla/myenv/lib/python3.12/site-packages/openpyxl/worksheet/_read_only.pyread_dimensionr      s    VR(F""$$    c                   (   e Zd ZdZdZdxZZej                  Zej                  Z	ej                  Z
ej                  Zej                  Zej                  Zd Zd Zd ZddZddZd Zdd	Zd
 Zd Zed        Zed        Zed        Zed        Zy)ReadOnlyWorksheetr   Nc                     || _         || _        d| _        d | _        || _        || _        | j                          t               | _        y )Nvisible)	parenttitlesheet_state_current_row_worksheet_path_shared_strings	_get_sizer	   defined_names)selfparent_workbookr   worksheet_pathshared_stringss        r   __init__zReadOnlyWorksheet.__init__#   sE    %
$ --,.r   c                     | j                         }t        |g       }|j                         }|j                          ||\  | _        | _        | _        | _        y y r   )_get_sourcer   r   close_min_column_min_row_max_column_max_row)r   srcr   
dimensionss       r   r   zReadOnlyWorksheet._get_size.   sV      b),,.
		!OYLDdmT-=t} "r   c                 `    | j                   j                  j                  | j                        S )z0Parse xml source on demand, must close after use)r   _archiveopenr   r   s    r   r$   zReadOnlyWorksheet._get_source7   s#    {{##(()=)=>>r   c           	   #     K   t         }|rd}|xs | j                  }|xs | j                  }g }||f|dz   |z
  z  }|}d}	| j                         5 }
t	        |
| j
                  | j                  j                  | j                  j                  | j                  j                  | j                  j                        }|j                         D ]K  \  }	}||	|kD  r n?t        ||	      D ]  }|dz  }|  ||	k  s/| j                  ||||      }|dz  }| M ddd       |||	k  rt        ||dz         D ]  }|  yyy# 1 sw Y   +xY ww)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   r1   r2   _date_formats_timedelta_formatsparserange_get_row)r   min_colmin_rowmax_colr6   values_onlyfiller	empty_rowcounteridxr*   r   row_s                 r   _cells_by_rowzReadOnlyWorksheet._cells_by_row<   sw    
 F,T__)T\\		Wq[7%:;I 	3$S%)%9%9/3{{/D/D+/;;+<+<26++2K2K7;{{7U7UWF #LLN S&3= w, $AqLG#O$
 c>--Wg{KCqLGI	. 7S=7GAI.    $1/	 	s%   AEB*E<E*EE
Ec                     |s|sy|xs |d   d   }|dz   |z
  }t         g|z  }|rdg|z  }|D ]5  }|d   }||cxk  r|k  sn ||z
  }	|d   ||	<   |r't        | fi |||	<   7 t        |      S )zT
        Make sure a row contains always the same number of cells or values
         columnr   Nvalue)r   r   tuple)
r   rD   r<   r>   r?   	row_widthnew_rowcellrB   rC   s
             r   r;   zReadOnlyWorksheet._get_rowi   s     7/c"gh/aK')	,*fy(G 	>D8nG',W,'#G}"#/#=#=GCL	> W~r   c                 R    | j                  ||||      D ]  }|s|d   c S  t        S )z4Cells are returned by a generator which can be emptyr   )rF   r   )r   rD   rJ   s      r   	_get_cellzReadOnlyWorksheet._get_cell   s6    %%fc63? 	C1v	 r   c                 
   t        | j                  | j                  g      s|r| j                          nt	        d      t        | j                         | j                   dt        | j                         | j                   S )Nz9Worksheet is unsized, use calculate_dimension(force=True):)allr5   r6   _calculate_dimension
ValueErrorr   
min_columnr=   )r   forces     r   calculate_dimensionz%ReadOnlyWorksheet.calculate_dimension   so    DOOT\\23))+ !\]]#DOO45dll^1EVW[WfWfEgDhimiuiuhvwwr   c                     d}| j                   D ]   }|s|d   }t        ||j                        }" j                  | _        || _        y)z
        Loop through all the cells to get the size of a worksheet.
        Do this only if it is explicitly requested.
        r   rI   N)rowsmaxrJ   rD   r)   r(   )r   r>   rrO   s       r   rU   z&ReadOnlyWorksheet._calculate_dimension   sP      	0AR5D'4;;/G		0 "r   c                      dx| _         | _        y)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/   s    r   reset_dimensionsz"ReadOnlyWorksheet.reset_dimensions   s     ,0/(r   c                     | j                   S r   )r'   r/   s    r   r=   zReadOnlyWorksheet.min_row       }}r   c                     | j                   S r   )r)   r/   s    r   r6   zReadOnlyWorksheet.max_row   ra   r   c                     | j                   S r   )r&   r/   s    r   rW   zReadOnlyWorksheet.min_column       r   c                     | j                   S r   )r(   r/   s    r   r5   zReadOnlyWorksheet.max_column   rd   r   )F)r   NF)__name__
__module____qualname__r&   r'   r(   r)   r   rO   	iter_rowsvaluesr[   __getitem____iter__r"   r   r$   rF   r;   rQ   rY   rU   r_   propertyr=   r6   rW   r5   rH   r   r   r   r      s    KH!!K( >>D##IF>>D''K!!H/Z?
* Z2x#"0            r   r   N)__doc__	worksheetr   openpyxl.cell.read_onlyr   r   openpyxl.utilsr   _readerr   openpyxl.workbook.defined_namer	   r   r   rH   r   r   <module>rt      s,    ! < , $ :%
k  k r   