mcpField
R
rvt-to-excel

rvt-to-excel

github.com/datadrivenconstruction数据与数据库375118 次安装1 周前更新
代码仓库

关于 rvt-to-excel

rvt-to-excel 将 Revit RVT 文件转换为结构化 Excel 工作簿,用于 BIM 分析和报告。命令行提供多种导出模式,并可选择导出构件属性、明细表、房间及图纸。

主要功能

  1. 01将 RVT 数据导出为 Excel
  2. 02选择 basic、standard、complete 或 custom 模式
  3. 03包含边界框和房间关联
  4. 04导出明细表和图纸
  5. 05按工作表整理构件、楼层和材料

适用场景

  1. 01提取多个项目的 BIM 数据
  2. 02为分析流程准备结构化数据
  3. 03通过 Excel 分享构件属性
  4. 04生成工程量清单和报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction --skill rvt-to-excel

安装后在 Claude Code 中输入/rvt-to-excel确认已加载。

附带文件claw.jsoninstructions.md

详细介绍

RVT 转 Excel

业务案例

问题陈述

需要从 RVT 文件中提取 BIM 数据,以便:

  • 批量处理多个项目
  • 将 BIM 数据集成到分析流水线中
  • 与利益相关方共享结构化数据
  • 生成报告和工程量统计
解决方案

将 RVT 文件转换为结构化的 Excel 数据库,用于分析和报告。

业务价值
  • 批量处理 - 转换多个项目
  • 数据易用性 - 使用 Excel 格式,便于普遍访问
  • 流水线集成 - 为 BI 工具、ML 模型提供数据
  • 结构化输出 - 整理元素数据和属性

技术实现

CLI 语法
RvtExporter.exe <input_path> [export_mode] [options]
导出模式
模式类别数说明
basic309基本结构元素
standard724标准 BIM 类别
complete1209所有 Revit 类别
custom用户定义仅导出指定类别
选项
选项说明
bbox包含边界框坐标
rooms包含房间关联信息
schedules将所有明细表导出到工作表
sheets将图纸导出为 PDF
示例
# Basic export
RvtExporter.exe "C:\Projects\Building.rvt" basic

# Complete with bounding boxes
RvtExporter.exe "C:\Projects\Building.rvt" complete bbox

# Full export with all options
RvtExporter.exe "C:\Projects\Building.rvt" complete bbox rooms schedules sheets

# Batch processing
for /R "C:\Projects" %f in (*.rvt) do RvtExporter.exe "%f" standard bbox
Python 集成
import subprocess
import pandas as pd
from pathlib import Path
from typing import List, Optional

class RevitExporter:
    def __init__(self, exporter_path: str = "RvtExporter.exe"):
        self.exporter = Path(exporter_path)
        if not self.exporter.exists():
            raise FileNotFoundError(f"RvtExporter not found: {exporter_path}")

    def convert(self, rvt_file: str, mode: str = "complete",
                options: List[str] = None) -> Path:
        """Convert Revit file to Excel."""
        rvt_path = Path(rvt_file)
        if not rvt_path.exists():
            raise FileNotFoundError(f"Revit file not found: {rvt_file}")

        cmd = [str(self.exporter), str(rvt_path), mode]
        if options:
            cmd.extend(options)

        result = subprocess.run(cmd, capture_output=True, text=True)

        if result.returncode != 0:
            raise RuntimeError(f"Export failed: {result.stderr}")

        # Output file is same name with .xlsx extension
        output_file = rvt_path.with_suffix('.xlsx')
        return output_file

    def batch_convert(self, folder: str, mode: str = "standard",
                      pattern: str = "*.rvt") -> List[Path]:
        """Convert all Revit files in folder."""
        folder_path = Path(folder)
        converted = []

        for rvt_file in folder_path.glob(pattern):
            try:
                output = self.convert(str(rvt_file), mode)
                converted.append(output)
                print(f"Converted: {rvt_file.name}")
            except Exception as e:
                print(f"Failed: {rvt_file.name} - {e}")

        return converted

    def read_elements(self, xlsx_file: str) -> pd.DataFrame:
        """Read converted Excel as DataFrame."""
        return pd.read_excel(xlsx_file, sheet_name="Elements")

    def get_quantities(self, xlsx_file: str,
                       group_by: str = "Category") -> pd.DataFrame:
        """Get quantity summary grouped by category."""
        df = self.read_elements(xlsx_file)

        # Group and count
        summary = df.groupby(group_by).agg({
            'ElementId': 'count',
            'Area': 'sum',
            'Volume': 'sum'
        }).reset_index()

        summary.columns = [group_by, 'Count', 'Total_Area', 'Total_Volume']
        return summary

输出结构

Excel 工作表
工作表内容
Elements所有带属性的 BIM 元素
Categories元素类别汇总
Levels建筑楼层
Materials材料定义
Parameters共享参数
元素列
列类型说明
ElementIdint唯一 Revit ID
Categorystring元素类别
Familystring族名称
Typestring类型名称
Levelstring关联楼层
Areafloat表面积(m²)
Volumefloat体积(m³)
BBox_MinX/Y/Zfloat边界框最小值
BBox_MaxX/Y/Zfloat边界框最大值

使用示例

# Initialize exporter
exporter = RevitExporter("C:/Tools/RvtExporter.exe")

# Convert single file
xlsx = exporter.convert("C:/Projects/Office.rvt", "complete", ["bbox", "rooms"])

# Read and analyze
df = exporter.read_elements(str(xlsx))
print(f"Total elements: {len(df)}")

# Quantity summary
quantities = exporter.get_quantities(str(xlsx))
print(quantities)

# Export to CSV for further processing
df.to_csv("elements.csv", index=False)

与 DDC 流水线集成

# Full pipeline: Revit → Excel → Cost Estimate
from semantic_search import CWICRSemanticSearch

# 1. Convert Revit
exporter = RevitExporter()
xlsx = exporter.convert("project.rvt", "complete", ["bbox"])

# 2. Extract quantities
df = exporter.read_elements(str(xlsx))
quantities = df.groupby('Category')['Volume'].sum().to_dict()

# 3. Search CWICR for pricing
search = CWICRSemanticSearch()
costs = {}
for category, volume in quantities.items():
    results = search.search_work_items(category, limit=5)
    if not results.empty:
        avg_price = results['unit_price'].mean()
        costs[category] = volume * avg_price

print(f"Total estimate: ${sum(costs.values()):,.2f}")

最佳实践

  1. 选择合适的模式 - basic 适用于快速分析,complete 适用于完整数据
  2. 包含 bbox - 空间分析和可视化必需
  3. 谨慎批处理 - 大文件可能需要较长时间;建议在夜间处理
  4. 验证输出 - 对照 Revit 明细表检查元素数量

资源

  • GitHub:cad2data Pipeline
  • 下载:请查看仓库的发布页面获取 RvtExporter.exe

评论

支持 Markdown