import pandas as pd import gradio as gr def convert_schedule(file, direction): # Read the uploaded Excel file; use the first column as index df = pd.read_excel(file.name if hasattr(file, 'name') else file, index_col=0) if direction == "A to B": # A->B: models in rows, texters in cells -> texters as rows, models as cell values df_reset = df.reset_index() model_col = df_reset.columns[0] df_melt = df_reset.melt(id_vars=[model_col], var_name='Header', value_name='Texter') df_melt = df_melt.dropna(subset=['Texter']) df_pivot = df_melt.pivot(index='Texter', columns='Header', values=model_col) df_pivot = df_pivot.reindex(columns=df.columns).fillna("") result = df_pivot else: # B->A: texters in rows, models in cells -> models as rows, texters as cell values df_reset = df.reset_index() texter_col = df_reset.columns[0] df_melt = df_reset.melt(id_vars=[texter_col], var_name='Header', value_name='Model') df_melt = df_melt.dropna(subset=['Model']) df_pivot = df_melt.pivot(index='Model', columns='Header', values=texter_col) df_pivot = df_pivot.reindex(columns=df.columns).fillna("") result = df_pivot # Save to Excel for download out_file = "converted_schedule.xlsx" result.to_excel(out_file) return result, out_file # Build Gradio interface iface = gr.Interface( fn=convert_schedule, inputs=[ gr.File(label="Upload Schedule Excel (Format A or B)"), gr.Radio(["A to B", "B to A"], label="Conversion Direction") ], outputs=[ gr.Dataframe(label="Converted Schedule"), gr.File(label="Download Converted Excel") ], title="Schedule Format Converter", description="Dynamically convert between two schedule formats: models-as-rows ↔ texters-as-rows." ) if __name__ == "__main__": iface.launch()