diff --git a/stubs/openpyxl/openpyxl/cell/cell.pyi b/stubs/openpyxl/openpyxl/cell/cell.pyi index 73f03a8f3938..c6c4c63ad5fc 100644 --- a/stubs/openpyxl/openpyxl/cell/cell.pyi +++ b/stubs/openpyxl/openpyxl/cell/cell.pyi @@ -1,4 +1,7 @@ +import datetime from _typeshed import Incomplete +from decimal import Decimal +from typing_extensions import TypeAlias from openpyxl.styles.styleable import StyleableObject @@ -19,6 +22,11 @@ TYPE_ERROR: str TYPE_FORMULA_CACHE_STRING: str VALID_TYPES: Incomplete +_Numeric: TypeAlias = int | float | Decimal | Incomplete # numpy types +_Time: TypeAlias = datetime.datetime | datetime.date | datetime.time | datetime.timedelta +_String: TypeAlias = str | bytes +_Value: TypeAlias = _Numeric | _Time | _String | bool | None + def get_type(t, value): ... def get_time_format(t): ... @@ -35,7 +43,7 @@ class Cell(StyleableObject): style_array: Incomplete | None = ..., ) -> None: ... @property - def coordinate(self): ... + def coordinate(self) -> str: ... @property def col_idx(self): ... @property @@ -47,9 +55,9 @@ class Cell(StyleableObject): def check_string(self, value): ... def check_error(self, value): ... @property - def value(self): ... + def value(self) -> _Value: ... @value.setter - def value(self, value) -> None: ... + def value(self, value: _Value) -> None: ... @property def internal_value(self): ... @property diff --git a/stubs/openpyxl/openpyxl/reader/excel.pyi b/stubs/openpyxl/openpyxl/reader/excel.pyi index f611811d70f8..cf09b8324cec 100644 --- a/stubs/openpyxl/openpyxl/reader/excel.pyi +++ b/stubs/openpyxl/openpyxl/reader/excel.pyi @@ -1,4 +1,8 @@ from _typeshed import Incomplete +from pathlib import Path +from typing import BinaryIO + +from openpyxl.workbook.workbook import Workbook SUPPORTED_FORMATS: Incomplete @@ -23,4 +27,6 @@ class ExcelReader: def read_worksheets(self) -> None: ... def read(self) -> None: ... -def load_workbook(filename, read_only: bool = ..., keep_vba=..., data_only: bool = ..., keep_links: bool = ...): ... +def load_workbook( + filename: str | Path | BinaryIO, read_only: bool = ..., keep_vba: bool = ..., data_only: bool = ..., keep_links: bool = ... +) -> Workbook: ... diff --git a/stubs/openpyxl/openpyxl/workbook/workbook.pyi b/stubs/openpyxl/openpyxl/workbook/workbook.pyi index d00206ca48e4..65e59202d600 100644 --- a/stubs/openpyxl/openpyxl/workbook/workbook.pyi +++ b/stubs/openpyxl/openpyxl/workbook/workbook.pyi @@ -1,5 +1,7 @@ from _typeshed import Incomplete +from openpyxl.worksheet.worksheet import Worksheet + INTEGER_TYPES: Incomplete class Workbook: @@ -44,7 +46,7 @@ class Workbook: def __contains__(self, key): ... def index(self, worksheet): ... def get_index(self, worksheet): ... - def __getitem__(self, key): ... + def __getitem__(self, key: str) -> Worksheet | Incomplete: ... def __delitem__(self, key) -> None: ... def __iter__(self): ... def get_sheet_names(self): ... diff --git a/stubs/openpyxl/openpyxl/worksheet/cell_range.pyi b/stubs/openpyxl/openpyxl/worksheet/cell_range.pyi index 72edc3e2942d..66adfe680a4e 100644 --- a/stubs/openpyxl/openpyxl/worksheet/cell_range.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/cell_range.pyi @@ -5,10 +5,10 @@ from openpyxl.descriptors import Strict from openpyxl.descriptors.serialisable import Serialisable class CellRange(Serialisable): # type: ignore[misc] - min_col: Incomplete - min_row: Incomplete - max_col: Incomplete - max_row: Incomplete + min_col: int + min_row: int + max_col: int + max_row: int title: Incomplete def __init__( self, @@ -60,7 +60,7 @@ class CellRange(Serialisable): # type: ignore[misc] def right(self): ... class MultiCellRange(Strict): - ranges: Incomplete + ranges: list[CellRange] def __init__(self, ranges=...) -> None: ... def __contains__(self, coord): ... def add(self, coord) -> None: ... diff --git a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi index bfa34fe19e53..cc30651ac7ce 100644 --- a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi @@ -1,8 +1,11 @@ from _typeshed import Incomplete from collections.abc import Generator +from openpyxl.cell.cell import Cell, _Value as CellValue from openpyxl.workbook.child import _WorkbookChild +from .cell_range import MultiCellRange + class Worksheet(_WorkbookChild): mime_type: str BREAK_NONE: int @@ -25,6 +28,7 @@ class Worksheet(_WorkbookChild): ORIENTATION_PORTRAIT: str ORIENTATION_LANDSCAPE: str def __init__(self, parent, title: Incomplete | None = ...) -> None: ... + merged_cells: MultiCellRange @property def sheet_view(self): ... @property @@ -43,8 +47,8 @@ class Worksheet(_WorkbookChild): def freeze_panes(self): ... @freeze_panes.setter def freeze_panes(self, topLeftCell: Incomplete | None = ...) -> None: ... - def cell(self, row, column, value: Incomplete | None = ...): ... - def __getitem__(self, key): ... + def cell(self, row: int, column: int, value: CellValue | None = ...) -> Cell: ... + def __getitem__(self, key: slice | int | str) -> Cell | Generator[tuple[Cell, ...], None, None]: ... def __setitem__(self, key, value) -> None: ... def __iter__(self): ... def __delitem__(self, key) -> None: ...