返回 Skill 列表
extension
分类: 其它无需 API Key

钟工造价屋分部分项清单清洗

清洗、合并多个Excel中的分部分项工程量清单计价表数据

person作者: user_de9e9350hubcommunity

分部分项工程量清单计价表数据清洗Skill

本Skill提供自动化清洗和合并分部分项工程量清单计价表数据的能力。

功能概述

本Skill用于处理和整合多个Excel工作簿中的分部分项工程量清单计价表数据,实现:

  • 自动识别包含"分部分项"数据的工作表
  • 智能提取和标准化8个核心字段
  • 数据清洗、验证和去重
  • 合并所有有效数据为统一格式
  • 标注数据来源便于追溯

使用场景

  • 工程造价审计与分析
  • 多专业清单数据汇总
  • 项目成本对比分析
  • 清单数据标准化处理

核心处理流程

1. 输入参数

| 参数 | 说明 | 默认值 | |------|------|--------| | input_folder | Excel文件所在文件夹路径 | 必填 | | output_file | 输出文件路径 | 必填 | | sheet_key_word | 目标工作表特征值 | 分部分项 | | header_rows | 列识别搜索范围 | 20 |

2. 处理步骤

Step 1: 扫描Excel文件

  • 扫描指定文件夹中的所有 .xlsx.xls 文件
  • 排除临时文件(如 ~$ 开头的文件)

Step 2: 识别有效工作表

  • 遍历每个工作簿中的所有工作表
  • 检查工作表名称或前10行内容是否包含特征值(如"分部分项")
  • 跳过空表
  • 取第一个匹配的工作表作为数据源

Step 3: 列识别与验证

  • 在前N行(默认20行)中搜索以下8个必需字段:
    • 序号
    • 项目编码
    • 项目名称
    • 项目特征
    • 计量单位
    • 工程量
    • 单价
    • 合价
  • 支持多关键字匹配(见关键字映射表)
  • 验证:8个字段必须全部存在,否则跳过该工作表

Step 4: 行识别与提取

  • 遍历"序号"列的每一行
  • 判断序号是否为有效值:
    • 整数 (1, 2, 3...)
    • 小数 (1.1, 1.2, 2.1...)
    • 字符串格式 ("1", "2.1")
  • 有效行:保留并提取指定列的数据
  • 无效行:跳过

Step 5: 数据清洗与验证

  • 合并单元格处理:向前填充空值
  • 空值处理:关键字段不能为空
  • 数值验证:工程量、单价、合价必须为非负数
  • 格式标准化:统一数据类型

Step 6: 添加数据来源列

  • 在最后新增一列"数据来源"
  • 填充值:工作簿名称(不含扩展名)

Step 7: 合并所有数据

  • 将所有有效工作表的数据纵向合并
  • 重置索引

Step 8: 输出结果

  • 保存为Excel文件 (.xlsx)
  • 可选:同时输出清洗日志

关键字映射表

| 字段名称 | 匹配关键字(按优先级) | |----------|------------------------| | 序号 | 序号, 编号, 流水号, # | | 项目编码 | 项目编码, 编码, 项目编号, 清单编码| | 项目名称 | 项目名称, 名称 | | 项目特征 | 项目特征, 项目特征描述, 特征描述 | | 计量单位 | 计量单位, 单位 | | 工程量 | 工程量, 数量, 工程数量 | | 单价 | 单价, 综合单价, 单价合计 | | 合价 | 合价, 合价金额, 综合合价 |

判断条件

有效工作表条件

IF 工作表非空
   AND 工作表名称或前10行内容包含特征值
THEN 为候选工作表

有效列条件

IF 在前20行中找到所有8个必需字段
THEN 列识别成功,继续处理
ELSE 跳过该工作表

有效行条件

IF 序号列的值满足以下任一条件:
   - 是整数
   - 是浮点数(如1.1, 2.5)
   - 是可转换为数字的字符串
   AND 序号值 > 0
THEN 为有效行
ELSE 跳过该行

有效数据条件

IF 以下条件同时满足:
   - 项目编码 非空
   - 工程量 >= 0
   - 单价 >= 0
   - 合价 = 工程量 x 单价(可选验证)
THEN 数据有效
ELSE 标记异常(可选:保留并标记,或跳过)

输出字段

| 序号 | 字段名称 | 说明 | |------|----------|------| | 1 | 序号 | 清单项序号 | | 2 | 项目编码 | 清单项目编码 | | 3 | 项目名称 | 清单项目名称 | | 4 | 项目特征 | 项目特征描述 | | 5 | 计量单位 | 计量单位 | | 6 | 工程量 | 工程数量 | | 7 | 单价 | 综合单价 | | 8 | 合价 | 合价金额 | | 9 | 数据来源 | 来源工作簿名称 |

异常处理

| 异常场景 | 处理方式 | |----------|----------| | 文件夹不存在 | 报错终止 | | Excel文件无法打开 | 跳过该文件,记录日志 | | 找不到匹配的工作表 | 跳过该工作簿 | | 必需字段缺失 | 跳过该工作表 | | 序号格式异常 | 跳过该行 | | 数值为负数 | 标记异常(可选保留或跳过) | | 合并单元格导致空值 | 向前填充 |

配置选项

| 配置项 | 说明 | 默认值 | |--------|------|--------| | skip_negative_values | 是否跳过负数值 | False | | fill_merged_cells | 是否填充合并单元格 | True | | validate_formula | 是否验证合价=工程量x单价 | False | | output_log | 是否输出清洗日志 | True |

使用方法

基础用法

调用本Skill时,提供以下信息:

  1. 输入文件夹路径 - 包含Excel文件的文件夹
  2. 输出文件路径 - 合并后文件的保存位置

示例请求:

请使用boq-cleaner skill清洗并合并以下文件夹中的分部分项工程量清单:
输入:C:/Users/18357/Desktop/数据清洗Skill测试表格/
输出:C:/Users/18357/Desktop/清洗结果.xlsx

高级用法

可以指定可选参数:

  • 自定义工作表关键字(默认"分部分项")
  • 调整列识别搜索范围(默认前20行)
  • 启用/禁用数据验证选项

实现说明

本Skill使用Python实现,依赖以下库:

  • pandas - 数据处理
  • openpyxl - Excel文件读写

核心处理逻辑:

  1. 使用 pandas.ExcelFile() 打开工作簿
  2. 遍历工作表,使用关键字匹配识别目标工作表
  3. 在前N行搜索列标题,建立列索引映射
  4. 使用正则表达式和类型检查识别有效数据行
  5. 应用数据清洗规则(填充空值、验证数值等)
  6. 使用 pandas.concat() 合并所有数据
  7. 输出到新的Excel文件

注意事项

  1. 文件格式 - 仅支持 .xlsx 和 .xls 格式
  2. 内存使用 - 处理大量文件时需注意内存占用
  3. 中文支持 - 确保系统环境支持UTF-8编码
  4. 数据备份 - 建议在处理前备份原始数据
  5. 日志查看 - 启用 output_log 可查看详细处理记录

示例

示例1:基础清洗和合并

用户输入:

请帮我清洗和合并这些工程量清单文件:
输入文件夹:C:/Users/18357/Desktop/项目A/
输出文件:C:/Users/18357/Desktop/项目A-合并清单.xlsx

Skill执行:

  1. 扫描 "C:/Users/18357/Desktop/项目A/" 中的所有Excel文件
  2. 识别每个文件中包含"分部分项"的工作表
  3. 提取8个核心字段的数据
  4. 清洗并验证数据
  5. 合并所有数据并添加"数据来源"列
  6. 输出到 "C:/Users/18357/Desktop/项目A-合并清单.xlsx"

示例2:自定义关键字

用户输入:

使用boq-cleaner skill处理这些文件,工作表关键字是"清单",
输入:C:/Users/18357/Desktop/数据/
输出:C:/Users/18357/Desktop/结果.xlsx

Skill执行:

  • 使用"清单"作为工作表匹配关键字(而非默认的"分部分项")
  • 其他处理步骤相同

技术支持

如遇问题,请检查:

  1. 输入文件夹路径是否正确
  2. Excel文件是否损坏或加密
  3. 工作表是否包含必需的8个字段
  4. 系统是否已安装所需Python库(pandas, openpyxl)

可在 ~/.workbuddy/skills/boq-cleaner/ 目录下查看详细日志和中间处理结果。