Продолжаю бороться с построением отчетности ну Python при помощи Openpyxl. С ходу уперся в вопрос как нарисовать таблицу, а конкретнее как обвести ячейки в Openpyxl. Стандартных функций обвода диапазона ячеек фреймворк Openpyxl не содержит. Те, которые нашлись поиском, очевидно были прописаны под более ранние версии Openpyxl . В итоге продолжаю наполнять свой модуль excelz.py новыми функциями. Встречайте: set_border и set_border_range.
from openpyxl.styles import Side
def set_border(ws, c1, r1, c2, r2, _border_style='thin', _color='FF000000'):
side = Side(border_style=_border_style, color=_color)
for y in range(r1, r2+1):
for x in range(c1, c2+1):
cell = ws.cell(row = y, column=x)
border = cell.border.copy()
if x == c1:
border.left = side
if x == c2:
border.right = side
if y == r1:
border.top = side
if y == r2:
border.bottom = side
cell.border = border
def set_border_range(ws, cells, _border_style='thin', _color='FF000000'):
arr = cells.split(':')
r1 = ws[arr[0]].row
c1 = ws[arr[0]].col_idx
r2 = ws[arr[1]].row
c2 = ws[arr[1]].col_idx
set_border(ws, c1, r1, c2, r2, _border_style, _color)
from openpyxl.styles import Side
def set_border(ws, c1, r1, c2, r2, _border_style='thin', _color='FF000000'):
side = Side(border_style=_border_style, color=_color)
for y in range(r1, r2+1):
for x in range(c1, c2+1):
cell = ws.cell(row = y, column=x)
border = cell.border.copy()
if x == c1:
border.left = side
if x == c2:
border.right = side
if y == r1:
border.top = side
if y == r2:
border.bottom = side
cell.border = border
def set_border_range(ws, cells, _border_style='thin', _color='FF000000'):
arr = cells.split(':')
r1 = ws[arr[0]].row
c1 = ws[arr[0]].col_idx
r2 = ws[arr[1]].row
c2 = ws[arr[1]].col_idx
set_border(ws, c1, r1, c2, r2, _border_style, _color)