@@ -181,13 +181,43 @@ def _register(slide: Slide) -> Picture:
181181
182182 return self
183183
184- def table (self , data : DataFrame , / , ** kwargs : Unpack [TableProps ]) -> Self :
185- data = dataframe2list (data )
186- rows , cols = len (data ), len (data [0 ])
187- table_data : TableData = {"type" : "table" , "data" : data , ** kwargs }
184+ @overload
185+ def table (self , data : DataFrame , / , ** kwargs : Unpack [TableProps ]) -> Self : ...
188186
189- self ._shape_registry .append (
190- lambda slide : Table (
187+ @overload
188+ def table (
189+ self ,
190+ data : Callable [[Table ], Table ],
191+ / ,
192+ rows : int ,
193+ cols : int ,
194+ ** kwargs : Unpack [TableProps ],
195+ ) -> Self : ...
196+
197+ def table (
198+ self ,
199+ data : DataFrame | Callable [[Table ], Table ],
200+ / ,
201+ rows : int | None = None ,
202+ cols : int | None = None ,
203+ ** kwargs : Unpack [TableProps ],
204+ ) -> Self :
205+ if isinstance (data , Callable ):
206+ assert rows is not None
207+ assert cols is not None
208+ table_data : TableData = {"type" : "table" , "data" : [], ** kwargs }
209+ else :
210+ data = dataframe2list (data )
211+ rows , cols = len (data ), len (data [0 ])
212+
213+ table_data : TableData = {
214+ "type" : "table" ,
215+ "data" : data ,
216+ ** kwargs ,
217+ }
218+
219+ def _register (slide : Slide ) -> Table :
220+ table_obj = Table (
191221 slide .to_pptx ().shapes .add_table (
192222 rows ,
193223 cols ,
@@ -198,7 +228,14 @@ def table(self, data: DataFrame, /, **kwargs: Unpack[TableProps]) -> Self:
198228 ),
199229 table_data ,
200230 )
201- )
231+
232+ if isinstance (data , Callable ):
233+ return data (table_obj )
234+ else :
235+ return table_obj
236+
237+ self ._shape_registry .append (_register )
238+
202239 return self
203240
204241 def _build (self , slide : PptxSlide ) -> Slide :
0 commit comments