
    	h?                        S 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
  SSKJrJrJr  SSKJr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Jr  SSKJr  SSKJ r   SSK!J"r"J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-J.r.J/r/  SSK0J1r1J2r2  SSK3J4r4  SSK5J6r6  SSK7J8r8  SSK9J:r:  SSK;J<r<  SSK=J>r>  SSK?J@r@  SSKAJBrB  S\-  rCS \-  rDS!\-  rES"\-  rFS#\-  rGS$\-  rHS%\-  rIS&\-  rJS'\-  rKS(\-  rLS)\-  rMS*\-  rNS+\-  rOS,\-  rPS-\-  rQS.\-  rRS/\-  rSS0\-  rTS1\-  rUS2\-  rVS3\-  rWS4\-  rXS5\-  rYS6\-  rZS7\-  r[S8\-  r\S9\-  r]S:\-  r^S; r_S< r` " S= S>5      ra " S? S@5      rbgA)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                 R    SU ;   d  SU ;   d  SU ;   a  [        U 5      $ [        U 5      $ )z,Convert numbers as string to an int or float.Ee)floatint)values    L/var/www/html/env/lib/python3.13/site-packages/openpyxl/worksheet/_reader.py_cast_numberr3   P   s)    
e|se|se|U|u:    c                     [         R                  " U 5      =(       d    Sn[        U5      S:X  a  [        US   [        5      (       a  US   nU$ )z7
Parse inline string and preserve rich text formatting
 r   r   )r   	from_treelen
isinstancestr)elementr1   s     r2   parse_richtext_stringr<   W   sB     ""7+1rE
5zQ:eAh44aLr4   c                       \ rS rSrS\\" 5       \" 5       S4S jrS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rSrg)WorkSheetParsera   Fc                 x   S =U l         U l        X@l        Xl        X l        X0l        0 U l        S=U l        U l        [        5       U l
        XPl        X`l        0 U l        0 U l        / U l        SU l        [#        5       U l        / U l        S U l        S U l        [-        5       U l        [1        5       U l        Xpl        g )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srcrE   rF   rC   rK   rL   rW   s           r2   __init__WorkSheetParser.__init__c   s     '+*t|
,"!.//4+#o(!2 !# '/" "*"*"r4   c              #     #    [         U R                  [        U R                  [        U R
                  [        U R                  [        U R                  [        U R                  [        U R                  [        U R                  0n[         S["        4[$        S[&        4[(        S[*        4[,        S[.        4[0        S[2        4[4        S[6        4[8        S[:        4[<        S[>        4[@        S	[B        4[D        S
[F        4[H        S[J        4[L        S[N        4[P        S[R        40n[U        U RV                  5      nU H  u  pEURX                  nXa;   a  X   " U5        UR[                  5         M2  Xb;   a9  X&   nUS   R]                  U5      n[_        XS   U5        UR[                  5         Mp  U[`        :X  d  M|  U Rc                  U5      n	UR[                  5         U	v   M     g 7f)Nprint_optionspage_margins
page_setupr   auto_filterdata_validationssheet_propertiesviewssheet_format	scenariosrJ   rQ   rT   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   rD   tagclearr7   setattrROW_TAG	parse_row)
rX   
dispatcher
propertiesit_r;   tag_namepropobjrows
             r2   parse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{{#JA{{H%$W-'!+1g''01gs+W$nnW-	 s   F0G 6*G c                     [        U R                  5      nU Hc  u  p#UR                  [        :X  a$  [        R
                  " U5      nUR                  s  $ UR                  [        :X  a    gUR                  5         Me     g)z0
Get worksheet dimensions if they are provided.
N)	r   rD   r   DIMENSION_TAGr)   r7   
boundariesDATA_TAGr   )rX   r   _eventr;   dims        r2   parse_dimensions WorkSheetParser.parse_dimensions   s\     t{{#!OF{{m+$..w7~~%(MMO  "r4   c                 @   UR                  SS5      nUR                  S5      nUR                  SS5      nU(       a  [        U5      nUS:X  a  S nOUR                  [        S 5      =(       d    S nU(       a  [	        U5      u  pgXpl        O,U =R
                  S-  sl        U R                  U R
                  pvU R                  (       d*  UR                  [        5      b  SnU R                  U5      nOUb  US:X  a?  [        U5      nX@R                  ;   a$  S	n [        XPR                  X@R                  ;   S
9nOOUS:X  a  U R&                  [        U5         nOUS:X  a  [)        [        U5      5      nOxUS:X  a  SnOoUS	:X  a  [+        U5      nO]US:X  aW  UR                  [,        5      n	U	b?  SnU R.                  (       a  [1        U	5      nO [2        R4                  " U	5      R6                  nXgXRUS.$ ! [         ["        4 a    SU SU S3n[%        U5        SnSn N0f = f)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   rI   rH   rF   findFORMULA_TAGparse_formular3   rK   r   rC   rL   OverflowError
ValueErrorr   rE   boolr   INLINE_STRINGrW   r<   r   r7   content)
rX   r;   r   
coordinater   r1   r   r   msgchilds
             r2   
parse_cellWorkSheetParser.parse_cell   s    KKS)	[[%
;;sA&8}H#E$$Y5=E-j9KC%!**D,<,<~~',,{";"GI&&w/EC$U+000 #I* *!::E[E[9[! 1 c!++CJ7c!SZ(e#	c!$U++%]3$ #I~~ 5e < $u 5 = =E]eff/ *:6 *"'
|3]^c]d  el  oS	$'	 )	*s    G2 2(HHc                    UR                  [        5      nUR                  S5      nUR                  S5      nSnUR                  b  XRR                  -  nUS:X  a  [	        UR                  S5      US9nU$ US:X  ab  UR                  S5      nX`R
                  ;   a"  U R
                  U   nUR                  U5      nU$ US:w  a  [        XT5      U R
                  U'   U$ US	:X  a  [        S
0 UR                  D6nU$ )z3
possible formulae types: shared, array, datatable
r   r   =arrayref)r   textsharedsi	dataTable )
r   r   r   r   r   rG   translate_formular   r   attrib)rX   r;   formulaformula_typer   r1   idxtranss           r2   r   WorkSheetParser.parse_formula   s     ,,{+{{3'[[%
<<#\\!E7" W[[%7eDE  X%++d#C***,,S1//
;  #,6u,I$$S)
  [($6w~~6Er4   c                     [        UR                  5      n[        [        US   5      5      nX2S'   X R                  U'   g )Nminindex)dictr   r   r0   rN   )rX   colattrsr   s       r2   rg   'WorkSheetParser.parse_column_dimensions  s8    SZZ "3uU|#45g).v&r4   c                 ^   [        UR                  5      nSU;   a   [        US   5      U l        OU =R                  S-  sl        SU l        U Vs1 s H  oDR                  S5      (       a  M  UiM     nnUSS1-
  (       a!  X R                  [        U R                  5      '   U Vs/ s H  o`R                  U5      PM     nnU R                  U4$ ! [         aG    [        US   5      nUR                  5       (       a  [        U5      U l         N[	        US    S35      ef = fs  snf s  snf )Nr   z is not a valid row numberr   r   {spans)r   r   r0   rH   r   r/   
is_integerrI   
startswithrM   r:   r   )rX   r   r   valkkeyselcellss           r2   r   WorkSheetParser.parse_row  s   SZZ %<P#&uSz?  ! :5aS(95:3. 9>D$4$4 56/23s$s3&&!  PE#J'>>##'*3xD$$c
|3M%NOOP ;
 4s#   C D%.D%'D*=D"D"c                      [         R                  " U5      nU R                  R                  U5        g ! [         a  nSU 3n[        U5         S nAg S nAff = f)NzKFailed to load a conditional formatting rule. It will be discarded. Cause: )r   r7   rR   append	TypeErrorr   )rX   r;   cfr.   r   s        r2   rm    WorkSheetParser.parse_formatting3  sP    	&009BOO""2& 	_`a_bcCII	s   14 
AAAc                     [         R                  " U5      nUR                  S5      nUb  UR                  US5        X l        g )NpasswordT)r#   r7   r   set_password
protection)rX   r;   r   r   s       r2   ri   &WorkSheetParser.parse_sheet_protection<  s;    $..w7
;;z*##Hd3$r4   c                     [         R                  " U5      nUR                   HN  n[        R                  " UR
                  R                  5       S5      nSR                  U5      n[        U5        MP     g )NUnknownz2{0} extension is not supported and will be removed)	r   r7   extr   r   uriupperformatr   )rX   r;   extLstr.   ext_typer   s         r2   rk    WorkSheetParser.parse_extensionsD  sQ    ((1A }}QUU[[]I>HFMMhWCI r4   c                 R    [         R                  " U5      nUR                  U l        g N)r*   r7   idrS   )rX   r;   r   s      r2   ro   WorkSheetParser.parse_legacyL  s    (!ffr4   c                 <    [         R                  " U5      nX l        g r   )r!   r7   rU   rX   r;   brks      r2   rq    WorkSheetParser.parse_row_breaksQ        )r4   c                 <    [         R                  " U5      nX l        g r   )r"   r7   rV   r   s      r2   rs    WorkSheetParser.parse_col_breaksV  r   r4   c                 @    [        5       U l        [        5       U l        g r   )r!   rU   r"   rV   )rX   r;   s     r2   ru   "WorkSheetParser.parse_custom_views[  s     #*"*r4   )rV   rI   rN   rF   rK   rC   rR   rQ   rP   rS   rT   rB   rA   rO   r   rW   rU   rH   rM   rG   rE   rD   rJ   rL   N)__name__
__module____qualname____firstlineno__r   setrZ   r   r   r   r   rg   r   rm   ri   rk   ro   rq   rs   ru   __static_attributes__r   r4   r2   r>   r>   a   s\    6;$35#&5E#4,^"7gt8/'2%%


%r4   r>   c                   Z    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)WorksheetReaderib  z,
Create a parser and apply it to a workbook
c           	          Xl         [        X#XAR                  R                  UR                  R                  UR                  R
                  U5      U l        / U l        g r   )wsr>   parentrC   _date_formats_timedelta_formatsparserrJ   )rX   r  
xml_sourcerE   rF   rW   s         r2   rZ   WorksheetReader.__init__g  sD    %j99??BII,C,C		,,i9 r4   c           	         U R                   R                  5        H  u  pU Hy  nU R                  R                  R                  US      n[        U R                  US   US   US9nUS   Ul        US   Ul        XPR                  R                  US   US   4'   M{     M     U R                  R                  (       a&  U R                  R                  U R                  l
        g g )Nr   r   r   )r   r   style_arrayr1   r   )r  r   r  r  _cell_stylesr   _valuer   _cellsmax_row_current_row)rX   r   r   cellstylecs         r2   
bind_cellsWorksheetReader.bind_cellso  s    ))+HC33D4DEd5k$x.V[\=";/@AUT(^<=  , 77>>#'77??DGG  r4   c                    U R                   R                   Hm  nUR                   HZ  nUR                  b2  U R                  R
                  R                  UR                     Ul        X R                  R                  U'   M\     Mo     g r   )	r  rR   rulesdxfIdr  r  _differential_stylesdxfconditional_formatting)rX   r   rules      r2   bind_formattingWorksheetReader.bind_formatting|  s^    ++((B::)#ww~~BB4::NDH59..r2 ! )r4   c                     U R                   R                  R                   HW  nU R                  R                  R                  UR                  5      nU R                  R                  UR                  5        MY     g r   )	r  rJ   	tablePartr  _relsr   r   r   Target)rX   r   rels      r2   bind_tablesWorksheetReader.bind_tables  sN    ##--A''--##ADD)CKKszz* .r4   c                 f   SSK Jn  SSKJn  U R                  R
                  (       d  g / nU R                  R
                  R                   HL  nU" U R                  UR                  5      nU R                  R                  U5        UR                  U5        MN     U" U5      U R                  l        g )Nr   )MultiCellRange)MergedCellRange)openpyxl.worksheet.cell_ranger&  openpyxl.worksheet.merger'  r  rT   	mergeCellr  r   _clean_merge_ranger   )rX   r&  r'  rangescrmcrs         r2   bind_merged_cells!WorksheetReader.bind_merged_cells  s|    @<{{''++**44B!$''2662CGG&&s+MM# 5  .f5r4   c                 L   U R                   R                  R                   H  nUR                  (       a@  U R                  R
                  R                  UR                  5      nUR                  Ul        SUR                  ;   a<  U R                  UR                      H  nU H  n [        U5      Ul        M     M     M  U R                  UR                     n[        U[        5      (       a  U R                  UR                  5      nXl        M     g ! [         a     M  f = f)N:)r  rQ   	hyperlinkr   r  r   r   r!  targetr   r   AttributeErrorr9   r   normalize_merged_cell_linkr   )rX   linkr"  r   r  s        r2   bind_hyperlinksWorksheetReader.bind_hyperlinks  s    KK**44Dwwggmm''0!jjdhh77488,C #!-1$ZDN !$ - wwtxx(dJ//::4??KD!%! 5  . ! !s   'D
D#	"D#	c                     U R                   R                   H0  nX;   d  M
  U R                   R                  " UR                  S   6 s  $    g)z
Returns the appropriate cell to which a hyperlink, which references a merged cell at the specified coordinates,
should be bound.
r   N)r  rT   r  top)rX   coordrngs      r2   r6  *WorksheetReader.normalize_merged_cell_link  s8    
 77''C|ww||SWWQZ00 (r4   c                 ,   U R                   R                  R                  5        Hl  u  pSU;   a4  [        US   5      nU R                  R
                  R                  U   US'   [        U R                  40 UD6U R                  R                  U'   Mn     g )Nr  )r  rN   itemsr0   r  r  r  r	   )rX   r   cdkeys       r2   bind_col_dimensions#WorksheetReader.bind_col_dimensions  st    {{44::<GC"}"W+&"ggnn99#>7-<TWW-K-KDGG%%c*	 =r4   c                 >   U R                   R                  R                  5        Hu  u  pSU;   a4  [        US   5      nU R                  R
                  R                  U   US'   [        U R                  40 UD6U R                  R                  [        U5      '   Mw     g )Nr   )r  rM   r@  r0   r  r  r  r
   )rX   r   rdrB  s       r2   bind_row_dimensions#WorksheetReader.bind_row_dimensions  sw    {{11779GCby"S'l''..55c:3/;DGG/Jr/JDGG""3s8,	 :r4   c                 z    S H5  n[        U R                  US 5      nUc  M  [        U R                  X5        M7     g )N)r]   r^   r_   r   r`   ra   rb   rc   rd   rU   rV   re   rS   r   )getattrr  r   r  )rX   r   vs      r2   bind_propertiesWorksheetReader.bind_properties  s5    A Q-A}&r4   c                    U R                  5         U R                  5         U R                  5         U R                  5         U R	                  5         U R                  5         U R                  5         U R                  5         g r   )r  r/  r8  r  rC  rG  r#  rL  )rX   s    r2   bind_allWorksheetReader.bind_all  s`       "  "r4   )r  rJ   r  N)r   r   r   r   __doc__rZ   r  r  r#  r/  r8  r6  rC  rG  rL  rO  r   r   r4   r2   r   r   b  s@    
3:+6&&1LK	'r4   r   N)crQ  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   r3  r   merger   pager   r   r    	pagebreakr!   r"   r   r#   scenarior$   rc   r%   datavalidationr&   tabler'   r   r(   
dimensionsr)   relatedr*   CELL_TAGr   r   r   r   rf   r   rl   rn   rh   rj   r   r   rv   rw   rx   ry   rz   r{   r|   r}   r~   rp   rr   r   r   r   rt   r3   r<   r>   r   r   r4   r2   <module>ri     s   %   - + #  A 1 L K 4 0 3  ' $  ; ; ) ' "   .   + &  ]"m#	%},	=(
m
#
m
#	$}	4 =0
 =0

& =0},	.	-/]*-/
-
&6.},	 =0
-/-/-/]*-/)M9 ~% ~%Bv vr4   