import pandas as pd import openpyxl from openpyxl.styles import PatternFill import gradio as gr def load_excel(file_path): """Loads the Excel file into a pandas DataFrame.""" df = pd.read_excel(file_path, sheet_name="Sheet1") return df def highlight_pairs(df, threshold=2.0): """Highlights pairs in columns D and E based on the threshold.""" colors = ["FF0000", "00FF00", "0000FF", "FFFF00", "FF00FF", "00FFFF"] # Hex colors for RGB color_index = 0 df['High Result'] = '' df['Low Result'] = '' colored_pairs = set() wb = openpyxl.load_workbook(file_path) ws = wb['Sheet1'] # Function to apply color to cells def apply_color(cell, color_hex): cell.fill = PatternFill(start_color=color_hex, end_color=color_hex, fill_type="solid") last_row = len(df) def process_column(df, col_index, output_col, color_pairs, colors): nonlocal color_index for i in range(last_row - 1, 1, -1): for j in range(i - 1, 1, -1): if abs(df.iloc[i, col_index] - df.iloc[j, col_index]) <= threshold: pair_key_i = (i, col_index) pair_key_j = (j, col_index) if pair_key_i not in color_pairs and pair_key_j not in color_pairs: apply_color(ws.cell(row=i+2, column=col_index+1), colors[color_index]) apply_color(ws.cell(row=j+2, column=col_index+1), colors[color_index]) color_pairs.add(pair_key_i) color_pairs.add(pair_key_j) output_value = (max if col_index == 3 else min)( int(df.iloc[i, col_index]), int(df.iloc[j, col_index]) ) + (1 if col_index == 3 else -1) color_output = False for k in range(i - 1, 1, -1): if ((df.iloc[k, col_index] > output_value and col_index == 3) or (df.iloc[k, col_index] < output_value and col_index == 4)): if ((df.iloc[k, 5] > max(df.iloc[i, col_index], df.iloc[j, col_index]) and col_index == 3) or (df.iloc[k, 5] < min(df.iloc[i, col_index], df.iloc[j, col_index]) and col_index == 4)): apply_color(ws.cell(row=j+2, column=output_col+1), colors[color_index]) color_output = True break ws.cell(row=j+2, column=output_col+1).value = output_value if not color_output: ws.cell(row=j+2, column=output_col+1).fill = PatternFill(fill_type=None) color_index = (color_index + 1) % len(colors) process_column(df, 3, 6, colored_pairs, colors) # Process Column D (High Price) process_column(df, 4, 7, colored_pairs, colors) # Process Column E (Low Price) wb.save('output.xlsx') def gradio_app(file_path): """Main function to handle Gradio inputs and outputs.""" df = load_excel(file_path) highlight_pairs(df) return 'output.xlsx' # Gradio Interface gr_interface = gr.Interface( fn=gradio_app, inputs=gr.inputs.File(label="Upload Excel File"), outputs=gr.outputs.File(label="Download Processed Excel File"), title="Excel Highlighter" ) if __name__ == "__main__": gr_interface.launch()