add project
This commit is contained in:
65
src/scripts/style_excel/style_matrice_flux.py
Normal file
65
src/scripts/style_excel/style_matrice_flux.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from openpyxl.styles import Alignment, PatternFill, Font, Border, Side
|
||||
from openpyxl.utils import get_column_letter
|
||||
|
||||
center = Alignment(horizontal="center", vertical="center")
|
||||
left = Alignment(horizontal="left", vertical="center")
|
||||
wrap_left = Alignment(horizontal="left", vertical="center", wrap_text=True)
|
||||
|
||||
header_fill = PatternFill(start_color="B4C6E7", fill_type="solid")
|
||||
section_fill = PatternFill(start_color="D9E1F2", fill_type="solid")
|
||||
thin_border = Border(*(Side(style="thin"),)*4)
|
||||
|
||||
def format_cell_multiline(value):
|
||||
"""Convert comma-separated or list-style text into multiline text"""
|
||||
if value is None:
|
||||
return ""
|
||||
val = str(value).strip()
|
||||
if val.startswith("[") and val.endswith("]"):
|
||||
val = val[1:-1]
|
||||
val = val.replace("'", "").replace('"', "")
|
||||
return val.replace(", ", "\n").replace(";", "\n").replace(",", "\n").replace(";", "\n")
|
||||
|
||||
def style_matrice_flux(ws):
|
||||
headers = [
|
||||
("Description",2),("Source",4),("Destination",4),
|
||||
("Application",1),("Port",1),("Miscellaneous",1),("Action",1),("Tier",1),("Active",1)
|
||||
]
|
||||
|
||||
col = 1
|
||||
for label, span in headers:
|
||||
ws.merge_cells(start_row=1, start_column=col, end_row=1, end_column=col + span - 1)
|
||||
c = ws.cell(row=1, column=col, value=label)
|
||||
c.alignment = center
|
||||
c.fill = section_fill
|
||||
c.font = Font(bold=True)
|
||||
col += span
|
||||
|
||||
wrap_cols = ["Description", "Src Equipement", "Dst Equipement",
|
||||
"Application", "Port", "Src CIDR", "Dst CIDR", "Src Site", "Dst Site", "Miscellaneous", "Action", "Tier", "Active"]
|
||||
wrap_indexes = []
|
||||
|
||||
for col_idx, cell in enumerate(ws[2], start=1):
|
||||
if cell.value in wrap_cols:
|
||||
wrap_indexes.append(col_idx)
|
||||
|
||||
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
|
||||
for cell in row:
|
||||
if cell.row > 2:
|
||||
if cell.col_idx in wrap_indexes:
|
||||
cell.value = format_cell_multiline(cell.value)
|
||||
cell.alignment = wrap_left
|
||||
else:
|
||||
cell.alignment = left
|
||||
else:
|
||||
cell.font = Font(bold=True)
|
||||
cell.alignment = center
|
||||
cell.fill = header_fill
|
||||
cell.border = thin_border
|
||||
|
||||
col_widths = {
|
||||
"A": 50, "B": 35, "C": 35, "D": 18, "E": 15, "F": 15,
|
||||
"G": 35, "H": 18, "I": 15, "J": 15, "K": 12, "L": 20,
|
||||
"M": 25, "N": 9, "O": 7, "P": 7
|
||||
}
|
||||
for col_letter, width in col_widths.items():
|
||||
ws.column_dimensions[col_letter].width = width
|
||||
Reference in New Issue
Block a user