@@ -6,7 +6,7 @@ from typing import Any, Final, Literal, NoReturn, overload
6
6
from typing_extensions import deprecated
7
7
8
8
from openpyxl import _Decodable , _VisibilityType
9
- from openpyxl .cell import _CellValue
9
+ from openpyxl .cell import _CellOrMergedCell , _CellValue
10
10
from openpyxl .cell .cell import Cell
11
11
from openpyxl .chart ._chart import ChartBase
12
12
from openpyxl .drawing .image import Image
@@ -51,6 +51,7 @@ class Worksheet(_WorkbookChild):
51
51
ORIENTATION_PORTRAIT : Final = "portrait"
52
52
ORIENTATION_LANDSCAPE : Final = "landscape"
53
53
54
+ _cells : dict [tuple [int , int ], _CellOrMergedCell ] # private but very useful to understand typing
54
55
row_dimensions : DimensionHolder [int , RowDimension ]
55
56
column_dimensions : DimensionHolder [str , ColumnDimension ]
56
57
row_breaks : RowBreak
@@ -85,19 +86,21 @@ class Worksheet(_WorkbookChild):
85
86
@property
86
87
def freeze_panes (self ) -> str | None : ...
87
88
@freeze_panes .setter
88
- def freeze_panes (self , topLeftCell : str | Cell | None = ... ) -> None : ...
89
- def cell (self , row : int , column : int , value : _CellValue | None = None ) -> Cell : ...
89
+ def freeze_panes (self , topLeftCell : str | Cell | None = None ) -> None : ...
90
+ def cell (self , row : int , column : int , value : _CellValue | None = None ) -> _CellOrMergedCell : ...
90
91
# An int is necessarily a row selection
91
92
@overload
92
- def __getitem__ (self , key : int ) -> tuple [Cell , ...]: ...
93
+ def __getitem__ (self , key : int ) -> tuple [_CellOrMergedCell , ...]: ...
93
94
# A slice is necessarily a row or rows, even if targetting a single cell
94
95
@overload
95
- def __getitem__ (self , key : slice ) -> tuple [Any , ...]: ... # tuple[AnyOf[Cell , tuple[Cell , ...]]]
96
+ def __getitem__ (self , key : slice ) -> tuple [Any , ...]: ... # tuple[AnyOf[_CellOrMergedCell , tuple[_CellOrMergedCell , ...]]]
96
97
# A str could be an individual cell, row, column or full range
97
98
@overload
98
- def __getitem__ (self , key : str ) -> Any : ... # AnyOf[Cell, tuple[Cell, ...], tuple[tuple[Cell, ...], ...]]
99
+ def __getitem__ (
100
+ self , key : str
101
+ ) -> Any : ... # AnyOf[_CellOrMergedCell, tuple[_CellOrMergedCell, ...], tuple[tuple[_CellOrMergedCell, ...], ...]]
99
102
def __setitem__ (self , key : str , value : _CellValue ) -> None : ...
100
- def __iter__ (self ) -> Iterator [tuple [Cell , ...]]: ...
103
+ def __iter__ (self ) -> Iterator [tuple [_CellOrMergedCell , ...]]: ...
101
104
def __delitem__ (self , key : str ) -> None : ...
102
105
@property
103
106
def min_row (self ) -> int : ...
@@ -132,11 +135,13 @@ class Worksheet(_WorkbookChild):
132
135
min_col : int | None = None ,
133
136
max_col : int | None = None ,
134
137
values_only : Literal [False ] = False ,
135
- ) -> Generator [tuple [Cell , ...], None , None ]: ...
138
+ ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
136
139
@overload
137
140
def iter_rows (
138
141
self , min_row : int | None , max_row : int | None , min_col : int | None , max_col : int | None , values_only : bool
139
- ) -> Generator [tuple [Cell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]: ...
142
+ ) -> (
143
+ Generator [tuple [_CellOrMergedCell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]
144
+ ): ...
140
145
@overload
141
146
def iter_rows (
142
147
self ,
@@ -146,9 +151,11 @@ class Worksheet(_WorkbookChild):
146
151
max_col : int | None = None ,
147
152
* ,
148
153
values_only : bool ,
149
- ) -> Generator [tuple [Cell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]: ...
154
+ ) -> (
155
+ Generator [tuple [_CellOrMergedCell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]
156
+ ): ...
150
157
@property
151
- def rows (self ) -> Generator [tuple [Cell , ...], None , None ]: ...
158
+ def rows (self ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
152
159
@property
153
160
def values (self ) -> Generator [tuple [_CellValue | None , ...]]: ...
154
161
@overload
@@ -173,11 +180,13 @@ class Worksheet(_WorkbookChild):
173
180
min_row : int | None = None ,
174
181
max_row : int | None = None ,
175
182
values_only : Literal [False ] = False ,
176
- ) -> Generator [tuple [Cell , ...], None , None ]: ...
183
+ ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
177
184
@overload
178
185
def iter_cols (
179
186
self , min_col : int | None , max_col : int | None , min_row : int | None , max_row : int | None , values_only : bool
180
- ) -> Generator [tuple [Cell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]: ...
187
+ ) -> (
188
+ Generator [tuple [_CellOrMergedCell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]
189
+ ): ...
181
190
@overload
182
191
def iter_cols (
183
192
self ,
@@ -187,9 +196,11 @@ class Worksheet(_WorkbookChild):
187
196
max_row : int | None = None ,
188
197
* ,
189
198
values_only : bool ,
190
- ) -> Generator [tuple [Cell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]: ...
199
+ ) -> (
200
+ Generator [tuple [_CellOrMergedCell , ...], None , None ] | Generator [tuple [str | float | datetime | None , ...], None , None ]
201
+ ): ...
191
202
@property
192
- def columns (self ) -> Generator [tuple [Cell , ...], None , None ]: ...
203
+ def columns (self ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
193
204
@property
194
205
def column_groups (self ) -> list [str ]: ...
195
206
def set_printer_settings (
@@ -241,11 +252,11 @@ class Worksheet(_WorkbookChild):
241
252
def append (
242
253
self ,
243
254
iterable : (
244
- list [Incomplete ]
245
- | tuple [Incomplete , ...]
255
+ list [Any ] # lists are invariant, but any subtype or union will do
256
+ | tuple [_CellOrMergedCell | str | float | datetime | None , ...]
246
257
| range
247
- | GeneratorType [Incomplete , object , object ]
248
- | dict [int | str , Incomplete ]
258
+ | GeneratorType [_CellOrMergedCell | str | float | datetime | None , object , object ]
259
+ | dict [int | str , str | float | datetime | None ]
249
260
),
250
261
) -> None : ...
251
262
def insert_rows (self , idx : int , amount : int = 1 ) -> None : ...
0 commit comments