using System.IO; using System.Reflection; using System.Text; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using EPPlus.Core.Extensions; using Nice3point.Revit.Toolkit.External; using OfficeOpenXml; namespace ShrlAlgo.Addin.Test; [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] internal class ReplaceCode : ExternalCommand { public override void Execute() { var ids = UiDocument.Selection.GetElementIds(); List li = new List(); foreach (var id in ids) { var elem = Document.GetElement(id); var param = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER).AsString(); if (string.IsNullOrEmpty(param)) { li.Add(elem.Id); } } UiDocument.Selection.SetElementIds(li); } private void ReadExcel(string path) { FileInfo fi = new(path); using ExcelPackage package = new(fi); var worksheet = package.Workbook.Worksheets[1]; ////获取worksheet的行数 //int rows = worksheet .Dimension.End.Row; ////获取worksheet的列数 //int cols = worksheet .Dimension.End.Column; //worksheet.TrimLastEmptyRows(); AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve; try { var items = package.ToList(1, configuration => configuration.SkipCastingErrors()); var elems = new FilteredElementCollector(Document) .OfCategory(BuiltInCategory.OST_SecurityDevices) .WhereElementIsNotElementType(); StringBuilder sb = new(); using var trans = new Transaction(Document, "读取Excel"); trans.Start(); foreach (var elem in elems) { foreach (var item in items) { var param = elem.GetParameters("ID-100-编号").FirstOrDefault(); if (param?.HasValue != true) { sb.AppendLine(elem.Id.ToString()); } var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER); if (param.AsString() == item.Origin) { param1.Set($"{item.Target}"); } } } trans.Commit(); if (sb.Length > 0) { System.Windows.MessageBox.Show(sb.ToString()); } //foreach (ParamterModel eamFacility in Items) { } //var groups = Facilities .GroupBy(x => x.Story); //foreach (var group in groups) //{ // if (group .Key == null) // { // continue; // } // StoryCodeMappers .Add(new() { Story = group.Key, }); //} //IsMapper = false; //IsComparison = false; //Instances .ForEach(ins => ins.IsMapped = false); } catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException) { System.Windows.MessageBox.Show("列名不存在或不匹配或检查表头是否存在换行。"); } finally { AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomainOnAssemblyResolve; } } private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args) { if (!args.Name.Contains("ComponentModel.Annotations")) { return null; } var assemblyFile = Path.Combine( Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "System.ComponentModel.Annotations.dll" ); return File.Exists(assemblyFile) ? Assembly.LoadFrom(assemblyFile) : null; } }