Trabajaremos con dos librerías muy usadas:
Excel →
openpyxl(para archivos .xlsx)PDF →
PyPDF2(para leer, extraer texto y combinar PDFs)
1. Manipulación de Excel con openpyxl
Crear un archivo Excel
from openpyxl import Workbook
wb = Workbook()
hoja = wb.active
hoja.title = "Inventario"
hoja["A1"] = "Producto"
hoja["B1"] = "Precio"
hoja.append(["Teclado", 20])
hoja.append(["Ratón", 15])
wb.save("inventario.xlsx")
Leer un archivo Excel
from openpyxl import load_workbook
wb = load_workbook("inventario.xlsx")
hoja = wb.active
for fila in hoja.iter_rows(values_only=True):
print(fila)
Modificar celdas
hoja["B2"] = 25
wb.save("inventario.xlsx")
Estilos básicos
from openpyxl.styles import Font
hoja["A1"].font = Font(bold=True)
hoja["B1"].font = Font(bold=True)
wb.save("inventario.xlsx")
2. Manipulación de PDF con PyPDF2
Leer texto de un PDF
import PyPDF2
with open("documento.pdf", "rb") as f:
lector = PyPDF2.PdfReader(f)
pagina = lector.pages[0]
print(pagina.extract_text())
Combinar varios PDFs
import PyPDF2
fusion = PyPDF2.PdfMerger()
fusion.append("parte1.pdf")
fusion.append("parte2.pdf")
fusion.append("parte3.pdf")
fusion.write("documento_final.pdf")
fusion.close()
Extraer páginas concretas
import PyPDF2
with open("documento.pdf", "rb") as f:
lector = PyPDF2.PdfReader(f)
escritor = PyPDF2.PdfWriter()
escritor.add_page(lector.pages[2]) # página 3
with open("pagina3.pdf", "wb") as salida:
escritor.write(salida)
ACTIVIDAD PRÁCTICA: “Generador de informe PDF desde Excel”
Objetivo: que tus alumnos combinen Excel y PDF para crear un flujo de trabajo profesional.
Enunciado
Crea un programa que:
Lea un archivo Excel con una lista de productos:
Nombre
Precio
Stock
Calcule el valor total del inventario.
Genere un PDF con:
Fecha del informe
Tabla de productos
Valor total del inventario
Pistas
Usa
openpyxlpara leer ExcelUsa
reportlabpara generar el PDF (librería muy usada)Usa
datetimepara la fechaCrea una tabla simple en el PDF
Solución propuesta (completa)
from openpyxl import load_workbook
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from datetime import datetime
# 1. Leer Excel
wb = load_workbook("inventario.xlsx")
hoja = wb.active
productos = []
for fila in hoja.iter_rows(min_row=2, values_only=True):
productos.append(fila)
# 2. Calcular valor total
total = sum(precio * stock for _, precio, stock in productos)
# 3. Crear PDF
c = canvas.Canvas("informe.pdf", pagesize=A4)
c.setFont("Helvetica", 12)
# Fecha
c.drawString(50, 800, f"Informe de Inventario - {datetime.now().strftime('%d/%m/%Y')}")
# Tabla
y = 760
c.drawString(50, y, "Producto")
c.drawString(200, y, "Precio")
c.drawString(300, y, "Stock")
c.drawString(400, y, "Valor")
y -= 20
for nombre, precio, stock in productos:
c.drawString(50, y, str(nombre))
c.drawString(200, y, f"{precio} €")
c.drawString(300, y, str(stock))
c.drawString(400, y, f"{precio * stock} €")
y -= 20
# Total
c.drawString(50, y - 20, f"Valor total del inventario: {total} €")
c.save()
Ejemplo de salida (PDF generado)
Fecha del informe
Tabla con productos
Valor total del inventario