Inicio Apuntes FPApuntes DAMAcceso a Datos Añade datos a una hoja Excel mediante un formulario tkinter

Añade datos a una hoja Excel mediante un formulario tkinter

Sencillo, fácil y para toda la familia

Publicado por entreunosyceros

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.

add datos a 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

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.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.