
    MhM                        S SK Jr  S SKrS SKJrJrJr  S SKrS SK	J
r
  S SKJr  S SKJr  S SKJrJr  S SKJrJr  \(       a  S S	KJr  S S
KJr  S SKJrJrJrJrJrJr   " S S\5      r  " S S\S   5      r!g)    )annotationsN)TYPE_CHECKINGAnycast)import_optional_dependency)doc)_shared_docs)BaseExcelReaderExcelWriter)combine_kwargsvalidate_freeze_panesWorkbook)Serialisable)ExcelWriterIfSheetExistsFilePath
ReadBufferScalarStorageOptionsWriteExcelBufferc                  j  ^  \ rS rSrSrSr       S                 SU 4S jjjr\SS j5       r\SS j5       r	SS jr
\SS j5       r\S	 5       r\S
 5       r\S 5       r\SS j5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r    S         SS jjrSrU =r$ )OpenpyxlWriter(   openpyxl)z.xlsxz.xlsmc	                  > SSK Jn
  [        X5      n[        TU ]  UUUUUS9  SU R
                  ;   aO  SSKJn   U" U R                  R                  40 UD6U l
        U R                  R                  R                  S5        g  U
" S0 UD6U l
        U R                  R                  (       a3  U R                  R!                  U R                  R                  S   5        g g ! [         a&    U R                  R                  R                  5         e f = f! [         a&    U R                  R                  R                  5         e f = f)Nr   r   )modestorage_optionsif_sheet_existsengine_kwargsr+load_workbook )openpyxl.workbookr   r   super__init___moder   r"   _handleshandle_book	TypeErrorcloseseekbook
worksheetsremove)selfpathenginedate_formatdatetime_formatr   r   r   r   kwargsr   r"   	__class__s               K/var/www/html/env/lib/python3.13/site-packages/pandas/io/excel/_openpyxl.pyr&   OpenpyxlWriter.__init__,   s    	/&}=++' 	 	
 4::.*4==+?+?Q=Q
 MM  %%a(%66

 yy##		  !5!5a!89 $  $$**,  $$**,s   "C  D  0D0Ec                    U R                   $ )zt
Book instance of class openpyxl.workbook.Workbook.

This attribute can be used to access engine-specific features.
r*   r1   s    r8   r.   OpenpyxlWriter.book[   s     zz    c                v    U R                   R                   Vs0 s H  oU R                   U   _M     nnU$ s  snf )z(Mapping of sheet names to sheet objects.)r.   
sheetnames)r1   nameresults      r8   sheetsOpenpyxlWriter.sheetsd   s:     59II4H4HI4HD		$'4HI Js   6c                4   U R                   R                  U R                  R                  5        SU R                  ;   aY  [        U R                  R                  [        R                  5      (       d%  U R                  R                  R                  5         ggg)z
Save workbook to disk.
r    N)r.   saver(   r)   r'   
isinstancemmaptruncater<   s    r8   _saveOpenpyxlWriter._savej   sc     			t}}++,4::j1E1Etyy&Q&QMM  ))+ 'Rr>   c                    SS0n0 nUR                  5        H<  u  pEUR                  XD5      n[        U SU 3S 5      nU" U5      nU(       d  M8  XsU'   M>     U$ )a)  
Convert a style_dict to a set of kwargs suitable for initializing
or updating-on-copy an openpyxl v2 style object.

Parameters
----------
style_dict : dict
    A dict with zero or more of the following keys (or their synonyms).
        'font'
        'fill'
        'border' ('borders')
        'alignment'
        'number_format'
        'protection'

Returns
-------
style_kwargs : dict
    A dict with the same, normalized keys as ``style_dict`` but each
    value has been replaced with a native openpyxl style object of the
    appropriate class.
bordersborder_convert_to_c                    g Nr#   )xs    r8   <lambda>9OpenpyxlWriter._convert_to_style_kwargs.<locals>.<lambda>   s    Dr>   )itemsgetgetattr)cls
style_dict_style_key_mapstyle_kwargskv
_conv_to_xnew_vs           r8   _convert_to_style_kwargs'OpenpyxlWriter._convert_to_style_kwargss   sj    0 $X.02$$&DA""1(A QC&8.IJqMEu"'Q ' r>   c                X    SSK Jn  [        U[        5      (       a  U" U5      $ U" S0 UD6$ )aW  
Convert ``color_spec`` to an openpyxl v2 Color object.

Parameters
----------
color_spec : str, dict
    A 32-bit ARGB hex string, or a dict with zero or more of the
    following keys.
        'rgb'
        'indexed'
        'auto'
        'theme'
        'tint'
        'index'
        'type'

Returns
-------
color : openpyxl.styles.Color
r   )Colorr#   )openpyxl.stylesrc   rG   str)rX   
color_specrc   s      r8   _convert_to_color OpenpyxlWriter._convert_to_color   s-    , 	*j#&&$$&:&&r>   c                    SSK Jn  SSSSSSS	.n0 nUR                  5        H1  u  pVUR                  XU5      nUS
:X  a  U R	                  U5      nXdU'   M3     U" S0 UD6$ )a  
Convert ``font_dict`` to an openpyxl v2 Font object.

Parameters
----------
font_dict : dict
    A dict with zero or more of the following keys (or their synonyms).
        'name'
        'size' ('sz')
        'bold' ('b')
        'italic' ('i')
        'underline' ('u')
        'strikethrough' ('strike')
        'color'
        'vertAlign' ('vertalign')
        'charset'
        'scheme'
        'family'
        'outline'
        'shadow'
        'condense'

Returns
-------
font : openpyxl.styles.Font
r   )Fontsizebolditalic	underlinestrikethrough	vertAlign)szbiustrike	vertaligncolorr#   )rd   rj   rU   rV   rg   )rX   	font_dictrj   _font_key_mapfont_kwargsr\   r]   s          r8   _convert_to_fontOpenpyxlWriter._convert_to_font   sz    8 	) %$
 OO%DA!!!'AG|))!,N	 & "k""r>   c                .    [        U R                  U5      $ )a=  
Convert ``stop_seq`` to a list of openpyxl v2 Color objects,
suitable for initializing the ``GradientFill`` ``stop`` parameter.

Parameters
----------
stop_seq : iterable
    An iterable that yields objects suitable for consumption by
    ``_convert_to_color``.

Returns
-------
stop : list of openpyxl.styles.Color
)maprg   )rX   stop_seqs     r8   _convert_to_stopOpenpyxlWriter._convert_to_stop   s      3(((33r>   c                   SSK JnJn  SSSSSSS.nSS0n0 n0 nUR                  5        Hw  u  pUR	                  U5      n
UR	                  U5      nU
S;   a  U R                  U	5      n	US	:X  a  U R                  U	5      n	U
(       a  XU
'   Mb  U(       a  XU'   Mo  XU'   XU'   My      U" S
0 UD6$ ! [         a    U" S
0 UD6s $ f = f)a  
Convert ``fill_dict`` to an openpyxl v2 Fill object.

Parameters
----------
fill_dict : dict
    A dict with one or more of the following keys (or their synonyms),
        'fill_type' ('patternType', 'patterntype')
        'start_color' ('fgColor', 'fgcolor')
        'end_color' ('bgColor', 'bgcolor')
    or one or more of the following keys (or their synonyms).
        'type' ('fill_type')
        'degree'
        'left'
        'right'
        'top'
        'bottom'
        'stop'

Returns
-------
fill : openpyxl.styles.Fill
r   )GradientFillPatternFill	fill_typestart_color	end_color)patternTypepatterntypefgColorfgcolorbgColorbgcolortype)r   r   stopr#   )rd   r   r   rU   rV   rg   r   r+   )rX   	fill_dictr   r   _pattern_fill_key_map_gradient_fill_key_mappfill_kwargsgfill_kwargsr\   r]   pkgks               r8   _convert_to_fillOpenpyxlWriter._convert_to_fill   s    2	
 '&$$""!
 #.v!6OO%DA&**1-B'++A.B11))!,V|((+#$R #$R "#Q"#Q &	0... 	0/,//	0s   &B. .CCc                    SSK Jn  SS0n[        U[        5      (       a  U" US9$ 0 nUR	                  5        H1  u  pVUR                  XU5      nUS:X  a  U R                  U5      nXdU'   M3     U" S0 UD6$ )a6  
Convert ``side_spec`` to an openpyxl v2 Side object.

Parameters
----------
side_spec : str, dict
    A string specifying the border style, or a dict with zero or more
    of the following keys (or their synonyms).
        'style' ('border_style')
        'color'

Returns
-------
side : openpyxl.styles.Side
r   )Sideborder_stylestyle)r   rw   r#   )rd   r   rG   re   rU   rV   rg   )rX   	side_specr   _side_key_mapside_kwargsr\   r]   s          r8   _convert_to_sideOpenpyxlWriter._convert_to_side5  s    " 	)'1i%%i((OO%DA!!!'AG|))!,N	 & "k""r>   c                    SSK Jn  SSS.n0 nUR                  5        HH  u  pVUR                  XU5      nUS:X  a  U R	                  U5      nUS;   a  U R                  U5      nXdU'   MJ     U" S0 UD6$ )	a  
Convert ``border_dict`` to an openpyxl v2 Border object.

Parameters
----------
border_dict : dict
    A dict with zero or more of the following keys (or their synonyms).
        'left'
        'right'
        'top'
        'bottom'
        'diagonal'
        'diagonal_direction'
        'vertical'
        'horizontal'
        'diagonalUp' ('diagonalup')
        'diagonalDown' ('diagonaldown')
        'outline'

Returns
-------
border : openpyxl.styles.Border
r   )Border
diagonalUpdiagonalDown)
diagonalupdiagonaldownrw   )leftrighttopbottomdiagonalr#   )rd   r   rU   rV   rg   r   )rX   border_dictr   _border_key_mapborder_kwargsr\   r]   s          r8   _convert_to_border!OpenpyxlWriter._convert_to_borderV  s    2 	+)5~V%%'DA##A)AG|))!,BB((+ ! ( &&&r>   c                    SSK Jn  U" S0 UD6$ )ah  
Convert ``alignment_dict`` to an openpyxl v2 Alignment object.

Parameters
----------
alignment_dict : dict
    A dict with zero or more of the following keys (or their synonyms).
        'horizontal'
        'vertical'
        'text_rotation'
        'wrap_text'
        'shrink_to_fit'
        'indent'
Returns
-------
alignment : openpyxl.styles.Alignment
r   )	Alignmentr#   )rd   r   )rX   alignment_dictr   s      r8   _convert_to_alignment$OpenpyxlWriter._convert_to_alignment~  s    & 	.*>**r>   c                    US   $ )z
Convert ``number_format_dict`` to an openpyxl v2.1.0 number format
initializer.

Parameters
----------
number_format_dict : dict
    A dict with zero or more of the following keys.
        'format_code' : str

Returns
-------
number_format : str
format_coder#   )rX   number_format_dicts     r8   _convert_to_number_format(OpenpyxlWriter._convert_to_number_format  s      "-00r>   c                    SSK Jn  U" S0 UD6$ )z
Convert ``protection_dict`` to an openpyxl v2 Protection object.

Parameters
----------
protection_dict : dict
    A dict with zero or more of the following keys.
        'locked'
        'hidden'

Returns
-------
r   )
Protectionr#   )rd   r   )rX   protection_dictr   s      r8   _convert_to_protection%OpenpyxlWriter._convert_to_protection  s     	/,O,,r>   c           	     2   U R                  U5      n0 nX R                  ;   a  U R                  S:w  a  SU R                  ;   a  U R                  S:X  aS  U R                  U   nU R                  R                  U5      nU R                  U	 U R                  R                  X(5      n	OU R                  S:X  a  [        SU S35      eU R                  S:X  a  U R                  U   n	OI[        SU R                   S	35      eU R                  U   n	O U R                  R                  5       n	X)l        [        U5      (       a>  [        [        [        [        4   U5      nU	R                  US
   S-   US   S-   S9U	l        U GH  n
U	R                  X:R                  -   S-   XJR                   -   S-   S9nU R#                  U
R$                  5      u  Ul        nU(       a  Xl        0 nU
R*                  (       aH  [-        U
R*                  5      nUR/                  U5      nUc  U R1                  U
R*                  5      nXU'   U(       a&  UR3                  5        H  u  nn[5        XU5        M     U
R6                  c  M  U
R8                  c  GM	  U	R;                  X:R                  -   S-   XJR                   -   S-   XJR8                  -   S-   X:R6                  -   S-   S9  U(       d  GMa  X:R                  -   S-   nX:R6                  -   S-   nXJR                   -   S-   nXJR8                  -   S-   n[=        UUS-   5       H]  n[=        UUS-   5       HG  nUU:X  a  UU:X  a  M  U	R                  UUS9nUR3                  5        H  u  nn[5        XU5        M     MI     M_     GM     g )Nnewr    replaceerrorzSheet 'z7' already exists and if_sheet_exists is set to 'error'.overlay'z^' is not valid for if_sheet_exists. Valid options are 'error', 'new', 'replace' and 'overlay'.r      )rowcolumn)	start_rowstart_column
end_columnend_row)r   r   )_get_sheet_namerC   _if_sheet_existsr'   r.   indexcreate_sheet
ValueErrortitler   r   tupleintcellfreeze_panesr   col_value_with_fmtvalvaluenumber_formatr   re   rV   r`   rU   setattr
mergestartmergeendmerge_cellsrange)r1   cells
sheet_namestartrowstartcolr   _style_cacheold_wkstarget_indexwksr   xcellfmtr[   keyr\   r]   	first_rowlast_row	first_collast_colr   r   s                          r8   _write_cellsOpenpyxlWriter._write_cells  s]    ))*5
;=$)>)>%)Gtzz!((I5"kk*5G#'99??7#;L		*-))00JC**g5$!* .= >  **i7++j1C$D112 3U U 
 kk*-))((*C"I ..c3h>L"xx Oa'Q!0C  (  C DHHxx'!+Hxx4G!4K  E  $33DHH=EK&)#;=Lzz$**o+//4'#'#@#@#LL(4%(..0DAqEa( 1 *t}}/H&1A5!)HH!4q!8'--7!;$6:	     < (88 3a 7I'//9A=H (88 3a 7I'--7!;H$Y1=#(HqL#AC"i/C94D ($'HHCSH$AE(4(:(:(<1 '! 4 )= $B  >K r>   r;   )NNNwNNN)r2   z)FilePath | WriteExcelBuffer | ExcelWriterr3   
str | Noner4   r   r5   r   r   re   r   StorageOptions | Noner   zExcelWriterIfSheetExists | Noner   zdict[str, Any] | NonereturnNone)r   r   )r   dict[str, Any])r   r   )rY   dictr   zdict[str, Serialisable])r   r   )Nr   r   N)
r   r   r   r   r   r   r   ztuple[int, int] | Noner   r   )__name__
__module____qualname____firstlineno___engine_supported_extensionsr&   propertyr.   rC   rJ   classmethodr`   rg   r{   r   r   r   r   r   r   r   r   __static_attributes____classcell__r7   s   @r8   r   r   (   s   G.
 ""&&*15;?/3-:7-: -:  	-:
 $-: -: /-: 9-: --: 
-: -:^    
, ! !F ' '8 -# -#^ 4 4" <0 <0| # #@ %' %'N + +, 1 1" - -* "&/3X5 X5 	X5
 X5 -X5 
X5 X5r>   r   c                     ^  \ rS rSr\" \S   S9  S       SU 4S jjj5       r\SS j5       r    SS jr	\SS j5       r
SS jrSS	 jrSS
 jr S   SS jjrSrU =r$ )OpenpyxlReaderi  r   )r   c                :   > [        S5        [        TU ]	  UUUS9  g)z
Reader using openpyxl engine.

Parameters
----------
filepath_or_buffer : str, path object or Workbook
    Object to be parsed.
{storage_options}
engine_kwargs : dict, optional
    Arbitrary keyword arguments passed to excel engine.
r   )r   r   N)r   r%   r&   )r1   filepath_or_bufferr   r   r7   s       r8   r&   OpenpyxlReader.__init__  s(    $ 	#:.+' 	 	
r>   c                    SSK Jn  U$ )Nr   r   )r   r   )r1   r   s     r8   _workbook_classOpenpyxlReader._workbook_class/  s
    %r>   c                0    SSK Jn  SSSS.nU" U40 XB-  D6$ )Nr   r!   TF)	read_only	data_only
keep_links)r   r"   )r1   r  r   r"   default_kwargss        r8   r"   OpenpyxlReader.load_workbook5  s.     	+'+$eT
-
 	
r>   c                l    U R                   R                   Vs/ s H  oR                  PM     sn$ s  snf rQ   )r.   r/   r   )r1   sheets     r8   sheet_namesOpenpyxlReader.sheet_namesA  s(    )-)=)=>)=)=>>>s   1c                B    U R                  U5        U R                  U   $ rQ   )raise_if_bad_sheet_by_namer.   )r1   rA   s     r8   get_sheet_by_name OpenpyxlReader.get_sheet_by_nameE  s    ''-yyr>   c                V    U R                  U5        U R                  R                  U   $ rQ   )raise_if_bad_sheet_by_indexr.   r/   )r1   r   s     r8   get_sheet_by_index!OpenpyxlReader.get_sheet_by_indexI  s%    ((/yy##E**r>   c                   SSK JnJn  UR                  c  gUR                  U:X  a  [
        R                  $ UR                  U:X  a;  [        UR                  5      nXAR                  :X  a  U$ [        UR                  5      $ UR                  $ )Nr   )
TYPE_ERRORTYPE_NUMERIC )	openpyxl.cell.cellr   r!  r   	data_typenpnanr   float)r1   r   r   r!  r   s        r8   _convert_cellOpenpyxlReader._convert_cellM  sl    	

 ::^^z)66M^^|+djj/Cjj 
$$zzr>   c                   U R                   R                  (       a  UR                  5         / nSn[        UR                  5       H  u  pVU Vs/ s H  opR                  U5      PM     nnU(       a+  US   S:X  a"  UR                  5         U(       a  US   S:X  a  M"  U(       a  UnUR                  U5        Uc  Mv  [        U5      U:  d  M    O   US US-    n[        U5      S:  aN  [        S U 5       5      n	[        S U 5       5      U	:  a&  S/n
U Vs/ s H  nX[        U5      -
  U
-  -   PM     nnU$ s  snf s  snf )Nr"  r   r   c              3  8   #    U  H  n[        U5      v   M     g 7frQ   len.0data_rows     r8   	<genexpr>0OpenpyxlReader.get_sheet_data.<locals>.<genexpr>w  s     ?$hCMM$   c              3  8   #    U  H  n[        U5      v   M     g 7frQ   r-  r/  s     r8   r2  r3  x  s     6X3x==r4  )r.   r  reset_dimensions	enumeraterowsr(  popappendr.  maxmin)r1   r  file_rows_neededdatalast_row_with_data
row_numberr   r   converted_row	max_width
empty_cellr1  s               r8   get_sheet_dataOpenpyxlReader.get_sheet_data_  sA    99""$#%(4OJBEF#$//5#MFM"$5$;!!#  M"$5$; %/"KK&+D	=M0M  5 ,(1,-t9q=?$??I666B,.4
 %)$( CM 9ZGG$(  
 / G$s   D7D<r#   )NN)r  FilePath | ReadBuffer[bytes]r   r   r   zdict | Noner   r   )r   ztype[Workbook])r  rF  r   r   )r   z	list[str])rA   re   )r   r   )r   r   rQ   )r=  z
int | Noner   zlist[list[Scalar]])r   r   r   r   r   r	   r&   r   r  r"   r  r  r  r(  rD  r  r  r  s   @r8   r  r    s    &789 26%)	
8
 /
 #	

 

 :
0  


">

	

 ? ?+& 59 '1 	   r>   r  r   )"
__future__r   rH   typingr   r   r   numpyr%  pandas.compat._optionalr   pandas.util._decoratorsr   pandas.core.shared_docsr	   pandas.io.excel._baser
   r   pandas.io.excel._utilr   r   r   r   !openpyxl.descriptors.serialisabler   pandas._typingr   r   r   r   r   r   r   r  r#   r>   r8   <module>rQ     sd    "    > ' 0
 !> j5[ j5Zj_Z0 jr>   