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

用到了 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. 原生微信小程序

    new Date 跨平台兼容性问题 在 Andriod 使用 new Date("2018-05-30 00:00:00")木有问题,但是在ios 下面识别不出来.因为 IOS 下 ...

  2. AIRIOT物联网低代码平台如何配置MQTT驱动?

    MQTT驱动配置简介 MQTT全称为消息队列遥测传输(英语:Message Queuing Telemetry Transport),是ISO 标准(ISO/IEC PRF 20922)下基于发布 ( ...

  3. yum install --downloadonly

    yum install --downloadonly --downloaddir=[directory] [package] https://www.cnblogs.com/wangbaobao/p/ ...

  4. SpringMVC在处理Ajax请求后返回void导致前台Ajax回调函数不执行

    问题简述 在一次SpringMVC项目中,前台通过Ajax请求,准备修改数据库中的数据.因为Ajax请求只是让后台更改数据,所以Controller方法根本不需要返回给前台任何数据,所以我们将Cont ...

  5. WPF开发快速入门【3】WPF的基本特性(附加属性)

    概述 本文描述WPF的附加属性.对于使用MVVM框架的项目,附加属性是非常重要的一个特性. 在MVVM框架下,ViewModel的代码通过控件的依赖属性来控制控件的,例如: //ViewModel p ...

  6. ubuntu18.04最小化安装

    ubuntu 18.04虚拟机安装 镜像下载地址: https://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso 创建虚 ...

  7. docker部署php8.0 nginx1.18 mysql5.7 dnmp环境

    php8.0 nginx1.18 mysql5.7 #安装docker wget -O /etc/yum.repos.d/ali_docker-ce.repo https://mirrors.aliy ...

  8. 记一次 .NET某工业设计软件 崩溃分析

    一:背景 1. 讲故事 前些天有位朋友找到我,说他的软件在客户那边不知道什么原因崩掉了,从windows事件日志看崩溃在 clr 里,让我能否帮忙定位下,dump 也抓到了,既然dump有了,接下来就 ...

  9. 微信小程序设置swiper圆角在ios上失效

    今天在给轮播图添加圆角的时候,发现在安卓机上是有圆角的,但是在苹果手机上圆角却失效了,后来翻阅了文档发现这是个官方的bug 解决方法1 border-radius: 20rpx; /*再设置个tran ...

  10. js 实现简易时钟效果

    大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...