TeklaHome

论坛首页 论坛版块 工具资料 工具插件

搜索

求助:在tekla中通过导入Excel构件清单高亮显示清单构件的插件

发表在 第三方开发2025-7-22 08:35 [复制链接] 1 1016




登录后查看完整内容

您需要 登录 才可以下载或查看,没有账号?立即注册

x
场景:根据tekla已有模型生成构件清单,加工图等,工厂加工完运至现场,需要对构件进行卸车及安装;需要将已到构件和已安装构件通过不同颜色显示到特克拉模型中,传统在筛选框中一个个输入构件编号效率太低,无法实现批量操作。

求助:能否开发个插件,可以在tekla中一键导入Excel构件清单,根据清单编号自动选中相应构件?
另:之前根据tekla open api,利用C#语言在vs里做了个小程序,但是无法运行,有没有大神帮看看程序的问题,帮解决下,程序附下:

using OfficeOpenXml;
使用系统;
使用 System.Collections.Generic;
使用 System.IO;
使用 System.Reflection;
使用 System.Windows.Forms;
使用 Tekla.Structures.Model;

命名空间 TeklaExcelHighlighter
{
public class MainForm : Form
{
private Button btnSelectExcel;
private TextBox txtFilePath;
private Button btnHighlight;
private ProgressBar progressBar1;
private Label lblStatus;

public mainForm()
{
初始化组件();


private void InitializeComponents()
{
// 窗体设置
this.text = “Tekla构件高亮工具 v1.0”;
这。宽度 = 500;
这。高度 = 200;
这。FormBorderStyle = FormBorderStyle.FixedDialog;
这。最大化框 = false;

// 控件初始化
txtFilePath = new TextBox
{
Width = 300,
Location = new System.Drawing.Point(10, 20),
ReadOnly = true
};

btnSelectExcel = new button
{
text = “选择Excel文件”,
location = new System.Drawing.Point(320, 18),
width = 120
};
btnSelectExcel.单击 += BtnSelectExcel_Click;

btnHighlight = new Button
{
text = “高亮显示构件”,
location = new System.Drawing.Point(150, 60),
width = 150,
enabled = false
};
btnHighlight.单击 += BtnHighlight_Click;

progressBar1 = new ProgressBar
{
location = new System.Drawing.Point(50, 100),
Width = 350,
Style = ProgressBarStyle.Continuous
};

lblStatus = new Label
{
location = new System.Drawing.Point(50, 130),
width = 350
};

// 添加控件到窗体
this.Controls.Add(txtFilePath);
这。Controls.Add(btnSelectExcel);
这。Controls.Add(btnHighlight);
这。Controls.Add(progressBar1);
这。Controls.Add(lbl状态);
}

private void BtnSelectExcel_Click(object sender, EventArgs e)
{
var openFileDialog = new OpenFileDialog
{
filter = “Excel文件|*.xlsx;*.xls”,
title = “选择包含构件清单的Excel文件”
};

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtFilePath.Text = openFileDialog.FileName;
btnHighlight.Enabled = true;
lblStatus.Text = “已选择文件: ” + Path.GetFileName(openFileDialog.FileName);
}
}

private void BtnHighlight_Click(object sender, EventArgs e)
{
try
{
// 读取Excel文件
List<string> componentIds = ReadExcelComponentIds(txtFilePath.Text);
if (componentIds.Count == 0)
{
MessageBox.Show(“Excel文件中未找到有效的构件编号!”, “警告”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

// 连接Tekla模型
var model = new Model();
if (!model.GetConnectionStatus())
{
MessageBox.Show(“无法连接到Tekla模型!请确保Tekla正在运行。“, ”错误“, MessageBoxButtons.OK, MessageBoxIcon.Error);
返回;
}

lblStatus.Text = $“正在处理 {componentIds.Count} 个构件...”;
progressBar1.Maximum = componentIds.Count;
progressBar1.值 = 0;

// 高亮构件
int highlightedCount = 0;
var 选择器 = new TSM。用户界面。ModelObjectSelector() 的 ModelObjectSelector() 中。GetSelectedObjects();

foreach (TSM.选择器中的 ModelObject 组件)
{
if (component is TSM.part part & componentIds.Contains(part.Identifier.ID.ToString()))
{
部分。SetColor(新 Tekla.Structures.Model.Color(1, 0, 0));红色高亮
highlightedCount++;
}
progressBar1.Value++;
}

模型。提交更改();提交修改到模型

lblStatus.Text = $“已完成!共高亮了 {highlightedCount}/{componentIds.Count} 个构件”;
MessageBox.Show($“作完成!\n成功高亮 {highlightedCount} 个构件\n未找到 {componentIds.Count - highlightedCount} 个构件”,
“完成”, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (异常 ex)
{
MessageBox.Show($“发生错误: {ex.Message}“, ”错误“, MessageBoxButtons.OK, MessageBoxIcon.Error);
lblStatus.Text = “作失败”;
}
最后
{
progressBar1.Value = 0;

}

private List<string> ReadExcelComponentIds(string excelPath)
{
var componentIds = new List<string>();
try
{
using (var package = new ExcelPackage(new FileInfo(excelPath)))
{
var worksheet = package.Workbook.Worksheets[0];
int rowCount = 工作表。尺寸?。End.Row ??0;

for (int row = 2; row <= rowCount; row++) // 假设第一行为标题行
{
var cellValue = worksheet.单元格[行,1]。发短信?。修剪();
if (!string.IsNullOrEmpty(cellValue))
{
componentIds.Add(cellValue);
}
}
}
}
catch (Exception ex)
{
throw new Exception($“读取Excel文件失败: {ex.消息}“);
}
返回 componentIds;
}
}

public class PluginMain
{
[STAThread]
public static void Main()
{
// 在Tekla环境中启动窗体
var form = new MainForm();
form.StartPosition = FormStartPosition.CenterScreen;
Application.Run(表单);
        }
    }
}

扫一扫,手机阅读

使用道具 举报 只看该作者 回复
最新评论 | 正序浏览
只看楼主|楼层直达:
  发表于 2026-4-21 12:43:04 | 显示全部楼层
你好,我现在也遇到了和你同样的问题,请问你找到那种插件了吗,每次钢构到现场后,我们都要用构件清单找半天,还要分货。效率很低,方便沟通一下吗,分享一下你说的那种插件 WX13062323141
使用道具 举报 回复 支持 反对
本版积分规则

快速发帖

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

关注 发消息

a0307220206

青铜用户

  • 主题 1
  • 帖子 0
  • 积分
推荐

作者的其他主题

    抖音

    抖音扫一扫

    微信

    微信扫一扫

    公众号

    微信扫一扫

    QQ

    QQ扫一扫

    返回顶部

    精简版|小黑屋|TeklaHome

    GMT+8, 2026-6-2 07:43 , Processed in 0.090109 second(s), 32 queries .

    Powered by Discuz! X3.5

    © 2016-2025 TeklaHOME.com