Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add YuYY2004/excel-skills --skill excel-validategit clone --depth 1 https://github.com/YuYY2004/excel-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/yuyy2004/excel-skills/excel-validate)<a href="https://agentmods.dev/skills/yuyy2004/excel-skills/excel-validate"><img src="https://agentmods.dev/badge/skills/yuyy2004/excel-skills/excel-validate/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/yuyy2004/excel-skills/excel-validate"><img src="https://agentmods.dev/badge/skills/yuyy2004/excel-skills/excel-validate.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00129 | $0.02141 |
| Opus 5 | $0.00064 | $0.01071 |
| Sonnet 5 | $0.00026 | $0.00428 |
| Haiku 4.5 | $0.00013 | $0.00214 |
Grade A, and why
excel-validate scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 158 lines — stays where its author put it; the contents beside it link to each section on GitHub.
This skill is read-only, no side effects. Uses pandas for fast scanning, outputs an issue report. 本技能只读不写,安全无副作用。用 pandas 快速扫描,输出问题报告。
Excel Data Validation / Excel 数据校验
Check Items / 检查项目
| Check Item / 检查项 | What It Detects / 检测内容 | Severity / 严重程度 |
|---|---|---|
| Null Rate / 空值率 | NaN/None ratio per column / 每列 NaN/None 占比 | High >30%, Medium >10% / 高 >30%, 中 >10% |
| Uniqueness / 唯一值 | Unique value count per column (identifies all-same columns, ID columns) / 每列唯一值数量 | Info / 信息 |
| Type Consistency / 类型一致性 | Mixed number+text within same column / 同列混用数字+文本 | Medium / 中 |
| Outliers / 异常值 | Extreme values in numeric columns / 数值列的超大/超小值 | Low / 低 |
| Duplicate Rows / 重复行 | Count of fully duplicate rows / 完全重复的行数 | High / 高 |
| Formula Columns / 公式列 | Which columns are formula-calculated / 哪些列是公式计算 | Info / 信息 |
Step 0: Requirement Parsing / 第零步:需求解析
| User Says / 用户说 | Check Scope / 检查范围 |
|---|---|
| "Check data quality" / "检查数据质量" | All check items / 全部检查项 |
| "See which columns have nulls" / "看看哪些列有空值" | Null rate only / 只看空值率 |
| "Check for duplicates" / "检查有没有重复" | Duplicate rows only / 只看重复行 |
| "Any issues with this data?" / "这数据有没有问题" | All check items / 全部检查项 |
Step 1: Scout + Check / 第一步:勘察+检查
import pandas as pd
import numpy as np
import os
FILE = 'target.xlsx' / FILE = '目标文件.xlsx'
size_mb = os.path.getsize(FILE) / 1024 / 1024
df = pd.read_excel(FILE)
total = len(df)
cols = len(df.columns)
print(f'{"="*60}')
print(f'Data Quality Report / 数据质量报告: {os.path.basename(FILE)}')
print(f'File Size: {size_mb:.1f}MB | Rows: {total} | Cols: {cols} / 文件大小: {size_mb:.1f}MB | 行数: {total} | 列数: {cols}')
print(f'{"="*60}')
# ====== 1. Null Check / 空值检查 ======
print(f'\n【Null Rate / 空值率】')
null_report = []
for col in df.columns:
null_count = df[col].isna().sum()
null_pct = null_count / total * 100
if null_pct > 0:
level = '🔴' if null_pct > 30 else ('🟡' if null_pct > 10 else '🟢')
null_report.append((col, null_count, null_pct, level))
null_report.sort(key=lambda x: -x[2])
if null_report:
for col, cnt, pct, level in null_report[:20]:
print(f' {level} {col}: {cnt} nulls / 空 ({pct:.1f}%)')
if len(null_report) > 20:
print(f' ... {len(null_report)-20} more columns with nulls / 还有 {len(null_report)-20} 列有空值')
else:
print(f' ✅ No nulls / 无空值')
# ====== 2. Uniqueness / 唯一值 ======
print(f'\n【Uniqueness Analysis / 唯一值分析】')
for col in df.columns:
n_unique = df[col].nunique()
if n_unique <= 1:
print(f' ⚠️ {col}: unique={n_unique} (all same or no data / 全列相同或无数据)')
elif n_unique == total:
print(f' 📌 {col}: unique={n_unique} (likely ID column / 可能是ID列)')
# ====== 3. Type Consistency / 类型一致性 ======
print(f'\n【Type Consistency / 类型一致性】')
mixed_cols = []
for col in df.columns:
types = df[col].dropna().apply(type).unique()
if len(types) > 1:
type_names = [t.__name__ for t in types]
mixed_cols.append((col, type_names))
if mixed_cols:
for col, types in mixed_cols[:10]:
print(f' ⚠️ {col}: mixed types / 混合类型 {types}')
else:
print(f' ✅ Types consistent / 类型一致')
# ====== 4. Outliers (numeric columns) / 异常值(数值列)======
print(f'\n【Numeric Outliers / 数值列异常值】')
num_cols = df.select_dtypes(include=[np.number]).columns
found_anomaly = False
for col in num_cols:
vals = df[col].dropna()
if len(vals) < 2: continue
q1, q3 = vals.quantile([0.25, 0.75])
iqr = q3 - q1
if iqr == 0: continue
outliers = vals[(vals < q1 - 3*iqr) | (vals > q3 + 3*iqr)]
if len(outliers) > 0:
print(f' 📊 {col}: {len(outliers)} extreme values / 个极端值 (min={vals.min()}, max={vals.max()})')
found_anomaly = True
if not found_anomaly:
print(f' ✅ No obvious outliers / 未发现明显异常值')
# ====== 5. Fully Duplicate Rows / 完全重复行 ======
print(f'\n【Duplicate Rows / 重复行】')
dup_rows = df.duplicated().sum()
if dup_rows > 0:
print(f' 🔴 {dup_rows} rows fully duplicate / 行完全重复 ({dup_rows/total*100:.1f}%)')
else:
print(f' ✅ No fully duplicate rows / 无完全重复行')
# ====== 6. Potential Issues / 可能的问题 ======
print(f'\n【Potential Issues / 可能的问题】')
# Check for obviously formula-result columns (e.g. "Unnamed") / 检查是否包含明显是公式结果的列
unnamed = [c for c in df.columns if 'Unnamed' in str(c)]
if unnamed:
print(f' ⚠️ {len(unnamed)} unnamed columns / 个未命名列 -> possible hidden header issues / 可能有隐藏的表头问题')
# Check all-null columns / 检查全空列
all_null = [c for c in df.columns if df[c].isna().all()]
if all_null:
print(f' 🔴 {len(all_null)} all-null columns / 个全空列: {all_null}')
# Check columns that look like dates but are stored as text / 检查看起来像日期但是字符串的列
for col in df.select_dtypes(include=['object']).columns:
sample = df[col].dropna().head(5)
date_like = sample.astype(str).str.match(r'\d{4}[-/]\d{2}[-/]\d{2}').sum()
if date_like >= 3:
print(f' 💡 {col}: looks like date but stored as text / 看起来像日期但存储为文本, suggest using excel-date-to-text / 建议用 excel-date-to-text 处理')
print(f'\n{"="*60}')
print(f'Check complete / 检查完成')
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 158 lines · 129 tokens per session scan A 5f4192c121e8
excel-validate is a skill published in the GitHub repository YuYY2004/excel-skills (2 stars, last pushed 1mo ago), licensed MIT. It adds 129 tokens to every session and 2,141 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
spreadsheets
Use when creating, reading, or fixing spreadsheets (.xlsx, .csv). Covers formulas, formatting, charts, data cleaning, and handling the messy real-world files that are not actually tabular.
Excel工具
A guide for using Excel tools to read, write, and recalculate spreadsheet files. It includes a rule for treating the first row as data when a spreadsheet has no column headings.
huashu-data-pro
All-in-one data analysis and productivity assistant. Covers end-to-end workflows for data processing, analytical insights, report writing, PPT creation, and data visualisation. Always approaches tasks from an expert perspective — thinks one step ahead for the user. Proactively confirms with the user when uncertain.…
xlsx
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or…
thinkcell
Generate, update, and automate think-cell charts and elements in PowerPoint and Excel. Use ANY time the user mentions think-cell, thinkcell, or .ppttc files, or asks to create/update PowerPoint charts following think-cell conventions (waterfall, Mekko, stacked column, Gantt, Harvey ball, scatter/bubble, etc.) …
bug-report-writer
Converts rough notes, casual descriptions, console errors, or quick observations into professional, complete bug reports — exported as a formatted Excel (.xlsx) file ready for Excel, Google Sheets, Jira, or Azure DevOps. Use this skill whenever the user mentions: "write a bug report", "log a bug", "report this issue"…