@@ -2,7 +2,7 @@ from _typeshed import Incomplete, Unused
2
2
from collections .abc import Iterator
3
3
from datetime import datetime
4
4
from typing import Any , Final
5
- from typing_extensions import deprecated
5
+ from typing_extensions import TypeAlias , deprecated
6
6
from zipfile import ZipFile
7
7
8
8
from openpyxl import _Decodable , _ZipFileFileProtocol
@@ -14,6 +14,9 @@ from openpyxl.worksheet._read_only import ReadOnlyWorksheet
14
14
from openpyxl .worksheet ._write_only import WriteOnlyWorksheet
15
15
from openpyxl .worksheet .worksheet import Worksheet
16
16
17
+ _WorkbookWorksheet : TypeAlias = Worksheet | WriteOnlyWorksheet | ReadOnlyWorksheet
18
+ _WorkbookSheet : TypeAlias = _WorkbookWorksheet | Chartsheet
19
+
17
20
INTEGER_TYPES : Final [tuple [type [int ]]]
18
21
19
22
class Workbook :
@@ -32,9 +35,9 @@ class Workbook:
32
35
rels : Incomplete
33
36
calculation : Incomplete
34
37
views : Incomplete
35
- # Private, but useful as a reference of what "sheets" can be for other types
38
+ # Useful as a reference of what "sheets" can be for other types
36
39
# ExcelReader can add ReadOnlyWorksheet in read_only mode.
37
- _sheets : list [Worksheet | WriteOnlyWorksheet | Chartsheet | ReadOnlyWorksheet ]
40
+ # _sheets: list[_WorkbookSheet ]
38
41
def __init__ (self , write_only : bool = False , iso_dates : bool = False ) -> None : ...
39
42
@property
40
43
def epoch (self ) -> datetime : ...
@@ -49,38 +52,43 @@ class Workbook:
49
52
@property
50
53
def excel_base_date (self ) -> datetime : ...
51
54
@property
52
- def active (self ) -> _WorkbookChild | None : ...
55
+ def active (self ) -> _WorkbookSheet | None : ...
53
56
@active .setter
54
- def active (self , value : _WorkbookChild | int ) -> None : ...
57
+ def active (self , value : Worksheet | Chartsheet | int ) -> None : ...
58
+ # read_only workbook cannot call this method
55
59
# Could be generic based on write_only
56
60
def create_sheet (
57
61
self , title : str | _Decodable | None = None , index : int | None = None
58
62
) -> Any : ... # AnyOf[WriteOnlyWorksheet, Worksheet]
59
63
def move_sheet (self , sheet : Worksheet | str , offset : int = 0 ) -> None : ...
60
- def remove (self , worksheet : Worksheet ) -> None : ...
64
+ def remove (self , worksheet : _WorkbookSheet ) -> None : ...
61
65
@deprecated ("Use wb.remove(worksheet) or del wb[sheetname]" )
62
- def remove_sheet (self , worksheet : Worksheet ) -> None : ...
66
+ def remove_sheet (self , worksheet : _WorkbookSheet ) -> None : ...
63
67
def create_chartsheet (self , title : str | _Decodable | None = None , index : int | None = None ) -> Chartsheet : ...
64
68
@deprecated ("Use wb[sheetname]" )
65
- def get_sheet_by_name (self , name : str ) -> Worksheet : ...
69
+ def get_sheet_by_name (self , name : str ) -> _WorkbookSheet : ...
66
70
def __contains__ (self , key : str ) -> bool : ...
67
- def index (self , worksheet : Worksheet ) -> int : ...
71
+ def index (self , worksheet : _WorkbookWorksheet ) -> int : ...
68
72
@deprecated ("Use wb.index(worksheet)" )
69
- def get_index (self , worksheet : Worksheet ) -> int : ...
70
- def __getitem__ (self , key : str ) -> Worksheet : ...
73
+ def get_index (self , worksheet : _WorkbookWorksheet ) -> int : ...
74
+ def __getitem__ (self , key : str ) -> _WorkbookSheet : ...
71
75
def __delitem__ (self , key : str ) -> None : ...
72
- def __iter__ (self ) -> Iterator [Worksheet ]: ...
76
+ def __iter__ (self ) -> Iterator [_WorkbookWorksheet ]: ...
73
77
@deprecated ("Use wb.sheetnames" )
74
- def get_sheet_names (self ) -> list [Worksheet ]: ...
78
+ def get_sheet_names (self ) -> list [str ]: ...
75
79
@property
76
- def worksheets (self ) -> list [Worksheet ]: ...
80
+ def worksheets (self ) -> list [_WorkbookWorksheet ]: ...
77
81
@property
78
82
def chartsheets (self ) -> list [Chartsheet ]: ...
79
83
@property
80
84
def sheetnames (self ) -> list [str ]: ...
81
85
@deprecated ("Assign scoped named ranges directly to worksheets or global ones to the workbook. Deprecated in 3.1" )
82
86
def create_named_range (
83
- self , name : str , worksheet : Worksheet | None = None , value : str | Incomplete | None = None , scope : Unused = None
87
+ self ,
88
+ name : str ,
89
+ worksheet : _WorkbookChild | ReadOnlyWorksheet | None = None ,
90
+ value : str | Incomplete | None = None ,
91
+ scope : Unused = None ,
84
92
) -> None : ...
85
93
def add_named_style (self , style : NamedStyle ) -> None : ...
86
94
@property
@@ -90,5 +98,8 @@ class Workbook:
90
98
def save (self , filename : _ZipFileFileProtocol ) -> None : ...
91
99
@property
92
100
def style_names (self ) -> list [str ]: ...
93
- def copy_worksheet (self , from_worksheet : Worksheet ) -> Worksheet | WriteOnlyWorksheet : ...
101
+ # A write_only and read_only workbooks can't use this method as it requires both reading and writing.
102
+ # On an implementation level, a WorksheetCopy is created from the call to self.create_sheet,
103
+ # but WorksheetCopy only works with Worksheet.
104
+ def copy_worksheet (self , from_worksheet : Worksheet ) -> Worksheet : ...
94
105
def close (self ) -> None : ...
0 commit comments