当前位置: 首页 > news >正文

CAD属性图框值与Excel联动(CAD块属性导出Excel、excel更新CAD块属性)——CAD c#二次开发

CAD插件实现块属性值与excel的互动,效果如下:

加载dll插件(CAD 命令行输入netload ,运行xx即可导出Excel,运行xx1即可根据excel更新dwg块属性值。)

部分代码如下

  // 4. 开启事务更新CAD数据using (Transaction trans = doc.Database.TransactionManager.StartTransaction()){try{int updatedCount = 0; // 记录更新成功的块数// 5. 获取模型空间中的块参照(与导出时逻辑一致)BlockTableRecord modelSpace = trans.GetObject(doc.Database.CurrentSpaceId,OpenMode.ForRead) as BlockTableRecord;// 6. 遍历CAD中的块参照(按X坐标排序,与导出顺序一致)var cadBlocks = modelSpace.Cast<ObjectId>().Where(objId => objId.ObjectClass.Name == "AcDbBlockReference").Select(objId => trans.GetObject(objId, OpenMode.ForRead) as BlockReference).Where(blockRef => blockRef != null).OrderBy(b => b.Position.X) // 与导出排序一致,确保序号对应.ToList();// 7. 匹配Excel数据与CAD块参照(按序号匹配)for (int i = 0; i < excelData.Count; i++){ExcelBlockData excelBlock = excelData[i];if (i >= cadBlocks.Count) break; // Excel行数超过CAD块数时终止BlockReference cadBlock = cadBlocks[i];if (cadBlock == null) continue;// 8. 以写模式重新打开块参照(关键!否则无法修改属性)cadBlock = trans.GetObject(cadBlock.ObjectId, OpenMode.ForWrite) as BlockReference;if (cadBlock == null) continue;// 9. 获取块参照的属性字典(标签名 -> 属性对象)Dictionary<string, AttributeReference> cadAttrDict = GetBlockAttributes(cadBlock, trans);// 10. 遍历目标属性,更新不一致的值foreach (var kvp in excelBlock.AttributeValues){string tag = kvp.Key;string excelValue = kvp.Value;// 检查CAD中是否存在该属性if (cadAttrDict.TryGetValue(tag, out AttributeReference cadAttr)){// 以写模式重新打开属性(关键!否则无法修改值)cadAttr = trans.GetObject(cadAttr.ObjectId, OpenMode.ForWrite) as AttributeReference;if (cadAttr == null) continue;// 比较值(忽略空值或未修改的情况)if (!string.IsNullOrEmpty(excelValue) && cadAttr.TextString != excelValue){cadAttr.TextString = excelValue; // 更新属性值updatedCount++;}}}}trans.Commit(); // 提交事务ed.WriteMessage($"\n成功更新 {updatedCount} 个属性值!");}catch (Exception ex){trans.Abort();ed.WriteMessage($"\n更新失败: {ex.Message}");}}

插件联系↓↓↓

相关文章:

  • 【AI大模型学习路线】第一阶段之大模型开发基础——第五章(提示工程技术-2)Active-prompt。
  • JavaScript 数组去重:11 种方法对比与实战指南
  • 每天五分钟机器学习:KTT条件
  • QMK自定义4*4键盘固件创建教程:最新架构详解
  • HTTP 的发展史:从前端视角看网络协议的演进
  • Spring 必会之微服务篇(2)
  • Unity Shaders and Effets Cookbook
  • 汽车四缸汽油机曲柄连杆机构设计关键技术研究
  • 测试左移系列-产品经理实战-实战认知1
  • SpringCloud之Gateway基础认识-服务网关
  • 搜索与图论
  • 用java+vert.x开发的内网穿透工具jrp-nat
  • MySQL 从入门到精通(三):日志管理详解 —— 从排错到恢复的核心利器
  • 互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计
  • 进程间通信--管道【Linux操作系统】
  • Docker、Docker-compose、K8s、Docker swarm之间的区别
  • Linux基本指令(一)
  • LeetCode LCR 007. 三数之和 (Java)
  • 服饰行业的转型“助推器”来了
  • 基于强化学习 Q-learning 算法求解城市场景下无人机三维路径规划研究,提供完整MATLAB代码
  • 乘客被地铁厕所门砸伤,南京地铁:突然坏的,已和乘客沟通处理
  • 华泰柏瑞基金总经理韩勇因工作调整卸任,董事长贾波代为履职
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 中国证监会印发2025年度立法工作计划
  • 中方是否认同俄方关于新纳粹主义观点?外交部:联大曾多次通过相关决议
  • 上海发布预付卡消费“10点提示”:警惕“甩锅闭店”套路