Files
ShrlAlgoToolkit/RvAddinTest/ReplaceCode.cs

114 lines
2.9 KiB
C#
Raw Normal View History

2024-09-22 11:05:41 +08:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using EPPlus.Core.Extensions;
using Nice3point.Revit.Toolkit.External;
using OfficeOpenXml;
namespace RvAddinTest;
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
internal class ReplaceCode : ExternalCommand
{
public override void Execute()
{
}
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<CodeItem>(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;
}
}