| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | SIMULIA Regional User Meeting 2026, eine Veranstaltung am 17.06.2026
|
|
Autor
|
Thema: Blöcke auslesen (4255 mal gelesen)
|
maho007 Mitglied Konstrukteur
 Beiträge: 5 Registriert: 09.12.2010 SWx 2009
|
erstellt am: 10. Dez. 2010 08:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich habe folgendes Problem: Ich soll alle Blöcke aus den Konstruktionszeichnungen sichten und dann hinsichtlich Terminologie überprüfen. Jetzt stellt sich mir die Frage, ob man die Blöcke einer Zeichnung ggf. über ein Makro oder eine API Text automatisch auslesen könnte und diese in einer beispielsweise Excel-Tabelle transferiert werden. schöne Grüße, Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
   
 Beiträge: 1384 Registriert: 20.12.2003 SolidWorks 2023 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000
|
erstellt am: 10. Dez. 2010 08:38 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
Moin Martin, herzlich willkommen "on Board"... Schau dir mal das Beispiel "Get Block Information Example (VBA)" in der API-Hilfe an. Da findest du schon mal erste Infos... ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 10. Dez. 2010 11:14 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
|
maho007 Mitglied Konstrukteur
 Beiträge: 5 Registriert: 09.12.2010 SWx 2009
|
erstellt am: 10. Dez. 2010 11:45 <-- editieren / zitieren --> Unities abgeben:         
Erst einmal "Danke" für die Antworten. Ich möchte gerne einfach nur den Text aus dem Block in einer Excel Liste kopiert haben. Hintergrund: Im Rahmen eines Projektes wurde ich damit beauftragt, die Datenqualität von Blöcken unter SolidWorks zu untersuchen. Und Zeichnungen gibt es Unmengen. Deswegen die Überlegung, die Texte aus Excel zu untersuchen. Also nur den reinen STRING, wenn der Text als solches in SWX  als Blcok hinterlegt wird. Grüße [Diese Nachricht wurde von maho007 am 10. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 10. Dez. 2010 11:58 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
|
maho007 Mitglied Konstrukteur
 Beiträge: 5 Registriert: 09.12.2010 SWx 2009
|
erstellt am: 13. Dez. 2010 10:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo, die Blöcke, welche ich bearbeiten soll besitzen keine Attribute, weil der Button im PopertyManager unter Text-/Bemaßungsanzeige grau hinterlegt ist. Aber falls man die Attribute ohne Beschwerden mitnhemen kann würde ich dies außerdem gerne machen. Lese mich gerade in API ein unter http://solidworks.cad.de/apitut_kap04.htm Kennt jemand vielleicht noch weitere hilfreiche Einführungen? grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 13. Dez. 2010 13:57 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
Hallo da versuch das mal ACHTUNG: Du musst unter "Extras->Verweise" auf das "Excel Object Library" verweisen Sub main() Dim swapp As Object Dim swmodel As Object Dim swDraw As Object Dim SwSketchMgr As Object Dim swblockdef As Object Dim vBlockDef As Variant Dim vBlockInst As Variant Dim vNote As Variant Dim swNote As Object Dim i, j As Integer Dim excel As Object Set swapp = CreateObject("SldWorks.Application") Set swmodel = swapp.ActiveDoc Set swDraw = swmodel If swDraw Is Nothing Then MsgBox "Keine Zeichnung geladen!", vbOKOnly, "Fehler" Exit Sub End If Set SwSketchMgr = swmodel.SketchManager vBlockDef = SwSketchMgr.GetSketchBlockDefinitions If Not IsEmpty(vBlockDef) Then ' Excel initialisieren Set excel = CreateObject("excel.application") excel.Visible = True excel.Workbooks.Add excel.ActiveSheet.Cells(1, 1).Value = "Blockname" excel.ActiveSheet.Cells(1, 2).Value = "Anzahl" excel.ActiveSheet.Cells(1, 3).Value = "Text" ' für alle Blockdefinitionen For i = 0 To UBound(vBlockDef) Set swblockdef = vBlockDef(i) ' Blockname excel.ActiveSheet.Cells(i + 2, 1).Value = swblockdef.GetFeature.Name ' wie oft wurde der Block eingefügt vBlockInst = swblockdef.GetInstances excel.ActiveSheet.Cells(i + 2, 2).Value = swblockdef.GetInstanceCount ' Texte vom Block vNote = swblockdef.GetNotes If Not IsEmpty(vNote) Then For j = 0 To UBound(vNote) Set swNote = vNote(j) excel.ActiveSheet.Cells(i + 2, 3 + j).Value = swNote.GetText Next j End If Next i Else MsgBox "Keine Blöcke gefunden!", vbOKOnly, "Meldung" End If End Sub ------------------ Grüße Heinz
[Diese Nachricht wurde von nahe am 13. Dez. 2010 editiert.] [Diese Nachricht wurde von nahe am 13. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
maho007 Mitglied Konstrukteur
 Beiträge: 5 Registriert: 09.12.2010 SWx 2009
|
erstellt am: 13. Dez. 2010 16:40 <-- editieren / zitieren --> Unities abgeben:         
Danke Heinz,ich habe es schon kurz ausprobiert und es funktioniert. Wer hätte das gedacht  Jetzt ist aber erstmal gleich Feierabend und Morgen werde ich mich dann in die Tiefen dieses Programm der API Sprache hereinlesen. Habe auch schon ein kleines einfacheres Tool gebastelt. Grüße, Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 14. Dez. 2010 06:40 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
Hallo nochmals ich hab das noch ein wenig verbessert 1.) Abfrage ob Zeichnung geladen ist od. nicht 2.) Abfrage ob es sich um ein Attribut handelt (wenn TagName = "") od. nicht Attribute werden nicht ausgewertet Sub get_Block_Text() Dim swapp As Object Dim swmodel As Object Dim swDraw As Object Dim SwSketchMgr As Object Dim swblockdef As Object Dim vBlockDef As Variant Dim vBlockInst As Variant Dim vNote As Variant Dim swNote As Object Dim i, j As Integer Dim excel As Object Dim edoc As Object Dim temp As String Set swapp = CreateObject("SldWorks.Application") Set swmodel = swapp.ActiveDoc Set swDraw = swmodel If swDraw Is Nothing Then MsgBox "Keine Datei geladen!", vbOKOnly, "Fehler" Exit Sub End If If swDraw.GetType <> 3 Then MsgBox "Keine Zeichnung geladen!", vbOKOnly, "Fehler" Exit Sub End If Set SwSketchMgr = swmodel.SketchManager vBlockDef = SwSketchMgr.GetSketchBlockDefinitions If Not IsEmpty(vBlockDef) Then ' Excel initialisieren Set excel = CreateObject("excel.application") excel.Visible = True excel.Workbooks.Add excel.ActiveSheet.Cells(1, 1).Value = "Blockname" excel.ActiveSheet.Cells(1, 2).Value = "Anzahl" excel.ActiveSheet.Cells(1, 3).Value = "Text" ' für alle Blockdefinitionen For i = 0 To UBound(vBlockDef) Set swblockdef = vBlockDef(i) ' Blockname excel.ActiveSheet.Cells(i + 2, 1).Value = swblockdef.GetFeature.Name ' wie oft wurde der Block eingefügt excel.ActiveSheet.Cells(i + 2, 2).Value = swblockdef.GetInstanceCount ' Texte vom Block vNote = swblockdef.GetNotes If Not IsEmpty(vNote) Then temp = "" For j = 0 To UBound(vNote) Set swNote = vNote(j) If swNote.TagName = "" Then excel.ActiveSheet.Cells(i + 2, 3 + j).Value = swNote.GetText End If Next j End If Next i Else MsgBox "Keine Blöcke gefunden!", vbOKOnly, "Meldung" End If End Sub ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 14. Dez. 2010 13:37 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
anbei für Attribute Sub get_Block_Attribute() Dim swapp As Object Dim swmodel As Object Dim swDraw As Object Dim SwSketchMgr As Object Dim swblockdef As Object Dim swblockinst As Object Dim vBlockDef As Variant Dim vBlockInst As Variant Dim vNote As Variant Dim attr As Variant Dim att As Object Dim swNote As Object Dim i, j, z, k, y As Integer Dim excel As Object Dim edoc As Object Dim temp As String Set swapp = CreateObject("SldWorks.Application") Set swmodel = swapp.ActiveDoc Set swDraw = swmodel If swDraw Is Nothing Then MsgBox "Keine Datei geladen!", vbOKOnly, "Fehler" Exit Sub End If If swDraw.GetType <> 3 Then MsgBox "Keine Zeichnung geladen!", vbOKOnly, "Fehler" Exit Sub End If Set SwSketchMgr = swmodel.SketchManager vBlockDef = SwSketchMgr.GetSketchBlockDefinitions If Not IsEmpty(vBlockDef) Then ' Excel initialisieren Set excel = CreateObject("excel.application") excel.Visible = True excel.Workbooks.Add excel.ActiveSheet.Cells(1, 1).Value = "Blockname" excel.ActiveSheet.Cells(1, 2).Value = "Blockinstanz" y = 1 j = 0 ' für alle Blockdefinitionen For i = 0 To UBound(vBlockDef) Set swblockdef = vBlockDef(i) vBlockInst = swblockdef.GetInstances For z = 0 To UBound(vBlockInst) Set swblockinst = vBlockInst(z) attr = swblockinst.GetAttributes If Not IsEmpty(attr) Then If temp = "" Then temp = swblockdef.GetFeature.Name y = y + 1 excel.ActiveSheet.Cells(y, 1).Value = swblockdef.GetFeature.Name ElseIf temp <> swblockdef.GetFeature.Name Then y = y + 1 excel.ActiveSheet.Cells(y, 1).Value = swblockdef.GetFeature.Name temp = swblockdef.GetFeature.Name End If y = y + 1 excel.ActiveSheet.Cells(y, 2).Value = swblockinst.Name For k = 0 To UBound(attr) Set att = attr(k) excel.ActiveSheet.Cells(1, 3 + k * 2).Value = "Attribut" excel.ActiveSheet.Cells(1, 4 + k * 2).Value = "Wert" excel.ActiveSheet.Cells(y, 3 + k * 2).Value = att.TagName excel.ActiveSheet.Cells(y, 4 + k * 2).Value = att.GetText Next k End If Next z Next i Else MsgBox "Keine Blöcke gefunden!", vbOKOnly, "Meldung" End If End Sub ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
maho007 Mitglied Konstrukteur
 Beiträge: 5 Registriert: 09.12.2010 SWx 2009
|
erstellt am: 15. Dez. 2010 11:54 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank Heinz, ob ich die Attribute mit einbaue in das Werkzeug ist noch nicht sicher. Aber werde es definitiv benutzen oder meiner Nachfolgeperson zur Verfügung stellen, damit wir alle Textblöcke mal pflegen. Eine andere Frage: Gibt es eine Möglichkeit, dass ich Elemente(beispielsweise einen Textblock) mit einem Editor öffne und dann alle Werte(swblockdef.GetFeature.Name, swblockdef.GetNotes) überblicken kann! Damit ich mir mal ein Bild machen kann, was so alles hinter einem Textblock oder anderen SolidWorks Objekten steckt. Viel Grüße, Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 15. Dez. 2010 12:55 <-- editieren / zitieren --> Unities abgeben:          Nur für maho007
Hallo Martin dazu fällt mir nichts ein, außer wieder ein Makro zu programmieren das Dir das so darstellt. So in der Art Block auswählen Makro über Tastenkombination starten Daten anzeigen Aber das sollte mit den Informationen die Du im obigen Makro vorliegen hast kein Problem zu sein.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |