diff --git a/src/Mod/Spreadsheet/App/CMakeLists.txt b/src/Mod/Spreadsheet/App/CMakeLists.txt
index 55d5f7a539..f94f791a35 100644
--- a/src/Mod/Spreadsheet/App/CMakeLists.txt
+++ b/src/Mod/Spreadsheet/App/CMakeLists.txt
@@ -45,6 +45,11 @@ generate_from_xml(PropertySheetPy)
generate_from_xml(PropertyColumnWidthsPy)
generate_from_xml(PropertyRowHeightsPy)
+generate_from_py_(SheetPy)
+generate_from_py_(PropertySheetPy)
+generate_from_py_(PropertyColumnWidthsPy)
+generate_from_py_(PropertyRowHeightsPy)
+
if(FREECAD_USE_PCH)
add_definitions(-D_PreComp_)
GET_MSVC_PRECOMPILED_SOURCE("PreCompiled.cpp" PCH_SRCS ${Spreadsheet_SRCS})
diff --git a/src/Mod/Spreadsheet/App/PropertyColumnWidthsPy.pyi b/src/Mod/Spreadsheet/App/PropertyColumnWidthsPy.pyi
new file mode 100644
index 0000000000..3882644be1
--- /dev/null
+++ b/src/Mod/Spreadsheet/App/PropertyColumnWidthsPy.pyi
@@ -0,0 +1,18 @@
+from Base.Metadata import export
+from Base.Persistence import Persistence
+
+@export(
+ Father="PersistencePy",
+ Name="PropertyColumnWidthsPy",
+ Twin="PropertyColumnWidths",
+ TwinPointer="PropertyColumnWidths",
+ Include="Mod/Spreadsheet/App/PropertyColumnWidths.h",
+ Namespace="Spreadsheet",
+ FatherInclude="Base/PersistencePy.h",
+ FatherNamespace="Base",
+ Constructor=True,
+)
+class PropertyColumnWidthsPy(Persistence):
+ """
+ Internal spreadsheet object
+ """
diff --git a/src/Mod/Spreadsheet/App/PropertyRowHeightsPy.pyi b/src/Mod/Spreadsheet/App/PropertyRowHeightsPy.pyi
new file mode 100644
index 0000000000..663b76ea5c
--- /dev/null
+++ b/src/Mod/Spreadsheet/App/PropertyRowHeightsPy.pyi
@@ -0,0 +1,18 @@
+from Base.Metadata import export
+from Base.Persistence import Persistence
+
+@export(
+ Father="PersistencePy",
+ Name="PropertyRowHeightsPy",
+ Twin="PropertyRowHeights",
+ TwinPointer="PropertyRowHeights",
+ Include="Mod/Spreadsheet/App/PropertyRowHeights.h",
+ Namespace="Spreadsheet",
+ FatherInclude="Base/PersistencePy.h",
+ FatherNamespace="Base",
+ Constructor=True,
+)
+class PropertyRowHeightsPy(Persistence):
+ """
+ Internal spreadsheet object
+ """
diff --git a/src/Mod/Spreadsheet/App/PropertySheetPy.pyi b/src/Mod/Spreadsheet/App/PropertySheetPy.pyi
new file mode 100644
index 0000000000..42d0f4a13d
--- /dev/null
+++ b/src/Mod/Spreadsheet/App/PropertySheetPy.pyi
@@ -0,0 +1,21 @@
+from Base.Metadata import export, sequence_protocol
+from Base.Persistence import Persistence
+
+@export(
+ Father="PersistencePy",
+ Name="PropertySheetPy",
+ Twin="PropertySheet",
+ TwinPointer="PropertySheet",
+ Include="Mod/Spreadsheet/App/PropertySheet.h",
+ Namespace="Spreadsheet",
+ FatherInclude="Base/PersistencePy.h",
+ FatherNamespace="Base",
+ Constructor=True,
+)
+@sequence_protocol(
+ mp_subscript="true",
+)
+class PropertySheetPy(Persistence):
+ """
+ Internal spreadsheet object
+ """
diff --git a/src/Mod/Spreadsheet/App/SheetPy.pyi b/src/Mod/Spreadsheet/App/SheetPy.pyi
new file mode 100644
index 0000000000..e93da1a33e
--- /dev/null
+++ b/src/Mod/Spreadsheet/App/SheetPy.pyi
@@ -0,0 +1,183 @@
+from typing import Any
+
+from Base.Metadata import export
+
+from App.DocumentObject import DocumentObject
+
+@export(
+ Father="DocumentObjectPy",
+ Name="SheetPy",
+ Twin="Sheet",
+ TwinPointer="Sheet",
+ Include="Mod/Spreadsheet/App/Sheet.h",
+ Namespace="Spreadsheet",
+ FatherInclude="App/DocumentObjectPy.h",
+ FatherNamespace="App",
+ Constructor=True,
+)
+class SheetPy(DocumentObject):
+ """
+ With this object you can manipulate spreadsheets
+ """
+
+ def set(self) -> Any:
+ """Set data into a cell"""
+ ...
+
+ def get(self) -> Any:
+ """Get evaluated cell contents"""
+ ...
+
+ def getContents(self) -> Any:
+ """Get cell contents"""
+ ...
+
+ def clear(self) -> Any:
+ """Clear a cell"""
+ ...
+
+ def clearAll(self) -> Any:
+ """Clear all cells in the spreadsheet"""
+ ...
+
+ def importFile(self) -> Any:
+ """Import file into spreadsheet"""
+ ...
+
+ def exportFile(self) -> Any:
+ """Export file from spreadsheet"""
+ ...
+
+ def mergeCells(self) -> Any:
+ """Merge given cell area into one cell"""
+ ...
+
+ def splitCell(self) -> Any:
+ """Split a previously merged cell"""
+ ...
+
+ def insertColumns(self) -> Any:
+ """Insert a given number of columns into the spreadsheet."""
+ ...
+
+ def removeColumns(self) -> Any:
+ """Remove a given number of columns from the spreadsheet."""
+ ...
+
+ def insertRows(self) -> Any:
+ """Insert a given number of rows into the spreadsheet."""
+ ...
+
+ def removeRows(self) -> Any:
+ """Remove a given number of rows from the spreadsheet."""
+ ...
+
+ def setAlignment(self) -> Any:
+ """Set alignment of the cell"""
+ ...
+
+ def getAlignment(self) -> Any:
+ """Get alignment of the cell"""
+ ...
+
+ def setStyle(self) -> Any:
+ """Set style of the cell"""
+ ...
+
+ def getStyle(self) -> Any:
+ """Get style of the cell"""
+ ...
+
+ def setDisplayUnit(self) -> Any:
+ """Set display unit for cell"""
+ ...
+
+ def setAlias(self) -> Any:
+ """Set alias for cell address"""
+ ...
+
+ def getAlias(self) -> Any:
+ """Get alias for cell address"""
+ ...
+
+ def getCellFromAlias(self) -> Any:
+ """Get cell address given an alias"""
+ ...
+
+ def getDisplayUnit(self) -> Any:
+ """Get display unit for cell"""
+ ...
+
+ def setForeground(self) -> Any:
+ """Set foreground color of the cell"""
+ ...
+
+ def getForeground(self) -> Any:
+ """Get foreground color of the cell"""
+ ...
+
+ def setBackground(self) -> Any:
+ """Set background color of the cell"""
+ ...
+
+ def getBackground(self) -> Any:
+ """Get background color of the cell"""
+ ...
+
+ def setColumnWidth(self) -> Any:
+ """Set given spreadsheet column to given width"""
+ ...
+
+ def getColumnWidth(self) -> Any:
+ """Get given spreadsheet column width"""
+ ...
+
+ def setRowHeight(self) -> Any:
+ """Set given spreadsheet row to given height"""
+ ...
+
+ def getRowHeight(self) -> Any:
+ """Get given spreadsheet row height"""
+ ...
+
+ def touchCells(self) -> Any:
+ """touchCells(from, to=None): touch cells in the given range"""
+ ...
+
+ def recomputeCells(self) -> Any:
+ """recomputeCells(from, to=None)
+
+ Manually recompute cells in the given range with the given order without
+ following dependency order."""
+ ...
+
+ def getUsedCells(self) -> Any:
+ """getUsedCells()
+
+ Get a list of the names of all cells that are marked as used. These cells may
+ or may not have a non-empty string content."""
+ ...
+
+ def getNonEmptyCells(self) -> Any:
+ """getNonEmptyCells()
+
+ Get a list of the names of all cells with data in them."""
+ ...
+
+ def getUsedRange(self) -> Any:
+ """getUsedRange()
+
+ Get a the total range of the used cells in a sheet, as a pair of strings
+ representing the lowest row and column that are used, and the highest row and
+ column that are used (inclusive). Note that the actual first and last cell
+ of the block are not necessarily used."""
+ ...
+
+ def getNonEmptyRange(self) -> Any:
+ """getNonEmptyRange()
+
+ Get a the total range of the used cells in a sheet, as a pair of cell addresses
+ representing the lowest row and column that contain data, and the highest row and
+ column that contain data (inclusive). Note that the actual first and last cell
+ of the block do not necessarily contain anything."""
+ ...
diff --git a/src/Mod/Spreadsheet/Gui/CMakeLists.txt b/src/Mod/Spreadsheet/Gui/CMakeLists.txt
index 1035ac55f4..961960eb90 100644
--- a/src/Mod/Spreadsheet/Gui/CMakeLists.txt
+++ b/src/Mod/Spreadsheet/Gui/CMakeLists.txt
@@ -4,6 +4,7 @@ include_directories(
)
generate_from_xml(ViewProviderSpreadsheetPy)
+generate_from_py_(ViewProviderSpreadsheetPy)
# The XML files
set(SpreadsheetGui_XML_SRCS
diff --git a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.pyi b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.pyi
new file mode 100644
index 0000000000..954a9174ea
--- /dev/null
+++ b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.pyi
@@ -0,0 +1,44 @@
+from typing import Any
+
+from Base.Metadata import export
+
+from Gui.ViewProviderDocumentObject import ViewProviderDocumentObject
+
+@export(
+ Father="ViewProviderDocumentObjectPy",
+ Name="ViewProviderSpreadsheetPy",
+ Twin="ViewProviderSheet",
+ TwinPointer="ViewProviderSheet",
+ Include="Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.h",
+ Namespace="SpreadsheetGui",
+ FatherInclude="Gui/ViewProviderDocumentObjectPy.h",
+ FatherNamespace="Gui",
+)
+class ViewProviderSpreadsheetPy(ViewProviderDocumentObject):
+ """
+ ViewProviderSheet class
+ """
+
+ def getView(self) -> Any:
+ """Get access to the sheet view"""
+ ...
+
+ def showSheetMdi(self) -> Any:
+ """
+ Create (if necessary) and switch to the Spreadsheet MDI.
+
+ showSheetMdi()
+
+ Returns: None
+ """
+ ...
+
+ def exportAsFile(self) -> Any:
+ """
+ Export the sheet as a file.
+
+ exportAsFile()
+
+ Returns: None
+ """
+ ...
diff --git a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.xml b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.xml
index 1dc830cbe9..819672cf80 100644
--- a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.xml
+++ b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheetPy.xml
@@ -23,22 +23,22 @@
- Create (if necessary) and switch to the Spreadsheet MDI.
+Create (if necessary) and switch to the Spreadsheet MDI.
- showSheetMdi()
+showSheetMdi()
- Returns: None
+Returns: None
- Export the sheet as a file.
+Export the sheet as a file.
- exportAsFile()
+exportAsFile()
- Returns: None
+Returns: None