Spaces:
Sleeping
Sleeping
File size: 3,870 Bytes
210cae4 f3b72a6 6621159 210cae4 8a53b2d 210cae4 98ebf2e f3b72a6 98ebf2e 210cae4 1d5d40c 210cae4 f3b72a6 210cae4 f3b72a6 210cae4 f3b72a6 210cae4 f3b72a6 1d5d40c f3b72a6 8a53b2d f3b72a6 8a53b2d 210cae4 cb1f896 210cae4 c1f7d32 98ebf2e 210cae4 cb1f896 f3b72a6 8a53b2d c1f7d32 8a53b2d cb1f896 f3b72a6 210cae4 f3b72a6 210cae4 c1f7d32 210cae4 c1f7d32 210cae4 cb1f896 c1f7d32 210cae4 cb1f896 210cae4 c1f7d32 210cae4 c1f7d32 210cae4 |
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import gradio as gr
import os
import warnings
# Suppress openpyxl warnings
warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl")
# Load the constant mapping file (embedded in the app)
def load_mapping():
mapping_path = "Levi's Data Mapping.xlsx"
return pd.read_excel(mapping_path)
# Function to extract and map data from the input workbook
def transform_data(input_path, mapping_df):
# Load the input workbook
input_workbook = pd.ExcelFile(input_path)
# Initialize a dictionary to store data for output
output_data = {}
# Iterate through each mapping rule
for _, row in mapping_df.iterrows():
output_column = row["PO Output Column"]
input_sheet = row["Sheet Name"]
input_column = row["Input Column"]
start_row = row.get("Start Row", 2) # Default start row is 2 if not specified
if pd.isna(output_column) or pd.isna(input_sheet) or pd.isna(input_column):
continue
# Extract data from the specified sheet and column
if input_sheet in input_workbook.sheet_names:
sheet_data = pd.read_excel(input_path, sheet_name=input_sheet, usecols=[input_column], skiprows=start_row - 1)
output_data[output_column] = sheet_data[input_column].tolist()
else:
output_data[output_column] = [] # If sheet is missing, add empty column
# Ensure all columns have the same number of rows by filling with blanks
max_rows = max(len(col_data) for col_data in output_data.values())
for key in output_data:
while len(output_data[key]) < max_rows:
output_data[key].append("")
return pd.DataFrame(output_data)
# Main processing function
def process_files(input_workbook):
try:
# Validate input file
if not os.path.exists(input_workbook):
return None, "Input workbook file does not exist."
# Load the constant mapping data
mapping_df = load_mapping()
# Transform the data
transformed_data = transform_data(input_workbook, mapping_df)
# Load the output template (embedded in the app)
output_template_path = "Generated_Output.xlsx"
if not os.path.exists(output_template_path):
return None, "Output template file is missing."
output_workbook = load_workbook(output_template_path)
output_sheet = output_workbook.active
# Write transformed data to the output sheet
for row_idx, row_data in enumerate(transformed_data.itertuples(index=False), start=2):
for col_idx, value in enumerate(row_data, start=1):
output_sheet.cell(row=row_idx, column=col_idx, value=value)
# Save the generated output file
output_file_path = "Generated_Output_Final.xlsx"
output_workbook.save(output_file_path)
return output_file_path, None
except Exception as e:
return None, f"An error occurred during file generation: {e}"
# Define the Gradio interface
def generate_excel(input_workbook):
file_path, error = process_files(input_workbook.name)
if error:
return None, error
return file_path, "File generated successfully."
with gr.Blocks() as app:
gr.Markdown("# Excel Sheet Generator")
gr.Markdown("Upload the input workbook to generate the final Excel file.")
with gr.Row():
input_workbook = gr.File(label="Input Workbook", file_types=[".xlsx"])
output_file = gr.File(label="Generated Excel File")
status_message = gr.Textbox(label="Status", interactive=False)
generate_button = gr.Button("Generate Excel File")
generate_button.click(generate_excel, inputs=[input_workbook], outputs=[output_file, status_message])
# Launch the app
app.launch()
|