Zestawienie materiałów zespołu w programie Excel

Witam

Wiem, że ten temat był już wielokrotnie poruszany i że na pewno istnieją gotowe aplikacje.

Chcę utworzyć zestawienie komponentów programu Excel , które będzie aktualizowane automatycznie po otwarciu, w którym nie zostanie otwarty zestaw, w celu zintegrowania go z tabelą zarządzania projektami.

Z góry dziękuję za odpowiedzi

Witam 

Jeśli masz dostęp do narzędzi mycad, możesz skorzystać ze Smartbom.

Jeśli masz EPDM, możesz również  wyodrębnić BOM. 

Pozdrowienia 

3 polubienia

Witam

W przeciwnym razie, jeśli wiesz o "makrach / programowaniu", możliwe jest dostosowanie go do potrzeb, polegając na interfejsach API Solidworks ...

Pozdrowienia

Witaj D.Roger

Twoim zdaniem możliwe jest wyodrębnienie zestawienia komponentów przy zamkniętym Solidworks.

Jak byś postąpił?

Przechodząc przez makro w programie Excel?

Czy masz już na przykład trochę makro? Dziękuję

Yannicka.

Witaj D.Roger,

Nie mam szkicu i ograniczoną wiedzę na temat makro

To bardziej makro w programie Excel .

Próbuję zebrać różne makra pobrane tu i tam.

Pozdrowienia

@Yannick:
Jest to możliwe do zrobienia z Solidworks zamkniętym za pomocą "SolidWorks.Interop.swdocumentmgr.dll" (lub nawet z Solidworks, który nie jest zainstalowany za pomocą "swdocumentmgr.dll")
Użyj funkcji GetComponents , aby uzyskać BOM.

Z drugiej strony, teraz, gdy menedżer dokumentów działa tylko w x64, musielibyśmy zrobić zewnętrzny moduł do Excela. I wywołaj go z makra programu Excel za pomocą polecenia "Wywołaj Shell()". Możesz też mieć aplikację, która zapisuje zestawienie materiałów bezpośrednio do pliku Excel.

Oto wersja robocza, która zapisze BOM w tym samym katalogu co zestaw: (Skopiuj kod do nowej aplikacji konsolowej VB.NET lub użyj załączonego pliku)

Uwaga: Wymagany jest numer licencji menedżera dokumentów. Zobacz ten link, aby go pobrać

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 polubienie

Witam

@yannick.petit :

- Na pytanie "Twoim zdaniem możliwe jest wyodrębnienie zestawienia komponentów przy zamkniętym Solidworks.": wszystko jest powiedziane przez JeromeP z bonusem w postaci przykładu, który idzie dobrze.

- Na pytanie "Jak byś postąpił? Używając makra w Excelu? ": przez niezależny program, który pobrałby nomenklaturę, aby zapisać ją w nowym pliku Excela lub wypełnić istniejący plik Excel.

Pozdrowienia

Przede wszystkim dziękuję za odpowiedzi.

Nasza firma posiada tylko pakiet Office 2019 i SolidWorks 2020.

Nie jesteśmy właścicielami Smartbom ani EPDM i nie oczekujemy, że będziemy inwestować.

Chciałbym móc korzystać tylko z Excela i Solidworks .

Dziękuję.

 

Witaj Jonathanie,
Powyższe narzędzie korzysta tylko z SolidWorks.
Możesz go użyć w Excelu z funkcją:

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 polubienie