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

用到了 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. jeecg-boot中分页接口用自定义sql和list实现

    1.controller中 @ApiOperation(value="分析仪工作状态和报警-3列-分页", notes="分析仪工作状态和报警状态-分页") @ ...

  2. 暴力破解(Pikachu)

    暴力破解(Pikachu靶场) Burpsuite4种攻击类型 Sinper(狙击手): 可以理解为一个一个爆破,也就是字典只能设置一个,然后用字典替换选择的参数,爆破完一个参数后再爆破另一个参数. ...

  3. 密码学—RSA公钥算法Python程序

    RSA流程 选取两个素数p,q,保密p,q 计算出n = p×q ,公开n 计算φ(n)=(p-1)(q-1) ,保密φ(n) 选择一个数e ,e满足:e < φ(n) , gcd(e,φ(n) ...

  4. OpenAirInterface,开源的 4G EPS 实现

    目录 文章目录 目录 前文列表 OSA OpenAirInterface OAI 的仿真 物理信道仿真 系统级仿真 OAI 的 SDR LTE 参考文档 前文列表 <USRP B210 软件定义 ...

  5. mini-centos7 环境安装部署,各种踩坑。。。

    最小Linux系统,安装Java环境 想想就生气,去面试个运维,面试官让我上机装个centos7,还是个最小安装包连界面都没有,只有命令行模式,我都哭了,然后让把一些环境装一下,然后再部署个sprin ...

  6. Kubernetes:kubelet 源码分析之探针

    0. 前言 kubernetes 提供三种探针,配置探针(Liveness),就绪探针(Readiness)和启动(Startup)探针判断容器健康状态.其中,存活探针确定什么时候重启容器,就绪探针确 ...

  7. Uni-app极速入门(一) - 第一个小程序

    Uni-app 介绍 官网:https://www.dcloud.io/index.html uni-app是为js开发者提供的一个全端开发框架,可以开发一次编译为web.App.小程序(微信/阿里/ ...

  8. knife4j/swagger救援第一现场

    1.前方来报,测试环境springboot项目无法启动,现场如下: Error starting ApplicationContext. To display the auto-configurati ...

  9. CF914C

    problem & blog 数位 dp 模板题. 经过一次操作,可以把 \(n\) 变成一个小于 \(10^3\) 的数. 所以我们可以把所有小于 \(10^3\) 的数操作的次数全部处理出 ...

  10. windows server 2016 远程桌面连接,发生身份验证错误。 要求的函数不受支持

    远程桌面连接,发生身份验证错误. 要求的函数不受支持 客户端:WIN7 服务端:windows server 2016 在被远程的机器上-远程设置中-取消"仅允许运行使用网络级别身份验证的远 ...