Código Python para Transferir las Notas de Moodle a las Actas de GEA

1. Código en Python

La función de_Moodle_a_actas utiliza el módulo pandas.

import pandas as pd

A continuación, se presenta el código de la función:

def de_Moodle_a_actas(excelMoodle: str, excelActas: str, nombre_columna_con_las_calificaciones: str):
    """Función que cumplimenta una copia de las actas descargadas del portal de
    gestión académica con las notas calculadas en Moodle y almacenadas en un
    archivo Excel descargado desde Moodle.

    excelMoodle: nombre (incluido el path) del archivo descargado desde Moodle
    excelActas:  nombre (incluido el path) del archivo de actas descargado desde GEA
    nombre_columna_con_las_calificaciones: nombre de la columna del archivo excelMoodle donde están las notas finales
    """
    
    # Cargar los datos
    df_moodle = pd.read_excel(excelMoodle)  # Excel descargado de Moodle
    df_gea = pd.read_excel(excelActas)      # Excel de las actas (vacías) descargado de la página de calificación de actas (con extensión .xls).

    # Limpia el DNI en el df_moodle para que no contenga la letra final
    df_moodle['DNI_sin_letra'] = df_moodle['Número de ID'].str[:-1]

    # Mantiene los ceros a la izquierda en el df_moodle
    df_moodle['DNI_sin_letra'] = df_moodle['DNI_sin_letra'].str.zfill(8)

    # Mantiene los ceros a la izquierda en el df_gea
    df_gea['Doc. de identidad'] = df_gea['Doc. de identidad'].astype(str).str.zfill(8)

    # Realiza el merge (unión) entre los dos DataFrames
    merged_df = pd.merge(df_gea, 
                         df_moodle[['DNI_sin_letra', nombre_columna_con_las_calificaciones]],
                         left_on='Doc. de identidad', 
                         right_on='DNI_sin_letra', 
                         how='left')

    # Rellena la columna 'Nota num.' con las notas de la columna correspondiente en df_moodle y reemplaza '-' por vacíos
    df_gea['Nota num.'] = merged_df[nombre_columna_con_las_calificaciones].replace('-', '')

    # Asegura que los NaN en 'Calificación' del DataFrame de GEA se mantengan como vacíos
    df_gea['Calificación'] = df_gea['Calificación'].where(df_gea['Calificación'].notna(), '')

    # Devuelve el DataFrame
    return df_gea

Este código lee el archivo de Moodle y el archivo de las actas, identifica a los alumnos de ambos ficheros por el DNI y "pasa a actas" las notas de la columna que se especifique (que contiene las calificaciones finales). La función devuelve un DataFrame con la estructura del archivo de actas que incorpora las calificaciones de cada alumno.

2. Cómo usarlo

2.1. Paso previo

  • Desde https://geaportal.ucm.es/index.html, en Calificación de actas, descarga un archivo Excel con las actas vacías del grupo que se va a calificar. (Dado que GEA siempre designa estos archivos como CalificacionExcel.xls, se recomienda guardarlos en un subdirectorio diferente para cada grupo).
  • Descarga las calificaciones desde Moodle en un archivo Excel, por ejemplo 00-123456-Calificaciones.xlsx. (Es aconsejable guardar este archivo en el mismo directorio donde se han almacenado las actas del grupo correspondiente).

2.2. Ejecución de la función

  • Ejecuta

    de_Moodle_a_actas('path/ExcelDescargadoDesdeMoodle.xlsx', 'path/CalificacionExcel.xls', 'CabeceraColumnaConLasNotas')
    

    donde CalificacionExcel.xls es el archivo con las actas descargadas desde https://geaportal.ucm.es/index.html.

3. Ejemplo de uso

Supongamos que el archivo descargado desde Moodle es ./GrupoAlpha/00-123456-Calificaciones.xlsx (donde ./GrupoAlpha/ es la ruta hasta el archivo). Y que las calificaciones finales que se van a pasar a actas se encuentran en la columna con la cabecera Total ConvocatoriaOrdinaria (Real).

Además, el archivo con las actas sin cumplimentar es ./GrupoAlpha/CalificacionExcel.xls. Entonces, basta con ejecutar lo siguiente:

# Uso de la función
notasConvocatoriaOrdinariaGrupoAlpha = de_Moodle_a_actas('./GrupoAlpha/00-123456-Calificaciones.xlsx',
                                                     './GrupoAlpha/CalificacionExcel.xls',
                                                     'Total ConvocatoriaOrdinaria (Real)')

donde notasConvocatoriaOrdinariaGrupoAlpha es el nombre del DataFrame con la estructura de las actas, que estará cumplimentado con las notas de Moodle. Para ver el resultado:

print(notasConvocatoriaOrdinariaGrupoAlpha)

Para guardar el DataFrame en un archivo Excel, se recomienda utilizar un nombre descriptivo (de esta manera se evitarán confusiones al subirlo a https://geaportal.ucm.es).

nombreFichero = 'actaOrdinariaGrupoAlpha'
notasConvocatoriaOrdinariaGrupoAlpha.to_excel(nombreFichero + '.xlsx', index=False)  # Guarda el DataFrame en un archivo Excel
print(f"El archivo Excel {nombreFichero}.xlsx se ha guardado correctamente.")
El archivo Excel actaOrdinariaGrupoAlpha.xlsx se ha guardado correctamente.

El archivo Excel que hemos creado se puede cargar en la página donde se cumplimentan las actas (haciendo clic en el enlace "Cargar/descargar fichero Excel").

Autor: Marcos Bujosa

Created: 2026-02-25 mié 13:22

Validate