首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过VBA宏实现catia v5导出树

通过VBA宏实现catia v5导出树
EN

Stack Overflow用户
提问于 2017-09-20 19:33:17
回答 3查看 5.1K关注 0票数 0

我需要导出Catia树作为BoM。

出口应:

  • 转到Excel并使用WalkDownTree函数。
  • 拥有PartNumber,命名和一个名为"Sinex“的用户添加属性。
  • 它还必须确保导出的树忽略称为“参考”的部件和产品。
  • 使用PartNumber表示每个项目的数量。
  • 包括失活部件,但请注意它们是失活的。

我对Catia和VBA很陌生,并提出了以下建议(我已经对其他宏进行了调整,但注意到它们忽略了树中的子宏)。当前,宏通过spec树中的所有部件和子部件生成Excel文件和相同的单元周期,不管它们是否已被停用。

代码语言:javascript
运行
复制
Sub CATMain()


' ********* is the current document a CATIA Product **************

    If CATIA.Documents.Count = 0 Then

        MsgBox "There are no CATIA documents open. Please open a CATIA document and try again.", ,msgboxtext

        Exit Sub
    End If


    If InStr(CATIA.ActiveDocument.Name, ".CATProduct") < 1 Then

        MsgBox "The active document is not a Product. Please open a CATIA Product and try again.", ,msgboxtext

         Exit Sub
    End If


' ************* General declarations for the Active CATIA session *****************

    Dim oProdDoc As ProductDocument
    t = 1
    Set oProdDoc = CATIA.ActiveDocument
    Dim oRootProd As Product
    Set oRootProd = oProdDoc.Product
    Dim par As Parameters
    Set par = oRootProd.UserRefProperties
    Dim SinexRef As String


' *************** begin spec tree scroll ******************

    Call WalkDownTree(oRootProd)
End Sub

Sub WalkDownTree(oInProduct As Product)
        Dim oInstances As Products
    Set oInstances = oInProduct.Products

    On Error Resume Next
    Set Excel = GetObject(, "EXCEL.Application")

    If Err.Number <> 0 Then
        Set Excel = CreateObject("EXCEL.Application")
        Excel.Visible = True
        Excel.Workbooks.Add 
    End If

    If t <> 1 Then
        for i=1 to oInProduct.Count


'**************************** Export title ***************************

            row=2

            col=1
            Excel.Columns.Columns(1).Columnwidth = 5

            Excel.Columns.Columns(2).Columnwidth = 15
            Excel.Cells(row,col+1).Value = "CATProduct:"

            Excel.Cells(row,col+1).Font.Bold = true

            Excel.Cells(row,col+1).HorizontalAlignment = 3
            Excel.Cells(row,col+2).Value = CATIA.ActiveDocument.Name

' **************************** Export column titles ***************

            row=4
            Excel.Cells(row,col+1).Value = "Instance Name"
            Excel.Cells(row,col+1).Font.Bold = true

            Excel.Columns.Columns(2).Columnwidth = 20

            Excel.Cells(row,col+1).borders.LineStyle = 1
            Excel.Cells(row,col+1).HorizontalAlignment = 3
            Excel.Cells(row+2,col+1).Value = oInProduct.ReferenceProduct.PartNumber

            Excel.Cells(row,col+2).Value = "Ref"

            Excel.Cells(row,col+2).Font.Bold = true

            Excel.Columns.Columns(3).Columnwidth = 15
            Excel.Cells(row,col+2).borders.LineStyle = 1

            Excel.Cells(row,col+2).HorizontalAlignment = 3
            Excel.Cells(row+2,col+2).Value = oInProduct.ReferenceProduct.Nomenclature

            Excel.Cells(row,col+3).Value = "Quantity"

            Excel.Cells(row,col+3).Font.Bold = true

            Excel.Columns.Columns(4).Columnwidth = 15
            Excel.Cells(row,col+3).borders.LineStyle = 1
            Excel.Cells(row,col+3).HorizontalAlignment = 3
            Excel.Cells(row+2,col+3).Value = 1 'insert item quantity corresponding to PartNumber

            Excel.Cells(row,col+4).Value = "SinexRef"

            Excel.Cells(row,col+4).Font.Bold = true

            Excel.Columns.Columns(5).Columnwidth = 15
            Excel.Cells(row,col+4).borders.LineStyle = 1

            Excel.Cells(row,col+4).HorizontalAlignment = 3
            Excel.Cells(row+2,col+4).Value = 1 'insert Sinex Ref corresponding to PartNumber

            t = t + 1
        Next
    End If

    Dim k As Integer
    For k = 1 To oInstances.Count
        Dim oInst As Product
        Set oInst = oInstances.Item(k)

        Call WalkDownTree(oInst)
    Next
End Sub
EN

回答 3

Stack Overflow用户

发布于 2017-09-20 20:19:36

假设

在相同的细胞周期中,通过规范树中的所有部分和子单元

您的意思是它在同一个单元格中写入/覆盖来自CATIA的数据,这是因为您没有增加有关Excel行/列的任何内容。

我个人会为诸如CATProduct、实例名称等创建标题,然后将纯数据放在下面,而不是每次重复这些相同的标题,但是您的格式也会工作,在Excel中总结数据可能会更困难。

无论如何,为了保持现有的格式,您需要在循环结束时,在t被递增的地方增加您的行。

在现有的循环中,第一个oInProduct似乎使用了2-6行(总计5行)。在循环的开头有一个行=2,它需要放在循环之前,这意味着它将从第二行开始。循环中还有一个行=4,需要修改,我们可以使用row = row +2来获得相同的效果。然后,在循环的末尾,我们再次增加到总数5,所以使用row = row + 3。

代码语言:javascript
运行
复制
row = 2

for i = 1 to oInProduct.Count

    '**************************** Export title ***************************

    col=1
    Excel.Columns.Columns(1).Columnwidth = 5

    ...
    row = row + 2 'previously row = 4
    ...

    Excel.Cells(row,col + 4).HorizontalAlignment = 3
    Excel.Cells(row + 2,col + 4).Value = 1 'insert Sinex Ref corresponding to PartNumber

    t = t + 1
    row = row + 3

Next
票数 0
EN

Stack Overflow用户

发布于 2019-01-18 20:15:04

尝试->分析->材料清单->定义格式(可选选项)->>保存为->文件格式为.xls

或者:->File-> Save -> Filetype:txt...Sure它是txt,但也许您可以转换为.xls (特别是如果您缺少许可证)

票数 0
EN

Stack Overflow用户

发布于 2020-01-14 15:02:01

我使用了Catia库中可用的AssemblyConverter对象来提取BOM.I,我在使用上述注释中提到的步骤记录宏时发现了这一点。

尝试->分析->材料清单->定义格式(可选选项)->>保存为->文件格式为.xls

我认为这是最简单和快捷的。此外,我们也可以改变文件的格式和位置。

录制的宏:

代码语言:javascript
运行
复制
Sub CATMain()

    Dim productDocument1 As ProductDocument
    Set productDocument1 = CATIA.ActiveDocument

    Dim product1 As Product
    Set product1 = productDocument1.Product

    Dim assemblyConvertor1 As AssemblyConvertor
    Set assemblyConvertor1 = product1.GetItem("BillOfMaterial")

    Dim arrayOfVariantOfBSTR1(4)
    arrayOfVariantOfBSTR1(0) = "Quantity"
    arrayOfVariantOfBSTR1(1) = "Part Number"
    arrayOfVariantOfBSTR1(2) = "Type"
    arrayOfVariantOfBSTR1(3) = "Nomenclature"
    arrayOfVariantOfBSTR1(4) = "Revision"
    Set assemblyConvertor1Variant = assemblyConvertor1
    assemblyConvertor1Variant.SetCurrentFormat arrayOfVariantOfBSTR1

    Dim arrayOfVariantOfBSTR2(1)
    arrayOfVariantOfBSTR2(0) = "Quantity"
    arrayOfVariantOfBSTR2(1) = "Part Number"
    Set assemblyConvertor1Variant = assemblyConvertor1
    assemblyConvertor1Variant.SetSecondaryFormat arrayOfVariantOfBSTR2

    assemblyConvertor1.[Print] "XLS", "C:\Users\Desktop\BOM.xls", product1

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46330409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档