Skip to content

Commit 8639f65

Browse files
Add support for merged cells and skipped rows
1 parent 1952360 commit 8639f65

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

pandas/io/excel/_odswriter.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,11 @@ def write_cells(
6363
col_count = defaultdict(int)
6464

6565
for cell in sorted(cells, key=lambda cell: (cell.row, cell.col)):
66-
# print(cell.row, cell.col, cell.val)
66+
attributes = {}
67+
print(cell.row, cell.col, cell.val, cell.mergestart, cell.mergeend)
68+
if cell.mergestart is not None and cell.mergeend is not None:
69+
attributes = {"numberrowsspanned": max(1, cell.mergestart),
70+
"numbercolumnsspanned": cell.mergeend}
6771
# fill with empty cells if needed
6872
for _ in range(cell.col - col_count[cell.row]):
6973
rows[cell.row].addElement(TableCell())
@@ -82,22 +86,22 @@ def write_cells(
8286
else:
8387
value = val.strftime("%Y-%m-%d")
8488
pvalue = val.strftime("%x")
85-
tc = TableCell(valuetype="date", datevalue=value)
89+
tc = TableCell(valuetype="date", datevalue=value, attributes=attributes)
8690
elif isinstance(val, datetime.date):
8791
print('date', val.strftime("%Y-%m-%d"), val.strftime("%x"))
8892
value = val.strftime("%Y-%m-%d")
8993
pvalue = val.strftime("%x")
9094
# value = val.isoformat()
9195
# pvalue = val.strftime("%c")
92-
tc = TableCell(valuetype="date", datevalue=value)
96+
tc = TableCell(valuetype="date", datevalue=value, attributes=attributes)
9397
else:
9498
class_to_cell_type = {
9599
str: "string",
96100
int: "float",
97101
float: "float",
98102
bool: "boolean",
99103
}
100-
tc = TableCell(valuetype=class_to_cell_type[type(val)], value=value)
104+
tc = TableCell(valuetype=class_to_cell_type[type(val)], value=value, attributes=attributes)
101105
rows[cell.row].addElement(tc)
102106
col_count[cell.row] += 1
103107
p = P(text=pvalue)
@@ -125,8 +129,8 @@ def write_cells(
125129
else:
126130
wks.write(startrow + cell.row, startcol + cell.col, val, style)
127131
"""
128-
for row in rows.values():
129-
wks.addElement(row)
132+
for row_nr in range(max(rows.keys()) + 1):
133+
wks.addElement(rows[row_nr])
130134

131135
@classmethod
132136
def _style_to_xlwt(

0 commit comments

Comments
 (0)