Fragensteller
Visio 2016 ActiveX-Element speichert keine VSD-Dateien auf Netzlaufwerk

Frage
-
Ich binde die Visio-Oberfläche als Drawing-Control über ActiveX in einer eigenen Anwendung mittels Visual Studio 2013 ein.
Bisher hatte ich dafür über viele Jahre Visio 2010 erfolgreich im Einsatz. Jetzt bei Verwendung von Visio 2016 tritt ein seltsames Phänomen auf - über die Visio-Schnittstelle lassen sich keine VSD-Dateien auf einem Netzlaufwerk speichern. Auf dem lokalen Rechner hingegen funktioniert das Speichern von VSD-Dateien einwandfrei. Auffällig ist auch, dass sich lediglich Dateien im Format VSDX über die Schnittstelle auf einem Netzlaufwerk speichern lassen. Aus kompatibilitätsgründen zu Visio 2010 Anwendern kann ich aber nicht pauschal auf das neue VSDX-Format umstellen, sondern muss weiterhin Dateien im Format VSD auf Netzlaufwerken speichern können.
Dieses Phänomen lässt sich leicht reproduzieren. Dafür wird eine bestehende VSD-Datei von der lokalen Festplatte in ein AxDrawingControl Objekt eingelesen und anschließend auf einem Netzlaufwerk gespeichert.
- In Visual Studio eine neue Windows Forms Anwendung erstellen
- Über den Werkzeugkasten als COM-Steuerelement das ‚Microsoft Visio 16.0 Drawing Control‘ hinzufügen.
- Am Ende der Methode InitializeComponent() folgende Zeilen hinzufügen.
this.axDrawingControl1.Src = "C:\\temp\\OrigDoc.vsd";
var targetDocument = this.axDrawingControl1.Document;
targetDocument.SaveAs("\\\\10.1.5.45\\visio-projects\\SavedDoc.vsd");
Applikation starten. Anschließend tritt folgender Fehler auf:
Fehler beim Speichern von: 'Konfiguration'
(Hinweis: Möglicherweise ist das Dokument parallel in Visio geöffnet.)
Ausnahme aufgetreten.
bei Microsoft.Office.Interop.Visio.DocumentClass.SaveAs(String FileName)Dieser Fehler tritt nicht auf, wenn eine VSDX-Datei anstatt einer VSD-Datei gespeichert wird.
targetDocument.SaveAs("\\\\10.1.5.45\\visio-projects\\SavedDoc.vsdx");Für mich sieht dieser Fehler nach einem Bug in der Visio-Schnittstelle
Microsoft.Office.Interop.Visio bzw. Microsoft.Office.Interop.VisOcx
aus.Anders kann ich mir nicht erklären warum sich die Formate VSD und VSDX lokal speichern lassen, aber auf einem Netzlaufwerk nur das VSDX Format. Und dabei macht es keinen Unterschied ob das Netzlaufwerk, wie in dem Beispiel, über den Netzwerkpfad angesprochen wird oder als Laufwerksbuchstabe eingebunden wird.
Wie lässt sich dieses Problem lösen?VG
Jan - In Visual Studio eine neue Windows Forms Anwendung erstellen
Alle Antworten
-
Hallo Jan,
ob sich das Problem lösen lässt, kann ich dir mangels Visio Kenntnissen nicht sagen.
Aber wäre es evtl. eine Option, die Datei von Visio aus in einem lokalen temporären Pfad zu speichern und dann per Code in deiner Anwendung in den Zielordner zu kopieren?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hi Stefan,
vielen Dank für deinen Post.
Die Viso-Dateien werden bereits von einem Netzlaufwerk geöffnet und nach der Bearbeitung an dieselbe Stelle auf das Netzlaufwerk gespeichert. Wenn ich die Datei lokal speichere und dann kopiere, müsste ich das Datei-Handle dieser Datei auf dem Netzlaufwerk vorher wieder freigeben. Während dieses Moments könnte aber schon jemand anderes diese Datei wieder geöffnet haben.Diesen Workaround hatte ich auch schon mal angedacht, allerdings vorerst wieder verworfen, weil er nicht ganz konfliktfrei ist. Lieber wäre es mir, wenn die Schnittstelle weiterhin mit VSD-Dateien funktionieren würde.
Gruß
Jan
- Bearbeitet DevVisio Freitag, 21. Juni 2019 09:59