关于 rvt-to-excel
rvt-to-excel 将 Revit RVT 文件转换为结构化 Excel 工作簿,用于 BIM 分析和报告。命令行提供多种导出模式,并可选择导出构件属性、明细表、房间及图纸。
主要功能
- 01将 RVT 数据导出为 Excel
- 02选择 basic、standard、complete 或 custom 模式
- 03包含边界框和房间关联
- 04导出明细表和图纸
- 05按工作表整理构件、楼层和材料
适用场景
- 01提取多个项目的 BIM 数据
- 02为分析流程准备结构化数据
- 03通过 Excel 分享构件属性
- 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]
导出模式
| 模式 | 类别数 | 说明 |
|---|---|---|
basic | 309 | 基本结构元素 |
standard | 724 | 标准 BIM 类别 |
complete | 1209 | 所有 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 | 共享参数 |
元素列
| 列 | 类型 | 说明 |
|---|---|---|
| ElementId | int | 唯一 Revit ID |
| Category | string | 元素类别 |
| Family | string | 族名称 |
| Type | string | 类型名称 |
| Level | string | 关联楼层 |
| Area | float | 表面积(m²) |
| Volume | float | 体积(m³) |
| BBox_MinX/Y/Z | float | 边界框最小值 |
| BBox_MaxX/Y/Z | float | 边界框最大值 |
使用示例
# 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}")
最佳实践
- 选择合适的模式 -
basic适用于快速分析,complete适用于完整数据 - 包含 bbox - 空间分析和可视化必需
- 谨慎批处理 - 大文件可能需要较长时间;建议在夜间处理
- 验证输出 - 对照 Revit 明细表检查元素数量
资源
- GitHub:cad2data Pipeline
- 下载:请查看仓库的发布页面获取 RvtExporter.exe
评论
支持 Markdown