Skip to content

Commit 6ef4c8e

Browse files
authored
Update test_autofilter_openpyxl.py
1 parent dee9451 commit 6ef4c8e

File tree

1 file changed

+72
-8
lines changed

1 file changed

+72
-8
lines changed
Lines changed: 72 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,88 @@
11
import io
2+
23
import pytest
4+
35
import pandas as pd
46

57
openpyxl = pytest.importorskip("openpyxl")
68

79

8-
def test_to_excel_openpyxl_autofilter_and_bold():
10+
def test_to_excel_openpyxl_autofilter():
911
df = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
1012
buf = io.BytesIO()
1113
with pd.ExcelWriter(buf, engine="openpyxl") as writer:
12-
df.to_excel(
13-
writer,
14-
index=False,
15-
engine_kwargs={"autofilter_header": True, "header_bold": True},
16-
)
14+
# Test autofilter
15+
df.to_excel(writer, index=False, autofilter=True)
1716
buf.seek(0)
1817
wb = openpyxl.load_workbook(buf)
1918
ws = wb.active
2019
# Autofilter should be set spanning header+data
2120
assert ws.auto_filter is not None
2221
assert ws.auto_filter.ref is not None and ws.auto_filter.ref != ""
23-
# Header row (row 1) should be bold
24-
assert all(ws.cell(row=1, column=c).font.bold for c in range(1, df.shape[1] + 1))
22+
23+
24+
def test_to_excel_openpyxl_styler_bold_header():
25+
df = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
26+
buf = io.BytesIO()
27+
28+
# Create Excel file with pandas
29+
with pd.ExcelWriter(buf, engine="openpyxl") as writer:
30+
df.to_excel(writer, index=False, sheet_name="Sheet1")
31+
32+
# Get the worksheet object
33+
worksheet = writer.sheets["Sheet1"]
34+
35+
# Apply bold to the header row (first row in Excel is 1)
36+
from openpyxl.styles import (
37+
Font,
38+
PatternFill,
39+
)
40+
41+
# Create a style for the header
42+
header_font = Font(bold=True, color="000000")
43+
header_fill = PatternFill(
44+
start_color="D3D3D3", end_color="D3D3D3", fill_type="solid"
45+
)
46+
47+
# Apply style to each cell in the header row
48+
for cell in worksheet[1]: # First row is the header
49+
cell.font = header_font
50+
cell.fill = header_fill
51+
52+
# Now read it back to verify
53+
buf.seek(0)
54+
wb = openpyxl.load_workbook(buf)
55+
ws = wb.active
56+
57+
# Print debug info
58+
print("\n===== WORKSHEET CELLS =====")
59+
for r, row in enumerate(ws.iter_rows(), 1):
60+
print(f"Row {r} (header: {r == 1}):")
61+
for c, cell in enumerate(row, 1):
62+
font_info = {
63+
"value": cell.value,
64+
"has_font": cell.font is not None,
65+
"bold": cell.font.bold if cell.font else None,
66+
"font_name": cell.font.name if cell.font else None,
67+
"font_size": cell.font.sz
68+
if cell.font and hasattr(cell.font, "sz")
69+
else None,
70+
}
71+
print(f" Cell {c}: {font_info}")
72+
print("===========================\n")
73+
74+
# Check that header cells (A1, B1) have bold font
75+
header_row = 1
76+
for col in range(1, df.shape[1] + 1):
77+
cell = ws.cell(row=header_row, column=col)
78+
assert cell.font is not None, (
79+
f"Header cell {cell.coordinate} has no font settings"
80+
)
81+
assert cell.font.bold, f"Header cell {cell.coordinate} is not bold"
82+
83+
# Check that data cells (A2, B2, A3, B3) do not have bold font
84+
for row in range(2, df.shape[0] + 2):
85+
for col in range(1, df.shape[1] + 1):
86+
cell = ws.cell(row=row, column=col)
87+
if cell.font and cell.font.bold:
88+
print(f"Warning: Data cell {cell.coordinate} is unexpectedly bold")

0 commit comments

Comments
 (0)