# Single Sheet Reading And Analysis

读取并解析单个Excel工作表数据，支持合并单元格处理、数据清洗、交叉分析及多维度可视化，适用于需要从单表中提取关键指标并进行趋势模拟与图表生成的场景。

- Repository: https://github.com/OpenSenseNova/SenseNova-Skills (6002 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-29
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add OpenSenseNova/SenseNova-Skills --skill single-sheet-reading-and-analysis -g -a claude-code -y`
Codex: `npx skills add OpenSenseNova/SenseNova-Skills --skill single-sheet-reading-and-analysis -g -a codex -y`
Cursor: `npx skills add OpenSenseNova/SenseNova-Skills --skill single-sheet-reading-and-analysis -g -a cursor -y`
Gemini CLI: `npx skills add OpenSenseNova/SenseNova-Skills --skill single-sheet-reading-and-analysis -g -a gemini-cli -y`

## Description

读取并解析单个Excel工作表数据，支持合并单元格处理、数据清洗、交叉分析及多维度可视化，适用于需要从单表中提取关键指标并进行趋势模拟与图表生成的场景。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

## Skill Steps

Step1 导入依赖并配置中英文字体，防止图表乱码
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re
import base64
from IPython.display import HTML

# 设置中英文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans', 'WenQuanYi Zen Hei']
plt.rcParams['axes.unicode_minus'] = False
```

Step2 加载数据与基础清洗，包含合并单元格处理与正则提取
```python
def load_and_clean_data(file_path, sheet_name=0):
    # 读取数据
    df = pd.read_excel(file_path, sheet_name=sheet_name)
    
    # 处理合并单元格：向前填充并还原
    # df['group_col'] = df['group_col'].ffill()
    
    # 标准化列名：去除首尾空格及换行符
    df.columns = [str(col).strip().replace('\n', '') for col in df.columns]
    
    # 数据清洗正则表达式示例：提取数值
    if 'target_col' in df.columns:
        df['target_col'] = df['target_col'].astype(str).apply(lambda x: re.sub(r'[^\d.]', '', x))
        df['target_col'] = pd.to_numeric(df['target_col'], errors='coerce')
    
    # 处理全空行缺失值
    df = df.dropna(how='all')
    return df
```

Step3 数据分类映射与多维度评分/分级算法
```python
def categorize_and_score(df, target_col):
    # 分类映射函数骨架
    def map_category(val):
        if pd.isna(val):
            return '未知'
        elif val > 100:  # 占位示例：高阈值
            return 'A类'
        elif val > 50:   # 占位示例：中阈值
            return 'B类'
        else:
            return 'C类'
    
    if target_col in df.columns:
        df['category'] = df[target_col].apply(map_category)
    
    # 多维度评分/分级算法结构
    # df['score'] = df['metric1'] * 0.4 + df['metric2'] * 0.6
    return df
```

The rest: https://github.com/OpenSenseNova/SenseNova-Skills/blob/HEAD/skills/sn-da-excel-workflow/capability/excel-reading/single-sheet-reading/SKILL.md
