| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Pfad erstellen (1107 / mal gelesen)
|
OibelTroibel Mitglied Konstrukteur
Beiträge: 597 Registriert: 18.04.2014 ACAD/Inventor 2018-21
|
erstellt am: 16. Apr. 2020 14:59 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich habe ein Code, welcher von einer Baugruppe eine alle enthaltenen Zeichnungsableitungen checkt und diese als PDF in eine parametrisierte Ordnerstruktur abspeichert. Leider werden die Ordner nur erstellt, wenn nicht zu viele Zwischenordner erstellt werden müssen. Das heisst wenn vom Zielpfad C:\1\2\3\4\5\6\7\ nur C:\1\2\3\4\5 vorhanden ist werden die Ordner 6\7\ nicht erstellt und das PDF nicht exportiert, ist aber C:\1\2\3\4\5\6\ vorhanden, wird 7\ erstellt und das PDF exportiert. Komischerweise exportiere ich mit einem sehr ähnlichen Code alle Bauteile einer Baugruppe in die selbe Ordnerstruktur und der Zielpfad wird erstellt unabhängig wie viele Zwischenordner erstellt werden müssen. Ich habe folgende Snippets getestet: Code: If Dir(Zielpfad, vbDirectory) = "" Then MkDir Zielpfad End If
Code: If Not objFso.FolderExists(Zielpfad) Then objFso.CreateFolder Zielpfad
Den ersten Code verwende ich beim Step-Export und funktioniert wunderbar. Beim PDF Export funktioniert es nur, wenn ich zuerst die Step-Daten exportiere und danach die PDFs, da dann die Ordner bereits erstellt sind. Hat jemand eine Ahnung warum das so sein könnte? Den ganzen Code kann ich leider nicht veröffentlichen. Beste Grüsse Raphael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 17. Apr. 2020 05:00 <-- editieren / zitieren --> Unities abgeben: Nur für OibelTroibel
Moin Der mkdir-Befehl kann nicht mehrere Ordnerebenen gleichzeitig anlegen. Mit dem Schnipsel Code spekuliere ich nicht über mögliche Ursachen, warum es mal geht und mal nicht. Du kannst in einer kurzen Schleife stückweise deinen Zielpfad prüfen und ggf. erstellen: Code:
Privat Sub MultiPathCreate() Dim ZielPfad As String Dim TeilPfad As String Dim Pfadteile Dim iZielPfad = "c:\ebene1\ebene2\ebene3" Pfadteile = Split(ZielPfad, "\") TeilPfad = Pfadteile(0) For i = 1 To UBound(Pfadteile) TeilPfad = TeilPfad & "\" & Pfadteile(i) If Dir(TeilPfad, vbDirectory) = "" Then MkDir TeilPfad Next End Sub
Oder du nutzt externe dll's, die die gleiche Funktionalität beinhalten.
Code:
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As LongSub CreateMultiplePath() Dim strPath As String strPath = "c:\ebene1\ebene2\ebene3\" If MakeSureDirectoryPathExists(strPath) <> 0 Then MsgBox "Der Pfad : " & strPath & " wurde erfolgreich angelegt!" End If End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OibelTroibel Mitglied Konstrukteur
Beiträge: 597 Registriert: 18.04.2014 ACAD/Inventor 2018-21
|
erstellt am: 17. Apr. 2020 08:22 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Ralf Vielen Dank für deine Hilfe. Ich werde es mit deiner Schleife machen und gleich versuchen. Ist es möglich, dass das Step-Export Sample von der API-Hilfe den Pfad erstellt? Code: Public Sub StepExport(Zielpfad, oRefDoc) Dim oSTEPTranslator As TranslatorAddIn Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}") If oSTEPTranslator Is Nothing Then MsgBox "Verbindung zum STEP-Translator fehlgeschlagen." Exit Sub End If Dim oContext As TranslationContext Set oContext = ThisApplication.TransientObjects.CreateTranslationContext Dim oOptions As NameValueMap Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap If oSTEPTranslator.HasSaveCopyAsOptions(oRefDoc, oContext, oOptions) Then 'Step Protokoll definieren '2 = AP 203 - Konfigurationsgesteuerte Konstruktion '3 = AP 214 - Automobil-Konstruktion '4 = AP 242 - Auf verwaltetem Modell basierende 3D-Konstruktion oOptions.Value("ApplicationProtocolType") = 4 ' verfügbare Optionen oOptions.Value("Author") = ThisApplication.GeneralOptions.UserName 'oOptions.Value("Authorization") = "" 'oOptions.Value("Description") = "" 'oOptions.Value("Organization") = "" oContext.Type = kFileBrowseIOMechanism Dim oDocRevision As Property Dim Revision As String Set oDocRevision = oRefDoc.PropertySets.Item("Inventor Summary Information").Item("Revision Number") Dim oData As DataMedium Set oData = ThisApplication.TransientObjects.CreateDataMedium If oDocRevision.Value = "" Then oData.FileName = Zielpfad & oRefDoc.DisplayName & ".stp" Else Revision = "_Rev-" + CStr(oDocRevision.Value) oData.FileName = Zielpfad & oRefDoc.DisplayName & Revision & ".stp" End If 'Dokument publizieren Call oSTEPTranslator.SaveCopyAs(oRefDoc, oContext, oOptions, oData) End If End Sub
Mir ist nämlich aufgefallen, dass die Ordnerstruktur erst nach dem
Code: Call oSTEPTranslator.SaveCopyAs(oRefDoc, oContext, oOptions, oData)
erstellt wird und das über mehrere Ordner. Mit dem PDF Export Sample kein ich aber gleiches Verhalten nicht beobachten, bzw. gibts den Ordner nicht, wird dieser auch nicht erstellt und somit das PDF nicht exportiert. Code: Public Sub PDFExport(Zielpfad, oRefDoc) ' Get the PDF translator Add-In. Dim PDFAddIn As TranslatorAddIn Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}") Dim oContext As TranslationContext Set oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oData As DataMedium Set oData = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If PDFAddIn.HasSaveCopyAsOptions(oRefDoc, oContext, oOptions) Then ' Options for drawings... oOptions.Value("All_Color_AS_Black") = 0 'oOptions.Value("Remove_Line_Weights") = 0 'oOptions.Value("Vector_Resolution") = 400 'oOptions.Value("Sheet_Range") = kPrintAllSheets 'oOptions.Value("Custom_Begin_Sheet") = 2 'oOptions.Value("Custom_End_Sheet") = 4 End If Dim oDocRevision As Property Dim Revision As String Set oDocRevision = oRefDoc.PropertySets.Item("Inventor Summary Information").Item("Revision Number") If oDocRevision.Value = "" Then oData.FileName = Zielpfad & oRefDoc.DisplayName & ".pdf" Else Revision = "_Rev-" + CStr(oDocRevision.Value) oData.FileName = Zielpfad & oRefDoc.DisplayName & Revision & ".pdf" End If If Not objFso.FolderExists(Zielpfad) Then objFso.CreateFolder Zielpfad 'Publish document. Call PDFAddIn.SaveCopyAs(oRefDoc, oContext, oOptions, oData) End Sub
Das
Code: If Dir(Zielpfad, vbDirectory) = "" Then MkDir Zielpfad End If
Habe ich im Hauptprogramm vorgelagert aber hat wohl bei PDF- und Step-Export kein Erfolg. Beste Grüsse Raphael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 18. Apr. 2020 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für OibelTroibel
Moin Was die Translatoren intern alles machen behält Autodesk für sich. Das der eine den kompletten Zielpfad erstellt und der andere nicht, halte ich durchaus für möglich. Ich vermute mal, die beiden Translatoren wurden in verschiedenen Jahren und von verschiedenen Programmierern erstellt. Da ist gleiches Programmverhalten eher Zufall. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|