En esta entrada veremos cómo poner bordes a una celda con Python usando el modulo openpyxl. Es necesario instalar este módulo para poder utilizarlo. En la entrada Trabajar con archivos de Excel en Python con openpyxl puedes ver cómo hacer la instalación del módulo y una introducción a lo que se puede hacer con él.
Podemos colocar los bordes de una celda con un apartado del modulo opepyxl llamado styles, este contiene submódulos que nos van a permitir definir los colores y bordes de las celdas. Empecemos importando los módulos necesarios.
from openpyxl import Workbook
from openpyxl.styles import Border, Side
Ahora vamos a crear libro con el que vamos a trabajar y seleccionamos una celda a la que le colocaremos algún borde.
libro = Workbook()
hoja = libro.active
celda = hoja["B2"]
Side nos permite definir el tipo de línea que usaremos y su color. Border permite seleccionar el lado de la celda en el que queremos aplicar el borde. Vamos a colocar un borde a la parte superior en color rojo. El color se puede definir de forma aRGB.
celda.border = Border(top = Side(border_style='dashDot', color='00FF0000'))
Vamos a guardar el libro para poder ver el borde que acabamos de crear en la celda. Recuerda que si no especificas la ruta donde deseas guardar el libro entonces se creará en la ruta en la que te encontrabas cuando abriste el interprete.
libro.save('demo.xlsx')
Busca el archivo y ábrelo, veras que en la parte de arriba de la celda B2 tendremos un borde rojo.

Lo que hicimos en las líneas anteriores fue asignar directamente el formato de borde a la celda, pero podemos referenciar ese formato con una variable para poder utilizarlo con facilidad en otras celdas. Recuerda cerrar el archivo de Excel para que podamos seguir trabajando con el sin que se genere algun error.
borde1 = Border(top = Side(border_style='mediumDashed', color='0000FF00'))
celda2 = hoja["D2"]
celda2.border = borde1
libro.save('demo.xlsx')
Vuelve a abrir el archivo y veras el segundo tipo de borde en la celda D2.

Los tipos de línea que podemos utilizar son los siguientes: hair, dashDotDot, dashDot, thin, mediumDashed, slantDashDot, dotted, dashed, medium, thick, mediumDashDot, double y mediumDashDotDot. Corre las siguientes lineas para ver cada uno de ellos.
bordesDisponibles = ['hair', 'dashDotDot', 'dashDot', 'thin', 'mediumDashed', 'slantDashDot', 'dotted', 'dashed', 'medium', 'thick', 'mediumDashDot', 'double', 'mediumDashDotDot']
for elem in range(len(bordesDisponibles)):
hoja.cell(row = elem + 5, column = 5).value = bordesDisponibles[elem]
hoja.cell(row = elem + 5, column = 5).border = Border(top = Side(border_style=bordesDisponibles[elem], color='00FF0000'))
Vuelve a abrir el archivo y verás sobre cada tipo de linea la representacion en color rojo.

Solo nos falta ver las posiciones en las que podemos colocar el borde. Las opciones disponibles son: left, right, top, bottom y diagonal (puede ser hacia arriba o abajo). Para ver las opciones disponibles usa las siguientes líneas.
hoja.cell(row = 7, column = 7).value = 'left'
hoja.cell(row = 7, column = 7).border = Border(left = Side(border_style='thick', color='00FF0000'))
hoja.cell(row = 9, column = 7).value = 'right'
hoja.cell(row = 9, column = 7).border = Border(right = Side(border_style='thick', color='00FF0000'))
hoja.cell(row = 11, column = 7).value = 'top'
hoja.cell(row = 11, column = 7).border = Border(top = Side(border_style='thick', color='00FF0000'))
hoja.cell(row = 13, column = 7).value = 'bottom'
hoja.cell(row = 13, column = 7).border = Border(bottom = Side(border_style='thick', color='00FF0000'))
hoja.cell(row = 15, column = 7).value = 'diagonalUp'
hoja.cell(row = 15, column = 7).border = Border(diagonal = Side(border_style='thick', color='00FF0000'), diagonalUp=1)
hoja.cell(row = 17, column = 7).value = 'diagonalDown'
hoja.cell(row = 17, column = 7).border = Border(diagonal = Side(border_style='thick', color='00FF0000'), diagonalDown=1)
Abre el archivo nuevamente para ver el resultado.

Hasta aquí esta entrada sobre cómo poner bordes a una celda con Python usando el modulo openpyxl. Cuéntame, ¿te ha parecido útil esta entrada?