Files
our-claude-skills/custom-skills/_dintel-shared/src/dintel/excel.py
Andrew Yim 877db1aa0f refactor: reorganize skill numbering, remove obsolete skills, rename shared libs
- Rename: 00→80 claude-settings-optimizer, 88→79 dintel-skill-update,
  92→81 mac-optimizer, 93→82 tui-design-template
- Rename: dintel-shared → _dintel-shared (consistent with _ourdigital-shared)
- Remove: 61-gtm-manager, 62-gtm-guardian (obsolete), 99_archive
- Update all dintel-* skill refs (114 occurrences across 31 files)
- Sync README.md, CLAUDE.md, AGENTS.md with new structure

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:32:44 +09:00

72 lines
2.6 KiB
Python

"""Excel utilities for D.intelligence branded spreadsheets."""
from __future__ import annotations
from pathlib import Path
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from dintel.brand import (
BRAND_NAME,
HEX_PRIMARY,
HEX_SECONDARY,
HEX_ACCENT,
HEX_TEXT,
)
# ── Style Constants ─────────────────────────────────────────────
HEADER_FILL = PatternFill(start_color=HEX_PRIMARY.lstrip("#"), end_color=HEX_PRIMARY.lstrip("#"), fill_type="solid")
HEADER_FONT = Font(name="Arial", size=10, bold=True, color="FFFFFF")
SUBHEADER_FILL = PatternFill(start_color=HEX_SECONDARY.lstrip("#"), end_color=HEX_SECONDARY.lstrip("#"), fill_type="solid")
SUBHEADER_FONT = Font(name="Arial", size=10, bold=True, color="FFFFFF")
ACCENT_FONT = Font(name="Arial", size=10, bold=True, color=HEX_ACCENT.lstrip("#"))
BODY_FONT = Font(name="Arial", size=10, color=HEX_TEXT.lstrip("#"))
THIN_BORDER = Border(
left=Side(style="thin"),
right=Side(style="thin"),
top=Side(style="thin"),
bottom=Side(style="thin"),
)
CENTER_ALIGN = Alignment(horizontal="center", vertical="center", wrap_text=True)
LEFT_ALIGN = Alignment(horizontal="left", vertical="center", wrap_text=True)
RIGHT_ALIGN = Alignment(horizontal="right", vertical="center")
def create_branded_workbook(title: str = "D.intelligence") -> Workbook:
"""Create an openpyxl Workbook with brand defaults."""
wb = Workbook()
wb.properties.title = title
wb.properties.creator = BRAND_NAME
return wb
def style_header_row(ws, row: int = 1, col_start: int = 1, col_end: int = 10) -> None:
"""Apply header styling to a row."""
for col in range(col_start, col_end + 1):
cell = ws.cell(row=row, column=col)
cell.fill = HEADER_FILL
cell.font = HEADER_FONT
cell.alignment = CENTER_ALIGN
cell.border = THIN_BORDER
def style_body_cell(cell, align: str = "left") -> None:
"""Apply body styling to a cell."""
cell.font = BODY_FONT
cell.border = THIN_BORDER
if align == "center":
cell.alignment = CENTER_ALIGN
elif align == "right":
cell.alignment = RIGHT_ALIGN
else:
cell.alignment = LEFT_ALIGN
def save_workbook(wb: Workbook, output_path: str | Path) -> Path:
"""Save workbook and return the path."""
output_path = Path(output_path)
output_path.parent.mkdir(parents=True, exist_ok=True)
wb.save(str(output_path))
return output_path