Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions gspread_wrapper/gspread_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,45 @@ def replace_worksheet_with_df(self, worksheet_name, df, extra_rows=0):
"""
Replace the contents of a worksheet with a pandas DataFrame.

Parameters:
worksheet_name (str): Sheet name
df (pd.DataFrame): Data to write
extra_rows (int): Optional buffer rows to add
"""
worksheet = self.get_sheet_by_name(worksheet_name)
gspread_function(lambda: worksheet.clear_basic_filter())
gspread_function(lambda: worksheet.freeze(rows=0, cols=0))

# Prepare all rows: headers + data
headers = [list(df.columns)]
data_rows = gspread_function(lambda: df.values.tolist())
all_rows = headers + data_rows

# Clear and write everything at once
gspread_function(lambda: worksheet.clear())
col_letter = self._number_to_column(df.shape[1])
range_label = f'A1:{col_letter}{len(all_rows)}'
gspread_function(lambda: worksheet.update(range_label, all_rows))

# Format the data rows (skip header row)
if len(all_rows) > 1:
gspread_function(lambda: worksheet.format(
f"A2:{col_letter}{len(all_rows)}",
{
"backgroundColor": {"red": 1.0, "green": 1.0, "blue": 1.0},
"horizontalAlignment": "CENTER",
"textFormat": {
"foregroundColor": {"red": 0.0, "green": 0.0, "blue": 0.0},
"fontSize": 10,
"bold": False,
},
},
))
gspread_function(lambda: worksheet.freeze(rows=1))
return worksheet
"""
Replace the contents of a worksheet with a pandas DataFrame.

Parameters:
worksheet_name (str): Sheet name
df (pd.DataFrame): Data to write
Expand Down