| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | What's New in SOLIDWORKS 2026., ein Webinar am 22.01.2026
|
|
Autor
|
Thema: API: Eingebettete Datei öffnen möglich? (2763 mal gelesen)
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau

 Beiträge: 2809 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jul. 2015 07:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich schreibe gerade ein Macro das beim auslösen eine Art Status-Protokoll (Word oder Excell) befüllt, dieses würde ich gern in der Datei (Zeichnung) im Konstruktionsordner eingebettet haben. Leider hab ich nichts gefunden wie man diese Datein im Konstruktionsordner anlegen oder noch viel wichtiger diese Datei öffnen und ggf. ändern kann. Hat hier jemand von euch eine Idee ob das anlegen / öffnen per API überhaupt möglich ist. 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 |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 16. Jul. 2015 10:11 <-- editieren / zitieren --> Unities abgeben:          Nur für bk.sc
Hallo Bernd, mir ist leider auch kein Weg bekannt, wie man die verschiedenen Anhänge im Konstruktionsjournal (design binder) auch nur auflisten, geschweige denn öfnnen/bearbeiten/aktualisieren könnte. Entweder fehlen dafür einfach die APIs oder wir könne sie beide nicht finden  Wie wäre es denn, wenn du so ein Statusprotokoll statt dessen in einen Kommentar reinschreibst? Das geht mit allen Dokumenttypen, ist immer ganz oben in Featurebaum zu sehen, du kannst den immer gleich benennen und relativ leicht per API einzufügen (Stichworte: CommentFolder::AddComment, Comment::Text Comment::Name, Comment.Delete) Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
  
 Beiträge: 824 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 16. Jul. 2015 10:39 <-- editieren / zitieren --> Unities abgeben:          Nur für bk.sc
Hallo Bernd Mir ist auch keine API-Methode bekannt, um die im Konstruktionsordner eingebetteten Dokumente zu bearbeiten. In der API-Hilfe findest du einige Methoden mit dem Suchbegriff "Attachments". Es gib aber nur Hinzufügen, Auflisten, Zählen und Löschen. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau

 Beiträge: 2809 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jul. 2015 13:26 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, Danke Stefan für die Idee mit dem Kommentar, hat ich garnicht auf dem Radar. Danke auch Andreas, auf die Idee nach "Attachments" zu suchen bin ich garnicht gekommen habe nur nach "EMBED" "EMBEDLINKDOC" oder "JOURNAL" gesucht gehabt, nur nichts brauchbares endeckt. Dann werd ich mal schauen wie ich meinen Wunsch umgesetzt bekomme. 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 |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau

 Beiträge: 2809 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 17. Jul. 2015 06:41 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, habe einen Weg gefunden per API an meine eingebettete Excel Tabelle zu kommen und diese auch zu öffnen und zu bearbeiten. Das vorgehen ist aber glaube ich nicht so vorgesehen . Also ich hole mir erst alle OLE Objekte über "GetOLEObjects Method (IModelDocExtension)" und dann werte ich über eine Schleife zu jeden Objekt im enstandenen Array die "Clsid Property (ISwOLEObject)" (Klassen ID der zugeöhrigen Software) des OLE Objektes aus und wenn diese mit der vom gewünschten Dokumment (in meinem Fall Excel) übereinstimmt öffne ich das OLE Objekt mit der "SetActive Method (ISwOLEObject)". Damit ich nicht versehentlich im falschen OLE-Dokument rumfuhrwerke habe ich in meinem Dokument noch eine art Marker gesetzt um das Dokument zu verifizieren. Hierzu muss mann natürlich die Clsid von dem entsprechendem Programm vorher ermitteln, was ich leider noch nicht geschafft habe, daher ist bei mir die Clsid leider noch ein statischer Wert der nicht zur Laufzeit ermittelt wird. Ach und auf die Idee, dass so zu machen bin ich gekommen indem ich einfach mal die Beispiel Determine if OLE Objects are Linked or Embedded Example (VBA) und "Get OLE Object Data Example (VBA)" laufen lassen hab und geschaut habe ob er die Objekte im Konstruktionsordner berücksichtigt und wie mann sieht tut SWX es. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete  [Diese Nachricht wurde von bk.sc am 17. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JEsche Mitglied
 Beiträge: 2 Registriert: 26.08.2021 SWX 2019 SP5.0
|
erstellt am: 26. Aug. 2021 07:30 <-- editieren / zitieren --> Unities abgeben:          Nur für bk.sc
Hallo @Bernd dies ist zwar ein recht alter Post, ich habe aber die Hoffnung hier Hilfe zu finden :-) Ich stehe gerade vor dem selben Problem eine im Design Binder embedded Excel öffnen zu wollen. Besteht ggf. die Möglichkeit, dass Du Deinen Code hier postest? Ich habe Schwierigkeiten das swOleObj - Objekt zu setzten um SetActive(True) auszuführen: Set xlObj = swOleObj.SetActive(True) Ich würde mich sehr über eine Antwort freuen Grüße Esche Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3396 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 27. Aug. 2021 10:36 <-- editieren / zitieren --> Unities abgeben:          Nur für bk.sc
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau

 Beiträge: 2809 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 30. Aug. 2021 13:05 <-- editieren / zitieren --> Unities abgeben:         
Hallo, leider hatte ich das Macro für meinen alten Arbeitgeber geschrieben, daher keinen Zugriff mehr darauf. Evtl. könntest du posten was du schon an Code hast, evtl. kann ich dir dann besser helfen, weil lösbar ist das Problem . 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 |

| |
JEsche Mitglied
 Beiträge: 2 Registriert: 26.08.2021 SWX 2019 SP5.0
|
erstellt am: 30. Aug. 2021 18:37 <-- editieren / zitieren --> Unities abgeben:          Nur für bk.sc
Hallo erst mal ganz herzlichen Dank an Christian und Bernd für Eure schnellen Antworten! @Christian: Ja ich kannte die Beispiele schon, hatte aber wegen einer falschen Deklaration (Dim xlObj As SldWorks.SwOLEObject anstatt As Object) immer einen Laufzeitfehler. Das passt nun soweit :-) @Bernd: Ich schaffe es nun auch das Excelfile aus dem DesignBinder zu öffnen (Excel öffnet in SWX und nicht in einer neuen Excel Instanz). Soweit so gut. Nun habe ich aber das Problem, dass sich evtl. ebenso "Gauge Bending tables" und "Design Tables" im Modell befinden können. vOleObjs(i).FileName liefert keinen Wert zurück und ich kann nur über die CLSID (wie Du ja bereits erwähnt hast) die Objekte ansprechen. Damit muss ich alle *.xlsx öffnen, die im Modell embedded sind bis ich zum richtigen komme (Prüfung über Merkmale in der *.xlsx)... Des weiteren haben z.B. *.xls und *.xlsx unterschiedliche CLSID's und ich weiß auch nicht, ob sich diese mit einer neuen Office Version verändern. Ich habe rausgefunden, dass ich die CLSID über VBA aus der Registry auslesen kann (es gibt hier aber so viele Optionen, dass ich nicht weiß ob ich damit so richtig liege), wie gesagt, für *.xls sieht die CLSID schon anders aus und bei einer neuen Version bin ich auch nicht sicher, ob der richtige Wert zurück gegeben wird... Dim wsh As Object Set wsh = CreateObject("WScript.Shell") MsgBox wsh.regread("HKLM\SOFTWARE\Classes\Excel.Sheet\CLSID\") Hier mein Code zum öffnen der Excel aus dem Design Binder:
Option Explicit Sub DesignBinder() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim xlObj As Object Dim oleobjoptions As Long Dim vOleObjs As Variant Dim i As Integer Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc vOleObjs = swModel.Extension.GetOLEObjects(oleobjoptions) For i = 0 To UBound(vOleObjs) Debug.Print " Class ID: " & vOleObjs(i).Clsid Debug.Print " Is linked? " & vOleObjs(i).IsLinked Debug.Print " Filename: " & vOleObjs(i).FileName If vOleObjs(i).Clsid = "{00020830-0000-0000-C000-000000000046}" Then 'xlsx Excel-Files Set xlObj = vOleObjs(i).SetActive(True) 'Some action here Set xlObj = vOleObjs(i).SetActive(False) End If Next i End Sub Ich habe ebenso versucht, das Problem über Attachements zu lösen:
... vAttachments = swModel.Extension.GetAttachments(vLinks) For i2 = 0 To UBound(vAttachments) If VBA.InStrRev(vAttachments(i), ".xlsx") > 0 Then file = vAttachments(i2) Debug.Print file End If Next i2 Hier bekomme ich tatsächlich den Name des Attachments heraus, kann aber dann nichts weiter damit anstellen, da ich mit keiner Methode das Dokument programmtechnisch selektieren kann oder einem Objekt zuweisen kann... Es scheint kein Feature zu sein. Für weitere Ideen oder Hinweise bin ich immer dankbar :-) Grüße Esche
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |