Excel Builder
Builds structured .xlsx files programmatically using Python libraries (openpyxl or xlsxwriter).
When to Use This Skill
- Creating Excel spreadsheets with formulas and calculated fields
- Building financial tables, budgets, or invoices
- Generating data entry forms with validation and dropdowns
- Producing reports with charts (bar, line, pie, scatter)
- Exporting structured data with conditional formatting or color coding
- Building pivot-ready data tables
Core Workflow
- Choose library — Use
openpyxlfor reading/modifying existing files; usexlsxwriterfor new write-only files with rich charts - Design structure — Define sheets, columns, headers, and data rows before writing
- Write data — Populate cells row by row; apply number formats (
"#,##0.00","YYYY-MM-DD") - Add formulas — Use Excel formula strings:
=SUM(B2:B100),=IF(A2>0, "Yes", "No") - Format — Apply styles: bold headers, column widths, merged cells, fill colors, borders
- Validate — Add data validation (dropdown lists, numeric ranges) where applicable
- Charts — Add charts referencing data ranges; set titles and axis labels
- Save and verify — Save to output path; confirm file exists and is non-zero bytes
Key Patterns
openpyxl (read/write existing)
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = Workbook()
ws = wb.active
ws.title = "Report"
ws["A1"] = "Revenue"
ws["A1"].font = Font(bold=True, size=12)
ws.column_dimensions["A"].width = 20
wb.save("output.xlsx")
xlsxwriter (new files with charts)
import xlsxwriter
wb = xlsxwriter.Workbook("output.xlsx")
ws = wb.add_worksheet("Summary")
bold = wb.add_format({"bold": True, "bg_color": "#4472C4", "font_color": "white"})
ws.write("A1", "Month", bold)
chart = wb.add_chart({"type": "column"})
chart.add_series({"values": "=Summary!$B$2:$B$13", "name": "Revenue"})
ws.insert_chart("D2", chart)
wb.close()
Error Handling
- If
openpyxlnot installed:pip install openpyxl - If
xlsxwriternot installed:pip install xlsxwriter - Always wrap
wb.save()in try/except; report path conflicts - Verify output with
os.path.getsize(path) > 0before returning
Output
Return the absolute path to the saved .xlsx file. If generating multiple sheets, list each sheet name and row count in a brief summary.