Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - per API erzeugte Tabelle wieder löschen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
SolidCAM Professor Videos | Tipps & Tricks (SolidCAM)
Autor Thema:  API - per API erzeugte Tabelle wieder löschen (1940 mal gelesen)
Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hi Andi,

Selektiere die Tabelle mal per SelectByID2 und dann kannst du die Tabelle mit Part.EditDelete löschen.

Gruss, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Stefan65 an!   Senden Sie eine Private Message an Stefan65  Schreiben Sie einen Gästebucheintrag für Stefan65

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 21. Mrz. 2016 07:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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 Boolean

Option 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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Stefan65 an!   Senden Sie eine Private Message an Stefan65  Schreiben Sie einen Gästebucheintrag für Stefan65

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

Hi Andi,
ups, das habe ich glatt übersehen heute morgen.

Gruß Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

THSEFA
Mitglied
Konstrukteur/CAD-Admin


Sehen Sie sich das Profil von THSEFA an!   Senden Sie eine Private Message an THSEFA  Schreiben Sie einen Gästebucheintrag für THSEFA

Beiträge: 1141
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 21. Mrz. 2016 14:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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.SelectData

Dim 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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz