You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Revit二次开发:使用C#创建明细表时无法添加计算值

在Revit中用C#创建明细表并添加计算值

核心实现流程与问题解决

要实现带计算值的明细表创建,核心是正确调用ScheduleCalculatedField类,并严格在Revit事务内执行所有修改操作。以下是完整的可运行逻辑:

  1. 开启事务
    Revit API所有修改操作必须包裹在事务中,先初始化事务容器:
using (Transaction trans = new Transaction(doc, "创建带计算值的明细表"))
{
    trans.Start();
    // 所有明细表操作写在此区域
    trans.Commit();
}
  1. 创建明细表基础定义
    指定目标构件类别(示例为墙),生成ScheduleDefinition实例:
ElementCategoryId wallCategory = new ElementCategoryId(BuiltInCategory.OST_Walls);
ScheduleDefinition scheduleDef = ScheduleDefinition.Create(doc, wallCategory);
scheduleDef.Name = "墙明细表(含计算值)";
  1. 添加常规字段
    先配置基础展示字段(如类型名称、构件面积):
// 添加类型名字段
ScheduleField typeNameField = scheduleDef.AddField(ScheduleFieldType.Instance);
typeNameField.FieldId = new ElementId(BuiltInParameter.ALL_MODEL_TYPE_NAME);

// 添加系统计算的面积字段
ScheduleField areaField = scheduleDef.AddField(ScheduleFieldType.Instance);
areaField.FieldId = new ElementId(BuiltInParameter.HOST_AREA_COMPUTED);
  1. 添加自定义计算值字段
    这是容易出错的环节,需注意公式语法、字段类型与单位匹配:
// 创建计算字段:将平方米面积转换为平方英尺
ScheduleCalculatedField calcField = ScheduleCalculatedField.Create(scheduleDef, ScheduleFieldType.Instance);
calcField.Name = "面积(平方英尺)";
// 公式遵循Revit语法,可直接引用字段内部名称或用[字段索引]调用
calcField.Formula = "Area * 10.7639";
// 指定计算结果的显示单位
calcField.DisplayUnitType = DisplayUnitType.DUT_SQUARE_FEET;
  1. 生成最终明细表视图
    将定义转换为可在项目中显示的明细表视图,还可附加排序、过滤规则:
ViewSchedule scheduleView = ViewSchedule.CreateSchedule(doc, scheduleDef);
// 按面积降序排序
scheduleView.SortFields.Add(new ScheduleSortField(areaField.FieldId, SortOrder.Descending));

常见问题排查

  • 公式执行报错:确保公式内的字段名称为Revit认可的内部名称,或用[字段索引]格式引用(如[1]代表明细表第一个字段)
  • API权限异常:所有修改操作必须在Transaction块内执行,否则会触发权限错误
  • 计算值类型不匹配:避免在数值计算中引用文本类字段,确保公式返回值与字段类型一致

内容的提问来源于stack exchange,提问作者Islam Heakal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:10:59