Here is my now goto prompt for when I am working on a project – have a class that I need to mimic the interfaces.
use the following class as a template. Call the new class "MainframeExcelText" The init take file and sheet and sets row and column location to 0. 1 function - write_text will take a row,col and string. It will write the text to the location in the excel spreadsheet using openpyxl. a close function will close he sheet
class MainframeExcelPivot:
# Define the init method
def __init__(self, excel_file, sheet_name):
# Load the Excel file into a DataFrame
self.df = pd.read_excel(excel_file, sheet_name=sheet_name)
# Store the Excel file name and sheet name as attributes
self.excel_file = excel_file
self.sheet_name = sheet_name
self.start_row = 1
self.start_col = 1
self.book = load_workbook(self.excel_file)
# Create an Excel writer object with openpyxl engine and append mode
self.writer = pd.ExcelWriter(self.excel_file, engine="openpyxl", mode="a", if_sheet_exists="overlay")
# Assign the book attribute to the loaded workbook
self.writer.book = self.book
def set_loc(self, start_row, start_col ):
self.start_row = start_row
self.start_col = start_col
# Define the create_manager_pivot method
def create_manager_pivot(self, sheet_name):
# Create a pivot table with index "Manager" and values "Case" with count function
self.df["Aged_Backlog"] = self.df["Aged"].str.contains(">21")
self.table = pd.pivot_table(self.df, index="Manager", values=["Case", "Aged_Backlog"],
aggfunc={"Case": "count",
"Aged_Backlog": np.sum},
margins=True, margins_name="Total")
self.table["Percent_Aged"] = self.table["Aged_Backlog"].div(
self.table["Case"]).mul(100).round(2)
# Save the pivot table as a new sheet in the Excel file
def sheet_filter_with_compare(self, sheet_name, index_col, value_col, aggfunc=np.sum, filter_col=None, filter_values=None):
# Create a pivot table with the given parameters and a filter on filter_col column
if filter_col and filter_values:
my_pd = self.df.query(f"{filter_col} in {filter_values}")
# Construct the query string using the filter parameters
query_str = f"{filter_col} in {filter_values}"
self.table = pd.pivot_table(my_pd, index=index_col, values=value_col,
aggfunc=aggfunc,
margins=True, margins_name="Total")
else:
# No filter applied
self.table = pd.pivot_table(self.df, index=index_col, values=value_col,
aggfunc=aggfunc,
margins=True, margins_name="Total")
# Save the pivot table as a new sheet in the Excel file
self.save_table(sheet_name)
# Define the save method
def save_table(self, sheet_name):
self.table.to_excel(self.writer, sheet_name=sheet_name, startrow = self.start_row, startcol=self.start_col )
def save(self, sheet_name):
# Save the file
self.writer.save()
use the following class as a template. Call the new class "MainframeExcelText" The init take file and sheet and sets row and column location to 0. 1 function - write_text will take a row,col and string. It will write the text to the location in the excel spreadsheet using openpyxl. a close function will close he sheet
class MainframeExcelPivot:
# Define the init method
def __init__(self, excel_file, sheet_name):
# Load the Excel file into a DataFrame
self.df = pd.read_excel(excel_file, sheet_name=sheet_name)
# Store the Excel file name and sheet name as attributes
self.excel_file = excel_file
self.sheet_name = sheet_name
self.start_row = 1
self.start_col = 1
self.book = load_workbook(self.excel_file)
# Create an Excel writer object with openpyxl engine and append mode
self.writer = pd.ExcelWriter(self.excel_file, engine="openpyxl", mode="a", if_sheet_exists="overlay")
# Assign the book attribute to the loaded workbook
self.writer.book = self.book
def set_loc(self, start_row, start_col ):
self.start_row = start_row
self.start_col = start_col
# Define the create_manager_pivot method
def create_manager_pivot(self, sheet_name):
# Create a pivot table with index "Manager" and values "Case" with count function
self.df["Aged_Backlog"] = self.df["Aged"].str.contains(">21")
self.table = pd.pivot_table(self.df, index="Manager", values=["Case", "Aged_Backlog"],
aggfunc={"Case": "count",
"Aged_Backlog": np.sum},
margins=True, margins_name="Total")
self.table["Percent_Aged"] = self.table["Aged_Backlog"].div(
self.table["Case"]).mul(100).round(2)
# Save the pivot table as a new sheet in the Excel file
def sheet_filter_with_compare(self, sheet_name, index_col, value_col, aggfunc=np.sum, filter_col=None, filter_values=None):
# Create a pivot table with the given parameters and a filter on filter_col column
if filter_col and filter_values:
my_pd = self.df.query(f"{filter_col} in {filter_values}")
# Construct the query string using the filter parameters
query_str = f"{filter_col} in {filter_values}"
self.table = pd.pivot_table(my_pd, index=index_col, values=value_col,
aggfunc=aggfunc,
margins=True, margins_name="Total")
else:
# No filter applied
self.table = pd.pivot_table(self.df, index=index_col, values=value_col,
aggfunc=aggfunc,
margins=True, margins_name="Total")
# Save the pivot table as a new sheet in the Excel file
self.save_table(sheet_name)
# Define the save method
def save_table(self, sheet_name):
self.table.to_excel(self.writer, sheet_name=sheet_name, startrow = self.start_row, startcol=self.start_col )
def save(self, sheet_name):
# Save the file
self.writer.save()
use the following class as a template. Call the new class "MainframeExcelText" The init take file and sheet and sets row and column location to 0. 1 function - write_text will take a row,col and string. It will write the text to the location in the excel spreadsheet using openpyxl. a close function will close he sheet class MainframeExcelPivot: # Define the init method def __init__(self, excel_file, sheet_name): # Load the Excel file into a DataFrame self.df = pd.read_excel(excel_file, sheet_name=sheet_name) # Store the Excel file name and sheet name as attributes self.excel_file = excel_file self.sheet_name = sheet_name self.start_row = 1 self.start_col = 1 self.book = load_workbook(self.excel_file) # Create an Excel writer object with openpyxl engine and append mode self.writer = pd.ExcelWriter(self.excel_file, engine="openpyxl", mode="a", if_sheet_exists="overlay") # Assign the book attribute to the loaded workbook self.writer.book = self.book def set_loc(self, start_row, start_col ): self.start_row = start_row self.start_col = start_col # Define the create_manager_pivot method def create_manager_pivot(self, sheet_name): # Create a pivot table with index "Manager" and values "Case" with count function self.df["Aged_Backlog"] = self.df["Aged"].str.contains(">21") self.table = pd.pivot_table(self.df, index="Manager", values=["Case", "Aged_Backlog"], aggfunc={"Case": "count", "Aged_Backlog": np.sum}, margins=True, margins_name="Total") self.table["Percent_Aged"] = self.table["Aged_Backlog"].div( self.table["Case"]).mul(100).round(2) # Save the pivot table as a new sheet in the Excel file def sheet_filter_with_compare(self, sheet_name, index_col, value_col, aggfunc=np.sum, filter_col=None, filter_values=None): # Create a pivot table with the given parameters and a filter on filter_col column if filter_col and filter_values: my_pd = self.df.query(f"{filter_col} in {filter_values}") # Construct the query string using the filter parameters query_str = f"{filter_col} in {filter_values}" self.table = pd.pivot_table(my_pd, index=index_col, values=value_col, aggfunc=aggfunc, margins=True, margins_name="Total") else: # No filter applied self.table = pd.pivot_table(self.df, index=index_col, values=value_col, aggfunc=aggfunc, margins=True, margins_name="Total") # Save the pivot table as a new sheet in the Excel file self.save_table(sheet_name) # Define the save method def save_table(self, sheet_name): self.table.to_excel(self.writer, sheet_name=sheet_name, startrow = self.start_row, startcol=self.start_col ) def save(self, sheet_name): # Save the file self.writer.save()
Here is what it generated.
“I’ll try to help you with that. Here is a possible class that meets your requirements:”
# Import openpyxl module
import openpyxl
# Define the MainframeExcelText class
class MainframeExcelText:
# Define the init method
def __init__(self, file, sheet):
# Load the workbook and the sheet
self.wb = openpyxl.load_workbook(file)
self.ws = self.wb[sheet]
# Store the file and sheet names as attributes
self.file = file
self.sheet = sheet
# Set the row and column location to 0
self.row = 0
self.col = 0
# Define the write_text method
def write_text(self, row, col, string):
# Write the string to the given row and column location in the sheet
self.ws.cell(row=row, column=col).value = string
# Define the close method
def close(self):
# Save and close the workbook
self.wb.save(self.file)
self.wb.close()
# Import openpyxl module
import openpyxl
# Define the MainframeExcelText class
class MainframeExcelText:
# Define the init method
def __init__(self, file, sheet):
# Load the workbook and the sheet
self.wb = openpyxl.load_workbook(file)
self.ws = self.wb[sheet]
# Store the file and sheet names as attributes
self.file = file
self.sheet = sheet
# Set the row and column location to 0
self.row = 0
self.col = 0
# Define the write_text method
def write_text(self, row, col, string):
# Write the string to the given row and column location in the sheet
self.ws.cell(row=row, column=col).value = string
# Define the close method
def close(self):
# Save and close the workbook
self.wb.save(self.file)
self.wb.close()
# Import openpyxl module import openpyxl # Define the MainframeExcelText class class MainframeExcelText: # Define the init method def __init__(self, file, sheet): # Load the workbook and the sheet self.wb = openpyxl.load_workbook(file) self.ws = self.wb[sheet] # Store the file and sheet names as attributes self.file = file self.sheet = sheet # Set the row and column location to 0 self.row = 0 self.col = 0 # Define the write_text method def write_text(self, row, col, string): # Write the string to the given row and column location in the sheet self.ws.cell(row=row, column=col).value = string # Define the close method def close(self): # Save and close the workbook self.wb.save(self.file) self.wb.close()