REVIT二次开发,编程小白。在VS2015平台写了一个解决方案,目录树如下,这个项目是要实现读取本地EXCEL中的两列数据,作为共享参数导入到REVIT 打开的RFA模型(ImportInstance)。所有代码如下,但好像没有实现我的需求。求大佬赐教。
Connector.cs的代码如下:
namespace BIM
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class Connector : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Document doc = uiDoc.Document;
//显示WPF窗口
//ShowWpfWindow(uiApp);
MainWindow wpf=new MainWindow(uiApp);
wpf.ShowDialog();
return Result.Succeeded;
}
public void CreateSharedParameter(Document doc)
{
//初始化Exel数据读取器数据并读取数据
var excelDataReader = new ExcelDataReader();
var excelData = excelDataReader.ReadExcelData(@"C:\New folder\BIM_UPDATE.xlsx");
// 导入共享参数到 Revit
ImportSharedParameter importParam = new ImportSharedParameter(doc);
importParam.ImportParametersFromExcel(excelData);
MessageBox.Show("共享参数创建成功!");
}
public class ImportSharedParameter
{
private Document doc;
private DefinitionFile sharedParameterFile;
// 构造方法,传入当前 Revit 文档
public ImportSharedParameter(Document document)
{
doc = document;
sharedParameterFile = doc.Application.OpenSharedParameterFile();
}
//从Excel数据中导入参数到Revit
public void ImportParametersFromExcel(Dictionary<string, string> parameterData)
{
foreach (var item in parameterData)
{
CreateSharedParameter(item.Key, item.Value);
}
}
//创建共享参数
private void CreateSharedParameter(string parammeterName, string parameterValue)
{
ExternalDefinitionCreationOptions options = new ExternalDefinitionCreationOptions(parammeterName, ParameterType.Text);
DefinitionGroup definitionGroup = GetOrCreateParameterGroup("My Parameter Group");
}
// 获取或创建参数组
private DefinitionGroup GetOrCreateParameterGroup(string groupName)
{
DefinitionGroups definitionGroups = sharedParameterFile.Groups;
DefinitionGroup definitionGroup = definitionGroups.get_Item(groupName);
if (definitionGroup == null)
{
using (Transaction transaction = new Transaction(doc, "Create Parameter Group"))
{
transaction.Start();
definitionGroup = definitionGroups.Create(groupName);
transaction.Commit();
}
}
return definitionGroup;
}
}
ExcelDataReader代码如下:
class ExcelDataReader
{
public Dictionary<string, string> ReadExcelData(string filePath)
{
//创建一个字典来存储第二列和第三列的对应关系
var columnData = new Dictionary<string, string>();
// 创建一个ExcelPackage对象,加载工作簿
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
//获取第一个工作表(索引从0开始)
ExcelWorksheet workSheet = package.Workbook.Worksheets[0];
//假设第一行是标题,所以从第二行开始读取
for (int row = 2; row <= workSheet.Dimension.End.Row; row++)
{
//读取第二例和第三列的数据
string columnVaule2 = workSheet.Cells[row, 2].Value?.ToString();
string columnVaule3 = workSheet.Cells[row, 3].Value?.ToString();
//如果两列都有值,则添加到字典中
if (!string.IsNullOrEmpty(columnVaule2) && !string.IsNullOrEmpty(columnVaule3))
{
columnData.Add(columnVaule2, columnVaule3);
}
}
}
return columnData;
}
}
}
MainWindow.xaml.cs代码如下:
namespace BIM
{
//[Transaction(TransactionMode.Manual)]
public partial class MainWindow : Window
{
//private ExternalCommandData _commandData;
private UIApplication uiApp;
private Document doc;
public MainWindow(UIApplication uiApplication)
{
InitializeComponent();
uiApp = uiApplication;
doc = uiApp.ActiveUIDocument.Document;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Connector connector = new Connector();
connector.CreateSharedParameter(doc);
MessageBox.Show("共享参数创建和绑定成功!");
}
}
}