RevitとExcel積算ソフト連携アドインのサンプルコード
# RevitとExcel積算ソフト連携アドインのサンプルコード
以下は、RevitとExcelを連携させるためのアドインの基本的なサンプルコードです。
この例では、Revitから電気設備要素を抽出し、Excelに出力する機能を実装しています。
## 必要な環境
- Revit API
- .NET Framework 4.8
- Microsoft Office Interop Excel
- Visual Studio
## C#サンプルコード
using System;
using System.Collections.Generic;
using System.Linq;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using Microsoft.Office.Interop.Excel;
namespace RevitExcelIntegration
{
[Transaction(TransactionMode.Manual)]
public class ExportToExcel : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
// Revitドキュメントを取得
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
try
{
// 電気設備要素を収集
var electricalElements = new FilteredElementCollector(doc)
.OfCategory(BuiltInCategory.OST_ElectricalFixtures)
.WhereElementIsNotElementType()
.ToList();
// Excelアプリケーションを起動
Application excelApp = new Application();
Workbook workbook = excelApp.Workbooks.Add();
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
// Excelにヘッダーを書き込み
worksheet.Cells[1, 1] = "要素ID";
worksheet.Cells[1, 2] = "名称";
worksheet.Cells[1, 3] = "タイプ";
worksheet.Cells[1, 4] = "数量";
worksheet.Cells[1, 5] = "備考";
// Revit要素をExcelに書き込み
int row = 2;
foreach (Element element in electricalElements)
{
worksheet.Cells[row, 1] = element.Id.IntegerValue;
worksheet.Cells[row, 2] = element.Name;
worksheet.Cells[row, 3] = doc.GetElement(element.GetTypeId()).Name;
worksheet.Cells[row, 4] = 1; // 数量(簡易的に1を設定)
worksheet.Cells[row, 5] = GetParametersAsString(element);
row++;
}
// 列の自動調整
worksheet.Columns.AutoFit();
// Excelを表示
excelApp.Visible = true;
// ユーザーに通知
TaskDialog.Show("成功", $"{electricalElements.Count} 個の電気設備要素をExcelにエクスポートしました。");
return Result.Succeeded;
}
catch (Exception ex)
{
message = ex.Message;
return Result.Failed;
}
}
// 要素のパラメータを文字列として取得
private string GetParametersAsString(Element element)
{
var parameters = new List();
foreach (Parameter param in element.Parameters)
{
if (param.HasValue && param.StorageType == StorageType.String)
{
parameters.Add($"{param.Definition.Name}: {param.AsString()}");
}
}
return string.Join(", ", parameters);
}
}
// アドイン登録用クラス
public class App : IExternalApplication
{
public Result OnStartup(UIControlledApplication application)
{
// リボンタブを作成
string tabName = "電気工事";
application.CreateRibbonTab(tabName);
// パネルを作成
RibbonPanel panel = application.CreateRibbonPanel(tabName, "積算");
// ボタンを作成
PushButtonData buttonData = new PushButtonData(
"ExportToExcel",
"Excelに出力",
System.Reflection.Assembly.GetExecutingAssembly().Location,
typeof(ExportToExcel).FullName);
PushButton button = panel.AddItem(buttonData) as PushButton;
button.ToolTip = "Revitの電気設備要素をExcelにエクスポートします";
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
}
}
## 機能拡張のアイデア 1. **双方向連携**:
- ExcelからRevitにデータをインポートする機能
- Excelで編集した数量や仕様をRevitに反映
2. **積算機能強化**:
- 単価データとの連携
- 自動計算機能
- 見積書テンプレートへの出力
3. **フィルタリング機能**:
- 特定の系統や階の要素のみを抽出
- 条件に基づいたフィルタリング
4. **レポート生成**:
- 材料リスト自動生成
- 施工図面への注記追加
## 注意点
1. Revit APIとExcel Interopの両方のライセンスが必要です
2. エラーハンドリングを強化する必要があります
3. 大規模なプロジェクトではパフォーマンスに注意が必要
4. ユーザーインターフェースを工夫すると使いやすくなります
このコードは基本的なフレームワークとして使用し、実際の業務要件に合わせて拡張してください。
コメント
コメントを投稿