Ë
    ¤2Úiˆ  ã                   óŒ  — d Z ddlZddlmZ ddlmZ  ej                  d«      ZdZdZ	d	Z
 ej                  d
e
z   dz   ej                  «      ZdZ ej                  dj                  ee
«      ej                  «      Zd„ Zd„ Zd„ Zd„ Zi Zi Z edd«      D ]  Z ee«      Zeee<   eee<   Œ d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z y)zT
Collection of utilities used within the package and also available for client code
é    N)Údigitsé   )ÚCellCoordinatesExceptionz^[$]?([A-Za-z]{1,3})[$]?(\d+)$z[A-Z]{1,3}:[A-Z]{1,3}:z\d+:\d+:zq
[$]?(?P<min_col>[A-Za-z]{1,3})?
[$]?(?P<min_row>\d+)?
(:[$]?(?P<max_col>[A-Za-z]{1,3})?
[$]?(?P<max_row>\d+)?)?
ú^ú$z7
(('(?P<quoted>([^']|'')*)')|(?P<notquoted>[^'^ ^!]*))!z{0}(?P<cells>{1})(?=,?)c                 óÄ   — t        | t        «      rt        | «      } t        |t        «      rt        |«      }t        | |dz   «      D �cg c]  }t	        |«      ‘Œ c}S c c}w )z¤
    Given the start and end columns, return all the columns in the series.

    The start and end columns can be either column letters or 1-based
    indexes.
    r   )Ú
isinstanceÚstrÚcolumn_index_from_stringÚrangeÚget_column_letter)ÚstartÚendÚxs      úJ/var/www/html/acx/venv/lib/python3.12/site-packages/openpyxl/utils/cell.pyÚget_column_intervalr      sQ   € ô �%œÔÜ(¨Ó/ˆÜ�#”sÔÜ& sÓ+ˆÜ*/°°s¸Q±wÓ*?Ö@ QÔ˜aÕ Ò@Ð@ùÒ@s   ÁAc                 ó¼   — t         j                  | «      }|sd| › d�}t        |«      ‚|j                  «       \  }}t	        |«      }|sd| › d�}t        |«      ‚||fS )z;Convert a coordinate string like 'B12' to a tuple ('B', 12)zInvalid cell coordinates (ú)zThere is no row 0 ()ÚCOORD_REÚmatchr   ÚgroupsÚint)Úcoord_stringr   ÚmsgÚcolumnÚrows        r   Úcoordinate_from_stringr   *   sj   € ä�N‰N˜<Ó(€EÙØ*¨<¨.¸Ð:ˆÜ& sÓ+Ð+Ø—,‘,“.�K€FˆCÜ
ˆc‹(€CÙØ# L >°Ð3ˆÜ& sÓ+Ð+Ø�3ˆ;Ðó    c                 óö   — t         j                  | «      }|st        | › d�«      ‚|j                  d«      }|j	                  «       D ]  \  }}|sŒ	d|› �||<   Œ |d   s|d   rd}nd} |j
                  di |¤ŽS )	zDConvert a coordinate to an absolute coordinate string (B12 -> $B$12)z  is not a valid coordinate rangeÚ r   Úmax_colÚmax_rowz%{min_col}{min_row}:{max_col}{max_row}z{min_col}{min_row}© )ÚABSOLUTE_REr   Ú
ValueErrorÚ	groupdictÚitemsÚformat)r   ÚmÚdÚkÚvÚfmts         r   Úabsolute_coordinater.   8   s‹   € ä×Ñ˜,Ó'€AÙÜ˜L˜>Ð)IÐJÓKÐKà	�‰�B‹€AØ—‘“	ò ‰ˆˆ1ÚØ�q�c�7ˆAˆaŠDðð 	ˆ‚|�q˜’|Ø5‰à"ˆØˆ3�:‰:‰?˜‰?Ðr   c                 ó  — d| cxk  rdk  sn t        dj                  | «      «      ‚g }| dkD  r>t        | d«      \  } }|dk(  rd}| dz  } |j                  t	        |dz   «      «       | dkD  rŒ>dj                  t        |«      «      S )zéConvert a column number into a column letter (3 -> 'C')

    Right shift the column col_idx by 26 to find column letters in reverse
    order.  These numbers are 1-based, and can be converted to ASCII
    ordinals by adding 64.

    r   ifG  úInvalid column index {0}r   é   é@   r    )r%   r(   ÚdivmodÚappendÚchrÚjoinÚreversed)Úcol_idxÚlettersÚ	remainders      r   Ú_get_column_letterr;   J   sŽ   € ð �Ô ˜5Ô ÜÐ3×:Ñ:¸7ÓCÓDÐDØ€GØ
�AŠ+Ü# G¨RÓ0Ñˆ�à˜Š>ØˆIØ�q‰LˆGØ�‰”s˜9 R™<Ó(Ô)ð �A‹+ð �7‰7”8˜GÓ$Ó%Ð%r   igG  c                 ód   — 	 t         |    S # t        $ r t        dj                  | «      «      ‚w xY w)z?Convert a column index into a column letter
    (3 -> 'C')
    r0   )Ú_STRING_COL_CACHEÚKeyErrorr%   r(   )Úidxs    r   r   r   i   s;   € ðAÜ  Ñ%Ð%øÜò AÜÐ3×:Ñ:¸3Ó?Ó@Ð@ðAús   ‚ ‹$/c                 ó€   — 	 t         | j                  «          S # t        $ r t        dj	                  | «      «      ‚w xY w)z@Convert a column name into a numerical index
    ('A' -> 1)
    z{0} is not a valid column name)Ú_COL_STRING_CACHEÚupperr>   r%   r(   )Ústr_cols    r   r   r   s   sA   € ð
KÜ  §¡£Ñ1Ð1øÜò KÜÐ9×@Ñ@ÀÓIÓJÐJðKús   ‚ ™$=c                 ó²  — dj                  | «      }t        j                  | «      }|st        |«      ‚|j	                  «       \  }}}}}|rM||f}||f}	t        ||	z   «      s7t        |«      rt        |	«      r!t        |	«      rt        |«      rt        |«      ‚|�t        |«      }|�t        |«      }|�t        |«      }n|}|�t        |«      }n|}||||fS )z³
    Convert a range string into a tuple of boundaries:
    (min_col, min_row, max_col, max_row)
    Cell coordinates will be converted into a range with the cell at both end
    z&{0} is not a valid coordinate or range)	r(   r$   r   r%   r   ÚallÚanyr   r   )
Úrange_stringr   r)   Úmin_colÚmin_rowÚsepr!   r"   ÚcolsÚrowss
             r   Úrange_boundariesrM   ~   sç   € ð 3×
9Ñ
9¸,Ó
G€CÜ×Ñ˜,Ó'€AÙÜ˜‹oÐà./¯h©h«jÑ+€GˆW�c˜7 Gá
Ø˜ÐˆØ˜Ðˆô ��t‘ÔÜ�ŒIœc $œiÜ�ŒIœc $œiä˜S“/Ð!àÐÜ*¨7Ó3ˆàÐÜ�g“,ˆàÐÜ*¨7Ó3‰àˆàÐÜ�g“,‰àˆà�G˜W gÐ-Ð-r   c              #   óÚ   ‡K  — t        | «      \  }}}}t        ||dz   «      }t        ||dz   «      D �cg c]  }t        |«      ‘Œ }}|D ]  Št        ˆfd„|D «       «      –— Œ yc c}w ­w)ú[
    Get individual addresses for every cell in a range.
    Yields one row at a time.
    r   c              3   óB   •K  — | ]  }d j                  |‰«      –— Œ y­w©z{0}{1}N©r(   )Ú.0Úcolr   s     €r   ú	<genexpr>z"rows_from_range.<locals>.<genexpr>²   ó   øè ø€ Ò>°#�H—O‘O C¨×-Ñ>ùó   ƒN)rM   r   r   Útuple)	rG   rH   rI   r!   r"   rL   rT   rK   r   s	           @r   Úrows_from_rangerY   ©   sv   øè ø€ ô
 *:¸,Ó)GÑ&€GˆW�g˜wÜ�˜' A™+Ó&€DÜ.3°G¸WÀq¹[Ó.IÖJ sÔ˜cÕ"ÐJ€DÐJØò ?ˆÜÓ>¸Ô>Ó>Ó>ñ?ùò Kùs   ƒ1A+´A&Á%A+c              #   ó²   ‡K  — t        | «      \  }}}}t        ||dz   «      }d„ t        ||dz   «      D «       }|D ]  Št        ˆfd„|D «       «      –— Œ y­w)rO   r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r   )rS   rT   s     r   rU   z"cols_from_range.<locals>.<genexpr>¼   s   è ø€ ÒH sÔ˜c×"ÑHùs   ‚c              3   óB   •K  — | ]  }d j                  ‰|«      –— Œ y­wrQ   rR   )rS   r   rT   s     €r   rU   z"cols_from_range.<locals>.<genexpr>¾   rV   rW   N)rM   r   rX   )rG   rH   rI   r!   r"   rL   rK   rT   s          @r   Úcols_from_ranger]   µ   sa   øè ø€ ô
 *:¸,Ó)GÑ&€GˆW�g˜wÜ�˜' !™)Ó$€DÙH¬e°G¸WÀQ¹YÓ.GÔH€DØò ?ˆÜÓ>¸Ô>Ó>Ó>ñ?ùs   ƒAAc                 ó”   — t        | «      D ]  \  }}|t        v sŒ n | d j                  «       }| |d }t        |«      t        |   fS )zB
    Convert an Excel style coordinate to (row, column) tuple
    N)Ú	enumerater   rB   r   rA   )Ú
coordinater?   ÚcrT   r   s        r   Úcoordinate_to_tuplerb   Á   s^   € ô ˜JÓ'ò ‰ˆˆQØ”Š;Ùðð �T�cÐ
×
 Ñ
 Ó
"€CØ
�S�TÐ
€CÜˆs‹8Ô& sÑ+Ð+Ð+r   c                 óÎ   — t         j                  | «      }|€t        d«      ‚|j                  d«      xs |j                  d«      }|j                  d«      }t	        |«      }||fS )zc
    Convert a worksheet range to the sheetname and maximum and minimum
    coordinate indices
    z)Value must be of the form sheetname!A1:E4ÚquotedÚ	notquotedÚcells)ÚSHEETRANGE_REr   r%   ÚgrouprM   )rG   r)   Ú	sheetnamerf   Ú
boundariess        r   Úrange_to_tuplerk   Í   sd   € ô
 	×Ñ˜LÓ)€AØ€yÜÐDÓEÐEØ—‘˜Ó!Ò9 Q§W¡W¨[Ó%9€IØ�G‰G�GÓ€EÜ! %Ó(€JØ�jÐ Ð r   c                 óT   — d| v r| j                  dd«      } dj                  | «      } | S )z>
    Add quotes around sheetnames if they contain spaces.
    ú'z''z'{0}')Úreplacer(   )ri   s    r   Úquote_sheetnamero   Û   s2   € ð ˆiÑØ×%Ñ% c¨4Ó0ˆ	à—‘ 	Ó*€IØÐr   )!Ú__doc__ÚreÚstringr   Ú
exceptionsr   Úcompiler   Ú	COL_RANGEÚ	ROW_RANGEÚ
RANGE_EXPRÚVERBOSEr$   ÚSHEET_TITLEr(   rg   r   r   r.   r;   rA   r=   r   ÚirT   r   r   rM   rY   r]   rb   rk   ro   r#   r   r   ú<module>r{      s  ðñó 
Ý å 0ð ˆ2�:‰:Ð7Ó8€Ø(€	Ø€	ð€
ð ˆb�j‰j˜˜zÑ)¨3Ñ.°·
±
Ó;€ð:€à�—
‘
Ð8×?Ñ?Ø�óØ Ÿj™jó*€òAòòò$&ð. Ð ØÐ Ù	ˆq�%‹ò €AÙ
˜QÓ
€CØÐ�aÑØÐ�cÒðòAòKò(.òV	?ò	?ò	,ò!ór   