Skip to content

Commit 9f6a8d8

Browse files
dannyhyunkimvictor
authored and
victor
committed
ENH: Making header_style a property of ExcelFormatter pandas-dev#22758 (pandas-dev#22759)
1 parent fc196c8 commit 9f6a8d8

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

pandas/io/formats/excel.py

+24-21
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,6 @@ def __init__(self, row, col, val, style=None, mergestart=None,
3434
self.mergeend = mergeend
3535

3636

37-
header_style = {"font": {"bold": True},
38-
"borders": {"top": "thin",
39-
"right": "thin",
40-
"bottom": "thin",
41-
"left": "thin"},
42-
"alignment": {"horizontal": "center",
43-
"vertical": "top"}}
44-
45-
4637
class CSSToExcelConverter(object):
4738
"""A callable for converting CSS declarations to ExcelWriter styles
4839
@@ -389,6 +380,16 @@ def __init__(self, df, na_rep='', float_format=None, cols=None,
389380
self.merge_cells = merge_cells
390381
self.inf_rep = inf_rep
391382

383+
@property
384+
def header_style(self):
385+
return {"font": {"bold": True},
386+
"borders": {"top": "thin",
387+
"right": "thin",
388+
"bottom": "thin",
389+
"left": "thin"},
390+
"alignment": {"horizontal": "center",
391+
"vertical": "top"}}
392+
392393
def _format_value(self, val):
393394
if is_scalar(val) and missing.isna(val):
394395
val = self.na_rep
@@ -427,24 +428,24 @@ def _format_header_mi(self):
427428
# Format multi-index as a merged cells.
428429
for lnum in range(len(level_lengths)):
429430
name = columns.names[lnum]
430-
yield ExcelCell(lnum, coloffset, name, header_style)
431+
yield ExcelCell(lnum, coloffset, name, self.header_style)
431432

432433
for lnum, (spans, levels, labels) in enumerate(zip(
433434
level_lengths, columns.levels, columns.labels)):
434435
values = levels.take(labels)
435436
for i in spans:
436437
if spans[i] > 1:
437438
yield ExcelCell(lnum, coloffset + i + 1, values[i],
438-
header_style, lnum,
439+
self.header_style, lnum,
439440
coloffset + i + spans[i])
440441
else:
441442
yield ExcelCell(lnum, coloffset + i + 1, values[i],
442-
header_style)
443+
self.header_style)
443444
else:
444445
# Format in legacy format with dots to indicate levels.
445446
for i, values in enumerate(zip(*level_strs)):
446447
v = ".".join(map(pprint_thing, values))
447-
yield ExcelCell(lnum, coloffset + i + 1, v, header_style)
448+
yield ExcelCell(lnum, coloffset + i + 1, v, self.header_style)
448449

449450
self.rowcounter = lnum
450451

@@ -469,7 +470,7 @@ def _format_header_regular(self):
469470

470471
for colindex, colname in enumerate(colnames):
471472
yield ExcelCell(self.rowcounter, colindex + coloffset, colname,
472-
header_style)
473+
self.header_style)
473474

474475
def _format_header(self):
475476
if isinstance(self.columns, ABCMultiIndex):
@@ -482,7 +483,8 @@ def _format_header(self):
482483
row = [x if x is not None else ''
483484
for x in self.df.index.names] + [''] * len(self.columns)
484485
if reduce(lambda x, y: x and y, map(lambda x: x != '', row)):
485-
gen2 = (ExcelCell(self.rowcounter, colindex, val, header_style)
486+
gen2 = (ExcelCell(self.rowcounter, colindex, val,
487+
self.header_style)
486488
for colindex, val in enumerate(row))
487489
self.rowcounter += 1
488490
return itertools.chain(gen, gen2)
@@ -518,15 +520,16 @@ def _format_regular_rows(self):
518520

519521
if index_label and self.header is not False:
520522
yield ExcelCell(self.rowcounter - 1, 0, index_label,
521-
header_style)
523+
self.header_style)
522524

523525
# write index_values
524526
index_values = self.df.index
525527
if isinstance(self.df.index, ABCPeriodIndex):
526528
index_values = self.df.index.to_timestamp()
527529

528530
for idx, idxval in enumerate(index_values):
529-
yield ExcelCell(self.rowcounter + idx, 0, idxval, header_style)
531+
yield ExcelCell(self.rowcounter + idx, 0, idxval,
532+
self.header_style)
530533

531534
coloffset = 1
532535
else:
@@ -562,7 +565,7 @@ def _format_hierarchical_rows(self):
562565

563566
for cidx, name in enumerate(index_labels):
564567
yield ExcelCell(self.rowcounter - 1, cidx, name,
565-
header_style)
568+
self.header_style)
566569

567570
if self.merge_cells:
568571
# Format hierarchical rows as merged cells.
@@ -581,20 +584,20 @@ def _format_hierarchical_rows(self):
581584
for i in spans:
582585
if spans[i] > 1:
583586
yield ExcelCell(self.rowcounter + i, gcolidx,
584-
values[i], header_style,
587+
values[i], self.header_style,
585588
self.rowcounter + i + spans[i] - 1,
586589
gcolidx)
587590
else:
588591
yield ExcelCell(self.rowcounter + i, gcolidx,
589-
values[i], header_style)
592+
values[i], self.header_style)
590593
gcolidx += 1
591594

592595
else:
593596
# Format hierarchical rows with non-merged values.
594597
for indexcolvals in zip(*self.df.index):
595598
for idx, indexcolval in enumerate(indexcolvals):
596599
yield ExcelCell(self.rowcounter + idx, gcolidx,
597-
indexcolval, header_style)
600+
indexcolval, self.header_style)
598601
gcolidx += 1
599602

600603
for cell in self._generate_body(gcolidx):

0 commit comments

Comments
 (0)