只导出最底层的零件,零件的属性已经设置好,零件的截图生成后,放在零件的同一个文件夹下

用到了 xlsxwriter


# nx: threaded
# 导出BOM表
__version__ = "0.0.1"
__author__ = "unmht"
__blog__ = "https://www.cnblogs.com/unm001/"
from dataclasses import dataclass
from typing import Dict, List import os
import NXOpen
import NXOpen.BlockStyler
import NXOpen.UF
import xlsxwriter
import NXOpen.Assemblies
from support import msgError os.chdir(os.path.dirname(os.path.abspath(__file__))) def getImgPath(p: NXOpen.Part):
path = os.path.dirname(p.FullPath)
name = p.Name
return os.path.join(path, f"{name}.jpg") @dataclass
class itm:
p文件名称: str
p图号: str = ""
p名称: str = ""
p数量: int = 0
p材料: str = ""
p规格: str = ""
p备注: str = ""
p图片: str = "" @classmethod
def _props(cls):
return ["文件名称"] + [i[1:] for i in cls.__dict__ if not i.startswith("_")] def findallchild(
ss: NXOpen.Session,
ps: NXOpen.PartCollection,
rtcom: NXOpen.Assemblies.Component,
names: List[str],
items: Dict[str, itm],
):
coms = rtcom.GetChildren()
if len(coms) > 0:
for i in coms:
chcoms = i.GetChildren()
if len(chcoms) > 0:
findallchild(ss, ps, i, names, items)
else:
iname = i.Name
ipart = ps.FindObject(iname)
if iname not in names:
names.append(iname)
items[iname] = itm(iname)
items[iname].p数量 += 1
pic = getImgPath(ipart)
items[iname].p图片 = pic
try:
items[iname].p图号 = ipart.GetUserAttribute(
"图号", NXOpen.NXObjectAttributeType.String, -3
).StringValue
except:
pass
try:
items[iname].p名称 = ipart.GetUserAttribute(
"名称", NXOpen.NXObjectAttributeType.String, -3
).StringValue
except:
pass
try:
items[iname].p材料 = ipart.GetUserAttribute(
"材料", NXOpen.NXObjectAttributeType.String, -3
).StringValue
except:
pass
try:
items[iname].p规格 = ipart.GetUserAttribute(
"规格", NXOpen.NXObjectAttributeType.String, -3
).StringValue
except:
pass
try:
items[iname].p备注 = ipart.GetUserAttribute(
"备注", NXOpen.NXObjectAttributeType.String, -3
).StringValue
except:
pass def main(fpath):
try:
theSession = NXOpen.Session.GetSession()
work = theSession.Parts.Work
ps = theSession.Parts
com = work.ComponentAssembly.RootComponent
if com is not None:
names = []
items: Dict[str, itm] = {}
findallchild(theSession, ps, com, names, items)
# fpath = "d://bom.xlsx"
if os.path.exists(fpath):
os.remove(fpath)
f = xlsxwriter.Workbook(fpath)
ws1 = f.add_worksheet("bom")
tts = itm._props()
parm = {"x_scale": 0.05, "y_scale": 0.05}
for i in range(len(tts)):
ws1.write(0, i, tts[i])
for i in range(len(names)):
iname = names[i]
iitm = items[iname]
ws1.write(i + 1, 0, iitm.p文件名称)
ws1.write(i + 1, 1, iitm.p图号)
ws1.write(i + 1, 2, iitm.p名称)
ws1.write(i + 1, 3, iitm.p数量)
ws1.write(i + 1, 4, iitm.p材料)
ws1.write(i + 1, 5, iitm.p规格)
ws1.write(i + 1, 6, iitm.p备注)
if iitm.p图片 != "" and os.path.exists(iitm.p图片):
ws1.insert_image(i + 1, 7, iitm.p图片, parm)
f.close()
# info(f.filename)
except Exception as e:
msgError(e) if __name__ == "__main__":
xlsxPath = os.path.join(os.getcwd(), "bom.xlsx") main(xlsxPath) if os.path.exists(xlsxPath):
os.system(xlsxPath)

[UG 二次开发 python] 导出BOM表(包含图片)的更多相关文章

  1. AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

    AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...

  2. php导出word(可包含图片)

    为大家介绍一个 php 生成 导出word(可包含图片)的代码,有需要的朋友可以参考下. 之前介绍过php生成word的例子,只是不能包含图片与链接. 今天 为大家介绍一个 php 生成 导出word ...

  3. 【转】Jenkins 二次开发 - Python

    马克,备用: Jenkins 二次开发 https://testerhome.com/topics/14988?locale=zh-TW python-jenkins api 文档:https://p ...

  4. UG二次开发-CAM-获取修改路径参数

    项目中要获取路径参数,网上大多是C++的例子,而本项目是用C#写的,探索了下,记录下. 以获取某条路径的刀具号为例,其他参数依此类推. using System; using System.Colle ...

  5. 导出BOM表

    1.Report->Bill of Materials for Project 将Value拖上左上角的Grouped Columns 2.在Excel表中全选器件,右键设置"设置单元 ...

  6. NX二次开发-NXOPEN导出STEP Step214Creator *step214Creator1;

    没有什么可以看的,NXOPEN直接录制一下导出STEP就可以了.录制出来自己挑需要的代码拿过来改一下. NX9+VS2012 #include <NXOpen/Part.hxx> #inc ...

  7. 【NX二次开发】导出x_t、导入x_t例子,UF_PS_export_data、UF_PS_import_data

    获取blockUI 体收集器选择的体,导出x_t: std::vector<TaggedObject*>objects = bodySelect0->GetSelectedObjec ...

  8. 【UG二次开发】获取系统信息UF_ask_system_info

    获取系统信息可以使用这个函数UF_ask_system_info 下面是例子: 1 extern DllExport void ufsta(char *param, int *returnCode, ...

  9. UG二次开发-CAM-执行方式

    以C#开发为例,通常先用[操作记录]功能录制关键代码,得到一个.cs文件. (1)可以直接使用[播放操作记录]的方式执行该.cs文件. (2)可以建立一个C#的类库工程,将上述.cs文件加载进去,添加 ...

  10. NX二次开发 批量导出X_T(包括部件里的装配体)

    VS2019 NX1946 UF_initialize(); string filepath = strDir + "\\";//拼接路径 //获取图层过滤 PropertyLis ...

随机推荐

  1. VMware之系统复制

    目录 功能描述 复制centos7-1文件夹 载入复制的系统 设置配置 启动系统 修改网卡配置 刷新配置 测试上网 功能描述 复制已经安装好的centOs7.6 复制centos7-1文件夹 1.系统 ...

  2. Lua热更学习--使用toLua中的协程

    [6] C#访问调table类中的成员变量和函数 访问table中的变量和函数 lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和functi ...

  3. Java面试题:线程池内“闹情绪”的线程,怎么办?

    在Java中,线程池中工作线程出现异常的时候,默认会把异常往外抛,同时这个工作线程会因为异常而销毁,我们需要自己去处理对应的异常,异常处理的方法有几种: 在传递的任务中去处理异常,对于每个提交到线程池 ...

  4. C语言:如何删除在可视化网页中未可见的内容(网页txt)

    我这个代码仅仅限制于在chrome浏览器中下载china daliy的网页中实现删除可视化内容,因为每个网页的超链接或者文本主内容分布不一样,但是学会了删除一个网页类型的不可视化内容之后,修改其他网页 ...

  5. EasyUI框架Datagrid(数据表格)的实现,以及Datagrid的分页显示(详解)

    在前端页面中使用EasyUI框架时,通常会使用EasyUI自带的datagrid(数据表格)样式,下面我们对datagrid样式进行简单的介绍,并且会对datagrid的分页显示进行详细的介绍. Ea ...

  6. golang http client 长连接vs短连接基准测试

    package main import ( "io/ioutil" "net/http" "strings" "testing&q ...

  7. Android 13 - Media框架(28)- MediaCodec(三)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCo ...

  8. 机器学习策略篇:详解理解人的表现(Understanding human-level performance)

    理解人的表现 人类水平表现这个词在论文里经常随意使用,但现在告诉这个词更准确的定义,特别是使用人类水平表现这个词的定义,可以帮助推动机器学习项目的进展.还记得上个博客中,用过这个词"人类水平 ...

  9. js布尔类型

        <!-- 禁用 -->     <input type="text" disabled>       <!-- 只读 -->     & ...

  10. kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ producer 实战

    1.MQTT介绍 MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,设计用于连接低带宽.高延迟或不可靠网络的设备. MQTT 是基于发布 ...