hyb
2025-12-31 6cdcd01f77e11b72c323603e27ebdb85b15223c9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
Ë
dñúh´kãóœ—dZddlmZddlmZddlmZddlmZddl    m
Z
ddl m Z m Z mZmZddlmZmZdd    lmZdd
lmZdd lmZdd lmZdd lmZddlmZddlm Z m!Z!m"Z"ddl#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8m9Z9ddl:m;Z;ddl<m=Z=ddl>m?Z?ddl@mAZAmBZBmCZCmDZDGd„de«ZEd„ZFy )!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óN—eZdZdZdZdZdZdZdZdZ    dZ
d    Z d
Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdUd„Zd„Zed„«Zed„«Zed„«Zed„«Z ed„«Z!ed „«Z"e"jFdUd!„«Z"dUd"„Z$d#„Z%d$„Z&d%„Z'd&„Z(d'„Z)d(„Z*ed)„«Z+ed*„«Z,ed+„«Z-ed,„«Z.d-„Z/ed.„«Z0dVd/„Z1dWd0„Z2ed1„«Z3ed2„«Z4dVd3„Z5dWd4„Z6ed5„«Z7ed6„«Z8d7„Z9d8„Z:dUd9„Z;dUd:„Z<d;„Z=ed<„«Z>d=„Z?dXd>„Z@d?„ZAeeBd@«dA„««ZCdXdB„ZDdC„ZEdYdD„ZFdZdE„ZGdZdF„ZHdZdG„ZIdZdH„ZJd[dI„ZKdWdJ„ZLdK„ZMdL„ZNdM„ZOedN„«ZPePjFdO„«ZPedP„«ZQeQjFdQ„«ZQedR„«ZRedS„«ZSeSjFdT„«ZSy)\Ú    Worksheetz…Represents 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+xmlrréÚvisibleÚhiddenÚ
veryHiddenÚ1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9Ú10Ú11ÚportraitÚ    landscapeNcóR—tj|||«|j«y©N)rÚ__init__Ú_setup)ÚselfÚparentÚtitles   úOH:\Change_password\venv_build\Lib\site-packages\openpyxl/worksheet/worksheet.pyrDzWorksheet.__init__is€Ü×Ñ  f¨eÔ4Ø  ‰  ócó<—t||j¬«|_t||j¬«|_t «|_t«|_i|_    g|_
g|_ t«|_ d|_g|_t!«|_t%«|_g|_t+«|_g|_d|_t3|¬«|_t7«|_d|_d|_t?«|_ tC«|_"tG«|_$tK«|_&tO«|_(d|_)tU«|_+tY«|_-d|_.t_«|_0tc«|_2tg«|_4y)N)r0Údefault_factoryr2)r0r)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©rFs rIrEzWorksheet._setupmsC€Ü-¸Ø>B¿m¹môMˆÔä!0¸4ØAE×AQÑAQô"SˆÔä"›*ˆŒÜ"›*ˆŒØˆŒ ؈Œ ؈Œ Ü%Ó'ˆŒ
؈Œ ؈ŒÜ*Ó,ˆÔÜ “{ˆŒ ؈Œ Ü 2Ó 4ˆÔØˆÔØ$ˆÔÜ(°4Ô8ˆŒÜ)›^ˆÔØˆÔØˆÔÜ$›;ˆÔÜ'›MˆÔÜ"“_ˆŒ
Ü)Ó+ˆŒÜ,Ó.ˆÔàˆÔÜ%›<ˆÔÜ&?Ó&AˆÔ#Ø"ˆÔÜ 3Ó 5ˆÔÜ1Ó3ˆÔÜ%›ˆrJcó.—|jjSrC)reÚactiveros rIÚ
sheet_viewzWorksheet.sheet_view“s€àz‰zנѠРrJcóH—|jjdjS©Nr)rrÚ    selectionÚsqrefros rIÚ selected_cellzWorksheet.selected_cell˜s€à‰×(Ñ(¨Ñ+×1Ñ1Ð1rJcóH—|jjdjSrt)rrruÚ
activeCellros rIÚ active_cellzWorksheet.active_cells€à‰×(Ñ(¨Ñ+×6Ñ6Ð6rJcóä—i}|jj«D]P}|jdk(sŒt|jt
«sŒ.|jj ||j<ŒR|S)zHReturns a dictionary of cells with array formulae and the cells in arrayÚf)rSÚvaluesÚ    data_typeÚ
isinstanceÚvaluer)ÚrefÚ
coordinate)rFÚresultÚcs   rIÚarray_formulaezWorksheet.array_formulae¢s\€ðˆØ—‘×#Ñ#Ó%ò    7ˆA؏{‰{˜cÓ!ܘaŸg™g¤|Õ4Ø+,¯7©7¯;©;F˜1Ÿ<™<Ò(ð    7ðˆ rJcó.—|jjSrC)rrÚ showGridLinesros rIÚshow_gridlineszWorksheet.show_gridlines­s€à‰×,Ñ,Ð,rJcóp—|jj |jjjSyrC)rrÚpaneÚ topLeftCellros rIÚ freeze_paneszWorksheet.freeze_panes²s-€à ?‰?× Ñ Ð +Ø—?‘?×'Ñ'×3Ñ3Ð 3ð ,rJcó¾—t|t«r |j}|dk(rd}|sd|j_yt |«\}}|j}t |dd¬«|_d|jd_|dkDr|dz
|j_|dkDrc|dz
|j_    d|j_
d|jd_|dkDr%d|jd_d|j_
|dkDr_|dkDrYt|j«}|jdtddd¬    ««|jdtddd¬    ««||_yyy)
NÚA1ÚtopRightÚfrozen)r‹Ú
activePaneÚstaterrÚ
bottomLeftÚ bottomRight)rŠryrv)rr r‚rrrŠr rruÚxSplitÚySplitr‘ÚlistÚinsertr)rFr‹ÚrowÚcolumnÚviewÚsels      rIrŒzWorksheet.freeze_panes¸s:€ä k¤4Ô (Ø%×0Ñ0ˆKØ ˜$Ò ØˆKáØ#'ˆDO‰OÔ  Ø ä)¨+Ó6‰ ˆˆVà‰ˆÜ [Ø#-Ø&ô(ˆŒ    ð",ˆ‰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Ø ˆDNð    "ˆ7rJcóf—|dks|dkr td«‚|j||«}|||_|S)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
        rz'Row or column values must be at least 1)Ú
ValueErrorÚ    _get_cellr€)rFr™ršr€Úcells     rIr zWorksheet.cellÜs?€ð* Š7f˜q’jÜÐFÓGÐ Gà~‰~˜c 6Ó*ˆØ Р؈DŒJàˆ rJcó¸—d|cxkrdksntd|›«‚||f}||jvrt|||¬«}|j|«|j|S)zƒ
        Internal method for getting a cell from a worksheet.
        Will create a new cell if one doesn't already exist.
        rizCRow numbers must be between 1 and 1048576. Row number supplied was ©r™rš)ržrSr Ú    _add_cell)rFr™ršr‚r s     rIrŸzWorksheet._get_cellûsd€ð
3Ô ˜Ô ÜÐbÐcfÐbgÐhÓiÐ iؘ6]ˆ
ؘTŸ[™[Ñ(ܘ #¨fÔ5ˆDØ N‰N˜4Ô  Ø{‰{˜:Ñ&Ð&rJcóŒ—|j}|j}t||j«|_||j||f<y)z:
        Internal method for adding cell objects.
        N)Úcol_idxr™ÚmaxrhrS)rFr ršr™s    rIr£zWorksheet._add_cell    s=€ð—‘ˆØh‰hˆÜ  T×%6Ñ%6Ó7ˆÔØ%)ˆ ‰ S˜&MÒ"rJcó²—t|t«rat|j|jg«st dj |««‚dj |j|j«}t|t«r t|«}t|«\}}}}t||||g«st dj |««‚|€'t|j||««}||k(r|d}|S|€4t|j|||j|¬««}||k(r|d}|Sd|vr|j||«St|j||||¬««S)alConvenience 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Ÿ)rFÚkeyr¨r©rªr«ÚcolsÚrowss        rIÚ __getitem__zWorksheet.__getitem__s[€ô 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Ñ*ˆ˜' 7äG˜W g¨wÐ7Ô8ÜÐE×LÑLÈSÓQÓRÐ Rà ˆ?ܘŸ™¨°Ó9Ó:ˆDؘ'Ò!ؘA‘wØˆKØ ˆ?ܘŸ™°ÀØ04·±Èð(óRóSˆDà˜'Ò!ؘA‘wØˆKØ c‰>Ø—>‘> '¨7Ó3Ð 3ܐT—^‘^¨G¸WØ,3¸Wð$óFóGð    GrJcó—|||_yrC©r€)rFrºr€s   rIÚ __setitem__zWorksheet.__setitem__<s €ØˆˆS‰    rJcó"—|j«SrC©r¸ros rIÚ__iter__zWorksheet.__iter__@s€Ø~‰~ÓÐrJcó`—t|«\}}||f|jvr|j||f=yyrC)r rS)rFrºr™ršs    rIÚ __delitem__zWorksheet.__delitem__Ds5€Ü)¨#Ó.‰ ˆˆVØ ˆ=˜DŸK™KÑ 'Ø— ‘ ˜S &˜MÑ*ð (rJcóR—d}|jrt|j«d}|S)zLThe minimum row index containing data (1-based)
 
        :type: int
        rr©rSÚmin)rFr©s  rIr©zWorksheet.min_rowJó(€ð ˆØ ;Š;ܘ$Ÿ+™+Ó& qÑ)ˆG؈rJcóR—d}|jrt|j«d}|S)zLThe maximum row index containing data (1-based)
 
        :type: int
        rr©rSr¦)rFr«s  rIr«zWorksheet.max_rowVrÉrJcóZ—d}|jrtd„|jD««}|S)zOThe minimum column index containing data (1-based)
 
        :type: int
        rc3ó&K—|]    }|d–—Œ y­w©rN©©Ú.0r„s  rIú    <genexpr>z'Worksheet.min_column.<locals>.<genexpr>jóèø€Ò4 1˜!˜A$Ñ4ùó‚rÇ)rFr¨s  rIÚ
min_columnzWorksheet.min_columnbó)€ð ˆØ ;Š;ÜÑ4¨¯ © Ô4Ó4ˆG؈rJcóZ—d}|jrtd„|jD««}|S)zOThe maximum column index containing data (1-based)
 
        :type: int
        rc3ó&K—|]    }|d–—Œ y­wrÎrÏrÐs  rIrÒz'Worksheet.max_column.<locals>.<genexpr>vrÓrÔrË)rFrªs  rIr¹zWorksheet.max_columnnrÖrJcóD—|jrwt«}t«}|jD]'\}}|j|«|j|«Œ)t|«}t|«}t    |«}t    |«}nyt |«›|›dt |«›|›S)zoReturn the minimum bounding range for all cells containing data (ex. 'A1:M24')
 
        :rtype: string
        zA1:A1r¬)rSÚsetÚaddr¦rÈr    )    rFr¼r»r™Úcolr«rªr¨r©s             rIÚcalculate_dimensionzWorksheet.calculate_dimensionzs—€ð
;Š;Ü“5ˆDÜ“5ˆDØ ŸK™Kò ‘SØ—‘˜” Ø—‘˜• ð ô˜$“iˆGܘ$“iˆGܘ$“iˆGܘ$“i‰Gàä# GÓ,Ð-¨g¨Y°aÔ8IÈ'Ó8RÐ7SÐT[ÐS\Ð]Ð]rJcó"—|j«S)z1Returns the result of :func:`calculate_dimension`)rÝros rIÚ
dimensionszWorksheet.dimensionss€ð×'Ñ'Ó)Ð)rJcó֗|jdk(rt||||g«s td«S|xsd}|xsd}|xs |j}|xs |j}|j |||||«S)aï
        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
        rrÏr)rhrµÚiterr¹r«Ú _cells_by_row)rFr©r«r¨rªÚ values_onlys      rIr¸zWorksheet.iter_rows•st€ð6 × Ñ  Ò !¬#¨w¸ÀÈ'Ð.SÔ*Tܘ“8ˆOð’,˜QˆØ’,˜QˆØÒ,˜TŸ_™_ˆØÒ)˜TŸ\™\ˆà×!Ñ! '¨7°G¸WÀkÓRÐRrJc#󲇇K—t||dz«D]?Šˆˆfd„t||dz«D«}|rtd„|D««–—Œ3t|«–—ŒAy­w)Nrc3óD•K—|]}‰j‰|¬«–—Œy­w©r¢N©r )rÑršr™rFs  €€rIrÒz*Worksheet._cells_by_row.<locals>.<genexpr>¾søèø€Òa¸6T—Y‘Y 3¨vY×6Ñaùóƒ c3ó4K—|]}|j–—Œy­wrCr¿©rÑr s  rIrÒz*Worksheet._cells_by_row.<locals>.<genexpr>Àóèø€Ò9¨4˜DŸJJÑ9ùó‚©Úranger¶)rFr¨r©rªr«rãÚcellsr™s`      @rIrâzWorksheet._cells_by_row¼sWùèø€Ü˜ '¨A¡+Ó.ò    #ˆCÜaÄUÈ7ÐT[Ð^_ÑT_ÓE`ÔaˆEÙÜÑ9°5Ô9Ó9Ó9ä˜E“lÓ"ñ     #ùó„AAcó"—|j«S)zfProduces all cells in the worksheet, by row (see :func:`iter_rows`)
 
        :type: generator
        rÂros rIr¼zWorksheet.rowsÅs€ð ~‰~ÓÐrJc#óBK—|jd¬«D]}|–—Œy­w)zTProduces all cell values in the worksheet, by row
 
        :type: generator
        T)rãNrÂ)rFr™s  rIr}zWorksheet.valuesÎs'èø€ð —>‘>¨d>Ó3ò    ˆCØ‹Iñ    ùs‚có֗|jdk(rt||||g«s td«S|xsd}|xsd}|xs |j}|xs |j}|j |||||«S)aò
        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
        rrÏr)rhrµrár¹r«Ú _cells_by_col)rFr¨rªr©r«rãs      rIr·zWorksheet.iter_colsØsr€ð6 × Ñ  Ò !¬#¨w¸ÀÈ'Ð.RÔ*Sܘ“8ˆOà’,˜QˆØ’,˜QˆØÒ,˜TŸ_™_ˆØÒ)˜TŸ\™\ˆà×!Ñ! '¨7°G¸WÀkÓRÐRrJc#󲇇K—t||dz«D]?Šˆˆfd„t||dz«D«}|rtd„|D««–—Œ3t|«–—ŒAy­w)z%
        Get cells by column
        rc3óD•K—|]}‰j|‰¬«–—Œy­wrærç)rÑr™ršrFs  €€rIrÒz*Worksheet._cells_by_col.<locals>.<genexpr>s&øèø€ò>Øð—Y‘Y 3¨vY×6ñ>ùrèc3ó4K—|]}|j–—Œy­wrCr¿rês  rIrÒz*Worksheet._cells_by_col.<locals>.<genexpr>rërìNrí)rFr¨r©rªr«rãrïršs`      @rIrôzWorksheet._cells_by_colþs[ùèø€ô˜G W¨Q¡YÓ/ò    #ˆFô>Ü#(¨°'¸!±)Ó#<ô>ˆEáÜÑ9°5Ô9Ó9Ó9ä˜E“lÓ"ñ     #ùrðcó"—|j«S)zGProduces all cells in the worksheet, by column  (see :func:`iter_cols`))r·ros rIÚcolumnszWorksheet.columns s€ð~‰~ÓÐrJcó¾—|jj«Dcgc]5}|jsŒ|j|jkDsŒ*|j‘Œ7c}Scc}w)zK
        Return a list of column ranges where more than one column
        )rPr}rÈr¦rî)rFÚcds  rIÚ column_groupszWorksheet.column_groupssF€ð
$(×#9Ñ#9×#@Ñ#@Ó#BÖa˜RÀbÇfÃfÐQS×QWÑQWÐZ\×Z`ÑZ`ÓQ`—“ÒaÐaùÒasA¯AÁ    AcóH—||j_||j_y)zSet printer settings N)r_Ú    paperSizeÚ orientation)rFÚ
paper_sizerÿs   rIÚset_printer_settingszWorksheet.set_printer_settingss€ð%/ˆ‰Ô!Ø&1ˆ‰Õ#rJcó:—|jj|«y)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)rFÚdata_validations  rIÚadd_data_validationzWorksheet.add_data_validation s€ð
     ×Ñ×$Ñ$ _Õ5rJcóL—|||_|jj|«y)zd
        Add a chart to the sheet
        Optionally provide a cell for the top-left anchor
        N)ÚanchorrTr)rFÚchartrs   rIÚ    add_chartzWorksheet.add_chart(s#€ð
Ð Ø!ˆEŒLØ  ‰ ×јEÕ"rJcóL—|||_|jj|«y)zf
        Add an image to the sheet.
        Optionally provide a cell for the top-left anchor
        N)rrUr)rFÚimgrs   rIÚ    add_imagezWorksheet.add_image2s#€ð
Р؈CŒJØ  ‰ ×јCÕ rJcóú—|jj|j«r$tdj    |j««‚t |d«s t d«|jj|«y)zr
        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)    rGÚ_duplicate_nameÚnameržr²ÚhasattrrrZrÛ)rFÚtables  rIÚ    add_tablezWorksheet.add_table<sZ€ð ;‰;× &Ñ & u§z¡zÔ 2ÜÐA×HÑHÈÏÉÓTÓUÐ Uܐt˜[Ô)Ü ÐIÔ JØ  ‰ ×јÕrJcó—|jSrC)rZros rIÚtableszWorksheet.tablesIs €à|‰|ÐrJcó:—|jj|«yrC)r[r)rFÚpivots  rIÚ    add_pivotzWorksheet.add_pivotNs€Ø  ‰ ×јEÕ"rJcó°—|€t|||||¬«}|j}t||«}|jj    |«|j |«y)z@ Set merge on a cell range.  Range is a cell range (e.g. A1:E1) N©Ú range_stringr¨r©rªr«)r"Úcoordr#rYrÛÚ_clean_merge_range)rFrÚ    start_rowÚ start_columnÚend_rowÚ
end_columnÚcrÚmcrs        rIÚ merge_cellszWorksheet.merge_cellsRsU€à Рܨ ¸lÐT]Ø(°'ô;ˆBàŸ8™8ˆLܘd LÓ1ˆØ ×Ñ×јcÔ"Ø ×Ñ Õ$rJcóž—|j}t|«|D]!\}}t|||«|j||f<Œ#|j    «y)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 rSr²)rFr"rïr™rÜs     rIrzWorksheet._clean_merge_range]sK€ð —    ‘    ˆÜ ˆUŒ Øò    ?‰HˆCÜ$.¨t°S¸#Ó$>ˆDK‰K˜˜S˜Ò !ð    ?à 
‰
 rJzUse ws.merged_cells.rangescó4—|jjddS)zReturn a copy of cell rangesN)rYÚrangesros rIÚmerged_cell_rangeszWorksheet.merged_cell_rangesjs€ð× Ñ ×'Ñ'©Ð*Ð*rJcó2—t|||||¬«}|j|jvr$tdj    |j««‚|jj |«|j }t|«|D]\}}    |j||    f=Œy)zC Remove merge on a cell range.  Range is a cell range (e.g. A1:E1) rzCell range {0} is not mergedN)    r"rrYržr²Úremoverïr%rS)
rFrrrrr r!rïr™rÜs
          rIÚ unmerge_cellszWorksheet.unmerge_cellsqsŽ€ä  L¸,ÐPYØ(°'ô;ˆð 8‰8˜4×,Ñ,Ñ ,ÜÐ;×BÑBÀ2Ç8Á8ÓLÓMÐ Mà ×Ñ× Ñ  Ô$à—‘ˆÜ ˆUŒ Øò    (‰HˆCØ— ‘ ˜S #˜JÑ'ñ    (rJcóˆ—|jdz}t|tttf«s t |«rŠt |d«D]s\}}t|t«r>|}|jr|j|k7r td«‚||_||_
||_ nt||||¬«}||j||f<Œu||_yt|t«r[|j«D]@\}}t|t«r t!|«}t||||¬«}||j||f<ŒB||_y|j#|«||_y)aµ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
 
        rz,Cells cannot be copied from other worksheets)r™ršr€N)rhrr—r¶rîrÚ    enumerater rGržršr™rSÚdictÚitemsr´rÚ _invalid_row)rFÚiterableÚrow_idxr¥Úcontentr s      rIrzWorksheet.appends7€ð$×#Ñ# aÑ'ˆä x¤$¬¬uÐ!5Ô 6ܘ8Ô$Ü$-¨h¸Ó$:ò 7Ñ ˜Ü˜g¤tÔ,à"DØ—{’{ t§{¡{°dÒ':Ü(Ð)WÓXÐXØ"&D”KØ")D”KØ&D•Hä ¨'¸'ÈÔQDØ26— ‘ ˜W gÐ.Ò/ð 7ð.$ˆÕô˜¤$Ô 'Ø$,§N¡NÓ$4ò 7Ñ ˜Ü˜g¤sÔ+Ü6°wÓ?GܘD g°gÀWÔMØ26— ‘ ˜W gÐ.Ò/ð     7ð$ˆÕð × Ñ ˜hÔ 'à#ˆÕrJcó*—|dkD}d}d}|dk(r|j|¬«}|}d}    n|j|¬«}|}d}    t|«}t|jt |    «|¬«D])\}
} |r|
|krŒ|r| |krŒ|j |
| ||«Œ+y)zB
        Move either rows or columns around by the offset
        rr™)r©)r¨r)rºÚreverseN)r¸r·r—ÚsortedrSrÚ
_move_cell) rFr©r¨ÚoffsetÚ
row_or_colr5Ú
row_offsetÚ
col_offsetrïrºr™ršs             rIÚ _move_cellszWorksheet._move_cells±s¯€ð˜1‘*ˆØˆ
؈
ð ˜Ò Ø—N‘N¨7NÓ3ˆE؈J؉Cà—N‘N¨7NÓ3ˆE؈J؈CܐU“ ˆä! $§+¡+´:¸c³?ÈGÔTò    A‰KˆCÙ˜3 š=ØÙ˜V gÒ-Øà O‰O˜C ¨°ZÕ @ñ     ArJcóN—|j||d¬«|j|_y)z4
        Insert row or rows before row==idx
        r™©r©r8r9N)r<r«rh©rFÚidxÚamounts   rIÚ insert_rowszWorksheet.insert_rowsÍs%€ð     ×Ñ ¨VÀÐÔFØ ŸL™LˆÕrJcó,—|j||d¬«y)z:
        Insert column or columns before col==idx
        rš©r¨r8r9N)r<r?s   rIÚ insert_colszWorksheet.insert_colsÕs€ð     ×Ñ ¨VÀÐÕIrJcóR—t|||j«}|j||z| d¬«|j}|jdz}|D]3}t ||«D]"}||f|j vsŒ|j ||f=Œ$Œ5|j|_|j sd|_yy)z2
        Delete row or rows from row==idx
        r™r>rrN)Ú_gutterr«r<rÕr¹rîrSrh)rFr@rAÚ    remainderr¨rªr™rÜs        rIÚ delete_rowszWorksheet.delete_rowsÜs±€ô
˜C ¨¯©Ó6ˆ    à ×Ñ  V¡°V°GÈÐÔNð—/‘/ˆØ—/‘/ AÑ%ˆØò    .ˆCܘW gÓ.ò .Ø˜: §¡Ò,ØŸ ™  C¨ HÑ-ñ .ð    .ð!ŸL™LˆÔ؏{Š{Ø !ˆDÕ ðrJcó—t|||j«}|j||z| d¬«|j}|jdz}|D]3}t ||«D]"}||f|j vsŒ|j ||f=Œ$Œ5y)z8
        Delete column or columns from col==idx
        ršrDrN)rGr¹r<r©r«rîrS)rFr@rArHr©r«rÜr™s        rIÚ delete_colszWorksheet.delete_colsñs€ô
˜C ¨¯©Ó9ˆ    à ×Ñ  V¡°V°GÈÐÔQð—,‘,ˆØ—,‘, Ñ"ˆØò    .ˆCܘW gÓ.ò .Ø˜: §¡Ò,ØŸ ™  C¨ HÑ-ñ .ñ    .rJcóz—t|t«r t|«}t|t«s td«‚|s|sy|dkD}|dkD}|rt    |j
|¬«}nt    |j |¬«}tj|«D]\}}    |j||    |||«Œ|j||¬«y)a
        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)r5)Ú    row_shiftÚ    col_shift) rr´r"ržr6r¼r»rÚ from_iterabler7Úshift)
rFÚ
cell_ranger¼r»Ú    translateÚdownÚrightrïr™rÜs
          rIÚ
move_rangezWorksheet.move_ranges²€ô j¤#Ô &Ü" :Ó.ˆJܘ*¤iÔ0ÜÐBÓCÐ CÙ™DØ àa‰xˆØq‘ˆá ܘ:Ÿ?™?°DÔ9‰Eä˜:Ÿ?™?°EÔ:ˆEä×+Ñ+¨EÓ2ò    =‰HˆCØ O‰O˜C  d¨D°)Õ <ð    =ð    ×Ñ 4°4ÐÕ8rJcó~—|j||«}|j|z}|j|z}||j||f<|j|j|jf=||_||_|rI|jdk(r9t |j |j«}    |    j||¬«|_yyy)zn
        Move a cell from one place to another.
        Delete at old index
        Rebase coordinate
        r|)Ú    row_deltaÚ    col_deltaN)    rŸr™ršrSr~rr€r‚Útranslate_formula)
rFr™ršr:r;rRr Únew_rowÚnew_colÚts
          rIr7zWorksheet._move_cell!sª€ð ~‰~˜c 6Ó*ˆØ—(‘(˜ZÑ'ˆØ—+‘+ 
Ñ*ˆØ(,ˆ ‰ G˜WÐ$Ñ%Ø K‰K˜Ÿ™ 4§;¡;Ð/Ð 0؈ŒØˆŒ Ù ˜Ÿ™¨3Ò.ܘ4Ÿ:™: t§¡Ó7ˆAØ×,Ñ,°zÈZÐ,ÓXˆDJð/ˆ9rJcóH—tdjt|«««‚)NzQValue must be a list, tuple, range or generator, or a dict. Supplied value is {0})Ú    TypeErrorr²Útype)rFr1s  rIr0zWorksheet._invalid_row3s$€ÜÐk×rÑrÜ ‹Nóóð    rJcó—t|«S)z(Dimension factory for column information)rros rIrOzWorksheet._add_column9s€ô˜tÓ$Ð$rJcó—t|«S)z%Dimension factory for row information)rros rIrMzWorksheet._add_row>s€ô˜DÓ!Ð!rJcóF—|jrt|j«Sy)z7Rows to be printed at the top of every page (ex: '1:3')N)rar´ros rIÚprint_title_rowszWorksheet.print_title_rowsDó#€ð × Ò Üt×'Ñ'Ó(Ð (ð rJcó*—|t|«|_yy)zV
        Set rows to be printed on the top of every page
        format `1:3`
        N)r,ra)rFr¼s  rIrczWorksheet.print_title_rowsKó€ð Ð Ü'¨›~ˆDÕ ð rJcóF—|jrt|j«Sy)z@Columns to be printed at the left side of every page (ex: 'A:C')N)rbr´ros rIÚprint_title_colszWorksheet.print_title_colsUrdrJcó*—|t|«|_yy)zX
        Set cols to be printed on the left of every page
        format ``A:C`
        N)r+rb)rFr»s  rIrhzWorksheet.print_title_cols\rfrJcóp—t|j|j|j¬«}t    |«S)N)r»r¼rH)r*rbrarHr´)rFÚtitless  rIÚ print_titleszWorksheet.print_titlesfs-€ä $×"2Ñ"2¸×9IÑ9IÐQU×Q[ÑQ[Ô\ˆÜ6‹{ÐrJcób—|j|j_t|j«S)zˆ
        The print area for the worksheet, or None if not set. To set, supply a range
        like 'A1:D4' or a list of ranges.
        )rHrcr´ros rIÚ
print_areazWorksheet.print_areals'€ð "&§¡ˆ×ÑÔܐ4×#Ñ#Ó$Ð$rJcóê—|st«|_yt|t«rtj|«|_yt |d«r*tjdj |««|_yy)zŠ
        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-rcrr´Ú from_stringrÚjoin)rFr€s  rIrnzWorksheet.print_areavsX€ñ Ü(›{ˆDÕ Ü ˜œsÔ #Ü(×4Ñ4°UÓ;ˆDÕ Ü U˜JÔ 'Ü(×4Ñ4°S·X±X¸e³_ÓEˆDÕ ð(rJrC)NNNNF)F)NNNNN)NNrr™)r)rrF)TÚ__name__Ú
__module__Ú __qualname__Ú__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_LANDSCAPErDrEÚpropertyrrrwrzr…rˆrŒÚsetterr rŸr£r½rÀrÃrÅr©r«rÕr¹rÝrßr¸râr¼r}r·rôrùrürrr    r rrrr#rrr(r+rr<rBrErIrKrUr7r0rOrMrcrhrlrnrÏrJrIr/r/Ds\„ñð€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óñ
FrJr/có^—tt|dz|z
|«t||z|«dz«}|S)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È)r@r8Úmax_valÚgutters    rIrGrG„s5€ô ”3w˜q‘y Ñ'¨Ó-¬s°3°v±:¸wÓ/GÈÑ/IÓ J€FØ €MrJN)GrvÚ    itertoolsrÚoperatorrÚinspectrÚwarningsrÚopenpyxl.compatrÚopenpyxl.utilsrr    r
r Ú openpyxl.cellr r Úopenpyxl.formatting.formattingrÚopenpyxl.packaging.relationshiprÚopenpyxl.workbook.childrÚopenpyxl.workbook.defined_namerÚopenpyxl.formula.translaterÚdatavalidationrÚpagerrrrßrrrrrfrÚfiltersrrerrr rQr!r"Úmerger#Ú
propertiesr$Ú    pagebreakr%r&Úscenarior'rr(Úformular)Úprint_settingsr*r+r,r-r/rGrÏrJrIú<module>r§sŸðñ5õÝÝÝõ÷
ó÷ +ÝDÝ<Ý2õõ2å.÷ñ÷
óõ (Ý÷ñ÷
2Ý"Ý+ß)Ý"ÝÝ!÷óô} Fô} Fó@rJ