xlsx
创建、编辑、分析或转换 Excel 电子表格(.xlsx、.xlsm),其中工作簿文件是主要交付物。可用于公式、格式设置、财务模型、多工作表工作簿,以及将导出到 Excel 的表格数据进行清理整理。对于当用户希望获得电子表格输出时,亦适用于 .csv/.tsv。请勿用于 Word 文档、HTML 报告、独立的 Python 脚本、数据库管道或 Google Sheets API 工作。
分类
办公自动化安装
下载并解压到你的 skills 目录
复制命令,发送给智能体自动安装:
Requirements for Outputs
All Excel files
Professional Font
Zero Formula Errors
Preserve Existing Templates (when updating templates)
Financial models
Color Coding Standards
Unless otherwise stated by the user or existing template
Industry-Standard Color Conventions
Number Formatting Standards
Required Format Rules
Formula Construction Rules
Assumptions Placement
Formula Error Prevention
Documentation Requirements for Hardcodes
- "Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]"
- "Source: Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL]"
- "Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity"
- "Source: FactSet, 8/20/2025, Consensus Estimates Screen"
XLSX creation, editing, and analysis
Overview
A user may ask you to create, edit, or analyze the contents of an .xlsx file. You have different tools and workflows available for different tasks.
Installation
uv pip install openpyxl pandasOptional — faster Excel reading across formats with pandas 2.2+:
uv pip install python-calamineFor untrusted workbook files, harden openpyxl against XML expansion attacks:
uv pip install defusedxmlSee openpyxl security guidance.
Important Requirements
LibreOffice required for formula recalculation: Assume LibreOffice is installed for recalculating formula values using scripts/recalc.py. The script configures LibreOffice on first run, including in sandboxed environments where Unix sockets are restricted (handled by scripts/office/soffice.py).
System dependencies (not installed via uv):
| Tool | Purpose |
|---|---|
soffice (LibreOffice 7.x+) | Evaluates Excel formulas via scripts/recalc.py |
gcc | Only when Unix domain sockets are blocked; compiles a one-time shim into ~/.cache/xlsx-skill/lo-shim/ |
gtimeout (macOS, optional) | GNU coreutils timeout for recalc timeout support on Darwin |
Verify LibreOffice is available: soffice --version
Reading and analyzing data
Data analysis with pandas
For data analysis, visualization, and basic operations, use pandas which provides powerful data manipulation capabilities:
import pandas as pd
# Read Excel (.xlsx default engine: openpyxl)
df = pd.read_excel('file.xlsx') # Default: first sheet
all_sheets = pd.read_excel('file.xlsx', sheet_name=None) # All sheets as dict
# Optional: calamine engine (pandas 2.2+) — faster, supports .xlsx/.xls/.xlsb/.xlsm/.ods
# df = pd.read_excel('file.xlsx', engine='calamine')
# Analyze
df.head() # Preview data
df.info() # Column info
df.describe() # Statistics
# Write Excel
df.to_excel('output.xlsx', index=False)Excel File Workflows
CRITICAL: Use Formulas, Not Hardcoded Values
Always use Excel formulas instead of calculating values in Python and hardcoding them. This ensures the spreadsheet remains dynamic and updateable.
❌ WRONG - Hardcoding Calculated Values
# Bad: Calculating in Python and hardcoding result
total = df['Sales'].sum()
sheet['B10'] = total # Hardcodes 5000
# Bad: Computing growth rate in Python
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth # Hardcodes 0.15
# Bad: Python calculation for average
avg = sum(values) / len(values)
sheet['D20'] = avg # Hardcodes 42.5✅ CORRECT - Using Excel Formulas
# Good: Let Excel calculate the sum
sheet['B10'] = '=SUM(B2:B9)'
# Good: Growth rate as Excel formula
sheet['C5'] = '=(C4-C2)/C2'
# Good: Average using Excel function
sheet['D20'] = '=AVERAGE(D2:D19)'This applies to ALL calculations - totals, percentages, ratios, differences, etc. The spreadsheet should be able to recalculate when source data changes.
Common Workflow
scripts/recalc.py scriptpython skills/xlsx/scripts/recalc.py output.xlsx- The script returns JSON with error details
- If
status is errors_found, check error_summary for specific error types and locations- Fix the identified errors and recalculate again
- Common errors to fix:
-
#REF!: Invalid cell references-
#DIV/0!: Division by zero-
#VALUE!: Wrong data type in formula-
#NAME?: Unrecognized formula nameCreating new Excel files
# Using openpyxl for formulas and formatting
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = Workbook()
sheet = wb.active
# Add data
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])
# Add formula
sheet['B2'] = '=SUM(A1:A10)'
# Formatting
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')
# Column width
sheet.column_dimensions['A'].width = 20
wb.save('output.xlsx')Editing existing Excel files
# Using openpyxl to preserve formulas and formatting
from openpyxl import load_workbook
# Load existing file
wb = load_workbook('existing.xlsx')
sheet = wb.active # or wb['SheetName'] for specific sheet
# Working with multiple sheets
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
print(f"Sheet: {sheet_name}")
# Modify cells
sheet['A1'] = 'New Value'
sheet.insert_rows(2) # Insert row at position 2
sheet.delete_cols(3) # Delete column 3
# Add new sheet
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'
wb.save('modified.xlsx')Recalculating formulas
Excel files created or modified by openpyxl contain formulas as strings but not calculated values. Use the provided scripts/recalc.py script to recalculate formulas:
python skills/xlsx/scripts/recalc.py <excel_file> [timeout_seconds]Example:
python skills/xlsx/scripts/recalc.py output.xlsx 30The script:
Formula Verification Checklist
Quick checks to ensure formulas work correctly:
Essential Verification
Common Pitfalls
pd.notna()/ in formulas (#DIV/0!)Formula Testing Strategy
Interpreting scripts/recalc.py Output
The script returns JSON with error details:
{
"status": "success", // or "errors_found"
"total_errors": 0, // Total error count
"total_formulas": 42, // Number of formulas in file
"error_summary": { // Only present if errors found
"#REF!": {
"count": 2,
"locations": ["Sheet1!B5", "Sheet1!C10"]
}
}
}Best Practices
Library Selection
Working with openpyxl
data_only=True to read calculated values: load_workbook('file.xlsx', data_only=True)data_only=True and saved, formulas are replaced with values and permanently lostread_only=True for reading or write_only=True for writingWorking with pandas
pd.read_excel('file.xlsx', dtype={'id': str})pd.read_excel('file.xlsx', usecols=['A', 'C', 'E'])pd.read_excel('file.xlsx', parse_dates=['date_column'])Code Style Guidelines
IMPORTANT: When generating Python code for Excel operations:
For Excel files themselves: