Eksport do pliku CSV Solidworks

Witam

Od dłuższego czasu mam problem z eksportem .cvs moich nomenklatur. Pozwólcie, że wyjaśnię: wygląda na to, że w zasadzie Solidworks używa przecinków jako separatorów, a ja wolałbym mieć średniki. Muszę więc zapisywać w .xls, a następnie w Excelu, aby zapisać w .csv (excel używa odpowiednich separatorów), co dodaje żmudny krok do każdego eksportu. 

Czy masz rozwiązanie? Nie jestem na bieżąco z makrami, myślisz, że powinienem przejść w ten sposób? 
Po poszukiwaniach nie znalazłem rozwiązania .

Dziękuję!

Witam

Oprócz traktowania go za pomocą notatnika systemu Windows i funkcji zamiany.

Spójrz na to tak czy inaczej https://www.lynkoa.com/forum/3d/export-nomenclature-solidworks-par-vb

Jerome

2 polubienia

Nie wiem, czy są one powiązane, ale nie wahaj się wykonać testu, zmieniając separator listy w opcjach regionalnych...

Czasem jest szybciej =)

 

Witam was oboje,

Niestety, rozwiązanie Macros227   nie działa:(

Jeśli chodzi o makra, w ogóle ich nie opanowuję. Wydaje mi się, że eksportowanie tabeli ze średnikami jako separatorami wcale nie jest skomplikowane, czy ryzykuję poświęcenie na nią czasu?

Witam

Nie powinno Ci to zająć dużo więcej niż 5 minut, bierzesz makro, które jest w kwestii linku podanego przez Todesco i zamieniasz w nim linijkę:

sRowStr = sRowStr & swTable.Text(i, j) & " | "

Według niego:

sRowStr = sRowStr & swTable.Text(i, j) & "; "

I w ten sposób musisz uzyskać plik CSV z; jako separator. Jest on przechowywany w tym samym folderze co plan.

Pozdrowienia

3 polubienia

Dziękuję bardzo, rzeczywiście to działa!
Czy jednak istniałby sposób na eksport tylko "aktywnej" nomenklatury? Czasami mam wiele zestawień komponentów na stronie i chciałbym mieć możliwość wyboru, który z nich ma być eksportowany. W tym przypadku, makro, jest to ostatnia znaleziona nomenklatura, która jest rejestrowana, jeśli dobrze rozumiem.

Z góry dziękuję

Witam

Makro, o którym mowa, pozwala na zaznaczenie wszystkich BOM-ów w planie i zapisanie ich do pliku csv (pod warunkiem dokonania modyfikacji wyjaśnionej przez .PL w pierwotnym omówieniu, aby uniknąć nadpisywania poprzedniego eksportu BOM przez każdy eksport).

Jeśli chcesz wyodrębnić tylko zestawienie komponentów, które zostało wybrane w drzewie, powinno to być możliwe poprzez zamianę wierszy:

    Ustaw swFeat = swModel.FirstFeature

    Zrób Póki Nie SwFeat Nic
        Jeśli "BomFeat" = swFeat.GetTypeName, to
            Ustaw swBomFeat = swFeat.GetSpecificFeature2
            ProcessBomFeature swBomFeat
        Zakończ jeżeli:
        Ustaw swFeat = swFeat.GetNextFeature
    Pętla   
    vTableArr = swBomFeat.GetTableAnnotations

Korzystając z funkcji "GetSelectedObject6", którą można znaleźć tutaj. Nie zapomnij użyć funkcji "ProcessBomFeature" po funkcji wyboru.

Pozdrowienia

Dziękuję za odpowiedź. 
Nie znam składni, ale to nie działa:

  set swFeat = GetSelectedObject6
  Ustaw swBomFeat = swFeat.GetSpecificFeature2
  ProcessBomFeature swBomFeat

Witam

Zamiana wierszy:

   Set swFeat = swModel.FirstFeature
    Do While Not swFeat Is Nothing
        If "BomFeat" = swFeat.GetTypeName Then
            Set swBomFeat = swFeat.GetSpecificFeature2
            ProcessBomFeature swBomFeat
        End If
        Set swFeat = swFeat.GetNextFeature
    Loop
    
    vTableArr = swBomFeat.GetTableAnnotations

Przez:

    Set SelMgr = swModel.SelectionManager
    Set swBomFeat = SelMgr.GetSelectedObject6(1, 0)
    
    ProcessBomFeature swBomFeat

Pozdrowienia

Dziękuję bardzo!

To działa. Moim błędem było myślenie, że nomenklatura została wybrana w centralnym interfejsie, a nie w drzewie po lewej stronie ekranu. 
Czy istnieje funkcja eksportu "aktywnej" nomenklatury w znaczeniu tego słowa, wybranej w centralnym interfejsie?

Tak, jest to możliwe, ale również poprzez modyfikację funkcji eksportu BOM, ponieważ nagle nie jest to już element "BomFeature", który jest przesyłany:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
    
Sub main()

    Dim swFeat As SldWorks.Feature
    Dim swBomFeat As SldWorks.BomFeature
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

    Set selmgr = swModel.SelectionManager
    Set vTable = selmgr.GetSelectedObject6(1, -1)
    ProcessBomSelect vTable

    MsgBox "Export de la BOM terminé."
End Sub

Sub ProcessBomSelect(vTable As Variant)
    Dim swTable As SldWorks.TableAnnotation
    Dim swAnn As SldWorks.Annotation
    Dim nNumCol As Long
    Dim nNumRow As Long
    Dim sRowStr As String
    Dim I As Long
    Dim J As Long

    Set swTable = vTable
    Set swAnn = swTable.GetAnnotation

    nNumCol = swTable.ColumnCount
    nNumRow = swTable.RowCount

    Dim xlsPath As String
    xlsPath = Mid(swModel.GetPathName, 1, InStrRev(swModel.GetPathName, "\"))

    Dim xlsName As String
    If InStrRev(swModel.GetTitle, ".") > 0 Then
        xlsName = Mid(swModel.GetTitle, 1, InStrRev(swModel.GetTitle, ".") - 1) & ".csv"
    Else
        xlsName = swModel.GetTitle & ".csv"
    End If

    For I = 0 To nNumRow - 1
        sRowStr = ""
        For J = 0 To nNumCol - 1
            sRowStr = sRowStr & swTable.Text(I, J) & ";"
        Next J
    Next I

    swTable.SaveAsText xlsPath & xlsName, ";"
End Sub

Pozdrowienia

Jest naprawdę doskonały i dokładnie to, czego chciałem, dziękuję za cenną pomoc!