@@ -468,13 +468,13 @@ def __init__(self, text, fontsize, top, left, width, height):
468468 self .fontsize = _positive_integer (fontsize )
469469
470470 def dump (self , sheet , data_sheet , row ):
471- data_cells = data_sheet .cells
471+ data_cells = data_sheet .Cells
472472 # add title in data sheet
473- data_cells (row , 1 ).value = self .text
473+ data_cells (row , 1 ).Value = self .text
474474 # generate title banner in destination sheet
475475 msoShapeRectangle = 1
476476 msoThemeColorBackground1 = 14
477- sheet_shapes = sheet .shapes . api
477+ sheet_shapes = sheet .Shapes
478478 shp = sheet_shapes .AddShape (Type = msoShapeRectangle , Left = self .left , Top = self .top ,
479479 Width = self .width , Height = self .height )
480480 fill = shp .Fill
@@ -496,6 +496,7 @@ def dump(self, sheet, data_sheet, row):
496496
497497 _default_items_size ['title' ] = ExcelTitleItem ._default_size
498498
499+ # TODO: fix problem with nans values
499500 class ExcelGraphItem (AbstractExcelItem ):
500501
501502 _default_size = ItemSize (427 , 230 )
@@ -513,26 +514,23 @@ def __init__(self, title, data, template, top, left, width, height):
513514 self .template = template
514515
515516 def dump (self , sheet , data_sheet , row ):
516- data_range = data_sheet .range
517- data_cells = data_sheet .cells
517+ data_range = data_sheet .Range
518+ data_cells = data_sheet .Cells
518519 # write graph title in data sheet
519- data_cells (row , 1 ).value = self .title
520+ data_cells (row , 1 ).Value = self .title
520521 row += 1
521522 # dump data to make the graph in data sheet
522523 data = self .data
523524 nb_series = 1 if data .ndim == 1 else data .shape [0 ]
524525 nb_xticks = data .size if data .ndim == 1 else data .shape [1 ]
525526 last_row , last_col = row + nb_series , nb_xticks + 1
526- data_range (data_cells (row , 1 ), data_cells (last_row , last_col )).value = data .dump ()
527- data_cells (row , 1 ).value = ''
527+ data_range (data_cells (row , 1 ), data_cells (last_row , last_col )).Value = data .dump ()
528+ data_cells (row , 1 ).Value = ''
528529 # generate graph in destination sheet
529- source = data_range (data_cells (row , 1 ), data_cells (last_row , last_col ))
530- # Note: from here on, we use pure win32com objects instead of
531- # larray.excel or xlwings objects as this is faster
532- source = source .api
533- sheet_charts = sheet .api .ChartObjects ()
530+ sheet_charts = sheet .ChartObjects ()
534531 obj = sheet_charts .Add (self .left , self .top , self .width , self .height )
535532 obj_chart = obj .Chart
533+ source = data_range (data_cells (row , 1 ), data_cells (last_row , last_col ))
536534 obj_chart .SetSourceData (source )
537535 obj_chart .ChartType = ChartType .xlLine
538536 obj_chart .HasTitle = True
@@ -591,14 +589,14 @@ def newline(self):
591589
592590 def _to_excel (self , workbook , data_row ):
593591 # use first sheet as data sheet
594- data_sheet = workbook .sheets [ 0 ]
595- data_cells = data_sheet .cells
592+ data_sheet = workbook .Worksheets ( 1 )
593+ data_cells = data_sheet .Cells
596594 # write destination sheet name in data sheet
597- data_cells (data_row , 1 ).value = self .name
595+ data_cells (data_row , 1 ).Value = self .name
598596 data_row += 2
599597 # create new empty sheet in workbook (will contain output graphical items)
600- dest_sheet = workbook .sheets . add ( self . name , after = workbook [ - 1 ]. xw_sheet )
601- dest_sheet .name = self .name
598+ dest_sheet = workbook .Worksheets . Add ( After = workbook . Sheets ( workbook . Sheets . Count ) )
599+ dest_sheet .Name = self .name
602600 # for each item, dump data + generate associated graphical items
603601 for item in self .items :
604602 data_row = item .dump (dest_sheet , data_sheet , data_row )
@@ -644,14 +642,14 @@ def new_sheet(self, sheet_name):
644642
645643 def to_excel (self , filepath , data_sheet_name = '__data__' , overwrite = True ):
646644 with open_excel (filepath , overwrite_file = overwrite ) as wb :
647- app = wb . app . api
648- # it's a > x7 speed up difference
649- app . ScreenUpdating = False
645+ # from here on, we use pure win32com objects instead of
646+ # larray.excel or xlwings objects as this is faster
647+ xl_wb = wb . api
650648
651649 # dump items for each output sheet
652650 data_sheet_row = 1
653651 for sheet in self .sheets .values ():
654- data_sheet_row = sheet ._to_excel (wb , data_sheet_row )
652+ data_sheet_row = sheet ._to_excel (xl_wb , data_sheet_row )
655653 wb .save ()
656654 # reset
657655 self .sheets .clear ()
0 commit comments