python二次开发CATIA:导出Excel格式BOM

news/2024/7/21 5:51:03 标签: python, excel

BOM是英文Bill of Material的缩写,中文翻译为“物料清单”,也称为产品结构表或产品结构树。它是计算机可以识别的产品结构数据文件,也是ERP的主导文件。BOM使系统识别产品结构,也是联系与沟通企业各项业务的纽带。ERP系统中的BOM的种类主要包括5类:缩排式BOM、汇总的BOM、反查用BOM、成本BOM、计划BOM。采用计算机辅助企业生产管理,首先要使计算机能够读出企业所制造的产品构成和所有要涉及的物料,为了便于计算机识别,必须把用图示表达的产品结构转化成某种数据格式,这种以数据格式来描述产品结构的文件就是物料清单,即是BOM。在某些工业领域,可能称为“配方”、“要素表”或其它名称。

当前打开一个Part文件,其树结构如下:

python">import win32com.client
import pywintypes  # 导入pywintypes模块
# 启动CATIA应用
catia = win32com.client.Dispatch('CATIA.Application')
catia.visible=1
# 连接excel,同catia
excel=win32com.client.Dispatch('excel.application')
excel.visible=True
try:
    # 新建一个工作簿,此处add方法不能加括号,a小写
    book = excel.workbooks.add
    # 获取第一个工作表
    sheet = book.sheets(1)
    # 重命名工作表
    sheet.name = 'BOM'

    # 初始化表头
    sheet.cells(1, 1).value = '序号'
    sheet.cells(1, 2).value = '层级'
    sheet.cells(1, 3).value = '零件号'
    sheet.cells(1, 4).value = '数量'
    sheet.cells(1, 5).value = '实例名'


    # 函数,计算数量
    def calcnum(prd):
        num = 0
        for pr in prd.parent:
            if pr.partnumber == prd.partnumber:
                num += 1
        return num


    # 函数,读取节点的信息
    def readinfo(prd):
        global row
        pn = prd.partnumber
        instname = prd.name
        num = (level == 0) and 1 or calcnum(prd)

        # 将信息写到Excel中
        sheet.cells(row, 1).value = row - 1
        sheet.cells(row, 2).value = level
        sheet.cells(row, 3).value = pn
        sheet.cells(row, 4).value = num
        sheet.cells(row, 5).value = instname

        row += 1


    # 定义遍历函数
    def myloop(prds):
        global level
        # 开始遍历
        level += 1
        current_pns[level] = []
        for prd in prds:
            # 多个实例仅读取一次
            if not prd.partnumber in current_pns[level]:
                # 读取一级子节点信息
                readinfo(prd)
                current_pns[level].append(prd.partnumber)

            # 如果有二级子节点,递归调用自身
            if len(prd.products) > 0:
                myloop(prd.products)
        current_pns[level].clear()
        level -= 1


    # 初始化对象
    rootprd = catia.activedocument.product
    current_pns = {}
    row = 2
    level = 0

    # 写入根节点信息
    readinfo(rootprd)
    # 递归调用根节点的products
    myloop(rootprd.products)
except pywintypes.com_error as e:
    # 如果出现错误,可能是因为没有活动文档
    print("无法获取活动文档,请确保CATIA应用程序中已有打开的文档。")
    print(e)

Excel格式BOM如下:


http://www.niftyadmin.cn/n/5065852.html

相关文章

想要精通算法和SQL的成长之路 - 二叉树的判断问题(子树判断 | 对称性 | 一致性判断)

想要精通算法和SQL的成长之路 - 二叉树的判断问题 前言一. 相同的树二. 对称二叉树三. 判断子树 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相同的树 原题链接 这题目典型的递归题: 如果两个节点都是null,我们返回true。如果两个节点一个nul…

FireDAC 同一个查询语句中有join, 同时更新多个数据表设置

dfdquery.sql.text : select a.*, b.* from a left join b on a.id b.id fdqery.cacheupdate : true; //这样可更方便回退多表错误 fdquery.updateoptions.updatenobasefields : true; //副表字段可以编辑 fdquery.updateobject : TFdUpdateSqL; 或者fdquery.onupdaterec…

Matlab论文插图绘制模板第117期—气泡云图

之前的文章中,分享了Matlab气泡图的绘制模板: 进一步,分享一种特殊的气泡图:气泡云图,先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有…

[LMKD] [Android] 进程OomAdj调整分析:OomAdj状态简要(1)

一. 什么是OomAdj oomAdj是Android系统中的一个进程内存管理参数,它决定了系统在内存不足时回收进程的顺序。oomAdj的值越小,说明该进程越重要,越不容易被系统回收。Android系统会根据进程的oomAdj值来决定哪些进程应该被回收,以…

WordPress批量给没有图片的文章自动添加图片配图

每次写文章配图巨麻烦,特别是有些人批量采集文章,不可能一个个去配图,那么有没有什么方法能批量给WordPress没有图片的文章自动添加图片,并且还要自动识别该文章有没有图片,如果没有图片才自动配图,如果有图…

【3】c++设计模式——>UML表示类之间的关联关系

关联关系 关联(Assocition)关系是类与类之间最常见的一种关系,它是一种结构化的关系,表示一个对象与另一个对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。在UML类图中,用(带接头或不…

【Unity2022】Unity实现在两个物体之间连出一条线

文章目录 Line Renderer组件添加Line Renderer组件重要属性Positions(位置)Width (宽度)Material(材质)其他属性 使用脚本绘制直线绳子运行结果其他文章 Line Renderer组件 我们可以使用LineRenderer组件来…

python二次开发CATIA:根据已知数据点创建曲线

已知数据点存于Coords.txt文件如下: 8.67155477658819,20.4471021292557,0 41.2016126836927,20.4471021292557,0 15.9568941320569,-2.93388599177698,0 42.2181532110364,-6.15301746150354,0 43.0652906622083,-26.4843096139083,0 -31.6617679595947,-131.1513…