Eksport zestawienia komponentów Solidworks przez VB

Cze wszystkim!

Mam małe makro w interfejsie API Solidworks do eksportowania zestawienia komponentów otwartego rysunku do programu Excel w programie . Plik CSV

Chciałbym, aby ten plik Excela miał stałą nazwę i za każdym razem, gdy uruchamiam makro, wyeksportowana tabela BOM z Solidworks pojawia się tuż pod drugą. Nie wiem wystarczająco dużo o kodzie, który otrzymałem, to, co obecnie robi, to tworzenie pojedynczej tablicy. Nie mogę włączyć instrukcji "pisz tylko od momentu, gdy jest pusty", tylko po to, aby moje nomenklatury następowały po sobie, gdy wykonuję makro na różnych płaszczyznach.

Jeśli ktoś ma linię kodu, która by mi pomogła, jestem za tym!!

Miłego dnia.

 


20158271458773_export_bom.swp
1 polubienie

Witam

Na przykład, jeśli w pliku CSV używamy średnika jako separatora i chcemy zapisać litery A, B i zmienną C w pierwszym wierszu oraz litery D, F i zmienną F w pierwszym wierszu , powinniśmy napisać:

f = Wolny plik
Otwórz "C:\TEST.csv", aby dołączyć jako #f
Drukuj #f, "A; B; " & C
Drukuj #f, "E; F; " & G

Zamknij #f
 

Na konkretnym przykładzie (z implementacji załączników w naszym ERP):

f = Wolny plik

Otwórz plik "\\dimecox3\PLANBE$\Import_plans.csv", aby #f dołączyć jako otworzyć plik CSV lub TXT
    Zapisywanie do pliku właściwości
                Drukuj #f, "ITM; 2; " & KOD & ";; 001; " & docNamePDF & "; " & "PDF"
                Drukuj #f, "ITM; 2; " & KOD & ";; 002; " & docNameDWG & "; " & "DWG"
Zamknij #f

2 polubienia

Ouch! Nie czuję, że to rozwiązanie mojego problemu, jestem trochę zagubiony... Czy otworzyłeś kod jako załącznik, aby zobaczyć wynik (potrzebujesz rysunku z zestawieniem materiałów  , aby zadziałał).

Makro działa bardzo dobrze! ale chcę tylko, aby przy każdym uruchomieniu makra, nomenklatura aktywna w solidworks zaczynała się od tego samego pliku csv, ale poniżej tego, co mogło być napisane, pojawia się. W ten sposób, przeglądając moje plany i wykonując makro, otrzymałbym Excela, który globalizuje wszystkie moje części.

Oczywiście, jestem zły, dopiero zaczynam! Jestem rysownikiem i odkrywam moc tych API :)

 

1 polubienie

Moja odpowiedź dobrze odpowiada na ten problem, ale nie otworzyłem pliku SRP, ponieważ nie mam pod ręką SolidWorks.

Czy możesz opublikować makro w pliku tekstowym lub bezpośrednio w odpowiedzi?

1 polubienie

Sub ProcessBomFeature(swBomFeat As SldWorks.BomFeature)

    Dim vTableArr jako wariant
    Dim vTable jako wariant
    Dim swTable jako SldWorks.TableAnnotation
    Dim swAnn As SldWorks.Adnotacja
    Dim nNumCol tak długo
    Dim nNumRow tak długo
    Dim sRowStr As Ciąg
    Słońce i tak długo
    Słońce j tak długo
    
    'Pobieranie tabel adnotacji
    vTableArr = swBomFeat.GetTableAnnotations
    
    'Przechodzenie przez tabele adnotacji
    Dla każdej tabeli wirtualnej w vTableArr
    
        "Pobieranie tabeli
        Ustaw swTable = vTable

 "Odzyskiwanie treści
        Set swAnn = swTable.GetAnnotation
    
        "Liczba kolumn i wierszy
        nNumCol = swTable.ColumnCount
        nNumRow = swTable.RowCount
    
        'Nazwa i typ tabeli
        Debug.Print "    Tabela : " & swAnn.GetName & " Typ : " & swTable.Type
    
        "Przebieg linii
        Dla i = 0 do nNumRow - 1
    
            sRowStr = "      "
    
            'Trasa kolumny
            Dla j = 0 do nNumCol - 1
            
                sRowStr = sRowStr & swTable.Text(i, j) & " | "
                
            Dalej j
            
        ' Wyświetlanie treści
        Debug.Print w lewo(sRowStr, Len(sRowStr) - 1)
    
        Dalej i
        


        'Wyjdź z folderu
        Dim xlsPath As String (Ścieżka xlsPath jako ciąg)
        xlsPath = Mid(swModel.GetPathName, 1, InStrRev(swModel.GetPathName, "\"))
        
        "Nazwa XLS
        Dim xlsName As Ciąg
        Jeśli InStrRev(swModel.GetTitle, ".") > 0 to
            xlsName = Mid(swModel.GetTitle, 1, InStrRev(swModel.GetTitle, ".") - 1) & ".csv"
        Inaczej
            xlsName = swModel.GetTitle & ".csv"
        Zakończ jeżeli:
        
        Debug.Print "Dane wyjściowe: " & xlsPath & xlsName
        
        Eksportowanie Excela
        swTable.SaveAsText xlsPath & xlsName, "; "
        
    Następna tabela vTable
    
    MsgBox "Eksport zakończony"

Koniec subwoofera

 

Więc ten kawałek działa nikel, gdybym tylko miał nomenklaturę do eksportu. Ten; ponieważ separatory wykonują swoją pracę i wszystko.

Więc tak właśnie pomyślałem: użyta funkcja SaveAsText nie pozwala na dodawanie wierszy, jeśli plik już istnieje, jest nadpisywany: 


Jeśli plik o określonej nazwie w określonej ścieżce...   Istnieje    

Wtedy jest...  Zastąpione

Źródło: http://goo.gl/odfZb9

Konieczne jest zapoznanie się z rozwiązaniem zaproponowanym w mojej pierwszej wiadomości.

 
1 polubienie

Wielkie podziękowania dla Ciebie .PL!!

1 polubienie

Z przyjemnością. Jeśli możesz opublikować swoje makro z kodem zmodyfikowanym dla osób, które będą miały ten sam problem, a także w pliku tekstowym, jeszcze lepiej!

1 polubienie