Excel-Montagestückliste

Hallo

Ich weiß, dass dieses Thema schon viele Male diskutiert wurde und dass es sicherlich fertige Anwendungen gibt.

Ich möchte eine Excel-Stückliste erstellen, die sich automatisch aktualisiert, wenn sie geöffnet wird, ohne dass die Baugruppe geöffnet wird, um sie in eine Projektmanagement-Tabelle zu integrieren.

Vielen Dank im Voraus für Ihre Antworten

Hallo 

Wenn Sie Zugriff auf die mycad-Tools haben, können Sie Smartbom verwenden.

Wenn Sie EPDM haben, können Sie auch  eine Stückliste extrahieren. 

Herzliche Grüße 

3 „Gefällt mir“

Hallo

Andernfalls, wenn Sie sich mit "Makros / Programmierung" auskennen, ist es möglich, es maßgeschneidert zu machen, indem Sie sich auf die Solidworks APIs verlassen ...

Herzliche Grüße

Hallo D.Roger

Ihrer Meinung nach ist es möglich, eine Stückliste mit geschlossenem Solidworks zu extrahieren.

Wie würden Sie vorgehen?

Indem Sie ein Makro in Excel durchgehen?

Haben Sie zum Beispiel schon ein bisschen Makro? Vielen Dank

Yannick.

Hallo D.Roger,

Ich habe keinen Entwurf und nur begrenzte Kenntnisse in Makro

Es ist eher ein Makro in Excel .

Ich versuche, verschiedene Makros zu sammeln, die hier und da abgerufen wurden.

Herzliche Grüße

@Yannick:
Es ist möglich, dies zu tun, wenn Solidworks mit "SolidWorks.Interop.swdocumentmgr.dll" geschlossen ist (oder sogar mit Solidworks, das nicht mit "swdocumentmgr.dll" installiert ist)
Verwenden Sie die GetComponents-Funktion  , um die Stückliste abzurufen.

Auf der anderen Seite, da der Dokumentenmanager nur noch in x64 funktioniert, müssten wir ein externes Modul für Excel erstellen. Und rufen Sie es aus einem Excel-Makro mit dem Befehl "Call Shell()" auf. Oder Sie verfügen über eine Anwendung, die die Stückliste direkt in eine Excel-Datei schreibt.

Hier ist ein Entwurf, der die Stückliste in dasselbe Verzeichnis wie die Assembly schreibt: (Kopieren Sie den Code in eine neue VB.NET Konsolenanwendung , oder verwenden Sie die angefügte Datei.)

Hinweis: Eine Lizenznummer für den Dokumentenmanager ist erforderlich. Sehen Sie sich diesen Link an, um es zu erhalten

Imports System.IO
Imports SwDocumentMgr
'Imports SolidWorks.Interop.swdocumentmgr'

Module Module1
    Private swDocMgr As SwDMApplication
    Private Bom As New Dictionary(Of String, Integer)
    Private TsvPath As String
    Sub Main()
        Dim LicenseFile As String = Path.Combine(My.Application.Info.DirectoryPath, "LicenseKey.txt")
        Dim Lines As List(Of String) = File.ReadAllLines(LicenseFile).ToList
        Dim LicenseKey As String = Lines(0)
        If LicenseKey.Length < 50 Then
            Console.Write("Entrer le numéro de license document manager dans ce fichier TXT")
            Process.Start(LicenseFile)
            Console.ReadLine()
            System.Environment.Exit(-1)
        End If

        Dim Args As List(Of String) = System.Environment.GetCommandLineArgs.ToList
        Dim AssyPath As String
        If Args.Count = 2 Then
            AssyPath = Args(1)
        Else
            Console.Write("Entrer le chemin de l'assemblage: ")
            AssyPath = Console.ReadLine()
        End If

        Dim swCf As New SwDMClassFactory()
        swDocMgr = swCf.GetApplication(Lines(0))

        GetComps(AssyPath)

        TsvPath = AssyPath.Replace(".SLDASM", ".TSV")
        If File.Exists(TsvPath) Then File.Delete(TsvPath)
        WriteLine("PN" & vbTab & "QT.")
        For Each item In Bom.Keys
            WriteLine(item & vbTab & Bom(item))
        Next
    End Sub

    Private Sub GetComps(ByVal FilePath As String)
        Dim DocType As SwDmDocumentType = SwDmDocumentType.swDmDocumentAssembly
        Select Case Path.GetExtension(FilePath).ToLower
            Case ".sldprt"
                DocType = SwDmDocumentType.swDmDocumentPart
            Case ".sldasm"
                DocType = SwDmDocumentType.swDmDocumentAssembly
            Case ".slddrw"
                DocType = SwDmDocumentType.swDmDocumentDrawing
        End Select

        Dim res As Long
        Dim swDoc As SwDMDocument13
        swDoc = swDocMgr.GetDocument(FilePath, DocType, True, res)

        Dim swConfig As SwDMConfiguration12
        Dim swConfigMgr As SwDMConfigurationMgr = swDoc.ConfigurationManager
        swConfig = swConfigMgr.GetConfigurationByName(swConfigMgr.GetActiveConfigurationName())
        Dim comps As Object = swConfig.GetComponents()
        Dim arrComps As Array = comps

        If arrComps IsNot Nothing AndAlso arrComps.Length > 0 Then
            For Each swComp As SwDMComponent9 In arrComps

                If swComp.ExcludeFromBOM = swDmExcludeFromBOMResult.swDmExcludeFromBOM_TRUE _
                    OrElse swComp.IsSuppressed Then
                    Continue For
                End If

                If swComp.DocumentType = SwDmDocumentType.swDmDocumentAssembly Then
                    GetComps(swComp.PathName)
                Else
                    Dim FileName As String = Path.GetFileNameWithoutExtension(swComp.PathName)
                    If Not Bom.ContainsKey(FileName) Then
                        Bom.Add(FileName, 1)
                    Else
                        Bom(FileName) += 1
                    End If
                End If
            Next
        End If
        swDoc.CloseDoc()
    End Sub

    Private Sub WriteLine(ByVal line As String)
        Dim swt As StreamWriter
        If Not File.Exists(TsvPath) Then
            swt = File.CreateText(TsvPath)
        Else
            swt = File.AppendText(TsvPath)
        End If
        swt.WriteLine(line)
        swt.Flush()
        swt.Close()
    End Sub
End Module

 


bomtoxls.zip
1 „Gefällt mir“

Hallo

@yannick.petit :

- Auf die Frage "Ihrer Meinung nach ist es möglich, eine Stückliste mit geschlossenem Solidworks zu extrahieren.": Alles wird von JeromeP gesagt, mit dem Bonus des Beispiels, das gut läuft.

- Auf die Frage "Wie würden Sie vorgehen? Verwenden Sie ein Makro in Excel? ": von einem unabhängigen Programm, das die Nomenklatur abruft, um sie entweder in eine neue Excel-Datei zu schreiben oder eine vorhandene Excel-Datei auszufüllen.

Herzliche Grüße

Zunächst einmal vielen Dank für Ihre Antworten.

Unser Unternehmen besitzt nur Office 2019 und SolidWorks 2020 Pack.

Wir besitzen weder Smartbom noch EPDM und es wird nicht erwartet, dass wir investieren.

Ich möchte nur Excel und SolidWorks verwenden können.

Vielen Dank.

 

Hallo Jonathan,
Das obige Werkzeug verwendet nur SolidWorks.
Sie können es in Excel mit der Funktion verwenden:

Private Sub CommandButton1_Click()
    Dim strProgramName As String
    Dim strArgument As String
    strProgramName = "C:\MesProgrammes\BomToXls.exe"
    strArgument = "C:\MesFichiers\Assem1.SLDASM"
    Call Shell("""" & strProgramName & """ """ & strArgument & """", vbNormalFocus)
End Sub

 

 

1 „Gefällt mir“