xlsx

SKILL.md
  • You must eventually deliver an Excel file, one or more depending on the task, but what must be delivered must include a .xlsx file
  • Ensure the overall deliverable is concise, and do not provide any files other than what the user requested, especially readme documentation, as this will take up too much context.

Excel File Creation: Python + openpyxl/pandas

โœ… REQUIRED Technology Stack for Excel Creation:

  • Runtime: Python 3
  • Primary Library: openpyxl (for Excel file creation, styling, formulas)
  • Data Processing: pandas (for data manipulation, then export via openpyxl)
  • Execution: Use ipython tool for Python code

โœ… Validation & PivotTable Tools:

  • Tool: KimiXlsx (unified CLI tool for validation, recheck, pivot, etc.)
  • Execution: Use shell tool for CLI commands

๐Ÿ”ง Execution Environment:

  • Use ipython tool for Excel creation with openpyxl/pandas
  • Use shell tool for validation commands

Python Excel Creation Pattern:

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Border, Side, Alignment
import pandas as pd

# Create workbook
wb = Workbook()
ws = wb.active
ws.title = "Data"

# Add data
ws['A1'] = "Header1"
ws['B1'] = "Header2"

# Apply styling
ws['A1'].font = Font(bold=True, color="FFFFFF")
ws['A1'].fill = PatternFill(start_color="333333", end_color="333333", fill_type="solid")

# Save
wb.save('output.xlsx')

</Technology Stack>

When creating Excel files with externally fetched data:

Source Citation (MANDATORY):

  • ALL external data MUST have source citations in final Excel
  • ๐Ÿšจ This applies to ALL external tools: datasource, web_search, API calls, or any fetched data
  • Use two separate columns: Source Name | Source URL
  • Do NOT use HYPERLINK function (use plain text to avoid formula errors)
  • โ›” FORBIDDEN: Delivering Excel with external data but NO source citations
  • Example:
Data Content Source Name Source URL
Apple Revenue Yahoo Finance https://finance.yahoo.com/...
China GDP World Bank API world_bank_open_data
  • If citation per-row is impractical, create a dedicated "Sources" sheet

</External Data in Excel>

1. Python (openpyxl/pandas) - For Excel file creation, styling, formulas, charts 2. KimiXlsx CLI Tool - For validation, error checking, and PivotTable creation

The KimiXlsx tool has 6 commands that can be called using the shell tool:

Executable Path: /app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx

Base Command: /app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx <command> [arguments]


  1. recheck โš ๏ธ RUN FIRST for formula errors
  • description๏ผšThis tool detects:

    • Formula errors: #VALUE!, #DIV/0!, #REF!, #NAME?, #NULL!, #NUM!, #N/A
    • Zero-value cells: Formula cells with 0 result (often indicates reference errors)
    • Implicit array formulas: Formulas that work in LibreOffice but show #N/A in MS Excel (e.g., MATCH(TRUE(), range>0, 0))
  • Implicit Array Formula Detection:

    • Patterns like MATCH(TRUE(), range>0, 0) require CSE (Ctrl+Shift+Enter) in MS Excel
    • LibreOffice handles these automatically, so they pass LibreOffice recalculation but fail in Excel
    • When detected, rewrite the formula using alternatives:
      • โŒ =MATCH(TRUE(), A1:A10>0, 0) โ†’ shows #N/A in Excel
      • โœ… =SUMPRODUCT((A1:A10>0)*ROW(A1:A10))-ROW(A1)+1 โ†’ works in all Excel versions
      • โœ… Or use helper column with explicit TRUE/FALSE values
  • how to use:

/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx recheck output.xlsx
  1. reference-check (alias: refcheck)
  • description: This tool is used to Detect potential reference errors and pattern anomalies in Excel formulas. It can identify 4 common issues when AI generates formulas:

Out-of-range references - Formulas reference a range far exceeding the actual number of data rows. Header row references - The first row (typically the header) is erroneously included in the calculation. Insufficient aggregate function range - Functions like SUM/AVERAGE only cover โ‰ค2 cells. Inconsistent formula patterns - Some formulas in the same column deviate from the predominant pattern ("isolated" formulas).

  • how to use:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx reference-check output.xlsx
  1. inspect
  • description: This command analyzes Excel file structure and outputs JSON describing all sheets, tables, headers, and data ranges. Use this to understand an Excel file's structure before processing.
  • how to use:
# Analyze and output JSON
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx inspect input.xlsx --pretty

  1. pivot ๐Ÿšจ REQUIRES pivot-table.md
  • description: Create PivotTable with optional chart using pure OpenXML SDK. This is the ONLY supported method for PivotTable creation. Automatically creates a chart (bar/line/pie) alongside the PivotTable.
  • โš ๏ธ CRITICAL: Before using this command, you MUST read /app/.kimi/skills/kimi-xlsx/pivot-table.md for full documentation.
  • required parameters:
    • input.xlsx - Input Excel file (positional)
    • output.xlsx - Output Excel file (positional)
    • --source "Sheet!A1:Z100" - Source data range
    • --location "Sheet!A3" - Where to place PivotTable
    • --values "Field:sum" - Value fields with aggregation (sum/count/avg/max/min)
  • optional parameters:
    • --rows "Field1,Field2" - Row fields
    • --cols "Field1" - Column fields
    • --filters "Field1" - Filter/page fields
    • --name "PivotName" - PivotTable name (default: PivotTable1)
    • --style "monochrome" - Style theme: monochrome (default) or finance
    • --chart "bar" - Chart type: bar (default), line, or pie
  • how to use:
# First: inspect to get sheet names and headers
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx inspect data.xlsx --pretty

# Then: create PivotTable with chart
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx pivot \
    data.xlsx output.xlsx \
    --source "Sales!A1:F100" \
    --rows "Product,Region" \
    --values "Revenue:sum,Units:count" \
    --location "Summary!A3" \
    --chart "bar"

  1. chart-verify
  • description: Verify that all charts have actual data content. Use this after creating charts to ensure they are not empty.
  • how to use:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx chart-verify output.xlsx
  • exit codes:
    • 0 = All charts have data, safe to deliver
    • 1 = Charts are empty or broken - MUST FIX

  1. validate โš ๏ธ MANDATORY - MUST RUN BEFORE DELIVERY
  • description: OpenXML structure validation. Files that fail this validation CANNOT be opened by Microsoft Excel. You MUST run this command before delivering any Excel file.

  • What it checks:

    • OpenXML schema compliance (Office 2013 standard)
    • PivotTable and Chart structure integrity
    • Incompatible functions (FILTER, UNIQUE, XLOOKUP, etc. - not supported in Excel 2019 and earlier)
    • .rels file path format (absolute paths cause Excel to crash)
  • exit codes:

    • 0 = Validation passed, safe to deliver
    • Non-zero = Validation failed - DO NOT DELIVER, regenerate the file
  • how to use:

/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx validate output.xlsx
  • If validation fails: Do NOT attempt to "fix" the file. Regenerate it from scratch with corrected code.

</Tool script list>

<Excel Creation Workflow - MUST FOLLOW>

๐Ÿ“‹ Excel Creation Workflow (Per-Sheet Validation)

๐Ÿšจ CRITICAL: Validate EACH sheet immediately after creation, NOT after all sheets are done!

For each sheet in workbook:
    1. PLAN   โ†’ Design this sheet's structure, formulas, references
    2. CREATE โ†’ Write data, formulas, styling for this sheet
    3. SAVE   โ†’ Save the workbook (wb.save())
    4. CHECK  โ†’ Run recheck + reference-check โ†’ Fix until 0 errors
    5. NEXT   โ†’ Only proceed to next sheet after current sheet has 0 errors

After ALL sheets pass:
    6. VALIDATE โ†’ Run `validate` command โ†’ Fix until exit code 0
    7. DELIVER  โ†’ Only deliver files that passed ALL validations

Per-Sheet Check Commands

# After creating/modifying EACH sheet, save and run:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx recheck output.xlsx
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx reference-check output.xlsx
# Fix ALL errors before creating the next sheet!

Final Validation (after all sheets complete)

/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx validate output.xlsx

Why Per-Sheet Validation?

  • Errors in Sheet 1 propagate to Sheet 2, Sheet 3... causing cascading failures
  • Fixing 3 errors per sheet is easier than fixing 30 errors at the end
  • Cross-sheet references can be validated immediately

</Excel Creation Workflow - MUST FOLLOW>

โš ๏ธ CRITICAL: Excel Formulas Are ALWAYS the First Choice

For ANY analysis task, using Excel formulas is the default and preferred approach. Wherever a formula CAN be used, it MUST be used.

โœ… CORRECT - Use Excel formulas:

ws['C2'] = '=A2+B2'           # Sum
ws['D2'] = '=C2/B2*100'       # Percentage
ws['E2'] = '=SUM(A2:A100)'    # Aggregation

โŒ FORBIDDEN - Pre-calculate in Python and paste static values:

result = value_a + value_b
ws['C2'] = result    # BAD: Static value, not a formula

Only use static values when:

  • Data is fetched from external sources (web search, API)
  • Values are constants that never change
  • Formula would create circular reference

Follow this workflow::

Sheet 1: Plan (write detailed design) โ†’ Create โ†’ Save โ†’ Run Recheck โ†’ Run ReferenceCheck โ†’ Fix errors โ†’ Zero errors โœ“
Sheet 2: Plan (write detailed design) โ†’ Create โ†’ Save โ†’ Run Recheck โ†’ Run ReferenceCheck โ†’ Fix errors โ†’ Zero errors โœ“
Sheet 3: Plan (write detailed design) โ†’ Create โ†’ Save โ†’ Run Recheck โ†’ Run ReferenceCheck โ†’ Fix errors โ†’ Zero errors โœ“
...

๐Ÿšจ CRITICAL: Recheck Results Are FINAL - NO EXCEPTIONS

The recheck command detects formula errors (#VALUE!, #DIV/0!, #REF!, #NAME?, #N/A, etc.) and zero-value cells. You MUST follow these rules strictly:

  1. ZERO TOLERANCE for errors: If recheck reports ANY errors, you MUST fix them before delivery. There are NO exceptions.

  2. DO NOT assume errors will "auto-resolve":

    • โŒ WRONG: "These errors will disappear when the user opens the file in Excel"
    • โŒ WRONG: "Excel will recalculate and fix these errors automatically"
    • โœ… CORRECT: Fix ALL errors reported by recheck until error_count = 0
  3. Errors detected = Errors to fix:

    • If recheck shows error_count: 5, you have 5 errors to fix
    • If recheck shows zero_value_count: 3, you have 3 suspicious cells to verify
    • Only when error_count: 0 can you proceed to the next step
  4. Common mistakes to avoid:

    • โŒ "The #REF! error is because openpyxl doesn't evaluate formulas" - WRONG, fix it!
    • โŒ "The #VALUE! will resolve when opened in Excel" - WRONG, fix it!
    • โŒ "Zero values are expected" - VERIFY each one, many are reference errors!
  5. Delivery gate: Files with ANY recheck errors CANNOT be delivered to users.

Forbidden Patterns โŒ:

1. Create Sheet 1 โ†’ Create Sheet 2 โ†’ Create Sheet 3 โ†’ Run Recheck once at end
   โŒ WRONG: Errors accumulate, debugging becomes exponentially harder
   โœ… CORRECT: Check after EACH sheet, fix before moving to next

2. Skip planning for any sheet
   โŒ WRONG: Causes 80%+ of reference errors
   โœ… CORRECT: Plan each sheet's structure before creating it

3. Recheck shows errors โ†’ Ignore and deliver anyway
   โŒ ABSOLUTELY FORBIDDEN - errors must be fixed, not ignored!

4. Recheck shows errors โ†’ Proceed to create next sheet anyway
   โŒ WRONG: Errors in Sheet 1 will cascade to Sheet 2, 3...
   โœ… CORRECT: Fix ALL errors in current sheet before creating next sheet

</Analyze loop>

Syntax: =VLOOKUP(lookup_value, table_array, col_index_num, FALSE) โ€” lookup column MUST be leftmost in table_array Best Practices: Use FALSE for exact match; Lock range with $A$2:$D$100; Wrap with IFERROR(...,"N/A"); Cross-sheet: Sheet2!$A$2:$C$100 Errors: #N/A=not found; #REF!=col_index exceeds columns. Alt: INDEX/MATCH when lookup column not leftmost

ws['D2'] = '=IFERROR(VLOOKUP(A2,$G$2:$I$50,3,FALSE),"N/A")'

</VLOOKUP Usage Rules>

๐Ÿšจ CRITICAL: PivotTable Creation Requires Reading pivot-table.md

When to Trigger: Detect ANY of these user intents:

  • User explicitly requests "pivot table", "data pivot", "ๆ•ฐๆฎ้€่ง†่กจ"
  • Task requires data summarization by categories
  • Keywords: summarize, aggregate, group by, categorize, breakdown, statistics, distribution, count by, total by
  • Dataset has 50+ rows with grouping needs
  • Cross-tabulation or multi-dimensional analysis needed

โš ๏ธ MANDATORY ACTION: When PivotTable need is detected, you MUST:

  1. READ /app/.kimi/skills/kimi-xlsx/pivot-table.md FIRST
  2. Follow the execution order and workflow in that document
  3. Use the pivot command (NOT manual code construction)

Why This Is Required:

  • PivotTable creation uses pure OpenXML SDK (C# tool)
  • The pivot command provides stable, tested implementation
  • Manual pivot construction in openpyxl is NOT supported and forbidden
  • Chart types (bar/line/pie) are automatically created with PivotTable

Quick Reference (Details in pivot-table.md):

# Step 1: Inspect data structure
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx inspect data.xlsx --pretty

# Step 2: Create PivotTable with chart
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx pivot \
    data.xlsx output.xlsx \
    --source "Sheet!A1:F100" \
    --rows "Category" \
    --values "Revenue:sum" \
    --location "Summary!A3" \
    --chart "bar"

# Step 3: Validate
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx validate output.xlsx

โ›” FORBIDDEN:

  • Creating PivotTable manually with openpyxl code
  • Skipping the inspect step
  • Not reading pivot-table.md before creating PivotTable
  • ๐Ÿšจ NEVER modify pivot output file with openpyxl - openpyxl will corrupt pivotCache paths!

โš ๏ธ CRITICAL: Workflow Order for PivotTable If you need to add extra sheets (Cover, Summary, etc.) to a file that will have PivotTable:

  1. FIRST: Create ALL sheets with openpyxl (data sheets, cover sheet, styling, etc.)
  2. THEN: Run pivot command as the FINAL STEP
  3. NEVER: Open the pivot output file with openpyxl again - this corrupts the file!
โœ… CORRECT ORDER:
   openpyxl creates base.xlsx (with Cover, Data sheets)
   โ†’ pivot command: base.xlsx โ†’ final.xlsx (adds PivotTable)
   โ†’ validate final.xlsx
   โ†’ DELIVER final.xlsx (do NOT modify again)

โŒ WRONG ORDER (WILL CORRUPT FILE):
   pivot command creates pivot.xlsx
   โ†’ openpyxl opens pivot.xlsx to add Cover sheet  โ† CORRUPTS FILE!
   โ†’ File cannot be opened in MS Excel

</PivotTable Module>

๐Ÿšจ FORBIDDEN FUNCTIONS (Incompatible with older Excel versions):

The following functions are NOT supported in Excel 2019 and earlier. Files using these functions will FAIL to open in older Excel versions. Use traditional alternatives instead.

โŒ Forbidden Function โœ… Alternative
FILTER() Use AutoFilter, or SUMIF/COUNTIF/INDEX-MATCH
UNIQUE() Use Remove Duplicates feature, or helper column with COUNTIF
SORT(), SORTBY() Use Excel's Sort feature (Data โ†’ Sort)
XLOOKUP() Use INDEX() + MATCH() combination
XMATCH() Use MATCH()
SEQUENCE() Use ROW() or manual fill
LET() Define intermediate calculations in helper cells
LAMBDA() Use named ranges or VBA
RANDARRAY() Use RAND() with fill-down
ARRAYFORMULA() Google Sheets only - use Ctrl+Shift+Enter array formulas
QUERY() Google Sheets only - use SUMIF/COUNTIF/PivotTable
IMPORTRANGE() Google Sheets only - copy data manually

Why these are forbidden:

  • These are Excel 365/2021+ dynamic array functions or Google Sheets functions
  • Older Excel versions (2019, 2016, etc.) cannot parse these formulas
  • The file will crash or show errors when opened in older Excel
  • The validate command will detect and reject files using these functions

Example - Converting FILTER to INDEX-MATCH:

โŒ WRONG: =FILTER(A2:C100, B2:B100="Active")
โœ… CORRECT: Use AutoFilter on the data range, or create a PivotTable

โš ๏ธ Off-By-One Prevention: Before saving, verify each formula references correct cells. Run reference-check tool. Common errors: referencing headers, wrong row/column offset. If result is 0 or unexpected โ†’ check references first.

๐Ÿ’ฐ Financial Values: Store in smallest unit (15000000 not 1.5M). Use Excel format for display: "ยฅ#,##0". Never use scaled units requiring conversion in formulas.

</Baseline error>

</Analyze rule>

Weekly Installs
5
GitHub Stars
56
First Seen
Feb 3, 2026
Installed on
opencode4
claude-code4
codex3
cursor2
antigravity2
openclaw1