From a802fc72bf277b64cdef9a663cf29140f5293bf0 Mon Sep 17 00:00:00 2001 From: Jeff Carey Date: Mon, 6 Mar 2017 06:47:47 -0800 Subject: [PATCH 1/2] Moved freeze_panes validation to io/excel.py --- pandas/core/frame.py | 12 ------------ pandas/io/excel.py | 33 +++++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index b3e43edc3eb55..15179ac321076 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -1431,24 +1431,12 @@ def to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', inf_rep=inf_rep) formatted_cells = formatter.get_formatted_cells() - freeze_panes = self._validate_freeze_panes(freeze_panes) excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol, freeze_panes=freeze_panes) if need_save: excel_writer.save() - def _validate_freeze_panes(self, freeze_panes): - if freeze_panes is not None: - if ( - len(freeze_panes) == 2 and - all(isinstance(item, int) for item in freeze_panes) - ): - return freeze_panes - - raise ValueError("freeze_panes must be of form (row, column)" - " where row and column are integers") - def to_stata(self, fname, convert_dates=None, write_index=True, encoding="latin-1", byteorder=None, time_stamp=None, data_label=None, variable_labels=None): diff --git a/pandas/io/excel.py b/pandas/io/excel.py index 37a61b7dc9ab5..763352b90f150 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -1331,8 +1331,15 @@ def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, self.sheets[sheet_name] = wks if freeze_panes is not None: - wks.freeze_panes = wks.cell(row=freeze_panes[0] + 1, - column=freeze_panes[1] + 1) + if ( + len(freeze_panes) == 2 and + all(isinstance(item, int) for item in freeze_panes) + ): + wks.freeze_panes = wks.cell(row=freeze_panes[0] + 1, + column=freeze_panes[1] + 1) + else: + raise ValueError("freeze_panes must be of form (row, column)" + " where row and column are integers") for cell in cells: xcell = wks.cell( @@ -1419,9 +1426,16 @@ def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, self.sheets[sheet_name] = wks if freeze_panes is not None: - wks.set_panes_frozen(True) - wks.set_horz_split_pos(freeze_panes[0]) - wks.set_vert_split_pos(freeze_panes[1]) + if ( + len(freeze_panes) == 2 and + all(isinstance(item, int) for item in freeze_panes) + ): + wks.set_panes_frozen(True) + wks.set_horz_split_pos(freeze_panes[0]) + wks.set_vert_split_pos(freeze_panes[1]) + else: + raise ValueError("freeze_panes must be of form (row, column)" + " where row and column are integers") style_dict = {} @@ -1551,7 +1565,14 @@ def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, style_dict = {} if freeze_panes is not None: - wks.freeze_panes(*(freeze_panes)) + if ( + len(freeze_panes) == 2 and + all(isinstance(item, int) for item in freeze_panes) + ): + wks.freeze_panes(*(freeze_panes)) + else: + raise ValueError("freeze_panes must be of form (row, column)" + " where row and column are integers") for cell in cells: val = _conv_value(cell.val) From 81cb86f00b15df15e9b5c389e838c5cc4d6761e0 Mon Sep 17 00:00:00 2001 From: Jeff Carey Date: Mon, 6 Mar 2017 20:04:41 -0800 Subject: [PATCH 2/2] Cleaned up freeze_panes validation code --- pandas/io/excel.py | 55 +++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index 763352b90f150..00ec8bcf060ef 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -543,6 +543,22 @@ def __exit__(self, exc_type, exc_value, traceback): self.close() +def _validate_freeze_panes(freeze_panes): + if freeze_panes is not None: + if ( + len(freeze_panes) == 2 and + all(isinstance(item, int) for item in freeze_panes) + ): + return True + + raise ValueError("freeze_panes must be of form (row, column)" + " where row and column are integers") + + # freeze_panes wasn't specified, return False so it won't be applied + # to output sheet + return False + + def _trim_excel_header(row): # trim header row so auto-index inference works # xlrd uses '' , openpyxl None @@ -1330,16 +1346,9 @@ def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, wks.title = sheet_name self.sheets[sheet_name] = wks - if freeze_panes is not None: - if ( - len(freeze_panes) == 2 and - all(isinstance(item, int) for item in freeze_panes) - ): - wks.freeze_panes = wks.cell(row=freeze_panes[0] + 1, - column=freeze_panes[1] + 1) - else: - raise ValueError("freeze_panes must be of form (row, column)" - " where row and column are integers") + if _validate_freeze_panes(freeze_panes): + wks.freeze_panes = wks.cell(row=freeze_panes[0] + 1, + column=freeze_panes[1] + 1) for cell in cells: xcell = wks.cell( @@ -1425,17 +1434,10 @@ def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, wks = self.book.add_sheet(sheet_name) self.sheets[sheet_name] = wks - if freeze_panes is not None: - if ( - len(freeze_panes) == 2 and - all(isinstance(item, int) for item in freeze_panes) - ): - wks.set_panes_frozen(True) - wks.set_horz_split_pos(freeze_panes[0]) - wks.set_vert_split_pos(freeze_panes[1]) - else: - raise ValueError("freeze_panes must be of form (row, column)" - " where row and column are integers") + if _validate_freeze_panes(freeze_panes): + wks.set_panes_frozen(True) + wks.set_horz_split_pos(freeze_panes[0]) + wks.set_vert_split_pos(freeze_panes[1]) style_dict = {} @@ -1564,15 +1566,8 @@ def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, style_dict = {} - if freeze_panes is not None: - if ( - len(freeze_panes) == 2 and - all(isinstance(item, int) for item in freeze_panes) - ): - wks.freeze_panes(*(freeze_panes)) - else: - raise ValueError("freeze_panes must be of form (row, column)" - " where row and column are integers") + if _validate_freeze_panes(freeze_panes): + wks.freeze_panes(*(freeze_panes)) for cell in cells: val = _conv_value(cell.val)