@@ -6,7 +6,7 @@ from typing import Any, Final, Literal, NoReturn, overload
66from typing_extensions import deprecated
77
88from openpyxl import _Decodable , _VisibilityType
9- from openpyxl .cell import _CellValue
9+ from openpyxl .cell import _CellOrMergedCell , _CellValue
1010from openpyxl .cell .cell import Cell
1111from openpyxl .chart ._chart import ChartBase
1212from openpyxl .drawing .image import Image
@@ -51,6 +51,7 @@ class Worksheet(_WorkbookChild):
5151 ORIENTATION_PORTRAIT : Final = "portrait"
5252 ORIENTATION_LANDSCAPE : Final = "landscape"
5353
54+ _cells : dict [tuple [int , int ], _CellOrMergedCell ] # private but very useful to understand typing
5455 row_dimensions : DimensionHolder [int , RowDimension ]
5556 column_dimensions : DimensionHolder [str , ColumnDimension ]
5657 row_breaks : RowBreak
@@ -85,19 +86,21 @@ class Worksheet(_WorkbookChild):
8586 @property
8687 def freeze_panes (self ) -> str | None : ...
8788 @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 : ...
9091 # An int is necessarily a row selection
9192 @overload
92- def __getitem__ (self , key : int ) -> tuple [Cell , ...]: ...
93+ def __getitem__ (self , key : int ) -> tuple [_CellOrMergedCell , ...]: ...
9394 # A slice is necessarily a row or rows, even if targetting a single cell
9495 @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 , ...]]]
9697 # A str could be an individual cell, row, column or full range
9798 @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, ...], ...]]
99102 def __setitem__ (self , key : str , value : _CellValue ) -> None : ...
100- def __iter__ (self ) -> Iterator [tuple [Cell , ...]]: ...
103+ def __iter__ (self ) -> Iterator [tuple [_CellOrMergedCell , ...]]: ...
101104 def __delitem__ (self , key : str ) -> None : ...
102105 @property
103106 def min_row (self ) -> int : ...
@@ -132,11 +135,13 @@ class Worksheet(_WorkbookChild):
132135 min_col : int | None = None ,
133136 max_col : int | None = None ,
134137 values_only : Literal [False ] = False ,
135- ) -> Generator [tuple [Cell , ...], None , None ]: ...
138+ ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
136139 @overload
137140 def iter_rows (
138141 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+ ): ...
140145 @overload
141146 def iter_rows (
142147 self ,
@@ -146,9 +151,11 @@ class Worksheet(_WorkbookChild):
146151 max_col : int | None = None ,
147152 * ,
148153 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+ ): ...
150157 @property
151- def rows (self ) -> Generator [tuple [Cell , ...], None , None ]: ...
158+ def rows (self ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
152159 @property
153160 def values (self ) -> Generator [tuple [_CellValue | None , ...]]: ...
154161 @overload
@@ -173,11 +180,13 @@ class Worksheet(_WorkbookChild):
173180 min_row : int | None = None ,
174181 max_row : int | None = None ,
175182 values_only : Literal [False ] = False ,
176- ) -> Generator [tuple [Cell , ...], None , None ]: ...
183+ ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
177184 @overload
178185 def iter_cols (
179186 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+ ): ...
181190 @overload
182191 def iter_cols (
183192 self ,
@@ -187,9 +196,11 @@ class Worksheet(_WorkbookChild):
187196 max_row : int | None = None ,
188197 * ,
189198 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+ ): ...
191202 @property
192- def columns (self ) -> Generator [tuple [Cell , ...], None , None ]: ...
203+ def columns (self ) -> Generator [tuple [_CellOrMergedCell , ...], None , None ]: ...
193204 @property
194205 def column_groups (self ) -> list [str ]: ...
195206 def set_printer_settings (
@@ -241,11 +252,11 @@ class Worksheet(_WorkbookChild):
241252 def append (
242253 self ,
243254 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 , ...]
246257 | 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 ]
249260 ),
250261 ) -> None : ...
251262 def insert_rows (self , idx : int , amount : int = 1 ) -> None : ...
0 commit comments