diff --git a/stubs/openpyxl/openpyxl/cell/cell.pyi b/stubs/openpyxl/openpyxl/cell/cell.pyi index b46e20a43..3b1c1c743 100644 --- a/stubs/openpyxl/openpyxl/cell/cell.pyi +++ b/stubs/openpyxl/openpyxl/cell/cell.pyi @@ -84,8 +84,8 @@ class MergedCell(StyleableObject): data_type: str comment: Comment | None hyperlink: Hyperlink | None - row: int - column: int + row: int | None + column: int | None def __init__(self, worksheet: Worksheet, row: int | None = None, column: int | None = None) -> None: ... # Same as Cell.coordinate @property diff --git a/stubs/openpyxl/openpyxl/reader/excel.pyi b/stubs/openpyxl/openpyxl/reader/excel.pyi index 661ddcbd1..8c5472928 100644 --- a/stubs/openpyxl/openpyxl/reader/excel.pyi +++ b/stubs/openpyxl/openpyxl/reader/excel.pyi @@ -1,4 +1,3 @@ -from _typeshed import Incomplete from typing import Final, Literal from typing_extensions import TypeAlias from zipfile import ZipFile @@ -21,7 +20,7 @@ class ExcelReader: data_only: bool keep_links: bool rich_text: bool - shared_strings: list[Incomplete] + shared_strings: list[str] package: Manifest # defined after call to read_manifest() parser: WorkbookParser # defined after call to read_workbook() wb: Workbook # defined after call to read_workbook() diff --git a/stubs/openpyxl/openpyxl/workbook/workbook.pyi b/stubs/openpyxl/openpyxl/workbook/workbook.pyi index 7f49b7d51..b153cc887 100644 --- a/stubs/openpyxl/openpyxl/workbook/workbook.pyi +++ b/stubs/openpyxl/openpyxl/workbook/workbook.pyi @@ -8,7 +8,9 @@ from zipfile import ZipFile from openpyxl import _Decodable, _ZipFileFileProtocol from openpyxl.chartsheet.chartsheet import Chartsheet from openpyxl.styles.named_styles import NamedStyle +from openpyxl.utils.indexed_list import IndexedList from openpyxl.workbook.child import _WorkbookChild +from openpyxl.worksheet._read_only import ReadOnlyWorksheet from openpyxl.worksheet._write_only import WriteOnlyWorksheet from openpyxl.worksheet.worksheet import Worksheet @@ -20,7 +22,7 @@ class Workbook: defined_names: Incomplete properties: Incomplete security: Incomplete - shared_strings: Incomplete + shared_strings: IndexedList[str] loaded_theme: Incomplete vba_archive: ZipFile | None is_template: bool @@ -30,6 +32,9 @@ class Workbook: rels: Incomplete calculation: Incomplete views: Incomplete + # Private, but useful as a reference of what "sheets" can be for other types + # ExcelReader can add ReadOnlyWorksheet in read_only mode. + _sheets: list[Worksheet | WriteOnlyWorksheet | Chartsheet | ReadOnlyWorksheet] def __init__(self, write_only: bool = False, iso_dates: bool = False) -> None: ... @property def epoch(self) -> datetime: ... diff --git a/stubs/openpyxl/openpyxl/worksheet/_read_only.pyi b/stubs/openpyxl/openpyxl/worksheet/_read_only.pyi index 224bc864e..1dd962e07 100644 --- a/stubs/openpyxl/openpyxl/worksheet/_read_only.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/_read_only.pyi @@ -1,4 +1,4 @@ -from _typeshed import Incomplete +from _typeshed import Incomplete, SupportsGetItem from collections.abc import Generator from openpyxl import _VisibilityType @@ -23,7 +23,7 @@ class ReadOnlyWorksheet: parent: Incomplete title: str sheet_state: _VisibilityType - def __init__(self, parent_workbook, title: str, worksheet_path, shared_strings) -> None: ... + def __init__(self, parent_workbook, title: str, worksheet_path, shared_strings: SupportsGetItem[int, str]) -> None: ... def calculate_dimension(self, force: bool = False): ... def reset_dimensions(self) -> None: ... @property diff --git a/stubs/openpyxl/openpyxl/worksheet/_reader.pyi b/stubs/openpyxl/openpyxl/worksheet/_reader.pyi index 604835921..8c0296d86 100644 --- a/stubs/openpyxl/openpyxl/worksheet/_reader.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/_reader.pyi @@ -1,11 +1,13 @@ from _typeshed import Incomplete, SupportsGetItem, Unused from collections.abc import Container, Generator from datetime import datetime -from typing import Final +from typing import Any, Final from xml.etree.ElementTree import _FileRead +from openpyxl.cell.cell import Cell from openpyxl.cell.rich_text import CellRichText from openpyxl.descriptors.serialisable import _ChildSerialisableTreeElement, _SerialisableTreeElement +from openpyxl.formula.translate import Translator from openpyxl.utils.cell import _RangeBoundariesTuple from ..xml._functions_overloads import _HasAttrib, _SupportsIterAndAttrib @@ -50,9 +52,9 @@ class WorkSheetParser: min_col: Incomplete | None epoch: datetime source: _FileRead - shared_strings: SupportsGetItem[int, Incomplete] + shared_strings: SupportsGetItem[int, str] data_only: bool - shared_formulae: dict[Incomplete, Incomplete] + shared_formulae: dict[Incomplete, Translator] row_counter: int col_counter: int tables: TablePartList @@ -74,7 +76,7 @@ class WorkSheetParser: def __init__( self, src: _FileRead, - shared_strings: SupportsGetItem[int, Incomplete], + shared_strings: SupportsGetItem[int, str], data_only: bool = False, epoch: datetime = ..., date_formats: Container[int] = ..., @@ -83,10 +85,12 @@ class WorkSheetParser: ) -> None: ... def parse(self) -> Generator[Incomplete, None, None]: ... def parse_dimensions(self) -> _RangeBoundariesTuple | None: ... - def parse_cell(self, element) -> dict[str, Incomplete]: ... + # AnyOf[time, date, datetime, timedelta, float, int, bool, str, ArrayFormula, DataTableFormula, Translator, Text, TextBlock, CellRichText, None] + def parse_cell(self, element) -> dict[str, Any]: ... def parse_formula(self, element): ... def parse_column_dimensions(self, col: _HasAttrib) -> None: ... - def parse_row(self, row: _SupportsIterAndAttrib) -> tuple[int, list[dict[str, Incomplete]]]: ... + # Any: Same as parse_cell + def parse_row(self, row: _SupportsIterAndAttrib) -> tuple[int, list[dict[str, Any]]]: ... def parse_formatting(self, element: _ChildSerialisableTreeElement) -> None: ... def parse_sheet_protection(self, element: _SerialisableTreeElement) -> None: ... def parse_extensions(self, element: _ChildSerialisableTreeElement) -> None: ... @@ -100,14 +104,14 @@ class WorksheetReader: parser: WorkSheetParser tables: list[Incomplete] def __init__( - self, ws, xml_source: _FileRead, shared_strings: SupportsGetItem[int, Incomplete], data_only: bool, rich_text: bool + self, ws, xml_source: _FileRead, shared_strings: SupportsGetItem[int, str], data_only: bool, rich_text: bool ) -> None: ... def bind_cells(self) -> None: ... def bind_formatting(self) -> None: ... def bind_tables(self) -> None: ... def bind_merged_cells(self) -> None: ... def bind_hyperlinks(self) -> None: ... - def normalize_merged_cell_link(self, coord: str) -> Incomplete | None: ... + def normalize_merged_cell_link(self, coord: str) -> Cell | None: ... def bind_col_dimensions(self) -> None: ... def bind_row_dimensions(self) -> None: ... def bind_properties(self) -> None: ... diff --git a/stubs/openpyxl/openpyxl/worksheet/_writer.pyi b/stubs/openpyxl/openpyxl/worksheet/_writer.pyi index 151511935..a8375f550 100644 --- a/stubs/openpyxl/openpyxl/worksheet/_writer.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/_writer.pyi @@ -46,7 +46,7 @@ class WorksheetWriter: def write_drawings(self) -> None: ... def write_legacy(self) -> None: ... def write_tables(self) -> None: ... - def get_stream(self) -> Generator[Incomplete, Incomplete, None]: ... + def get_stream(self) -> Generator[Incomplete | None, bool | None, None]: ... def write_tail(self) -> None: ... def write(self) -> None: ... def close(self) -> None: ... diff --git a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi index b84de30ff..9af321be5 100644 --- a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi @@ -131,7 +131,7 @@ class Worksheet(_WorkbookChild): @overload def iter_rows( self, min_row: int | None, max_row: int | None, min_col: int | None, max_col: int | None, values_only: bool - ) -> Generator[tuple[Cell | str | float | datetime | None, ...], None, None]: ... + ) -> Generator[tuple[Cell, ...], None, None] | Generator[tuple[str | float | datetime | None, ...], None, None]: ... @overload def iter_rows( self, @@ -141,7 +141,7 @@ class Worksheet(_WorkbookChild): max_col: int | None = None, *, values_only: bool, - ) -> Generator[tuple[Cell | str | float | datetime | None, ...], None, None]: ... + ) -> Generator[tuple[Cell, ...], None, None] | Generator[tuple[str | float | datetime | None, ...], None, None]: ... @property def rows(self) -> Generator[tuple[Cell, ...], None, None]: ... @property @@ -172,7 +172,7 @@ class Worksheet(_WorkbookChild): @overload def iter_cols( self, min_col: int | None, max_col: int | None, min_row: int | None, max_row: int | None, values_only: bool - ) -> Generator[tuple[Cell | str | float | datetime | None, ...], None, None]: ... + ) -> Generator[tuple[Cell, ...], None, None] | Generator[tuple[str | float | datetime | None, ...], None, None]: ... @overload def iter_cols( self, @@ -182,7 +182,7 @@ class Worksheet(_WorkbookChild): max_row: int | None = None, *, values_only: bool, - ) -> Generator[tuple[Cell | str | float | datetime | None, ...], None, None]: ... + ) -> Generator[tuple[Cell, ...], None, None] | Generator[tuple[str | float | datetime | None, ...], None, None]: ... @property def columns(self) -> Generator[tuple[Cell, ...], None, None]: ... def set_printer_settings(