Skip to content

Commit 58f43e1

Browse files
committed
Revert "use xlwings to dump data (to be able to handle special values like NaN, dates, ...) but win32com to generate graphical elements"
This reverts commit 3f041bb
1 parent d2f7087 commit 58f43e1

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

larray/inout/xw_reporting.py

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)