ó
    ‰*£h´k  ã                   óœ  • S 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
  SSKJr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  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K#J$r$J%r%J&r&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K7J8r8J9r9  SSK:J;r;  SSK<J=r=  SSK>J?r?  SSK@JArAJBrBJCrCJDrD   " S S\5      rES rFg )!z.Worksheet is the 2nd-level container in Excel.é    )Úchain)Ú
itemgetter)Úisgenerator)Úwarn)Ú
deprecated)Úcolumn_index_from_stringÚget_column_letterÚrange_boundariesÚcoordinate_to_tuple)ÚCellÚ
MergedCell)ÚConditionalFormattingList)ÚRelationshipList)Ú_WorkbookChild)ÚDefinedNameDict)Ú
Translatoré   )ÚDataValidationList)ÚPrintPageSetupÚPageMarginsÚPrintOptions)ÚColumnDimensionÚRowDimensionÚDimensionHolderÚSheetFormatProperties)ÚSheetProtection)Ú
AutoFilter)ÚPaneÚ	SelectionÚSheetViewList)ÚMultiCellRangeÚ	CellRange)ÚMergedCellRange)ÚWorksheetProperties)ÚRowBreakÚColBreak)ÚScenarioList)Ú	TableList)ÚArrayFormula)ÚPrintTitlesÚColRangeÚRowRangeÚ	PrintAreac                   ó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SrSrSrSrSrSrSrSrSrSrSWS jrS r\S 5       r\S 5       r\S 5       r \S 5       r!\S  5       r"\S! 5       r#\#RH                  SWS" j5       r#SWS# jr%S$ r&S% r'S& r(S' r)S( r*S) r+\S* 5       r,\S+ 5       r-\S, 5       r.\S- 5       r/S. r0\S/ 5       r1SXS0 jr2SYS1 jr3\S2 5       r4\S3 5       r5SXS4 jr6SYS5 jr7\S6 5       r8\S7 5       r9S8 r:S9 r;SWS: jr<SWS; jr=S< r>\S= 5       r?S> r@SZS? jrAS@ rB\\C" SA5      SB 5       5       rDSZSC jrESD rFS[SE jrGS\SF jrHS\SG jrIS\SH jrJS\SI jrKS]SJ jrLSYSK jrMSL rNSM rOSN rP\SO 5       rQ\QRH                  SP 5       rQ\SQ 5       rR\RRH                  SR 5       rR\SS 5       rS\ST 5       rT\TRH                  SU 5       rTSVrUg)^Ú	WorksheetéD   zyRepresents a worksheet.

Do not create worksheets yourself,
use :func:`openpyxl.workbook.Workbook.create_sheet` instead

Ú	worksheetz/xl/worksheets/sheet{0}.xmlzIapplication/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xmlr   r   é   ÚvisibleÚhiddenÚ
veryHiddenÚ1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9Ú10Ú11ÚportraitÚ	landscapeNc                 óR   • [         R                  " XU5        U R                  5         g ©N)r   Ú__init__Ú_setup)ÚselfÚparentÚtitles      ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/openpyxl/worksheet/worksheet.pyrE   ÚWorksheet.__init__i   s   € Ü×Ò ¨eÔ4Ø�‰�ó    c                 ó*  • [        U U R                  S9U l        [        U U R                  S9U l        [        5       U l        [        5       U l        0 U l	        / U l
        / U l        [        5       U l        S U l        / U l        [!        5       U l        [%        5       U l        / U l        [+        5       U l        / U l        SU l        [3        U S9U l        [7        5       U l        S U l        S U l        [?        5       U l         [C        5       U l"        [G        5       U l$        [K        5       U l&        [O        5       U l(        SU l)        [U        5       U l+        [Y        5       U l-        S U l.        [_        5       U l0        [c        5       U l2        [g        5       U l4        g )N)r1   Údefault_factoryr3   )r1   r   )5r   Ú_add_rowÚrow_dimensionsÚ_add_columnÚcolumn_dimensionsr%   Ú
row_breaksr&   Ú
col_breaksÚ_cellsÚ_chartsÚ_imagesr   Ú_relsÚ_drawingÚ	_commentsr!   Úmerged_cellsr(   Ú_tablesÚ_pivotsr   Údata_validationsÚ_hyperlinksÚsheet_stater   Ú
page_setupr   Úprint_optionsÚ_print_rowsÚ_print_colsr-   Ú_print_arear   Úpage_marginsr    Úviewsr   Ú
protectionr   Údefined_namesÚ_current_rowr   Úauto_filterr   Úconditional_formattingÚlegacy_drawingr$   Úsheet_propertiesr   Úsheet_formatr'   Ú	scenarios©rG   s    rJ   rF   ÚWorksheet._setupm   sC  € Ü-¸Ø>B¿m¹mñMˆÔä!0¸4ØAE×AQÑAQñ"SˆÔä"›*ˆŒÜ"›*ˆŒØˆŒØˆŒØˆŒÜ%Ó'ˆŒ
ØˆŒØˆŒÜ*Ó,ˆÔÜ “{ˆŒØˆŒÜ 2Ó 4ˆÔØˆÔØ$ˆÔÜ(°4Ñ8ˆŒÜ)›^ˆÔØˆÔØˆÔÜ$›;ˆÔÜ'›MˆÔÜ"“_ˆŒ
Ü)Ó+ˆŒÜ,Ó.ˆÔàˆÔÜ%›<ˆÔÜ&?Ó&AˆÔ#Ø"ˆÔÜ 3Ó 5ˆÔÜ1Ó3ˆÔÜ%›ˆ�rL   c                 ó.   • U R                   R                  $ rD   )rg   Úactiverq   s    rJ   Ú
sheet_viewÚWorksheet.sheet_view“   s   € à�z‰z× Ñ Ð rL   c                 óH   • U R                   R                  S   R                  $ ©Nr   )ru   Ú	selectionÚsqrefrq   s    rJ   Úselected_cellÚWorksheet.selected_cell˜   s   € à�‰×(Ñ(¨Ñ+×1Ñ1Ð1rL   c                 óH   • U R                   R                  S   R                  $ rx   )ru   ry   Ú
activeCellrq   s    rJ   Úactive_cellÚWorksheet.active_cell�   s   € à�‰×(Ñ(¨Ñ+×6Ñ6Ð6rL   c                 óö   • 0 nU R                   R                  5        HX  nUR                  S:X  d  M  [        UR                  [
        5      (       d  M6  UR                  R                  XR                  '   MZ     U$ )zHReturns a dictionary of cells with array formulae and the cells in arrayÚf)rU   ÚvaluesÚ	data_typeÚ
isinstanceÚvaluer)   ÚrefÚ
coordinate)rG   ÚresultÚcs      rJ   Úarray_formulaeÚWorksheet.array_formulae¢   sX   € ð ˆØ—‘×#Ñ#Ö%ˆAØ�{‰{˜cÕ!Ü˜aŸg™g¤|×4Ó4Ø+,¯7©7¯;©;�FŸ<™<Ó(ñ &ð ˆrL   c                 ó.   • U R                   R                  $ rD   )ru   ÚshowGridLinesrq   s    rJ   Úshow_gridlinesÚWorksheet.show_gridlines­   s   € à�‰×,Ñ,Ð,rL   c                 ór   • U R                   R                  b   U R                   R                  R                  $ g rD   )ru   ÚpaneÚtopLeftCellrq   s    rJ   Úfreeze_panesÚWorksheet.freeze_panes²   s-   € à�?‰?×ÑÑ+Ø—?‘?×'Ñ'×3Ñ3Ð3ð ,rL   c           	      óÈ  • [        U[        5      (       a  UR                  nUS:X  a  S nU(       d  S U R                  l        g [        U5      u  p#U R                  n[        USSS9Ul        SUR                  S   l        US:”  a  US-
  UR                  l        US:”  ad  US-
  UR                  l	        SUR                  l
        SUR                  S   l        US:”  a%  SUR                  S   l        SUR                  l
        US:”  aY  US:”  aR  [        UR                  5      nUR                  S[        SS S S	95        UR                  S[        SS S S	95        XTl        g g g )
NÚA1ÚtopRightÚfrozen)r“   Ú
activePaneÚstater   r   Ú
bottomLeftÚbottomRight)r’   r~   rz   )r…   r   rˆ   ru   r’   r   r   ry   ÚxSplitÚySplitrš   ÚlistÚinsertr   )rG   r“   ÚrowÚcolumnÚviewÚsels         rJ   r”   r•   ¸   s9  € ä�k¤4×(Ñ(Ø%×0Ñ0ˆKØ˜$ÓØˆKæØ#'ˆD�O‰OÔ Øä)¨+Ó6‰ˆà�‰ˆÜ [Ø#-Ø&ñ(ˆŒ	ð ",ˆ�‰�qÑÔà�A‹:Ø%¨™zˆD�I‰IÔØ�‹7Ø" Q™wˆD�I‰IÔØ#/ˆD�I‰IÔ Ø%1ˆD�N‰N˜1ÑÔ"Ø˜‹zØ)6�—‘˜qÑ!Ô&Ø'4�—	‘	Ô$à�‹7�v “zÜ�t—~‘~Ó&ˆCØ�J‰J�qœ)¨ÀÈDÑQÔRØ�J‰J�qœ)¨À$ÈdÑSÔTØ �Nð	 "ˆ7rL   c                 óh   • US:  d  US:  a  [        S5      eU R                  X5      nUb  X4l        U$ )a¦  
Returns a cell object based on the given coordinates.

Usage: cell(row=15, column=1, value=5)

Calling `cell` creates cells in memory when they
are first accessed.

:param row: row index of the cell (e.g. 4)
:type row: int

:param column: column index of the cell (e.g. 3)
:type column: int

:param value: value of the cell (e.g. 5)
:type value: numeric or time or string or bool or none

:rtype: openpyxl.cell.cell.Cell
r   z'Row or column values must be at least 1)Ú
ValueErrorÚ	_get_cellr†   )rG   r¢   r£   r†   Úcells        rJ   r©   ÚWorksheet.cellÜ   s;   € ð* �‹7�f˜q“jÜÐFÓGÐGà�~‰~˜cÓ*ˆØÑØŒJàˆrL   c                 ó´   • SUs=:  a  S:  d  O  [        SU 35      eX4nX0R                  ;  a  [        XUS9nU R                  U5        U R                  U   $ )zk
Internal method for getting a cell from a worksheet.
Will create a new cell if one doesn't already exist.
r   i  zCRow numbers must be between 1 and 1048576. Row number supplied was ©r¢   r£   )r§   rU   r   Ú	_add_cell)rG   r¢   r£   rˆ   r©   s        rJ   r¨   ÚWorksheet._get_cellû   s^   € ð
 �3Õ ˜Õ ÜÐbÐcfÐbgÐhÓiÐiØ�]ˆ
ØŸ[™[Ó(Ü˜¨fÑ5ˆDØ�N‰N˜4Ô Ø�{‰{˜:Ñ&Ð&rL   c                 ó†   • UR                   nUR                  n[        X0R                  5      U l        XR                  X24'   g)z*
Internal method for adding cell objects.
N)Úcol_idxr¢   Úmaxrj   rU   )rG   r©   r£   r¢   s       rJ   r­   ÚWorksheet._add_cell	  s7   € ð —‘ˆØ�h‰hˆÜ ×%6Ñ%6Ó7ˆÔØ%)�‰�S�MÒ"rL   c           	      óÄ  • [        U[        5      (       af  [        UR                  UR                  /5      (       d  [        SR                  U5      5      eSR                  UR                  UR                  5      n[        U[        5      (       a  [        U5      n[        U5      u  p#pE[        X#XE/5      (       d  [        SR                  U5      5      eUc&  [        U R                  X$5      5      nX$:X  a  US   nU$ Uc0  [        U R                  X#U R                  US95      nX5:X  a  US   nU$ SU;  a  U R                  X25      $ [        U R                  X2XTS95      $ )a<  Convenience access by Excel style coordinates

The key can be a single cell coordinate 'A1', a range of cells 'A1:D25',
individual rows or columns 'A', 4 or ranges of rows or columns 'A:D',
4:10.

Single cells will always be created if they do not exist.

Returns either a single cell or a tuple of rows or columns.
z&{0} is not a valid coordinate or rangez{0}:{1}r   )Úmin_colÚmin_rowÚmax_colÚmax_rowÚ:)rµ   r´   r·   r¶   )r…   ÚsliceÚallÚstartÚstopÚ
IndexErrorÚformatÚintÚstrr
   ÚanyÚtupleÚ	iter_colsÚ	iter_rowsÚ
max_columnr¨   )rG   Úkeyr´   rµ   r¶   r·   ÚcolsÚrowss           rJ   Ú__getitem__ÚWorksheet.__getitem__  sQ  € ô �cœ5×!Ñ!Ü˜Ÿ	™	 3§8¡8Ð,×-Ñ-Ü Ð!I×!PÑ!PÐQTÓ!UÓVÐVØ×"Ñ" 3§9¡9¨c¯h©hÓ7ˆCä�cœ3×ÑÜ�có ˆCä-=¸cÓ-BÑ*ˆ˜'ä�G gÐ7×8Ñ8ÜÐE×LÑLÈSÓQÓRÐRà‰?Ü˜Ÿ™¨Ó9Ó:ˆDØÓ!Ø˜A‘w�ØˆKØ‰?Ü˜Ÿ™°Ø04·±Èð (ð Ró SˆDàÓ!Ø˜A‘w�ØˆKØ�c‹>Ø—>‘> 'Ó3Ð3Ü�T—^‘^¨GØ,3ð $ð Fó Gð 	GrL   c                 ó   • X U   l         g rD   ©r†   )rG   rÆ   r†   s      rJ   Ú__setitem__ÚWorksheet.__setitem__<  s   € ØˆS‰	�rL   c                 ó"   • U R                  5       $ rD   ©rÄ   rq   s    rJ   Ú__iter__ÚWorksheet.__iter__@  s   € Ø�~‰~ÓÐrL   c                 ó^   • [        U5      u  p#X#4U R                  ;   a  U R                  X#4	 g g rD   )r   rU   )rG   rÆ   r¢   r£   s       rJ   Ú__delitem__ÚWorksheet.__delitem__D  s/   € Ü)¨#Ó.‰ˆØˆ=˜DŸK™KÓ'Ø—‘˜S˜MÑ*ð (rL   c                 ó\   • SnU R                   (       a  [        U R                   5      S   nU$ )z<The minimum row index containing data (1-based)

:type: int
r   r   ©rU   Úmin)rG   rµ   s     rJ   rµ   ÚWorksheet.min_rowJ  ó(   € ð ˆØ�;�;Ü˜$Ÿ+™+Ó& qÑ)ˆGØˆrL   c                 ó\   • SnU R                   (       a  [        U R                   5      S   nU$ )z<The maximum row index containing data (1-based)

:type: int
r   r   ©rU   r±   )rG   r·   s     rJ   r·   ÚWorksheet.max_rowV  rÚ   rL   c                 ód   • SnU R                   (       a  [        S U R                    5       5      nU$ )z?The minimum column index containing data (1-based)

:type: int
r   c              3   ó*   #   • U  H	  oS    v •  M     g7f©r   N© ©Ú.0rŠ   s     rJ   Ú	<genexpr>Ú'Worksheet.min_column.<locals>.<genexpr>j  ó   é € Ð4ª 1˜Až$ªùó   ‚r×   )rG   r´   s     rJ   Ú
min_columnÚWorksheet.min_columnb  ó)   € ð ˆØ�;�;ÜÑ4¨¯ªÓ4Ó4ˆGØˆrL   c                 ód   • SnU R                   (       a  [        S U R                    5       5      nU$ )z?The maximum column index containing data (1-based)

:type: int
r   c              3   ó*   #   • U  H	  oS    v •  M     g7frà   rá   râ   s     rJ   rä   Ú'Worksheet.max_column.<locals>.<genexpr>v  ræ   rç   rÜ   )rG   r¶   s     rJ   rÅ   ÚWorksheet.max_columnn  rê   rL   c                 óP  • U R                   (       ax  [        5       n[        5       nU R                    H'  u  p4UR                  U5        UR                  U5        M)     [        U5      n[        U5      n[	        U5      n[	        U5      nOg[        U5       U S[        U5       U 3$ )z_Return the minimum bounding range for all cells containing data (ex. 'A1:M24')

:rtype: string
zA1:A1r¸   )rU   ÚsetÚaddr±   rØ   r	   )	rG   rÈ   rÇ   r¢   Úcolr·   r¶   r´   rµ   s	            rJ   Úcalculate_dimensionÚWorksheet.calculate_dimensionz  s�   € ð
 �;�;Ü“5ˆDÜ“5ˆDØ ŸKœK‘�Ø—‘˜”Ø—‘˜–ñ (ô ˜$“iˆGÜ˜$“iˆGÜ˜$“iˆGÜ˜$“i‰Gàä# GÓ,Ð-¨g¨Y°aÔ8IÈ'Ó8RÐ7SÐT[ÐS\Ð]Ð]rL   c                 ó"   • U R                  5       $ )z1Returns the result of :func:`calculate_dimension`)ró   rq   s    rJ   Ú
dimensionsÚWorksheet.dimensions�  s   € ð ×'Ñ'Ó)Ð)rL   c                 ó  • U R                   S:X  a  [        X1XB/5      (       d  [        S5      $ U=(       d    SnU=(       d    SnU=(       d    U R                  nU=(       d    U R                  nU R                  X1XBU5      $ )ao  
Produces cells from the worksheet, by row. Specify the iteration range
using indices of rows and columns.

If no indices are specified the range starts at A1.

If no cells are in the worksheet an empty tuple will be returned.

:param min_col: smallest column index (1-based index)
:type min_col: int

:param min_row: smallest row index (1-based index)
:type min_row: int

:param max_col: largest column index (1-based index)
:type max_col: int

:param max_row: largest row index (1-based index)
:type max_row: int

:param values_only: whether only cell values should be returned
:type values_only: bool

:rtype: generator
r   rá   r   )rj   rÁ   ÚiterrÅ   r·   Ú_cells_by_row)rG   rµ   r·   r´   r¶   Úvalues_onlys         rJ   rÄ   ÚWorksheet.iter_rows•  so   € ð6 ×Ñ Ó!¬#¨wÀÐ.S×*TÑ*TÜ˜“8ˆOð —,˜QˆØ—,˜QˆØ×,˜TŸ_™_ˆØ×)˜TŸ\™\ˆà×!Ñ! '°GÀkÓRÐRrL   c              #   óÀ   ^ ^#   • [        X$S-   5       HF  mUU 4S j[        XS-   5       5       nU(       a  [        S U 5       5      v •  M9  [        U5      v •  MH     g 7f)Nr   c              3   óD   >#   • U  H  nTR                  TUS 9v •  M     g7f©r¬   N©r©   )rã   r£   r¢   rG   s     €€rJ   rä   Ú*Worksheet._cells_by_row.<locals>.<genexpr>¾  s    øé € ÐaÒE`¸6�T—Y‘Y 3¨v�YÕ6ÒE`ùó   ƒ c              3   ó8   #   • U  H  oR                   v •  M     g 7frD   rÌ   ©rã   r©   s     rJ   rä   r  À  ó   é € Ð9²5¨4ŸJžJ²5ùó   ‚©ÚrangerÂ   )rG   r´   rµ   r¶   r·   rû   Úcellsr¢   s   `      @rJ   rú   ÚWorksheet._cells_by_row¼  sL   ùé € Ü˜¨A¡+Ö.ˆCÝaÄUÈ7Ð^_ÑT_ÔE`ÓaˆEÞÜÑ9±5Ó9Ó9Ô9ä˜E“lÔ"ò /ùó   „AAc                 ó"   • U R                  5       $ )zVProduces all cells in the worksheet, by row (see :func:`iter_rows`)

:type: generator
rÐ   rq   s    rJ   rÈ   ÚWorksheet.rowsÅ  s   € ð �~‰~ÓÐrL   c              #   ó@   #   • U R                  SS9 H  nUv •  M	     g7f)zDProduces all cell values in the worksheet, by row

:type: generator
T)rû   NrÐ   )rG   r¢   s     rJ   rƒ   ÚWorksheet.valuesÎ  s!   é € ð —>‘>¨d�>Ó3ˆCØŒIò 4ùs   ‚c                 ó  • U R                   S:X  a  [        XX$/5      (       d  [        S5      $ U=(       d    SnU=(       d    SnU=(       d    U R                  nU=(       d    U R                  nU R                  XX$U5      $ )ar  
Produces cells from the worksheet, by column. Specify the iteration range
using indices of rows and columns.

If no indices are specified the range starts at A1.

If no cells are in the worksheet an empty tuple will be returned.

:param min_col: smallest column index (1-based index)
:type min_col: int

:param min_row: smallest row index (1-based index)
:type min_row: int

:param max_col: largest column index (1-based index)
:type max_col: int

:param max_row: largest row index (1-based index)
:type max_row: int

:param values_only: whether only cell values should be returned
:type values_only: bool

:rtype: generator
r   rá   r   )rj   rÁ   rù   rÅ   r·   Ú_cells_by_col)rG   r´   r¶   rµ   r·   rû   s         rJ   rÃ   ÚWorksheet.iter_colsØ  sm   € ð6 ×Ñ Ó!¬#¨wÀÐ.R×*SÑ*SÜ˜“8ˆOà—,˜QˆØ—,˜QˆØ×,˜TŸ_™_ˆØ×)˜TŸ\™\ˆà×!Ñ! '°GÀkÓRÐRrL   c              #   óÀ   ^ ^#   • [        XS-   5       HF  mUU 4S j[        X$S-   5       5       nU(       a  [        S U 5       5      v •  M9  [        U5      v •  MH     g7f)z
Get cells by column
r   c              3   óD   >#   • U  H  nTR                  UTS 9v •  M     g7frÿ   r   )rã   r¢   r£   rG   s     €€rJ   rä   Ú*Worksheet._cells_by_col.<locals>.<genexpr>  s%   øé € ð >Ú#<˜Cð —Y‘Y 3¨v�YÕ6Ú#<ùr  c              3   ó8   #   • U  H  oR                   v •  M     g 7frD   rÌ   r  s     rJ   rä   r    r  r  Nr  )rG   r´   rµ   r¶   r·   rû   r	  r£   s   `      @rJ   r  ÚWorksheet._cells_by_colþ  sQ   ùé € ô ˜G¨Q¡YÖ/ˆFõ>Ü#(¨¸!±)Ô#<ó>ˆEæÜÑ9±5Ó9Ó9Ô9ä˜E“lÔ"ò 0ùr  c                 ó"   • U R                  5       $ )zGProduces all cells in the worksheet, by column  (see :func:`iter_cols`))rÃ   rq   s    rJ   ÚcolumnsÚWorksheet.columns  s   € ð �~‰~ÓÐrL   c                 óÒ   • U R                   R                  5        Vs/ s H=  oR                  (       d  M  UR                  UR                  :”  d  M1  UR                  PM?     sn$ s  snf )z;
Return a list of column ranges where more than one column
)rR   rƒ   rØ   r±   r  )rG   Úcds     rJ   Úcolumn_groupsÚWorksheet.column_groups  sN   € ð
 $(×#9Ñ#9×#@Ñ#@Ô#BÓaÒ#B˜RÇfÅf“ÐQS×QWÑQWÐZ\×Z`ÑZ`ÑQ`“�—”Ñ#BÑaÐaùÒas   �A$µA$ÁA$c                 óD   • XR                   l        X R                   l        g)zSet printer settings N)ra   Ú	paperSizeÚorientation)rG   Ú
paper_sizer!  s      rJ   Úset_printer_settingsÚWorksheet.set_printer_settings  s   € ð %/�‰Ô!Ø&1�‰Õ#rL   c                 ó:   • U R                   R                  U5        g)z¬Add a data-validation object to the sheet.  The data-validation
object defines the type of data-validation to be applied and the
cell or range of cells it should apply to.
N)r^   Úappend)rG   Údata_validations     rJ   Úadd_data_validationÚWorksheet.add_data_validation   s   € ð
 	×Ñ×$Ñ$ _Õ5rL   c                 óL   • Ub  X!l         U R                  R                  U5        g)zL
Add a chart to the sheet
Optionally provide a cell for the top-left anchor
N)ÚanchorrV   r&  )rG   Úchartr+  s      rJ   Ú	add_chartÚWorksheet.add_chart(  s!   € ð
 ÑØ!ŒLØ�‰×Ñ˜EÕ"rL   c                 óL   • Ub  X!l         U R                  R                  U5        g)zN
Add an image to the sheet.
Optionally provide a cell for the top-left anchor
N)r+  rW   r&  )rG   Úimgr+  s      rJ   Ú	add_imageÚWorksheet.add_image2  s!   € ð
 ÑØŒJØ�‰×Ñ˜CÕ rL   c                 ó  • U R                   R                  UR                  5      (       a$  [        SR	                  UR                  5      5      e[        U S5      (       d  [        S5        U R                  R                  U5        g)zZ
Check for duplicate name in definedNames and other worksheet tables
before adding table.
z"Table with name {0} already existsr¨   z6In write-only mode you must add table columns manuallyN)	rH   Ú_duplicate_nameÚnamer§   r¾   Úhasattrr   r\   rñ   )rG   Útables     rJ   Ú	add_tableÚWorksheet.add_table<  s`   € ð �;‰;×&Ñ& u§z¡z×2Ñ2ÜÐA×HÑHÈÏÉÓTÓUÐUÜ�t˜[×)Ñ)ÜÐIÔJØ�‰×Ñ˜ÕrL   c                 ó   • U R                   $ rD   )r\   rq   s    rJ   ÚtablesÚWorksheet.tablesI  s   € à�|‰|ÐrL   c                 ó:   • U R                   R                  U5        g rD   )r]   r&  )rG   Úpivots     rJ   Ú	add_pivotÚWorksheet.add_pivotN  s   € Ø�‰×Ñ˜EÕ"rL   c                 ó¦   • Uc  [        XUXTS9nUR                  n[        X5      nU R                  R	                  U5        U R                  U5        g)z?Set merge on a cell range.  Range is a cell range (e.g. A1:E1) N©Úrange_stringr´   rµ   r¶   r·   )r"   Úcoordr#   r[   rñ   Ú_clean_merge_range)rG   rC  Ú	start_rowÚstart_columnÚend_rowÚ
end_columnÚcrÚmcrs           rJ   Úmerge_cellsÚWorksheet.merge_cellsR  sO   € àÑÜ¨ÐT]Ø(ñ;ˆBàŸ8™8ˆLÜ˜dÓ1ˆØ×Ñ×Ñ˜cÔ"Ø×Ñ Õ$rL   c                 óœ   • UR                   n[        U5        U H  u  p4[        XU5      U R                  X44'   M!     UR	                  5         g)z‚
Remove all but the top left-cell from a range of merged cells
and recreate the lost border information.
Borders are then applied
N)r	  Únextr   rU   r¾   )rG   rK  r	  r¢   rò   s        rJ   rE  ÚWorksheet._clean_merge_range]  s@   € ð —	‘	ˆÜˆUŒÛ‰HˆCÜ$.¨t¸#Ó$>ˆD�K‰K˜˜Ó!ñ à�
‰
�rL   zUse ws.merged_cells.rangesc                 ó4   • U R                   R                  SS $ )zReturn a copy of cell rangesN)r[   Úrangesrq   s    rJ   Úmerged_cell_rangesÚWorksheet.merged_cell_rangesj  s   € ð × Ñ ×'Ñ'©Ð*Ð*rL   c                 ó,  • [        XUXTS9nUR                  U R                  ;  a$  [        SR	                  UR                  5      5      eU R                  R                  U5        UR                  n[        U5        U H  u  p‰U R                  X‰4	 M     g)zBRemove merge on a cell range.  Range is a cell range (e.g. A1:E1) rB  zCell range {0} is not mergedN)	r"   rD  r[   r§   r¾   Úremover	  rO  rU   )
rG   rC  rF  rG  rH  rI  rJ  r	  r¢   rò   s
             rJ   Úunmerge_cellsÚWorksheet.unmerge_cellsq  s�   € ä LÐPYØ(ñ;ˆð �8‰8˜4×,Ñ,Ó,ÜÐ;×BÑBÀ2Ç8Á8ÓLÓMÐMà×Ñ× Ñ  Ô$à—‘ˆÜˆUŒÛ‰HˆCØ—‘˜S˜JÒ'ò rL   c                 óŠ  • U R                   S-   n[        U[        [        [        45      (       d  [        U5      (       a…  [        US5       Ht  u  p4[        U[        5      (       aA  UnUR                  (       a  UR                  U :w  a  [        S5      eXl        X5l
        X%l        O
[        XX4S9nXPR                  X#4'   Mv     Oy[        U[        5      (       aS  UR                  5        H>  u  p4[        U[        5      (       a  [!        U5      n[        XX4S9nXPR                  X#4'   M@     OU R#                  U5        X l         g)ae  Appends a group of values at the bottom of the current sheet.

* If it's a list: all values are added in order, starting from the first column
* If it's a dict: values are assigned to the columns indicated by the keys (numbers or letters)

:param iterable: list, range or generator, or dict containing values to append
:type iterable: list|tuple|range|generator or dict

Usage:

* append(['This is A1', 'This is B1', 'This is C1'])
* **or** append({'A' : 'This is A1', 'C' : 'This is C1'})
* **or** append({1 : 'This is A1', 3 : 'This is C1'})

:raise: TypeError when iterable is neither a list/tuple nor a dict

r   z,Cells cannot be copied from other worksheets)r¢   r£   r†   N)rj   r…   r    rÂ   r  r   Ú	enumerater   rH   r§   r£   r¢   rU   ÚdictÚitemsrÀ   r   Ú_invalid_row)rG   ÚiterableÚrow_idxr°   Úcontentr©   s         rJ   r&  ÚWorksheet.append�  s  € ð$ ×#Ñ# aÑ'ˆä�x¤$¬¬uÐ!5×6Ñ6Ü˜8×$Ñ$Ü$-¨h¸Ö$:Ñ �Ü˜g¤t×,Ñ,à"�DØ—{—{ t§{¡{°dÓ':Ü(Ð)WÓXÐXØ"&”KØ")”KØ&•Hä ¸'ÑQ�DØ26—‘˜WÐ.Ó/ò %;ô ˜¤$×'Ñ'Ø$,§N¡NÖ$4Ñ �Ü˜g¤s×+Ñ+Ü6°wÓ?�GÜ˜D°gÑM�Ø26—‘˜WÐ.Ó/ò	 %5ð ×Ñ˜hÔ'à#ÕrL   c                 ó0  • US:„  nSnSnUS:X  a  U R                  US9nUnSn	OU R                  US9nUnSn	[        U5      n[        U R                  [        U	5      US9 H3  u  p«U(       a  X¡:  a  M  U(       a  X²:  a  M!  U R                  X«Xg5        M5     g)z2
Move either rows or columns around by the offset
r   r¢   )rµ   )r´   r   )rÆ   ÚreverseN)rÄ   rÃ   r    ÚsortedrU   r   Ú
_move_cell)rG   rµ   r´   ÚoffsetÚ
row_or_colrc  Ú
row_offsetÚ
col_offsetr	  rÆ   r¢   r£   s               rJ   Ú_move_cellsÚWorksheet._move_cells±  sŸ   € ð ˜1‘*ˆØˆ
Øˆ
ð ˜ÓØ—N‘N¨7�NÐ3ˆEØˆJØ‰Cà—N‘N¨7�NÐ3ˆEØˆJØˆCÜ�U“ˆä! $§+¡+´:¸c³?ÈGÔT‰KˆCÞ˜3›=ÙÞ˜VÓ-Ùà�O‰O˜C¨Ö@ò UrL   c                 óF   • U R                  XSS9  U R                  U l        g)z$
Insert row or rows before row==idx
r¢   ©rµ   rf  rg  N)rj  r·   rj   ©rG   ÚidxÚamounts      rJ   Úinsert_rowsÚWorksheet.insert_rowsÍ  s#   € ð 	×Ñ ÀÐÑFØ ŸL™LˆÕrL   c                 ó$   • U R                  XSS9  g)z*
Insert column or columns before col==idx
r£   ©r´   rf  rg  N)rj  rn  s      rJ   Úinsert_colsÚWorksheet.insert_colsÕ  s   € ð 	×Ñ ÀÐÒIrL   c                 óZ  • [        XU R                  5      nU R                  X-   U* SS9  U R                  nU R                  S-   nU H6  n[        XE5       H$  nXg4U R                  ;   d  M  U R                  Xg4	 M&     M8     U R                  U l        U R                  (       d  SU l        gg)z"
Delete row or rows from row==idx
r¢   rm  r   r   N)Ú_gutterr·   rj  rè   rÅ   r  rU   rj   )rG   ro  rp  Ú	remainderr´   r¶   r¢   rò   s           rJ   Údelete_rowsÚWorksheet.delete_rowsÜ  s�   € ô
 ˜C¨¯©Ó6ˆ	à×Ñ ¡°V°GÈÐÑNð —/‘/ˆØ—/‘/ AÑ%ˆÛˆCÜ˜WÖ.�Ø�: §¡Õ,ØŸ™ C HÒ-ó /ñ ð !ŸL™LˆÔØ�{�{Ø !ˆDÕð rL   c                 ó  • [        XU R                  5      nU R                  X-   U* SS9  U R                  nU R                  S-   nU H6  n[        XE5       H$  nXv4U R                  ;   d  M  U R                  Xv4	 M&     M8     g)z(
Delete column or columns from col==idx
r£   rt  r   N)rx  rÅ   rj  rµ   r·   r  rU   )rG   ro  rp  ry  rµ   r·   rò   r¢   s           rJ   Údelete_colsÚWorksheet.delete_colsñ  s{   € ô
 ˜C¨¯©Ó9ˆ	à×Ñ ¡°V°GÈÐÑQð —,‘,ˆØ—,‘, Ñ"ˆÛˆCÜ˜WÖ.�Ø�: §¡Õ,ØŸ™ C HÒ-ó /ò rL   c                 ó˜  • [        U[        5      (       a  [        U5      n[        U[        5      (       d  [        S5      eU(       d  U(       d  gUS:„  nUS:„  nU(       a  [	        UR
                  US9nO[	        UR                  US9n[        R                  " U5       H  u  p‰U R                  X‰X#U5        M     UR                  X#S9  g)zÕ
Move a cell range by the number of rows and/or columns:
down if rows > 0 and up if rows < 0
right if cols > 0 and left if cols < 0
Existing cells will be overwritten.
Formulae and references will not be updated.
z#Only CellRange objects can be movedNr   )rc  )Ú	row_shiftÚ	col_shift)r…   rÀ   r"   r§   rd  rÈ   rÇ   r   Úfrom_iterablere  Úshift)
rG   Ú
cell_rangerÈ   rÇ   Ú	translateÚdownÚrightr	  r¢   rò   s
             rJ   Ú
move_rangeÚWorksheet.move_range  s«   € ô �j¤#×&Ñ&Ü" :Ó.ˆJÜ˜*¤i×0Ñ0ÜÐBÓCÐCÞžDØà�a‰xˆØ�q‘ˆæÜ˜:Ÿ?™?°DÑ9‰Eä˜:Ÿ?™?°EÑ:ˆEä×+Ò+¨EÖ2‰HˆCØ�O‰O˜C d°)Ö<ñ 3ð 	×Ñ 4ÐÒ8rL   c                 óx  • U R                  X5      nUR                  U-   nUR                  U-   nX`R                  Xx4'   U R                  UR                  UR                  4	 Xvl        X†l        U(       aF  UR                  S:X  a5  [        UR                  UR                  5      n	U	R                  X4S9Ul        ggg)zN
Move a cell from one place to another.
Delete at old index
Rebase coordinate
r‚   )Ú	row_deltaÚ	col_deltaN)	r¨   r¢   r£   rU   r„   r   r†   rˆ   Útranslate_formula)
rG   r¢   r£   rh  ri  r…  r©   Únew_rowÚnew_colÚts
             rJ   re  ÚWorksheet._move_cell!  sž   € ð �~‰~˜cÓ*ˆØ—(‘(˜ZÑ'ˆØ—+‘+ 
Ñ*ˆØ(,�‰�GÐ$Ñ%Ø�K‰K˜Ÿ™ 4§;¡;Ð/Ð0ØŒØŒÞ˜Ÿ™¨3Ó.Ü˜4Ÿ:™: t§¡Ó7ˆAØ×,Ñ,°zÐ,ÐXˆD�Jð /ˆ9rL   c                 óH   • [        SR                  [        U5      5      5      e)NzQValue must be a list, tuple, range or generator, or a dict. Supplied value is {0})Ú	TypeErrorr¾   Útype)rG   r^  s     rJ   r]  ÚWorksheet._invalid_row3  s$   € ÜÐk×rÑrÜ�‹Nóó ð 	rL   c                 ó   • [        U 5      $ )z(Dimension factory for column information)r   rq   s    rJ   rQ   ÚWorksheet._add_column9  s   € ô ˜tÓ$Ð$rL   c                 ó   • [        U 5      $ )z%Dimension factory for row information)r   rq   s    rJ   rO   ÚWorksheet._add_row>  s   € ô ˜DÓ!Ð!rL   c                 óP   • U R                   (       a  [        U R                   5      $ g)z7Rows to be printed at the top of every page (ex: '1:3')N)rc   rÀ   rq   s    rJ   Úprint_title_rowsÚWorksheet.print_title_rowsD  ó#   € ð ××Ü�t×'Ñ'Ó(Ð(ð rL   c                 ó,   • Ub  [        U5      U l        gg)z>
Set rows to be printed on the top of every page
format `1:3`
N)r,   rc   )rG   rÈ   s     rJ   r›  rœ  K  ó   € ð ÑÜ'¨›~ˆDÕð rL   c                 óP   • U R                   (       a  [        U R                   5      $ g)z@Columns to be printed at the left side of every page (ex: 'A:C')N)rd   rÀ   rq   s    rJ   Úprint_title_colsÚWorksheet.print_title_colsU  r�  rL   c                 ó,   • Ub  [        U5      U l        gg)z@
Set cols to be printed on the left of every page
format ``A:C`
N)r+   rd   )rG   rÇ   s     rJ   r¡  r¢  \  rŸ  rL   c                 ój   • [        U R                  U R                  U R                  S9n[	        U5      $ )N)rÇ   rÈ   rI   )r*   rd   rc   rI   rÀ   )rG   Útitless     rJ   Úprint_titlesÚWorksheet.print_titlesf  s-   € ä $×"2Ñ"2¸×9IÑ9IÐQU×Q[ÑQ[Ñ\ˆÜ�6‹{ÐrL   c                 ób   • U R                   U R                  l         [        U R                  5      $ )zp
The print area for the worksheet, or None if not set. To set, supply a range
like 'A1:D4' or a list of ranges.
)rI   re   rÀ   rq   s    rJ   Ú
print_areaÚWorksheet.print_areal  s'   € ð "&§¡ˆ×ÑÔÜ�4×#Ñ#Ó$Ð$rL   c                 ó  • U(       d  [        5       U l        g[        U[        5      (       a  [         R                  " U5      U l        g[        US5      (       a+  [         R                  " SR                  U5      5      U l        gg)zr
Range of cells in the form A1:D4 or list of ranges. Print area can be cleared
by passing `None` or an empty list
rÑ   Ú,N)r-   re   r…   rÀ   Úfrom_stringr6  Újoin)rG   r†   s     rJ   r©  rª  v  s^   € ö Ü(›{ˆDÕÜ˜œs×#Ñ#Ü(×4Ò4°UÓ;ˆDÕÜ�U˜J×'Ñ'Ü(×4Ò4°S·X±X¸e³_ÓEˆDÕð (rL   ) rU   rV   rZ   rj   rY   r_   rW   r]   re   rd   rc   rX   r\   rk   rT   rR   rl   r^   ri   rm   r[   rf   ra   rb   rh   rS   rP   rp   ro   rn   r`   rg   rD   )NNNNF)F)NNNNN)NNr   r¢   )r   )r   r   F)VÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	_rel_typeÚ_pathÚ	mime_typeÚ
BREAK_NONEÚ	BREAK_ROWÚBREAK_COLUMNÚSHEETSTATE_VISIBLEÚSHEETSTATE_HIDDENÚSHEETSTATE_VERYHIDDENÚPAPERSIZE_LETTERÚPAPERSIZE_LETTER_SMALLÚPAPERSIZE_TABLOIDÚPAPERSIZE_LEDGERÚPAPERSIZE_LEGALÚPAPERSIZE_STATEMENTÚPAPERSIZE_EXECUTIVEÚPAPERSIZE_A3ÚPAPERSIZE_A4ÚPAPERSIZE_A4_SMALLÚPAPERSIZE_A5ÚORIENTATION_PORTRAITÚORIENTATION_LANDSCAPErE   rF   Úpropertyru   r{   r   r‹   r�   r”   Úsetterr©   r¨   r­   rÉ   rÍ   rÑ   rÔ   rµ   r·   rè   rÅ   ró   rö   rÄ   rú   rÈ   rƒ   rÃ   r  r  r  r#  r(  r-  r1  r8  r;  r?  rL  rE  r   rS  rW  r&  rj  rq  ru  rz  r}  rˆ  re  r]  rQ   rO   r›  r¡  r¦  r©  Ú__static_attributes__rá   rL   rJ   r/   r/   D   s\  † ñð €IØ)€EØ[€Ià€JØ€IØ€Là"ÐØ ÐØ(Ðð ÐØ ÐØÐØÐØ€OØÐØÐØ€LØ€LØÐØ€Lð &ÐØ'Ðôò#(ðL ñ!ó ð!ð ñ2ó ð2ð ñ7ó ð7ð ñó ðð ñ-ó ð-ð ñ4ó ð4ð
 ×Ñó !ó ð !ôFò>'ò*ò&GòR ò ò+ð ñó ðð ñó ðð ñó ðð ñó ðò^ð* ñ*ó ð*ô
$SôN#ð ñ ó ð ð ñó ðô#SôL
#ð ñ ó ð ð
 ñbó ðbò2ò6ô#ô!ò
 ð ñó ðò#ô%ò
ð ÙÐ,Ó-ñ+ó .ó ð+ô
(ò -$ô`Aô8)ôJô"ô*.ô$9ô<Yò$ò%ò
"ð ñ)ó ð)ð ×Ññ.ó ð.ð ñ)ó ð)ð ×Ññ.ó ð.ð ñó ðð
 ñ%ó ð%ð ×Ññ
Fó ó
FrL   r/   c                 ó\   • [        [        US-   U-
  U 5      [        X-   U5      S-   5      nU$ )z¸
When deleting rows and columns are deleted we rely on overwriting.
This may not be the case for a large offset on small set of cells:
range(cells_to_delete) > range(cell_to_be_moved)
r   )r  r±   rØ   )ro  rf  Úmax_valÚgutters       rJ   rx  rx  „  s3   € ô ”3�w˜q‘y Ñ'¨Ó-¬s°3±:¸wÓ/GÈÑ/IÓJ€FØ€MrL   N)Gr³  Ú	itertoolsr   Úoperatorr   Úinspectr   Úwarningsr   Úopenpyxl.compatr   Úopenpyxl.utilsr   r	   r
   r   Úopenpyxl.cellr   r   Úopenpyxl.formatting.formattingr   Úopenpyxl.packaging.relationshipr   Úopenpyxl.workbook.childr   Úopenpyxl.workbook.defined_namer   Úopenpyxl.formula.translater   Údatavalidationr   Úpager   r   r   rö   r   r   r   r   rh   r   Úfiltersr   rg   r   r   r    r„  r!   r"   Úmerger#   Ú
propertiesr$   Ú	pagebreakr%   r&   Úscenarior'   r7  r(   Úformular)   Úprint_settingsr*   r+   r,   r-   r/   rx  rá   rL   rJ   Ú<module>rå     sŸ   ðñ 5õ Ý Ý Ý õ÷
ó ÷ +Ý DÝ <Ý 2õõ 2å .÷ñ ÷
ó õ (Ý ÷ñ ÷
 2Ý "Ý +ß )Ý "Ý Ý !÷ó ô}F�ô }Fó@rL   