| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | 3DEXPERIENCE Conference 2024 | München, eine Veranstaltung am 16.10.2024
|
Autor
|
Thema: API - per API erzeugte Tabelle wieder löschen (2027 / mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 20. Mrz. 2016 18:40 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich steh etwas auf dem Schlauch und finde kein passendes Beispiel. Der Recorder gibt mir auch einen falschen Ansatz. Ich erzeuge eine Tabelle in einem Part oder einer Baugruppe: Dim modelDocExt As SldWorks.ModelDocExtension Dim swTable As SldWorks.TableAnnotation Set modelDocExt = swModel.Extension Set swTable = modelDocExt.InsertGeneralTableAnnotation(True, 0, 0, swBOMConfigurationAnchor_TopLeft, "", nNumRow, nNumCol) danach fülle und exportiere ich diese Tabelle. Nun möchte ich sie wieder löschen. swTable bietet mir aber nur das löschen von Spalten und Zeilen an. z.B. so: value = swTable.DeleteRow(Index) Bevor ich aber jetzt Zeile für Zeile die Tabelle lösche (es funktioniert), möchte ich doch lieber direkt löschen. Ich habe so einiges ausprobiert, aber irgendwie mag es heute nicht. Wer kann mir den entscheidenden Tipp geben? Außerdem gibt es noch eine unschöne Variante, so wie die interne Tabelle als Excel exportiert wird. boolstatus = swTable.SaveAsText("C:\Test-Solid-Save-Excel.xls", "") Diese erzeugte externe Tabelle wird von Excel nur mit einer Nachfrage akzeptiert und muss mit Excel erneut gespeichert werden. Weiß jemand einen besseren Export zu Excel? Und überhaupt würde ich gerne Dateieigenschaften direkt in eine externe Exceltabelle schreiben, ohne den Umweg einer internen Tabelle. Aber zu sowas habe ich auch noch kein passendes Beispiel gefunden. Noch ein schönes Restwochenende. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2019 Solidworks 2021 Sp5.1 Enterprise PDM 2021 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Dell Ultrasharp U2415 Dell M4800
|
erstellt am: 20. Mrz. 2016 21:11 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 20. Mrz. 2016 21:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, danke Schön für diesen Vorschlag, aber genau das möchte ich nicht. Der Makrorecorder geht diesen Weg, da ich die Tabelle manuell anklicken muss. Ich möchte, ohne Eingreifen zu müssen, die Tabelle löschen. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stefan65 Mitglied Werkzeugkonstrukteur
Beiträge: 48 Registriert: 14.02.2014 Dell Precision 5820 Windows 10 Enterprise 64bit Intel Xeon W-2123 @ 3.60GHz 16GB RAM NVIDIA Quadro P2000 SolidWorks 2018 SP5 DBWorks-R17 SP2.5
|
erstellt am: 21. Mrz. 2016 07:19 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, versuch es doch mal mit diesem Code, Sub main() 'Delete existing SW tables Dim swApp As SldWorks.SldWorks Dim swDraw As SldWorks.DrawingDoc Dim swView As SldWorks.View Dim swAnn As SldWorks.Annotation Dim swSelData As SldWorks.SelectData Dim Boolstatus As Boolean Dim swBOM As SldWorks.BomTableAnnotation Dim swSelMgr As SldWorks.SelectionMgr Set swApp = Application.SldWorks Set swDraw = swApp.ActiveDoc Set swView = swDraw.GetFirstView Set swModel = swApp.ActiveDoc 'Loop through the views and delete the SW BOM if they exists While Not swView Is Nothing Set swAnn = swView.GetFirstAnnotation3 While Not swAnn Is Nothing If swTableAnnotation = swAnn.GetType Then Boolstatus = swAnn.Select3(False, swSelData) Set swSelMgr = swModel.SelectionManager
'I've noticed that a BOM Table ID is 98 If swSelMgr.GetSelectedObjectType3(1, -1) = 98 Then swDraw.EditDelete End If End If Set swAnn = swAnn.GetNext3 Wend Set swView = swView.GetNextView Wend
End Sub Gruß Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 21. Mrz. 2016 07:54 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, ich habe mir das mal schnell mit der API-Hilfe zusammen kopiert und bei mir funktioniert es ganz gut. Die For Next Schleife kann man bestimmt auch durch eine sinvollere ersetzten hab diesen Beispielcode (API-Hilfe -> Get Annotations Example (VBA)) nur kopiert und gestutzt und um Select3 und swModel.EditDelete erweitert. Code:
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swModelDocExt As SldWorks.ModelDocExtension Dim swAnnotation As SldWorks.Annotation Dim swSelmgr As SldWorks.SelectionMgr Dim swSelData As SldWorks.SelectData Dim iAnnoCnt As Integer Dim arrAnnotation As Variant Dim i As Integer Dim IAnnoType As Integer Dim boolstatus As BooleanOption Explicit Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension Set swSelmgr = swModel.SelectionManager Set swSelData = swSelmgr.CreateSelectData iAnnoCnt = swModelDocExt.GetAnnotationCount() If iAnnoCnt > 0 Then arrAnnotation = swModelDocExt.GetAnnotations() For i = LBound(arrAnnotation) To UBound(arrAnnotation) Set swAnnotation = arrAnnotation(i) IAnnoType = swAnnotation.GetType() If IAnnoType = 14 Then boolstatus = swAnnotation.Select3(False, swSelData) Debug.Print "Tabelle selektiert" swModel.EditDelete End If Next End If End Sub
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 21. Mrz. 2016 11:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke schön für eure Beispiele. @Stefan wenn ich das richtig sehe, geht dein Schnipsel von einer Tabelle aus, die in einer Zeichnung ist. Meine Tabelle ist aber, wie oben erwähnt, in einem Part oder einer Baugruppe. Insofern nicht ganz so passend. @Bernd danke, das funktioniert, sogar so gut, das auch andere Tabellen, die zusätzlich existieren, mit gelöscht werden. Es ist schon eigenartig, da habe ich bereits eine Tabelle über Set swTable erzeugt, kenne sie also bereits, und muss dennoch das Solid durchscannen, um es löschen zu können. Ich benötige in dieser Version also noch einen Abgleich, ob ich auch die richtige Tabelle erwischt habe. Müsste ich noch etwas probieren wie das geht. Falls du das evtl. schon weißt wie, nur her damit. Für weitere Vorschläge bin ich noch empfänglich. :-) Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stefan65 Mitglied Werkzeugkonstrukteur
Beiträge: 48 Registriert: 14.02.2014 Dell Precision 5820 Windows 10 Enterprise 64bit Intel Xeon W-2123 @ 3.60GHz 16GB RAM NVIDIA Quadro P2000 SolidWorks 2018 SP5 DBWorks-R17 SP2.5
|
erstellt am: 21. Mrz. 2016 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
THSEFA Mitglied Konstrukteur/CAD-Admin
Beiträge: 1142 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 21. Mrz. 2016 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Eventuell ein gangbarer Weg: Schließen ohne speichern. Oder willst du danach mit dem Datensatz noch weiter arbeiten? ------------------ Viele Grüße, THSEFA "Nichts ist so hart wie das Leben! Wenn man sagt, was man denkt, muss man mehr als alles geben!..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 21. Mrz. 2016 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, Zitat: das funktioniert, sogar so gut, das auch andere Tabellen, die zusätzlich existieren, mit gelöscht werden.
Mir war ja nicht bekannt das noch weitere Tabellen existieren. Wenn du den Namen der Tabelle schon kennst wieso funktioniert dann SelectByID nicht? Code: boolstatus = swModelDocExt.SelectByID2("Name_der_Tabelle", "GENERALTABLEFEAT", 0, 0, 0, False, 0, Nothing, 0) swModel.EditDelete
Evtl. könntest du doch auch nur die zuletzt eingefügte Tabelle löschen. [EDIT]Idee Nummer 2. Nachdem du die Tabelle erzeugt hast könntest du dir doch direkt aus deinem Table Objekt das Annotation Objekt holen (myTable.GetAnnotation) danach deine Tabelle ändern speichern was auch immer und danach wieder auf dein vorher erzegtes Annotation Object zurückgreifen um es mit Select2/3 zu selektieren und mit swModel.EditDelete es zu löschen. Code: Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swModelDocExt As SldWorks.ModelDocExtension Dim myTable As SldWorks.TableAnnotation Dim anno As SldWorks.Annotation Dim swSelmgr As SldWorks.SelectionMgr Dim swSelData As SldWorks.SelectDataDim boolstatus As Boolean Option Explicit Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension Set swSelmgr = swModel.SelectionManager Set myTable = swModelDocExt.InsertGeneralTableAnnotation(True, 0, 0, swBOMConfigurationAnchor_TopLeft, "", 2, 2) Set anno = myTable.GetAnnotation 'Hier die Tabelle dann bearbeiten boolstatus = anno.Select3(False, swSelData) swModel.EditDelete End Sub
[/EDIT] Gruß Bernd
------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht ---
Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 21. Mrz. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 22. Mrz. 2016 00:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, @THSEFA das wäre aber nur ein Notnagel wenn nichts anderes helfen würde. Besser ist tatsächlich löschen und dann kann kommen was will. @Bernd nochmals danke Schön für deine Mühen. Das mit der zuletzt erzeugten Tabelle funktioniert soweit, ist aber eine unschöne Herangehensweise. Aber deine Idee Nr. 2 finde ich jetzt die beste und diese werde ich auch nehmen. Nur ein paar Zeilen Code zusätzlich und das war es. Nun werde ich mich an das Füllen der Tabelle ran machen. Grüße Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|