
    fh?                        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@          ZbdAS )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                 V    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/histauto/venv/lib/python3.11/site-packages/openpyxl/worksheet/_reader.py_cast_numberr3   P   s3    
e||se||se||U||u::    c                     t          j        |           p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   sH     "7++1rE
5zzQ:eAh4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dS )WorkSheetParserFc                    d x| _         | _        || _        || _        || _        || _        i | _        dx| _        | _        t                      | _
        || _        || _        i | _        i | _        g | _        d| _        t#                      | _        g | _        d | _        d | _        t-                      | _        t1                      | _        || _        d S )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+#oo(!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          | j+                  }|D ]\  }}|j,        }||v r& ||         |           |-                                 6||v rO||         }|d         .                    |          }t_          | |d         |           |-                                 |t`          k    r-| 1                    |          }	|-                                 |	V  d S )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d1T*D))4040d5	
 6.+6|^46
3/1CD/1DE/)>?K6-0L-8
3

" t{## 	 	JAw{H:%%$
8$W---Z''!(+1g''00d1gs+++W$$nnW--				 	r4   c                     t          | j                  }|D ]Y\  }}|j        t          k    rt	          j        |          }|j        c S |j        t          k    r dS |                                 ZdS )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   s~     t{##! 	 	OFG{m++$.w77~%%%((MMOOOO	 	r4   c                 D   |                     dd          }|                     d          }|                     dd          }|rt          |          }|dk    rd }n|                    t          d           pd }|rt	          |          \  }}|| _        n| xj        dz  c_        | j        | j        }}| j        s3|                    t                    d}| 
                    |          }n-||dk    rnt          |          }|| j        v rUd	}	 t          || j        || j        v 
          }n# t           t"          f$ r d| d| d}t%          |           d}d}Y nw xY wn|dk    r| j        t          |                   }n|dk    rt)          t          |                    }ns|dk    rd}nj|d	k    rt+          |          }nT|dk    rN|                    t,                    }	|	2d}| j        rt1          |	          }nt3          j        |	          j        }|||||dS )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##EE$$Y55=E 	=-j99KC%D!*D,<C~ "	>',,{";";"GI&&w//EEC$U++t000 #I* *!4:TE[9[! ! ! *:6 * * * o
  o  o^c  o  o  oS			$'	 )	* 1 c!!+CJJ7c!!SZZ((e##		c!!$U+++%%]33$ #I~ > 5e < < $u 5 5 =FEy]efffs   D/ /-EEc                    |                     t                    }|                    d          }|                    d          }d}|j        
||j        z  }|dk    r%t	          |                    d          |          }n}|dk    r`|                    d	          }|| j        v r#| j        |         }|                    |          }n6|dk    rt          ||          | j        |<   n|d
k    rt          di |j	        }|S )zC
        possible formulae types: shared, array, datatable
        r   r   =N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[[%7%7eDDDEEX%%++d##Cd***,S1//
;;#,6uj,I,I$S)[(($66w~66Er4   c                     t          |j                  }t          t          |d                             }||d<   || j        |<   d S )Nminindex)dictr   r   r0   rM   )rW   colattrsr   s       r2   re   z'WorkSheetParser.parse_column_dimensions  sF    SZ  "3uU|#4#455g).v&&&r4   c                     t          |j                  }d|v r	 t          |d                    _        nv# t          $ rY t          |d                   }|                                rt          |           _        nt	          |d          d          Y nw xY w xj        dz  c_        d _        d |D             }|ddhz
  r| j        t           j                  <    fd|D             } j        |fS )Nr   z is not a valid row numberr   r   c                 <    h | ]}|                     d           |S ){)
startswith).0ks     r2   	<setcomp>z,WorkSheetParser.parse_row.<locals>.<setcomp>*  s)    :::aS(9(9::::r4   spansc                 :    g | ]}                     |          S r   )r   )r   elrW   s     r2   
<listcomp>z-WorkSheetParser.parse_row.<locals>.<listcomp>/  s%    333$$333r4   )
r   r   r0   rG   r   r/   
is_integerrH   rL   r:   )rW   r   r   valkeyscellss   `     r2   r   zWorkSheetParser.parse_row  s.   SZ  %<<P#&uSz??   P P PE#J''>>## P'*3xxD$$$c
%N%N%NOOO %$P !::5:::3.  	?9>DD$4 5 563333s333&&s   6 A BBc                     	 t          j        |          }| j                            |           d S # t          $ r}d| }t          |           Y d }~d S 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  sw    	&099BO""2&&&&& 	 	 	c`accCIIIIIIIII	s   .2 
AAAc                     t          j        |          }|                    d          }||                    |d           || _        d S )NpasswordT)r#   r7   r   set_password
protection)rW   r;   r   r   s       r2   rg   z&WorkSheetParser.parse_sheet_protection<  sJ    $.w77
;;z**##Hd333$r4   c                     t          j        |          }|j        D ]R}t          j        |j                                        d          }d                    |          }t          |           Sd S )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  sh    (11 	 	A }QU[[]]I>>HFMMhWWCIIII	 	r4   c                 F    t          j        |          }|j        | _        d S N)r*   r7   idrR   )rW   r;   r   s      r2   rm   zWorkSheetParser.parse_legacyL  s"    ((!fr4   c                 <    t          j        |          }|| _        d S r   )r!   r7   rT   rW   r;   brks      r2   ro   z WorkSheetParser.parse_row_breaksQ       ))r4   c                 <    t          j        |          }|| _        d S r   )r"   r7   rU   r   s      r2   rq   z WorkSheetParser.parse_col_breaksV  r   r4   c                 R    t                      | _        t                      | _        d S 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;$3355#&355E# # # #4, , ,^  "7g 7g 7gt  8/ / /' ' '2  % % %  % % %
  
  
% % % % %r4   r>   c                   T    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dS )WorksheetReaderz4
    Create a parser and apply it to a workbook
    c           	          || _         t          ||||j        j        |j        j        |j        j        |          | _        g | _        d S r   )wsr>   parentrB   _date_formats_timedelta_formatsparserrI   )rW   r   
xml_sourcerD   rE   rV   s         r2   rY   zWorksheetReader.__init__g  sE    %j.29?BI,C	,i9 9 r4   c                    | j                                         D ]\  }}|D ]z}| j        j        j        |d                  }t          | j        |d         |d         |          }|d         |_        |d         |_        || j        j        |d         |d         f<   {| j        j        r| j        j	        | j        _
        d S d S )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 	BHC B B3D4DEd5k$x.V[\\\=";/@AUT(^<==B 7> 	3#'7?DG   	3 	3r4   c                     | j         j        D ]C}|j        D ]9}|j        !| j        j        j        |j                 |_        || j        j        |<   :Dd S r   )	r   rQ   rulesdxfIdr   r   _differential_stylesdxfconditional_formatting)rW   r   rules      r2   bind_formattingzWorksheetReader.bind_formatting|  se    +( 	: 	:B : ::)#w~B4:NDH59.r22:	: 	:r4   c                     | j         j        j        D ]E}| j        j                            |j                  }| j                            |j                   Fd S r   )	r   rI   	tablePartr   _relsr   r   r   Target)rW   r   rels      r2   bind_tableszWorksheetReader.bind_tables  sW    #- 	+ 	+A'-##AD))CKsz****	+ 	+r4   c                    ddl m} ddlm} | j        j        sd S g }| j        j        j        D ]G} || j        |j                  }| j        	                    |           |
                    |           H ||          | j        _        d S )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    @@@@@@<<<<<<{' 	F+*4 	 	B!/$'2622CG&&s+++MM#-~f55r4   c                    | j         j        j        D ]}|j        r0| j        j                            |j                  }|j        |_        d|j	        v r@| j        |j	                 D ],}|D ]'}	 t          |          |_        # t          $ r Y $w xY w-| j        |j	                 }t          |t                    r|                     |j                  }||_        d S )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    K*4 	& 	&Dw )gm''00!jdh748, ! !C # ! !!-1$ZZDNN- ! ! ! D!!! wtx(dJ// L::4?KKD!%!	& 	&s   -B
B	B	c                 d    | j         j        D ]"}||v r | j         j        |j        d          c S #dS )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  sM    
 7' 	1 	1C||#tw|SWQZ0000 	1 	1r4   c                     | j         j                                        D ]W\  }}d|v r/t          |d                   }| j        j        j        |         |d<   t          | j        fi || j        j        |<   Xd S )Nr  )r   rM   itemsr0   r   r   r   r	   )rW   r   cdkeys       r2   bind_col_dimensionsz#WorksheetReader.bind_col_dimensions  s    {4::<< 	L 	LGC"}}"W+&&"gn9#>7-<TW-K-K-K-KDG%c**		L 	Lr4   c                    | j         j                                        D ]d\  }}d|v r/t          |d                   }| j        j        j        |         |d<   t          | j        fi || j        j        t          |          <   ed S )Nr   )r   rL   r-  r0   r   r   r   r
   )rW   r   rdr/  s       r2   bind_row_dimensionsz#WorksheetReader.bind_row_dimensions  s    {17799 	K 	KGCbyy"S'll'.5c:3/;DG/J/Jr/J/JDG"3s88,,		K 	Kr4   c                 l    dD ]0}t          | j        |d           }|t          | j        ||           1d S )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  sL     	' 	'A Q--A}A&&&	' 	'r4   c                 F   |                                   |                                  |                                  |                                  |                                  |                                  |                                  |                                  d S r   )r  r  r'  r  r0  r3  r  r7  )rW   s    r2   bind_allzWorksheetReader.bind_all  s         """  """r4   N)r   r   r   __doc__rY   r  r  r  r  r'  r%  r0  r3  r7  r9  r   r4   r2   r   r   b  s           
3 
3 
3: : :+ + +6 6 6& & &&1 1 1L L LK K K	' 	' 	'    r4   r   N)cr:  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>rR     s+   % $             - , , , , , + * * * * * * * # # # # # #                 A @ @ @ @ @ 1 1 1 1 1 1        L K K K K K K K K K 4 4 4 4 4 4 0 0 0 0 0 0 3 3 3 3 3 3 3 3       ' ' ' ' ' ' $ $ $ $ $ $       ; ; ; ; ; ; ; ; ; ; ) ) ) ) ) ) ) ) ' ' ' ' ' ' " " " " " "             . . . . . .             + + + + + + & & & & & &       ]"m#	%},	=(
m
#
m
#	$}	4 =0
 =0

& =0},	.	-/]*-/
-
&6.},	 =0
-/-/-/]*-/)M9     ~% ~% ~% ~% ~% ~% ~% ~%Bv v v v v v v v v vr4   