import pandas as pd import gradio as gr def process_data(file): try: # file adalah path di Hugging Face Spaces df = pd.read_excel(file) output_data = [] no = 1 char1 = char2 = char3 = char4 = "" previous_char3 = "" nominal = tipe = 0 anggaran1 = anggaran2 = anggaran3 = 0 total_nominal = 0 column_names = df.columns.tolist() for _, row in df.iterrows(): kode = str(row[column_names[0]]).strip() anggaran = row[column_names[3]] if kode and kode[0] in ["3", "6"]: char1 = kode anggaran3 = anggaran elif kode.startswith("0"): char2 = kode elif kode != "nan" and kode.isalpha(): char3 = kode previous_char3 = char3 anggaran1 = anggaran elif kode.startswith("5"): char4 = kode anggaran2 = anggaran if pd.isna(row[column_names[9]]): nominal = row[column_names[10]] tipe = row[column_names[13]] else: nominal = row[column_names[9]] tipe = row[column_names[11]] if char3 == "": char3 = previous_char3 mak = f"{char1}.{char2}.{char3}.{char4}" output_data.append({ "No": no, "MAK": mak, "Anggaran3": anggaran3, "Anggaran1": anggaran1, "Anggaran2": anggaran2, "Nominal": nominal, "Tipe": tipe }) no += 1 char3 = "" if pd.notna(nominal): total_nominal += float(nominal) output_data.append({ "No": "", "MAK": "", "Anggaran3": "", "Anggaran1": "", "Anggaran2": "", "Nominal": f"Total Nominal: {total_nominal:.0f}", "Tipe": "" }) output_df = pd.DataFrame(output_data) output_file = "/tmp/processed_data.xlsx" output_df.to_excel(output_file, index=False) return output_file except Exception as e: return f"Error: {e}" with gr.Blocks(title="Konvert Mata Anggaran Sakti") as demo: gr.Markdown("### Konvert Mata Anggaran Sakti") gr.Markdown("Unggah file Excel, sistem akan mengonversi dan menghasilkan file Excel baru.") input_file = gr.File(label="Upload Excel File", file_types=[".xlsx"]) output_file = gr.File(label="Download Hasil") btn = gr.Button("Proses") btn.click(process_data, inputs=input_file, outputs=output_file) demo.launch()