File size: 1,921 Bytes
cdf2807
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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()