import pandas as pd def load_excel(file): df = pd.read_excel(file) return file, df def run_code(file, code): scope = {'pd': pd} if file: print('file ok') df = pd.read_excel(file) scope['df'] = df try: exec(code, scope, scope) except Exception as e: scope['new_df'] = df return scope['new_df'], f"# ERROR: {str(e)}" # print(scope.keys()) if 'new_df' not in scope: print("new_df not defined") scope['new_df'] = df.copy() new_df = scope['new_df'] return new_df, "" else: print("No file provided") return pd.DataFrame(), "No file provided" # def run_code_and_update_ui(file, code): # df, error_msg = run_code(file, code) # This is your updated run_code function. # # Now, check if there's an error message and handle it appropriately. # if error_msg: # # You can update some error display component in Gradio here to show the error_msg. # # Assuming you have a gr.Textbox to display errors: # error_display.update(value=f"Error in code execution: {error_msg}") # # Ensure you still return the original DataFrame or an empty one to satisfy the expected output type. # return df # else: # # If no error, clear the error display and return the DataFrame as usual. # error_display.update(value="") # return df def export_df(df, filename): filename = filename.replace('.xlsx', '_coded.xlsx') df.to_excel(filename, index=False) return filename