@@ -468,13 +468,13 @@ def __init__(self, text, fontsize, top, left, width, height):
468
468
self .fontsize = _positive_integer (fontsize )
469
469
470
470
def dump (self , sheet , data_sheet , row ):
471
- data_cells = data_sheet .cells
471
+ data_cells = data_sheet .Cells
472
472
# add title in data sheet
473
- data_cells (row , 1 ).value = self .text
473
+ data_cells (row , 1 ).Value = self .text
474
474
# generate title banner in destination sheet
475
475
msoShapeRectangle = 1
476
476
msoThemeColorBackground1 = 14
477
- sheet_shapes = sheet .shapes . api
477
+ sheet_shapes = sheet .Shapes
478
478
shp = sheet_shapes .AddShape (Type = msoShapeRectangle , Left = self .left , Top = self .top ,
479
479
Width = self .width , Height = self .height )
480
480
fill = shp .Fill
@@ -496,6 +496,7 @@ def dump(self, sheet, data_sheet, row):
496
496
497
497
_default_items_size ['title' ] = ExcelTitleItem ._default_size
498
498
499
+ # TODO: fix problem with nans values
499
500
class ExcelGraphItem (AbstractExcelItem ):
500
501
501
502
_default_size = ItemSize (427 , 230 )
@@ -513,26 +514,23 @@ def __init__(self, title, data, template, top, left, width, height):
513
514
self .template = template
514
515
515
516
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
518
519
# write graph title in data sheet
519
- data_cells (row , 1 ).value = self .title
520
+ data_cells (row , 1 ).Value = self .title
520
521
row += 1
521
522
# dump data to make the graph in data sheet
522
523
data = self .data
523
524
nb_series = 1 if data .ndim == 1 else data .shape [0 ]
524
525
nb_xticks = data .size if data .ndim == 1 else data .shape [1 ]
525
526
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 = ''
528
529
# 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 ()
534
531
obj = sheet_charts .Add (self .left , self .top , self .width , self .height )
535
532
obj_chart = obj .Chart
533
+ source = data_range (data_cells (row , 1 ), data_cells (last_row , last_col ))
536
534
obj_chart .SetSourceData (source )
537
535
obj_chart .ChartType = ChartType .xlLine
538
536
obj_chart .HasTitle = True
@@ -591,14 +589,14 @@ def newline(self):
591
589
592
590
def _to_excel (self , workbook , data_row ):
593
591
# 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
596
594
# 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
598
596
data_row += 2
599
597
# 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
602
600
# for each item, dump data + generate associated graphical items
603
601
for item in self .items :
604
602
data_row = item .dump (dest_sheet , data_sheet , data_row )
@@ -644,14 +642,14 @@ def new_sheet(self, sheet_name):
644
642
645
643
def to_excel (self , filepath , data_sheet_name = '__data__' , overwrite = True ):
646
644
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
650
648
651
649
# dump items for each output sheet
652
650
data_sheet_row = 1
653
651
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 )
655
653
wb .save ()
656
654
# reset
657
655
self .sheets .clear ()
0 commit comments