ZPD 装配表提取 · I

从LK系统标准格式的Excel装配表中读取构件信息,自动区分"需建模"和"不建模"两类数据
📂 LK → Util 📄 LK_ExcelAssembly.cs 🔘 按钮触发 📊 Excel解析

📖 功能概述

该组件基于 EPPlus 5.3.1 库读取LK系统标准格式的Excel装配工作簿(仅支持 .xlsx 格式),从中提取构件配置信息。 读取后根据表格中"是否建模"标记将数据分为两类:

组件采用流式文件读取模式,避免文件被操作系统锁定;包含引号兼容处理(兼容Grasshopper文件路径输出格式)。

📥 输入参数

名称类型必填说明
读取 Boolean 可选 触发信号。设为 True 执行Excel读取操作。也可使用组件内置按钮代替。默认为 False。
路径 FilePath 必填 Excel文件的完整路径,必须包含 .xlsx 拓展名。接受被双引号包裹的路径(兼容Grasshopper输出格式)。路径空格可正常处理。

📤 输出参数

名称类型说明
名称 Text 标记为"需建模"的构件的名称列表(读取自第2列)。列表
信息列表 Text 建模需要的信息列表(第1-14列数据),对应需要建模的项目,每行为一个构件的完整数据。以逗号分隔。列表
其他信息 Text 标记为"不建模"的项目的完整行数据(第1-14列),每行为一个项目。列表

🧠 核心算法详解

一、Excel表格格式约定

适用的Excel表格格式:

列号内容说明
A(第1列)序号必须为连续的 1, 2, 3...
B(第2列)构件名称输出到"名称"参数
C~N(第3-14列)建模参数建模所需的自定义参数
O(第15列)是否建模0 = 不建模(归入其他信息),非0 = 需建模

数据起始行:第7行(包含列标题或直接数据,代码从第7行开始读取)
数据终止行:自动检测最后非空行,最大支持到第300行

二、读取与解析流程

组件内置了一套完整的Excel解析引擎(ReadFromExcel 方法),处理流程如下:

Step 1 —— 文件流打开
使用 FileStream 以只读+共享模式打开文件,确保:
  • 文件在操作期间不会被其他进程锁定
  • 其他程序(如Excel)可以正常访问该文件

Step 2 —— 工作表定位
通过 GetWorksheet 方法定位工作表:
 先按工作表名称查找(不区分大小写)
 如果名称查找失败,再按索引查找
 如果均失败,默认使用第一个工作表
Step 3 —— 数据区域检测
GetExactDataRange 方法自动计算有效数据范围:
 起始行:固定为第7行
 终止行:从第300行开始从下往上搜索第2列非空行
 列范围:固定第1列到第14列(A~N)
Step 4 —— 分区读取
读取以下几个数据区域:
全数据区(第7行~终止行,第1~14列)→ 每行拼接为逗号分隔字符串
序号区(第7行~终止行,第1列)→ 校验序号是否连续递增
名称区(第7行~终止行,第2列)→ 用于输出建模项目的名称
是否建模区(第7行~终止行,第15列)→ 判断 0=不建模,非0=建模
Step 5 —— 数据校验
 检查四个读取区域的行数是否一致,不一致则报错"表格项没有一一对应"
 检查序号列是否从1开始的连续自然数,否则报错"表格序号列存在错误"
Step 6 —— 数据分流
遍历每一行:
 如果第15列 == "0" → 整行数据归入"其他信息"(不建模)
 如果第15列 ≠ "0" → 第2列值归入"名称",第1-4列值归入"信息列表"(建模)

⚙️ 完整执行流程

1. 输入获取:从DA获取触发布尔、文件路径。

2. 路径预处理:如果路径首尾为双引号,自动去除。检查文件是否存在,不存在则报错。

3. 触发判断:只有当布尔输入为 True 或内置按钮被按下时才执行读取操作。注意:每次触发都会重新读取,而非缓存上一次的结果。

4. Excel读取:调用 ReadFromExcel 方法,使用EPPlus通过文件流打开工作簿,执行上述解析流程。

5. 数据输出:分别输出名称列表、信息列表、其他信息列表到三个输出参数。

6. 错误处理:如果读取过程中抛出异常(文件损坏、格式不正确等),捕获异常并以运行时错误提示输出具体错误信息。

🧪 典型使用场景

场景详细说明
装配表信息读取 将LK系统标准格式的装配Excel表格(.xlsx)作为数据源输入,自动解析哪些构件需要建模、哪些不需要。将建模信息传递给后续的组件生成模型。
建模/非建模分流 同一份Excel表格中既包含待建模的构件,也包含仅用于参考或表皮的非建模项目。该组件自动分流,建模信息输出到前两个参数,非建模信息输出到第三个参数。
数据校验 在正式建模前运行该组件查看是否能正确解析表格。如果表格格式有问题(序号不连续、行列不匹配),组件会给出明确的错误提示,方便排查数据问题。

⚠️ 注意事项

📋 组件信息

名称装配表提取
英文名I
分类LK → Util
Exposuresecondary(二级显示)
显示文本Action(按钮文本)
基类BoolButtonComponent
文件LK_ExcelAssembly.cs
GUID{E625195E-FDA3-48CC-A3F1-349E8EB71354}