cross-table-box-processor
SKILL.md
交叉表 T2B/B2B 后处理工具
自动在 Excel 交叉报表中插入 T2B/B2B 合并行和均值行,完美保持原始格式。
功能特性
- 自动识别量表题 - 通过模板匹配和关键词分析识别量表题,跳过非量表题和纯数字打分题
- 智能插入位置 - T2B/T3B/B2B 插入到「合计/NET」行之前,均值行插入到「合计」行之后
- 格式完美保持 - 继承原始数据行的样式(边框、字体、填充、对齐),不添加特殊颜色
- 处理已有数据 - 正确删除已有的 NET/T2B 行后重新计算
- 多种配置方式 - 支持命令行参数和交互式配置
支持的量表类型
- 满意度量表:非常不满意 → 非常满意
- 同意度量表:非常不同意 → 非常同意
- 可能性量表:完全不可能 → 非常可能
- 推荐度量表:完全不推荐 → 非常推荐
- 重要性量表:完全不重要 → 非常重要
- 自定义量表:通过关键词自动识别
使用方法
作为命令行工具使用
# 基本用法(使用默认配置:T2B + T3B + B2B + 均值)
python cross_table_box_processor.py input.xlsx
# 指定输出文件
python cross_table_box_processor.py input.xlsx -o output.xlsx
# 交互式配置
python cross_table_box_processor.py input.xlsx -i
# 禁用某些Box(例如只保留T2B和B2B)
python cross_table_box_processor.py input.xlsx --no-t3b
# 启用B3B
python cross_table_box_processor.py input.xlsx --b3b
# 禁用均值计算
python cross_table_box_processor.py input.xlsx --no-mean
作为 Python 模块使用
from cross_table_box_processor import CrossTableBoxProcessor
# 创建处理器实例
processor = CrossTableBoxProcessor()
# 通过代码配置
processor.configure(
t2b=True, # 启用 T2B
t3b=True, # 启用 T3B
b2b=True, # 启用 B2B
b3b=False, # 禁用 B3B
mean=True # 启用均值
)
# 处理文件
output_path = processor.process_file('input.xlsx', 'output.xlsx')
# 查看处理日志
for log in processor.process_log:
print(f"{log['title']}: 插入 {', '.join(log['boxes_inserted'])}")
通过配置文件使用
import json
from cross_table_box_processor import CrossTableBoxProcessor
# 从配置文件加载
with open('config.json') as f:
config = json.load(f)
processor = CrossTableBoxProcessor(config)
output_path = processor.process_file('input.xlsx')
配置文件示例 (config.json):
{
"enabled_boxes": {
"T2B": true,
"T3B": true,
"B2B": true,
"B3B": false
},
"calc_mean": true
}
输入文件要求
- 格式:Excel (.xlsx)
- 结构:标准的交叉表格式,包含 Column n 行
- 每道题应该是一个独立的交叉表
- 选项标签应包含情感关键词(如"满意"、"同意"等)
输出说明
- 输出文件名默认为:
{原文件名}_with_boxes.xlsx - 每个量表题后会插入:
- T2B:最正面2个选项的合计
- T3B:最正面3个选项的合计(如启用)
- B2B:最负面2个选项的合计
- B3B:最负面3个选项的合计(如启用)
- 均值:加权平均值(如启用)
依赖安装
pip install openpyxl pandas numpy
注意事项
- 纯数字打分题(如 0,1,2,3,4)会被自动跳过
- 选项数少于3个或超过10个的表会被跳过
- 无法识别为量表的表会被跳过并记录原因
- 新插入的行继承原始数据行的样式,不添加特殊颜色
- 合并单元格会被正确处理,不会错位
处理日志
处理完成后会输出详细日志:
📂 读取交叉表: survey.xlsx
📋 处理工作表: Sheet1
识别到 5 个交叉表
✓ 量表题: Q1. 整体满意度
排序: 非常不满意 → 不太满意 → 一般 → 比较满意 → 非常满意
T2B = 比较满意 + 非常满意 = 156
T3B = 一般 + 比较满意 + 非常满意 = 234
B2B = 非常不满意 + 不太满意 = 45
均值(Total) = 3.8
✓ 已插入: T2B, T3B, B2B, 均值 (共4行)
✗ 跳过: Q2. 年龄分布 (非量表题)
✅ 处理完成!
总计交叉表: 5
已处理量表题: 1
跳过: 4
输出文件: survey_with_boxes.xlsx
脚本位置
- 主脚本:
scripts/cross_table_box_processor.py
自定义扩展
如需支持更多量表类型,可以修改以下属性:
processor = CrossTableBoxProcessor()
# 添加新的量表模板
processor.scale_templates.append(['新选项1', '新选项2', '新选项3'])
# 添加新的正面关键词
processor.top_keywords_leveled[0].append('新的正面词')
# 添加新的负面关键词
processor.bottom_keywords_leveled[0].append('新的负面词')