skills/skills.netease.im/cross-table-box-processor

cross-table-box-processor

SKILL.md

交叉表 T2B/B2B 后处理工具

自动在 Excel 交叉报表中插入 T2B/B2B 合并行和均值行,完美保持原始格式。

功能特性

  1. 自动识别量表题 - 通过模板匹配和关键词分析识别量表题,跳过非量表题和纯数字打分题
  2. 智能插入位置 - T2B/T3B/B2B 插入到「合计/NET」行之前,均值行插入到「合计」行之后
  3. 格式完美保持 - 继承原始数据行的样式(边框、字体、填充、对齐),不添加特殊颜色
  4. 处理已有数据 - 正确删除已有的 NET/T2B 行后重新计算
  5. 多种配置方式 - 支持命令行参数和交互式配置

支持的量表类型

  • 满意度量表:非常不满意 → 非常满意
  • 同意度量表:非常不同意 → 非常同意
  • 可能性量表:完全不可能 → 非常可能
  • 推荐度量表:完全不推荐 → 非常推荐
  • 重要性量表:完全不重要 → 非常重要
  • 自定义量表:通过关键词自动识别

使用方法

作为命令行工具使用

# 基本用法(使用默认配置: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

注意事项

  1. 纯数字打分题(如 0,1,2,3,4)会被自动跳过
  2. 选项数少于3个或超过10个的表会被跳过
  3. 无法识别为量表的表会被跳过并记录原因
  4. 新插入的行继承原始数据行的样式,不添加特殊颜色
  5. 合并单元格会被正确处理,不会错位

处理日志

处理完成后会输出详细日志:

📂 读取交叉表: 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('新的负面词')
Installs
1
First Seen
Apr 17, 2026