[UG 二次开发 python] 导出BOM表(包含图片)
只导出最底层的零件,零件的属性已经设置好,零件的截图生成后,放在零件的同一个文件夹下
用到了 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表(包含图片)的更多相关文章
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- php导出word(可包含图片)
为大家介绍一个 php 生成 导出word(可包含图片)的代码,有需要的朋友可以参考下. 之前介绍过php生成word的例子,只是不能包含图片与链接. 今天 为大家介绍一个 php 生成 导出word ...
- 【转】Jenkins 二次开发 - Python
马克,备用: Jenkins 二次开发 https://testerhome.com/topics/14988?locale=zh-TW python-jenkins api 文档:https://p ...
- UG二次开发-CAM-获取修改路径参数
项目中要获取路径参数,网上大多是C++的例子,而本项目是用C#写的,探索了下,记录下. 以获取某条路径的刀具号为例,其他参数依此类推. using System; using System.Colle ...
- 导出BOM表
1.Report->Bill of Materials for Project 将Value拖上左上角的Grouped Columns 2.在Excel表中全选器件,右键设置"设置单元 ...
- NX二次开发-NXOPEN导出STEP Step214Creator *step214Creator1;
没有什么可以看的,NXOPEN直接录制一下导出STEP就可以了.录制出来自己挑需要的代码拿过来改一下. NX9+VS2012 #include <NXOpen/Part.hxx> #inc ...
- 【NX二次开发】导出x_t、导入x_t例子,UF_PS_export_data、UF_PS_import_data
获取blockUI 体收集器选择的体,导出x_t: std::vector<TaggedObject*>objects = bodySelect0->GetSelectedObjec ...
- 【UG二次开发】获取系统信息UF_ask_system_info
获取系统信息可以使用这个函数UF_ask_system_info 下面是例子: 1 extern DllExport void ufsta(char *param, int *returnCode, ...
- UG二次开发-CAM-执行方式
以C#开发为例,通常先用[操作记录]功能录制关键代码,得到一个.cs文件. (1)可以直接使用[播放操作记录]的方式执行该.cs文件. (2)可以建立一个C#的类库工程,将上述.cs文件加载进去,添加 ...
- NX二次开发 批量导出X_T(包括部件里的装配体)
VS2019 NX1946 UF_initialize(); string filepath = strDir + "\\";//拼接路径 //获取图层过滤 PropertyLis ...
随机推荐
- 原生微信小程序
new Date 跨平台兼容性问题 在 Andriod 使用 new Date("2018-05-30 00:00:00")木有问题,但是在ios 下面识别不出来.因为 IOS 下 ...
- AIRIOT物联网低代码平台如何配置MQTT驱动?
MQTT驱动配置简介 MQTT全称为消息队列遥测传输(英语:Message Queuing Telemetry Transport),是ISO 标准(ISO/IEC PRF 20922)下基于发布 ( ...
- yum install --downloadonly
yum install --downloadonly --downloaddir=[directory] [package] https://www.cnblogs.com/wangbaobao/p/ ...
- SpringMVC在处理Ajax请求后返回void导致前台Ajax回调函数不执行
问题简述 在一次SpringMVC项目中,前台通过Ajax请求,准备修改数据库中的数据.因为Ajax请求只是让后台更改数据,所以Controller方法根本不需要返回给前台任何数据,所以我们将Cont ...
- WPF开发快速入门【3】WPF的基本特性(附加属性)
概述 本文描述WPF的附加属性.对于使用MVVM框架的项目,附加属性是非常重要的一个特性. 在MVVM框架下,ViewModel的代码通过控件的依赖属性来控制控件的,例如: //ViewModel p ...
- ubuntu18.04最小化安装
ubuntu 18.04虚拟机安装 镜像下载地址: https://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso 创建虚 ...
- 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 ...
- 记一次 .NET某工业设计软件 崩溃分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的软件在客户那边不知道什么原因崩掉了,从windows事件日志看崩溃在 clr 里,让我能否帮忙定位下,dump 也抓到了,既然dump有了,接下来就 ...
- 微信小程序设置swiper圆角在ios上失效
今天在给轮播图添加圆角的时候,发现在安卓机上是有圆角的,但是在苹果手机上圆角却失效了,后来翻阅了文档发现这是个官方的bug 解决方法1 border-radius: 20rpx; /*再设置个tran ...
- js 实现简易时钟效果
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...