Tabla de contenido
Una vez más aquí. Después de bastante tiempo (por una cosa u otra), por fin tengo un rato para escribir algo en este sitio. El caso es que esta vez vengo a dejar algo para un usuario que me preguntó hace ya algunas semanas ¿cómo se añade datos a una hoja Excel utilizando Python? Pues bien, aun que supongo que a este usuario ya no le interesará, a mi me va a servir este artículo para dejar un artículo publicado durante las vacaciones.
En las siguientes líneas vamos a ver un pequeño programa desarrollado con Python, para la inserción de datos, utilizando la biblioteca gráfica Tkinter para generar la interfaz de usuario y Openpyxl para la manipulación de archivos Excel. Este programa permite al usuario añadir y almacenar información en un archivo Excel, además de sumar las transacciones registradas y darnos la posibilidad de abrir el archivo Excel desde su interfaz. Tengo que decir que como el usuario que me preguntó por esto no me especificó nada en particular, pues todo lo hice un poco a mi manera. Por lo que los datos con los que se trabaja, son un totalmente a mi libre elección (aun que son fácilmente modificables).
Añade datos a una hoja Excel. El programa:
El programa se compone de varias partes esenciales: configuración del entorno, interfaz de usuario, validación de datos y operaciones con el archivo Excel.

Importación de Bibliotecas
El programa comienza con la importación de las bibliotecas necesarias para hacer todo aquello nos interesa:
import tkinter as tk from tkinter import messagebox from openpyxl import Workbook, load_workbook from openpyxl.styles import Font import re import os import platform import subprocess from PIL import Image, ImageTk
Estas bibliotecas permiten manejar la interfaz gráfica, los archivos Excel, la validación de datos y la gestión de archivos y plataformas.
Configuración del Archivo Excel que utilizaremos
Algo importante, según he planteado el programa, es que se debe verificar si el archivo datos.xlsx
ya existe (el nombre del archivo es opcional). Si no, se crea un nuevo archivo con una hoja activa y se añade una fila de encabezados en negrita:
nombre_archivo = 'datos.xlsx' if os.path.exists(nombre_archivo): wb = load_workbook(nombre_archivo) ws = wb.active else: wb = Workbook() ws = wb.active header = ["Nombre", "Edad", "Email", "Teléfono", "Dirección", "Transacción"] ws.append(header) for cell in ws[1]: cell.font = Font(bold=True)
Añade datos a una hoja Excel mediante un formulario tkinter. Funciones utilizadas:
- Limpiar el formulario: Esta función limpia todos los campos de entrada del formulario.
def limpiar_formulario(): entry_nombre.delete(0, tk.END) entry_edad.delete(0, tk.END) entry_email.delete(0, tk.END) entry_telefono.delete(0, tk.END) entry_direccion.delete(0, tk.END) entry_transaccion.delete(0, tk.END)
- Sumar transacciones: Calcula el total de las transacciones registradas y lo guarda en la columna 8 del archivo Excel.
def sumar_transacciones(): total = 0 for row in ws.iter_rows(min_row=2, min_col=6, max_col=6, values_only=True): if row[0] is not None: total += row[0] ws['H1'] = "Total Transacciones" ws['H1'].font = Font(bold=True) ws['H2'] = total
- Guardar datos: Valida y guarda los datos añadidos en el archivo Excel. Aquí tengo que decir que las validaciones son bastante básicas, pero para este ejemplo, creo que es más que suficiente.
def guardar_datos(): nombre = entry_nombre.get() edad = entry_edad.get() email = entry_email.get() telefono = entry_telefono.get() direccion = entry_direccion.get() transaccion = entry_transaccion.get() if not nombre or not edad or not email or not telefono or not direccion or not transaccion: messagebox.showwarning(title="Advertencia", message="Todos los campos son obligatorios") return try: edad = int(edad) telefono = int(telefono) transaccion = int(transaccion) except ValueError: messagebox.showwarning(title="Advertencia", message="Edad, Teléfono y Transacción deben ser números") return if not re.match(r"[^@]+@[^@]+\.[^@]+", email): messagebox.showwarning(title="Advertencia", message="El correo electrónico no es válido") return ws.append([nombre, edad, email, telefono, direccion, transaccion]) sumar_transacciones() wb.save(nombre_archivo) messagebox.showinfo(title="Información", message="Datos guardados con éxito") limpiar_formulario()
- Abrir archivo: Abre el archivo Excel usando el programa predeterminado del sistema operativo.
def abrir_archivo(): if not os.path.exists(nombre_archivo): messagebox.showwarning(title="Advertencia", message="El archivo Excel aún no ha sido creado.") return if platform.system() == "Windows": os.startfile(nombre_archivo) elif platform.system() == "Darwin": subprocess.call(["open", nombre_archivo]) else: subprocess.call(["xdg-open", nombre_archivo])
Configuración de la Interfaz Gráfica

La interfaz gráfica se configura utilizando Tkinter, aun que también se podría utilizar PyQt5. Para este ejemplo he utilizado algunos estilos personalizados para las etiquetas y los campos de entradas. Además, se añaden los botones para guardar datos y abrir el archivo Excel que tengamos generado. La configuración de esta interfaz se realiza mediante el siguiente código:
root = tk.Tk() root.title("Formulario de Entrada de Datos") root.resizable(False, False) try: icon = Image.open("icono.ico") root.iconphoto(True, ImageTk.PhotoImage(icon)) except Exception as e: print(f"No se pudo cargar el ícono: {e}") root.configure(bg='#1e8a9c') label_style = {"bg": "#1e8a9c", "fg": "white"} entry_style = {"bg": "#D3D3D3", "fg": "black"} labels = ["Nombre", "Edad", "Email", "Teléfono", "Dirección", "Transacción"] entries = [] for i, label_text in enumerate(labels): label = tk.Label(root, text=label_text, **label_style) label.grid(row=i, column=0, padx=10, pady=5) entry = tk.Entry(root, **entry_style) entry.grid(row=i, column=1, padx=10, pady=5) entries.append(entry) entry_nombre, entry_edad, entry_email, entry_telefono, entry_direccion, entry_transaccion = entries boton_guardar = tk.Button(root, text="Guardar", command=guardar_datos, bg='#196673', fg='white') boton_guardar.grid(row=6, column=0, padx=10, pady=10) boton_abrir = tk.Button(root, text="Abrir Archivo", command=abrir_archivo, bg='#196673', fg='white') boton_abrir.grid(row=6, column=1, padx=10, pady=10) root.mainloop()
Este programa, haciéndole algunas modificaciones a mayores, podría resultar una herramienta útil para gestionar datos de manera sencilla y eficiente en hojas Excel.
Si quieres probar este programa, puedes utilizar el paquetes .DEB para Debian y derivados, y el paquete .EXE para Windows que he alojado en la página de lanzamientos del repositorio en GitHub en donde puedes ver todo el código fuente del ejemplo.