
    Mwg?                        d Z ddlmZ ddlmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZmZ ddlm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l*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB dez  ZCd ez  ZDd!ez  ZEd"ez  ZFd#ez  ZGd$ez  ZHd%ez  ZId&ez  ZJd'ez  ZKd(ez  ZLd)ez  ZMd*ez  ZNd+ez  ZOd,ez  ZPd-ez  ZQd.ez  ZRd/ez  ZSd0ez  ZTd1ez  ZUd2ez  ZVd3ez  ZWd4ez  ZXd5ez  ZYd6ez  ZZd7ez  Z[d8ez  Z\d9ez  Z]d:ez  Z^d; Z_d< Z` G d= d>      Za G d? d@      ZbyA)BzReader for a single worksheet.    )copy)warn)	iterparse)Cell
MergedCell)Text)ColumnDimensionRowDimensionSheetFormatProperties)SHEET_MAIN_NS	EXT_TYPES)ConditionalFormatting)
Translator)get_column_lettercoordinate_to_tuple)
from_excelfrom_ISO8601WINDOWS_EPOCH)ExtensionList)CellRichText   )DataTableFormulaArrayFormula)
AutoFilter)HeaderFooter)HyperlinkList)
MergeCells)PageMarginsPrintOptionsPrintPageSetup)RowBreakColBreak)SheetProtection)ScenarioList)SheetViewList)DataValidationList)TablePartList)WorksheetProperties)SheetDimension)Relatedz{%s}cz{%s}vz{%s}fz{%s}mergeCellsz{%s}isz{%s}colz{%s}rowz{%s}conditionalFormattingz{%s}legacyDrawingz{%s}sheetProtectionz
{%s}extLstz{%s}hyperlinksz{%s}tablePartsz{%s}printOptionsz{%s}pageMarginsz{%s}pageSetupz{%s}headerFooterz{%s}autoFilterz{%s}dataValidationsz{%s}sheetPrz{%s}sheetViewsz{%s}sheetFormatPrz{%s}rowBreaksz{%s}colBreaksz{%s}scenariosz{%s}sheetDataz{%s}dimensionz{%s}customSheetViewsc                 F    d| v sd| v sd| v rt        |       S t        |       S )z,Convert numbers as string to an int or float.Ee)floatint)values    Q/var/www/horilla/myenv/lib/python3.12/site-packages/openpyxl/worksheet/_reader.py_cast_numberr3   P   s)    
e|se|se|U|u:    c                     t        j                  |       xs d}t        |      dk(  rt        |d   t              r|d   }|S )z?
    Parse inline string and preserve rich text formatting
     r   r   )r   	from_treelen
isinstancestr)elementr1   s     r2   parse_richtext_stringr<   W   s?     ""7+1rE
5zQ:eAh4aLr4   c                       e Zd Zde e        e       dfdZd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zy)WorkSheetParserFc                    d x| _         | _        || _        || _        || _        || _        i | _        dx| _        | _        t               | _
        || _        || _        i | _        i | _        g | _        d| _        t#               | _        g | _        d | _        d | _        t-               | _        t1               | _        || _        y )Nr   F)min_rowmin_colepochsourceshared_strings	data_onlyshared_formulaerow_countercol_counterr'   tablesdate_formatstimedelta_formatsrow_dimensionscolumn_dimensionsnumber_formatskeep_vbar   
hyperlinks
formattinglegacy_drawingmerged_cellsr!   
row_breaksr"   
col_breaks	rich_text)selfsrcrD   rE   rB   rJ   rK   rV   s           r2   __init__zWorkSheetParser.__init__c   s     '+*t|
,"!.//4+#o(!2 !# '/" "*"*"r4   c              #     K   t         | j                  t        | j                  t        | j
                  t        | j                  t        | j                  t        | j                  t        | j                  t        | j                  i}t         dt"        ft$        dt&        ft(        dt*        ft,        dt.        ft0        dt2        ft4        dt6        ft8        dt:        ft<        dt>        ft@        d	tB        ftD        d
tF        ftH        dtJ        ftL        dtN        ftP        dtR        fi}tU        | jV                        }|D ]  \  }}|jX                  }||v r ||   |       |j[                          2||v r:||   }|d   j]                  |      }t_        | |d   |       |j[                          p|t`        k(  sz| jc                  |      }	|j[                          |	  y w)Nprint_optionspage_margins
page_setupr   auto_filterdata_validationssheet_propertiesviewssheet_format	scenariosrI   rP   rS   r   r   )2COL_TAGparse_column_dimensionsPROT_TAGparse_sheet_protectionEXT_TAGparse_extensionsCF_TAGparse_formatting
LEGACY_TAGparse_legacyROW_BREAK_TAGparse_row_breaksCOL_BREAK_TAGparse_col_breaksCUSTOM_VIEWS_TAGparse_custom_views	PRINT_TAGr   MARGINS_TAGr   PAGE_TAGr    
HEADER_TAGr   
FILTER_TAGr   VALIDATION_TAGr&   PROPERTIES_TAGr(   	VIEWS_TAGr%   
FORMAT_TAGr   SCENARIOS_TAGr$   	TABLE_TAGr'   HYPERLINK_TAGr   	MERGE_TAGr   r   rC   tagclearr7   setattrROW_TAG	parse_row)
rW   
dispatcher
propertiesit_r;   tag_namepropobjrows
             r2   parsezWorkSheetParser.parse}   s    T11d11T**D))))400400d55	
 6.+6|^46
3/1CD/1DE/)>?K6-0L-8
3

" t{{# 	JAw{{H:%$
8$W-Z'!(+1g''0d1gs+W$nnW-		s   F1G4(Gc                     t        | j                        }|D ]`  \  }}|j                  t        k(  r#t	        j
                  |      }|j                  c S |j                  t        k(  r y|j                          b y)z@
        Get worksheet dimensions if they are provided.
        N)	r   rC   r   DIMENSION_TAGr)   r7   
boundariesDATA_TAGr   )rW   r   _eventr;   dims        r2   parse_dimensionsz WorkSheetParser.parse_dimensions   sc     t{{#! 	OFG{{m+$..w7~~%(MMO	r4   c                    |j                  dd      }|j                  d      }|j                  dd      }|rt        |      }|dk(  rd }n|j                  t        d       xs d }|rt	        |      \  }}|| _        n-| xj
                  dz  c_        | j                  | j
                  }}| j                  s)|j                  t              d}| j                  |      }n||dk(  rAt        |      }|| j                  v rd	}	 t        || j                  || j                  v 
      }n|dk(  r| j&                  t        |         }n|dk(  rt)        t        |            }nn|dk(  rd}nf|d	k(  rat+        |      }nU|dk(  rP|j                  t,              }	|	9d}| j.                  rt1        |	      }nt3        j4                  |	      j6                  }|||||dS # t         t"        f$ r d| d| d}t%        |       d}d}Y 1w xY w)Ntnrsr   	inlineStrr   fd)	timedeltazCell z* is marked as a date but the serial value zG is outside the limits for dates. The cell will be treated as an error.r.   z#VALUE!br:   )r   columnr1   	data_typestyle_id)getr0   findtext	VALUE_TAGr   rH   rG   rE   findFORMULA_TAGparse_formular3   rJ   r   rB   rK   OverflowError
ValueErrorr   rD   boolr   INLINE_STRINGrV   r<   r   r7   content)
rW   r;   r   
coordinater   r1   r   r   msgchilds
             r2   
parse_cellzWorkSheetParser.parse_cell   s
   KKS)	[[%
;;sA&8}H#E$$Y5=E-j9KC%D!**D,<,<C~~',,{";"GI&&w/EC$U+t000 #I* *!4::TE[E[9[! c!++CJ7c!SZ(e#	c!$U++%]3$ #I~~ 5e < $u 5 = =FEy]eff/ *:6 *"'
|3]^c]d  el  oS	$'	 )	*s   $G 'G?>G?c                    |j                  t              }|j                  d      }|j                  d      }d}|j                  ||j                  z  }|dk(  rt	        |j                  d      |      }|S |dk(  ra|j                  d      }|| j
                  v r"| j
                  |   }|j                  |      }|S |dk7  rt        ||      | j
                  |<   |S |d	k(  rt        d
i |j                  }|S )zC
        possible formulae types: shared, array, datatable
        r   r   =arrayref)r   textsharedsi	dataTable )
r   r   r   r   r   rF   translate_formular   r   attrib)rW   r;   formulaformula_typer   r1   idxtranss           r2   r   zWorkSheetParser.parse_formula   s    ,,{+{{3'[[%
<<#W\\!E7" W[[%7eDE  X%++d#Cd***,,S1//
;  #,6uj,I$$S)
  [($6w~~6Er4   c                     t        |j                        }t        t        |d               }||d<   || j                  |<   y )Nminindex)dictr   r   r0   rM   )rW   colattrsr   s       r2   re   z'WorkSheetParser.parse_column_dimensions  s<    SZZ "3uU|#45g).v&r4   c                 4   t        |j                        }d|v r	 t        |d         | _        n| xj                  dz  c_        d| _        |D ch c]  }|j                  d      r| }}|ddhz
  r"|| j                  t        | j                        <   |D cg c]  }| j                  |       }}| j                  |fS # t        $ rC t        |d         }|j                         rt        |      | _        nt	        |d    d      Y w xY wc c}w c c}w )Nr   z is not a valid row numberr   r   {spans)r   r   r0   rG   r   r/   
is_integerrH   
startswithrL   r:   r   )rW   r   r   valkkeyselcellss           r2   r   zWorkSheetParser.parse_row  s   SZZ %<P#&uSz?  ! :aS(9::3. 9>DD$4$4 56/23$33&&!  PE#J'>>#'*3xD$$c
|3M%NOO %P ;
 4s$   C D&DDA	DDc                     	 t        j                  |      }| j                  j                  |       y # t        $ r}d| }t        |       Y d }~y d }~ww xY w)NzKFailed to load a conditional formatting rule. It will be discarded. Cause: )r   r7   rQ   append	TypeErrorr   )rW   r;   cfr.   r   s        r2   rk   z WorkSheetParser.parse_formatting3  sP    	&009BOO""2& 	_`a_bcCII	s   03 	AAAc                     t        j                  |      }|j                  d      }||j                  |d       || _        y )NpasswordT)r#   r7   r   set_password
protection)rW   r;   r   r   s       r2   rg   z&WorkSheetParser.parse_sheet_protection<  s=    $..w7
;;z*##Hd3$r4   c                     t        j                  |      }|j                  D ]L  }t        j                  |j
                  j                         d      }dj                  |      }t        |       N y )NUnknownz2{0} extension is not supported and will be removed)	r   r7   extr   r   uriupperformatr   )rW   r;   extLstr.   ext_typer   s         r2   ri   z WorkSheetParser.parse_extensionsD  sV    ((1 	A }}QUU[[]I>HFMMhWCI	r4   c                 P    t        j                  |      }|j                  | _        y N)r*   r7   idrR   )rW   r;   r   s      r2   rm   zWorkSheetParser.parse_legacyL  s    (!ffr4   c                 <    t        j                  |      }|| _        y r   )r!   r7   rT   rW   r;   brks      r2   ro   z WorkSheetParser.parse_row_breaksQ        )r4   c                 <    t        j                  |      }|| _        y r   )r"   r7   rU   r   s      r2   rq   z WorkSheetParser.parse_col_breaksV  r   r4   c                 @    t               | _        t               | _        y r   )r!   rT   r"   rU   )rW   r;   s     r2   rs   z"WorkSheetParser.parse_custom_views[  s     #*"*r4   N)__name__
__module____qualname__r   setrY   r   r   r   r   re   r   rk   rg   ri   rm   ro   rq   rs   r   r4   r2   r>   r>   a   s\    6;$35#&5E#4,^"7gt8/'2%%


%r4   r>   c                   R    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)WorksheetReaderz4
    Create a parser and apply it to a workbook
    c           	          || _         t        ||||j                  j                  |j                  j                  |j                  j
                  |      | _        g | _        y r   )wsr>   parentrB   _date_formats_timedelta_formatsparserrI   )rW   r   
xml_sourcerD   rE   rV   s         r2   rY   zWorksheetReader.__init__g  sJ    %j.299??BII,C,C		,,i9 r4   c                    | j                   j                         D ]  \  }}|D ]|  }| j                  j                  j                  |d      }t        | j                  |d   |d   |      }|d   |_        |d   |_        || j                  j                  |d   |d   f<   ~  | j                  j                  r&| j                  j                  | j                  _
        y y )Nr   r   r   )r   r   style_arrayr1   r   )r   r   r   r   _cell_stylesr   _valuer   _cellsmax_row_current_row)rW   r   r   cellstylecs         r2   
bind_cellszWorksheetReader.bind_cellso  s    ))+ 	BHC B33D4DEd5k$x.V[\=";/@AUT(^<=B	B 77>>#'77??DGG  r4   c                 
   | j                   j                  D ]j  }|j                  D ]Y  }|j                  2| j                  j
                  j                  |j                     |_        || j                  j                  |<   [ l y r   )	r   rQ   rulesdxfIdr   r   _differential_stylesdxfconditional_formatting)rW   r   rules      r2   bind_formattingzWorksheetReader.bind_formatting|  sj    ++(( 	:B :::)#ww~~BB4::NDH59..r2:	:r4   c                     | j                   j                  j                  D ]V  }| j                  j                  j                  |j                        }| j                  j                  |j                         X y r   )	r   rI   	tablePartr   _relsr   r   r   Target)rW   r   rels      r2   bind_tableszWorksheetReader.bind_tables  sS    ##-- 	+A''--##ADD)CKKszz*	+r4   c                 X   ddl m} ddlm} | j                  j
                  sy g }| j                  j
                  j                  D ]K  } || j                  |j                        }| j                  j                  |       |j                  |       M  ||      | j                  _        y )Nr   )MultiCellRange)MergedCellRange)openpyxl.worksheet.cell_ranger  openpyxl.worksheet.merger  r   rS   	mergeCellr   r   _clean_merge_ranger   )rW   r  r  rangescrmcrs         r2   bind_merged_cellsz!WorksheetReader.bind_merged_cells  s    @<{{''++**44 	B!$''2662CGG&&s+MM#	  .f5r4   c                 $   | j                   j                  j                  D ]  }|j                  r@| j                  j
                  j                  |j                        }|j                  |_        d|j                  v r7| j                  |j                     D ]  }|D ]  }	 t        |      |_          | j                  |j                     }t        |t              r| j                  |j                        }||_         y # t        $ r Y rw xY w)N:)r   rP   	hyperlinkr   r   r  r   r  targetr   r   AttributeErrorr9   r   normalize_merged_cell_linkr   )rW   linkr  r   r   s        r2   bind_hyperlinkszWorksheetReader.bind_hyperlinks  s    KK**44 	&Dwwggmm''0!jjdhh77488, !C # !!-1$ZDN!! wwtxx(dJ/::4??KD!%!	&  . ! !s    D	D	D	c                     | j                   j                  D ].  }||v s | j                   j                  |j                  d    c S  y)z
        Returns the appropriate cell to which a hyperlink, which references a merged cell at the specified coordinates,
        should be bound.
        r   N)r   rS   r   top)rW   coordrngs      r2   r   z*WorksheetReader.normalize_merged_cell_link  sA    
 77'' 	1C|#tww||SWWQZ00	1r4   c                 &   | j                   j                  j                         D ]j  \  }}d|v r4t        |d         }| j                  j
                  j                  |   |d<   t        | j                  fi || j                  j                  |<   l y )Nr   )r   rM   itemsr0   r   r   r   r	   )rW   r   cdkeys       r2   bind_col_dimensionsz#WorksheetReader.bind_col_dimensions  s}    {{44::< 	LGC"}"W+&"ggnn99#>7-<TWW-K-KDGG%%c*		Lr4   c                 8   | j                   j                  j                         D ]s  \  }}d|v r4t        |d         }| j                  j
                  j                  |   |d<   t        | j                  fi || j                  j                  t        |      <   u y )Nr   )r   rL   r(  r0   r   r   r   r
   )rW   r   rdr*  s       r2   bind_row_dimensionsz#WorksheetReader.bind_row_dimensions  s    {{11779 	KGCby"S'l''..55c:3/;DGG/Jr/JDGG""3s8,		Kr4   c                 t    dD ]3  }t        | j                  |d       }|t        | j                  ||       5 y )N)r[   r\   r]   r   r^   r_   r`   ra   rb   rT   rU   rc   rR   r   )getattrr   r   r   )rW   r   vs      r2   bind_propertieszWorksheetReader.bind_properties  s<     	'A Q-A}A&	'r4   c                    | j                          | j                          | j                          | j                          | j	                          | j                          | j                          | j                          y r   )r  r  r"  r	  r+  r.  r  r2  )rW   s    r2   bind_allzWorksheetReader.bind_all  s`       "  "r4   N)r   r   r   __doc__rY   r  r	  r  r  r"  r   r+  r.  r2  r4  r   r4   r2   r   r   b  s@    
3:+6&&1LK	'r4   r   N)cr5  r   warningsr   openpyxl.xml.functionsr   openpyxl.cellr   r   openpyxl.cell.textr   openpyxl.worksheet.dimensionsr	   r
   r   openpyxl.xml.constantsr   r   openpyxl.formatting.formattingr   openpyxl.formula.translater   openpyxl.utilsr   r   openpyxl.utils.datetimer   r   r   openpyxl.descriptors.excelr   openpyxl.cell.rich_textr   r   r   r   filtersr   header_footerr   r  r   merger   pager   r   r    	pagebreakr!   r"   r   r#   scenarior$   ra   r%   datavalidationr&   tabler'   r   r(   
dimensionsr)   relatedr*   CELL_TAGr   r   r   r   rd   r   rj   rl   rf   rh   r   r~   rt   ru   rv   rw   rx   ry   rz   r{   r|   rn   rp   r}   r   r   rr   r3   r<   r>   r   r   r4   r2   <module>rM     s   %   - + #  A 1 L K 4 0 3  ' $  ; ; ) ' "   .   + &  ]"m#	%},	=(
m
#
m
#	$}	4 =0
 =0

& =0},	.	-/]*-/
-
&6.},	 =0
-/-/-/]*-/)M9 ~% ~%Bv vr4   