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

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}");}}

插件联系↓↓↓

http://www.xdnf.cn/news/5303.html

相关文章:

  • WPF中如何自定义控件
  • 【Oracle认证】MySQL 8.0 OCP 认证考试英文版(MySQL30 周年版)
  • #Redis黑马点评#(四)优惠券秒杀
  • Fabric系列 - SoftHSM 软件模拟HSM
  • 前端SSE技术详解:从入门到实战的完整指南
  • C++泛型编程(二):现代C++特性
  • 常见的降维算法
  • 采用SqlSugarClient创建数据库实例引发的异步调用问题
  • 【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用
  • MySQL的视图
  • AI 助力,轻松进行双语学术论文翻译!
  • C++GO语言微服务之gorm框架操作MySQL
  • uniapp使用ui.request 请求流式输出
  • LLaVA:开源多模态大语言模型深度解析
  • 物品识别 树莓派4 YOLO v11
  • 青少年编程与数学 02-019 Rust 编程基础 05课题、复合数据类型
  • 解锁 DevOps 新境界 :使用 Flux 进行 GitOps 现场演示 – 自动化您的 Kubernetes 部署
  • 大模型(LLMs)强化学习——RLHF及其变种
  • 基于强化学习 Q-learning 算法求解城市场景下无人机三维路径规划研究,提供完整MATLAB代码
  • linux测试硬盘读写速度
  • uniapp|实现商品分类与列表数据联动,左侧菜单右侧商品列表(瀑布流、高度自动计算、多端兼容)
  • 音频类网站或者资讯总结
  • 电子电器架构 --- 车载以太网拓扑
  • OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)详解
  • PyTorch 线性回归模型构建与神经网络基础要点解析
  • 数据结构精解:优先队列、哈希表与树结构
  • AI 入门资源:微软 AI-For-Beginners 项目指南
  • Kotlin 协程 vs RxJava vs 线程池:性能与场景对比
  • 【论文阅读】Efficient and secure federated learning against backdoor attacks
  • MySQL 索引(一)