From 884feebb63f5eb70934391755cc7600d78d9c3a4 Mon Sep 17 00:00:00 2001 From: Arnab Animesh Das Date: Fri, 24 Jan 2025 19:58:06 +0530 Subject: [PATCH] fix(python): Ensure explicit values given to `column_widths` override autofit in `write_excel` (#20893) --- py-polars/polars/dataframe/frame.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/py-polars/polars/dataframe/frame.py b/py-polars/polars/dataframe/frame.py index 84fc30abf209..ae1486c0f766 100644 --- a/py-polars/polars/dataframe/frame.py +++ b/py-polars/polars/dataframe/frame.py @@ -3542,6 +3542,18 @@ def write_excel( else: hidden = set(_expand_selectors(df, hidden_columns)) + # Autofit section needs to be present above column_widths section + # to ensure that parameters provided in the column_widths section + # are not overwritten by autofit + # + # table/rows all written; apply (optional) autofit + if autofit and not is_empty: + xlv = xlsxwriter.__version__ + if parse_version(xlv) < (3, 0, 8): + msg = f"`autofit=True` requires xlsxwriter 3.0.8 or higher, found {xlv}" + raise ModuleUpgradeRequiredError(msg) + ws.autofit() + if isinstance(column_widths, int): column_widths = dict.fromkeys(df.columns, column_widths) else: @@ -3588,14 +3600,6 @@ def write_excel( for idx, height in _unpack_multi_column_dict(row_heights).items(): # type: ignore[assignment] ws.set_row_pixels(idx, height) - # table/rows all written; apply (optional) autofit - if autofit and not is_empty: - xlv = xlsxwriter.__version__ - if parse_version(xlv) < (3, 0, 8): - msg = f"`autofit=True` requires xlsxwriter 3.0.8 or higher, found {xlv}" - raise ModuleUpgradeRequiredError(msg) - ws.autofit() - if freeze_panes: if isinstance(freeze_panes, str): ws.freeze_panes(freeze_panes)