استخدمه عندما يكون هدفك واضحًا في الملفات والمستندات وتستطيع تحديد البيانات والأفعال التي يحتاجها فقط.
Excel Author
Excel Author: مهارة ينشرها Anthropic (adapted by Nous Research). مجالها الملفات والمستندات. يوفّر السجل أمر تثبيت جاهزًا يظهر في هذه الصفحة. الرخصة Apache-2.0. الإصدار الموثّق 1.0.0. تُفعَّل بأمر `hermes skills install excel-author` بعد مراجعة ما تطلبه. تدعم: linux، macos، windows.
ماذا يضيف إلى Hermes؟
Excel Author: مهارة ينشرها Anthropic (adapted by Nous Research). مجالها الملفات والمستندات. يوفّر السجل أمر تثبيت جاهزًا يظهر في هذه الصفحة. الرخصة Apache-2.0. الإصدار الموثّق 1.0.0. تُفعَّل بأمر hermes skills install excel-author بعد مراجعة ما تطلبه. تدعم: linux، macos، windows.
Excel Author هي مهارة مرتبطة بمجال الملفات والمستندات. يتيح للوكيل قراءة ملفات أو تنظيمها أو إنشاء مستندات، وفق نطاق المجلد والحساب الذي تمنحه له.
هذا تفسير مبسّط مبني على وصف الناشر. أبقينا الوصف الإنجليزي بجانبه حتى تستطيع مقارنة المعنى بالمصدر.
لا تضفه لمجرد التجربة إذا كان لديك طريق أبسط داخل Hermes، أو إذا لم تستطع مراجعة المصدر والصلاحيات.
مناسب لمن يريد طريقة عمل قابلة للتكرار داخل Hermes.
استخدم مجلدًا تجريبيًا فيه نسخ من ملفات غير حساسة، وابدأ بعملية قراءة واحدة.
Build auditable financial workbooks headless via openpyxl
فُهرس هذا الإدخال من Hermes Optional Skills. الشرح العربي يفسّر النوع والمجال ولا يضيف وظيفة غير مذكورة في المصدر.
المصدر رسمي أو خضع لمراجعة تحريرية، لكن ذلك لا يغني عن مراجعة الصلاحيات والإصدار.
افحص، ثبّت، ثم اختبر.
- 01افتح المصدر
طابق اسم الناشر والرخصة والوصف مع حاجتك، وراجع آخر تحديث فعلي.
- 02راجع الصلاحيات والأسرار
لا تلصق قيمة سر داخل الموقع. استخدم أسماء متغيرات البيئة وامنح أقل نطاق ممكن.
- 03انسخ الإعداد فقط بعد المراجعة
الأزرار أدناه تنسخ نصًا إلى الحافظة ولا تشغّل أمرًا على جهازك.
- 04اختبر بمهمة غير حساسة
تحقق من الأدوات الظاهرة، ثم استبعد أدوات الكتابة أو الحذف التي لا تحتاجها.
راجع الأمر ثم انسخه.
hermes skills install excel-authorلا ينفّذ Hermes بالعربي هذا الأمر. التثبيت يحدث داخل جهازك ويظل خاضعًا لفحص Hermes ومراجعتك.
ما الذي يحمّله Hermes بالضبط عند تشغيل هذه المهارة.
منقول من التوثيق الرسمي. اقرأه قبل تفعيل المهارة، فهذا النص يصبح تعليمات الوكيل نفسه.
Build auditable financial workbooks headless via openpyxl.
Skill metadata
جدول مرجعي. لا تقرأه كله، ابحث عن السطر الذي يخصّك فقط.
| Source | Optional — install with hermes skills install official/finance/excel-author |
| Path | optional-skills/finance/excel-author |
| Version | 1.0.0 |
| Author | Anthropic (adapted by Nous Research) |
| License | Apache-2.0 |
| Platforms | linux, macos, windows |
| Tags | excel, openpyxl, finance, spreadsheet, modeling |
| Related skills | xlsx, pptx-author, dcf-model, comps-analysis, lbo-model, 3-statement-model |
Reference: full SKILL.md
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
Produce an .xlsx file on disk using openpyxl. Follow the banker-grade conventions below so the model is auditable, flexible, and reviewable by someone other than the person who built it.
Adapted from Anthropic's xlsx-author and audit-xls skills in the anthropics/financial-services ↗ repo. The MCP / Office-JS / Cowork-specific branches of the originals are dropped — this skill assumes headless Python.
Output contract
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
- Write to
./out/<name>.xlsx. Create./out/if it does not exist. - Return the relative path in your final message so downstream tools can pick it up.
- One logical model per file. Do not append to an existing workbook unless explicitly asked.
Setup
خطوات عملية بالترتيب. نفّذ خطوة وتأكد أنها نجحت قبل الانتقال للتالية.
pip install "openpyxl>=3.0"Core conventions (non-negotiable)
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
Blue / black / green cell color
- Blue (
Font(color="0000FF")) — hardcoded input a human entered. Revenue drivers, WACC inputs, terminal growth, market data. - Black (default) — formula. Every derived cell is a live Excel formula.
- Green (
Font(color="006100")) — link to another sheet or external file.
A reviewer can then scan the sheet and immediately see what's an assumption vs. what's computed.
Formulas over hardcodes
Every calculation cell MUST be a formula string, never a number computed in Python and pasted as a value.
# WRONG — silent bug waiting to happen
ws["D20"] = revenue_prior_year * (1 + growth)
# CORRECT — flexes when the user changes the assumption
ws["D20"] = "=D19*(1+$B$8)"The only hardcoded numbers permitted:
- Raw historical inputs (actual revenues, reported EBITDA, etc.)
- Assumption drivers the user is meant to flex (growth rates, WACC inputs, terminal g)
- Current market data (share price, debt balance) — with a cell comment documenting source + date
If you catch yourself computing a value in Python and writing the result, stop.
Named ranges for cross-sheet references
Use named ranges for any figure referenced from another sheet, a deck, or a memo.
from openpyxl.workbook.defined_name import DefinedName
wb.defined_names["WACC"] = DefinedName("WACC", attr_text="Inputs!$C$8")
# then elsewhere:
calc["D30"] = "=D29/WACC"Balance checks tab
Include a Checks tab that ties everything and surfaces TRUE/FALSE:
- Balance sheet balances (assets = liabilities + equity)
- Cash flow ties to period-over-period cash change on the BS
- Sum-of-parts ties to consolidated totals
- No rogue hardcodes inside calc ranges
Example:
checks = wb.create_sheet("Checks")
checks["A2"] = "BS balances"
checks["B2"] = "=IS!D20-IS!D21-IS!D22"
checks["C2"] = "=ABS(B2)<0.01" # TRUE/FALSECell comments on every hardcoded input
Add the comment AS you create the cell, not later.
from openpyxl.comments import Comment
ws["C2"] = 1_250_000_000
ws["C2"].font = Font(color="0000FF")
ws["C2"].comment = Comment("Source: 10-K FY2024, p.47, revenue line", "analyst")Format: Source: [System/Document], [Date], [Reference], [URL if applicable].
Never defer sourcing. Never write TODO: add source.
Skeleton: typical financial model
إعدادات تضبطها مرة وتنساها. غيّر واحدًا في كل مرة حتى تعرف أثر كل تغيير. تضبط HEADER_FILL، HEADER_FONT خارج المحادثة، في بيئة التشغيل.
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.comments import Comment
from openpyxl.utils import get_column_letter
from pathlib import Path
BLUE = Font(color="0000FF")
BLACK = Font(color="000000")
GREEN = Font(color="006100")
BOLD = Font(bold=True)
HEADER_FILL = PatternFill("solid", fgColor="1F4E79")
HEADER_FONT = Font(color="FFFFFF", bold=True)
wb = Workbook()
# --- Inputs tab ---
inp = wb.active
inp.title = "Inputs"
inp["A1"] = "MARKET DATA & KEY INPUTS"
inp["A1"].font = HEADER_FONT
inp["A1"].fill = HEADER_FILL
inp.merge_cells("A1:C1")
inp["B3"] = "Revenue FY2024"
inp["C3"] = 1_250_000_000
inp["C3"].font = BLUE
inp["C3"].comment = Comment("Source: 10-K FY2024 p.47", "model")
inp["B4"] = "Growth Rate"
inp["C4"] = 0.12
inp["C4"].font = BLUE
# --- Calc tab ---
calc = wb.create_sheet("DCF")
calc["B2"] = "Projected Revenue"
calc["C2"] = "=Inputs!C3*(1+Inputs!C4)" # formula, black
# --- Checks tab ---
chk = wb.create_sheet("Checks")
chk["A2"] = "BS balances"
chk["B2"] = "=ABS(BS!D20-BS!D21-BS!D22)<0.01"
Path("./out").mkdir(exist_ok=True)
wb.save("./out/model.xlsx")Section headers with merged cells
إعدادات تضبطها مرة وتنساها. غيّر واحدًا في كل مرة حتى تعرف أثر كل تغيير. تضبط HEADER_FONT، HEADER_FILL خارج المحادثة، في بيئة التشغيل.
openpyxl quirk: when you merge, set the value on the top-left cell and style the full range separately.
ws["A7"] = "CASH FLOW PROJECTION"
ws["A7"].font = HEADER_FONT
ws.merge_cells("A7:H7")
for col in range(1, 9): # A..H
ws.cell(row=7, column=col).fill = HEADER_FILLSensitivity tables
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
Build with loops, not hardcoded formulas per cell. Rules:
- Odd number of rows/cols (5×5 or 7×7) — guarantees a true center cell.
- Center cell = base case. The middle row/col header must equal the model's actual WACC and terminal g so the center output equals the base-case implied share price. That's the sanity check.
- Highlight the center cell with medium-blue fill (
"BDD7EE") and bold. - Populate every cell with a full recalculation formula — never an approximation.
# 5x5 WACC (rows) x terminal growth (cols) sensitivity
wacc_axis = [0.08, 0.085, 0.09, 0.095, 0.10] # center row = base 9.0%
term_axis = [0.02, 0.025, 0.03, 0.035, 0.04] # center col = base 3.0%
start_row = 40
ws.cell(row=start_row, column=1).value = "Implied Share Price ($)"
ws.cell(row=start_row, column=1).font = BOLD
for j, g in enumerate(term_axis):
ws.cell(row=start_row+1, column=2+j).value = g
ws.cell(row=start_row+1, column=2+j).font = BLUE
for i, w in enumerate(wacc_axis):
r = start_row + 2 + i
ws.cell(row=r, column=1).value = w
ws.cell(row=r, column=1).font = BLUE
for j, g in enumerate(term_axis):
c = 2 + j
# Full DCF recalc formula (simplified for illustration).
# In a real model this references the full projection block.
ws.cell(row=r, column=c).value = (
f"=SUMPRODUCT(FCF_range,1/(1+{w})^year_offset) + "
f"FCF_terminal*(1+{g})/({w}-{g})/(1+{w})^terminal_year"
)
# Highlight center cell (base case)
center = ws.cell(row=start_row+2+len(wacc_axis)//2,
column=2+len(term_axis)//2)
center.fill = PatternFill("solid", fgColor="BDD7EE")
center.font = BOLDRecalculating before delivery
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
openpyxl writes formula strings but does not compute them. Excel recalculates on open, but downstream consumers (auto-check scripts, CI) need computed values.
Run LibreOffice or a dedicated recalc step before delivery:
# LibreOffice headless recalc
libreoffice --headless --calc --convert-to xlsx ./out/model.xlsx --outdir ./out/Or use a Python recalc helper (see scripts/recalc.py in this skill).
Model layout planning
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
Before writing any formula:
- Define ALL section row positions
- Write ALL headers and labels
- Write ALL section dividers and blank rows
- THEN write formulas using the locked row positions
This prevents the cascading-formula-breakage pattern where inserting a header row after formulas are written shifts every downstream reference.
Verify step-by-step with the user
خطوات عملية بالترتيب. نفّذ خطوة وتأكد أنها نجحت قبل الانتقال للتالية.
For large models (DCFs, 3-statement, LBO), stop and show the user intermediate artifacts before continuing. Catching a wrong margin assumption before you've built downstream sensitivity tables saves an hour.
Checkpoint pattern:
- After Inputs block → show raw inputs, confirm before projecting
- After Revenue projections → confirm top line + growth
- After FCF build → confirm the full schedule
- After WACC → confirm inputs
- After valuation → confirm the equity bridge
- THEN build sensitivity tables
When NOT to use this skill
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
- Users in a live Excel session with an Office MCP available — drive their live workbook instead.
- Pure tabular data export with no formulas —
csvorpandas.to_excelis simpler. - Dashboards / charts with heavy interactivity — use a real BI tool.
Attribution
شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.
Conventions (blue/black/green, formulas-over-hardcodes, named ranges, sensitivity rules) adapted from Anthropic's Claude for Financial Services plugin suite, Apache-2.0 licensed. Original: https://github.com/anthropics/financial-services/tree/main/plugins/vertical-plugins/financial-analysis/skills/xlsx-author