
    fhM                     j    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dS )z Read worksheets on-demand
   )	Worksheet    )ReadOnlyCell
EMPTY_CELL)get_column_letter)WorkSheetParser)DefinedNameDictc                 J    t          | g           }|                                S N)r   parse_dimensions)sourceparsers     T/var/www/histauto/venv/lib/python3.11/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dS )ReadOnlyWorksheetr   Nc                     || _         || _        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_stringss        r   __init__zReadOnlyWorksheet.__init__#   sT    %
$ --,..r   c                     |                                  }t          |g           }|                                }|                                 ||\  | _        | _        | _        | _        d S d S r   )_get_sourcer   r   close_min_column_min_row_max_column_max_row)r   srcr   
dimensionss       r   r   zReadOnlyWorksheet._get_size.   sj       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   Fc           	   #   b  K   t           }|rd}|p| j        }|p| j        }g }||f|dz   |z
  z  }|}d}	|                                 5 }
t	          |
| j        | j        j        | j        j        | j        j	        | j        j
                  }|                                D ]R\  }	}||	|k    r nDt          ||	          D ]}|dz  }|V  ||	k    r!|                     ||||          }|dz  }|V  Sddd           n# 1 swxY w Y   | ||	k     rt          ||dz             D ]
}|V  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   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<   s     
  	F,T_)T\		Wq[7%:;I 	3$S%)%9/3{/D+/;+<26+2K7;{7UW W WF #LLNN  S&3==E w,, $ $AqLG#OOOO c>>--Wg{KKCqLGIII+	 	 	 	 	 	 	 	 	 	 	 	 	 	 	. 7S==7GAI..     ==   s   B*C>>DDc                     |s|sdS |p|d         d         }|dz   |z
  }t           g|z  }|rdg|z  }|D ]<}|d         }||cxk    r|k    r%n ||z
  }	|d         ||	<   |st          | fi |||	<   =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 	2/c"gh/aK')	,* 	)fy(G 	> 	>D8nG',,,,W,,,,,'#G}" >#/#=#=#=#=GCLW~~r   c                 ^    |                      ||||          D ]}|r
|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   sE    %%fc63?? 	 	C 1vr   c                     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):)allr5   r6   _calculate_dimension
ValueErrorr   
min_columnr=   )r   forces     r   calculate_dimensionz%ReadOnlyWorksheet.calculate_dimension   s    DOT\233 	^ ^))++++ !\]]]#DO44wdlwwEVW[WfEgEgwimiuwwwr   c                     d}| j         D ]"}|s|d         }t          ||j                  }#|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   rI   N)rowsmaxrJ   rD   r)   r(   )r   r>   rrO   s       r   rU   z&ReadOnlyWorksheet._calculate_dimension   sX      	0 	0A R5D'4;//GG"r   c                 "    dx| _         | _        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/   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      sb       KH!!K( >D#IF>D'K!H/ / /Z Z Z? ? ?
*  *  *  * Z   2  x x x x# # #"0 0 0   X   X     X      X     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  k  k  k  k  k  k  k  k r   