nps-crosstab
SKILL.md
NPS 交叉表后处理
功能
对已生成的交叉表 Excel 文件,自动识别 NPS 打分题(含 0-10 分选项),插入:
- 0-6分(贬损者 Detractors)— 各列频数/百分比求和
- 7-8分(被动者 Passives)— 各列频数/百分比求和
- 9-10分(推荐者 Promoters)— 各列频数/百分比求和
- NET-NPS = 9-10分合计值 − 0-6分合计值
使用方式
基本用法
用户提供 Excel 文件后,执行脚本处理:
python3 scripts/nps_processor.py
脚本会以交互方式询问输入/输出路径。
编程调用
import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'scripts'))
from nps_processor import NPSProcessor
processor = NPSProcessor()
processor.process_file('input.xlsx', 'output.xlsx')
也可以直接在脚本中硬编码路径来非交互执行:
from nps_processor import NPSProcessor
processor = NPSProcessor()
processor.process_file('/path/to/input.xlsx') # 输出默认为 input_nps.xlsx
处理流程
- 读取 Excel 所有工作表,保留完整样式(字体/填充/边框/对齐/合并单元格/列宽/行高)
- 识别交叉表区域(基于连续数据行分组)
- 判断是否为 NPS 题(选项覆盖 0-10 中至少 8 个值,且含 0/6/7/8/9/10)
- 提取各分值对应的数据行,检测百分比格式
- 计算分组汇总值,在合计行之前插入 4 行(0-6分/7-8分/9-10分/NET-NPS)
- 调整合并单元格区域偏移,输出新文件
注意事项
- 已有 NPS 行的题目会自动跳过,不会重复插入
- 支持多种选项格式:纯数字、"X分"、"X-描述"、"(X)" 等
- 插入行沿用相邻数据行的样式,不添加额外颜色
- 百分比列自动保持百分比输出并匹配小数位数
- 依赖
openpyxl和numpy