Skip to content

Commit b5faff1

Browse files
committed
TST/DOC: add tests for to_excel(autofilter=True) for openpyxl/xlsxwriter and a user guide snippet
1 parent 64f0742 commit b5faff1

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

pandas/tests/io/excel/test_openpyxl.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,18 @@ def test_engine_kwargs_append_data_only(tmp_excel, data_only, expected):
155155
)
156156

157157

158+
def test_to_excel_autofilter_openpyxl(tmp_excel):
159+
# Ensure that writing with autofilter=True sets auto_filter.ref
160+
df = DataFrame({"A": [1, 2], "B": [3, 4]})
161+
df.to_excel(tmp_excel, engine="openpyxl", index=False, autofilter=True)
162+
163+
with contextlib.closing(openpyxl.load_workbook(tmp_excel)) as wb:
164+
ws = wb[wb.sheetnames[0]]
165+
# Expect filter over the full range, e.g. A1:B3 (header + 2 rows)
166+
assert ws.auto_filter is not None
167+
assert ws.auto_filter.ref is not None
168+
169+
158170
@pytest.mark.parametrize("kwarg_name", ["read_only", "data_only"])
159171
@pytest.mark.parametrize("kwarg_value", [True, False])
160172
def test_engine_kwargs_append_reader(datapath, ext, kwarg_name, kwarg_value):

pandas/tests/io/excel/test_xlsxwriter.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,24 @@ def test_book_and_sheets_consistent(tmp_excel):
8484
assert writer.sheets == {}
8585
sheet = writer.book.add_worksheet("test_name")
8686
assert writer.sheets == {"test_name": sheet}
87+
88+
89+
def test_to_excel(tmp_excel):
90+
DataFrame([[1, 2]]).to_excel(tmp_excel)
91+
92+
93+
def test_to_excel_autofilter_xlsxwriter(tmp_excel):
94+
pytest.importorskip("xlsxwriter")
95+
openpyxl = pytest.importorskip("openpyxl")
96+
97+
df = DataFrame({"A": [1, 2], "B": [3, 4]})
98+
# Write with xlsxwriter, verify via openpyxl that an autofilter exists
99+
df.to_excel(tmp_excel, engine="xlsxwriter", index=False, autofilter=True)
100+
101+
wb = openpyxl.load_workbook(tmp_excel)
102+
try:
103+
ws = wb[wb.sheetnames[0]]
104+
assert ws.auto_filter is not None
105+
assert ws.auto_filter.ref is not None
106+
finally:
107+
wb.close()

0 commit comments

Comments
 (0)