RRZE – Projekte & Prozesse (P&P)

Das Blog der RRZE Stabsstelle "Projekte & Prozesse"

Content

Umwandeln von SVG-Grafiken in Visio-Dokumente per VBA

English Version
Die RRZE Icons werden ja bekanntlich im “Scalable Vector Graphics”-Format erstellt. Zur Verwendung der Icons in Visio kann dafür eine Stencil-Palette erstellt werden. Dafür müssen jedoch alle SVG-Grafiken in das Visio-Format umgewandelt werden. Dazu habe ich ein Skript in Visual Basic for Applications (VBA) – der Skriptsprache von Microsofts Office Produkten – erstellt, was diesen Prozess automatisiert für eine ganze Sammlung von Icons ausführt.
[vb]’Alle Variablen muessen vor ihrer Verwendung deklariert werden (sonst sucht man sich nen Wolf bei Fehlern)
Option Explicit

Sub Konvertieren()
Dim FSO
Dim SourceFolder
Dim SubFolder
Dim FileItem
Dim newFileName

Set FSO = CreateObject(“scripting.FileSystemObject”)
‘ Hier einfach den Basis-Ordner anpassen
Set SourceFolder = FSO.GetFolder(“E:\SVN\rrze-icon-set\trunk\visio\”)

For Each SubFolder In SourceFolder.SubFolders
‘ .svn-Ordner ignorieren
If (InStr(SubFolder.Path, “.svn”) = 0) Then
For Each FileItem In SubFolder.Files
‘ nur .svg-Dateien betrachten
If (Right(FileItem.Name, 4) = “.svg”) Then
newFileName = Replace(FileItem.Path, “.svg”, “.vdx”)
‘ keine existierenden vdx-Dateien überschreiben
If (Not FSO.FileExists(newFileName)) Then
‘ Neues Dokument beginnen
Application.Documents.AddEx “”, visMSDefault, 0
‘ Icon importieren
Application.ActiveWindow.Page.Import FileItem.Path
‘ Default-Dokument-Eigenschaften setzen
Application.ActiveDocument.Company = “RRZE”
‘ Datei mit gleichem Namen im vdx-Format abspeichern
Application.ActiveDocument.SaveAsEx newFileName, visSaveAsWS + visSaveAsListInMRU
‘ Dokument schließen
Application.ActiveDocument.Close
End If
End If
Next FileItem
End If
Next SubFolder

End Sub
[/vb]
Die Kommentare im Code erläutern die jeweilige Funktion der Zeile. Das Skript kann man einfach in den VBA-Skripteditor in Visio kopieren, den Wert des Basisverzeichnisses anpassen und ausführen (F5). Fertig.

Man könnte das Skript noch derart erweitern, dass es nach dem Basis-Ordner fragt. Dazu einfach hier oder hier nachlesen.

Batchprocessed conversion of svg-graphics to Visio-documents

The RRZE icons are designed in the “Scalable Vector Graphics”-format. For a convenient usage in Visio they can be collected as a stencil-set. Therefore their format has to be converted into the vdx-format. I wrote a script in Visual Basic for Applications (VBA) – the scripting language of Microsofts’ Office products – to convert a complete set of icons within a base folder.
[vb]’Declare all variables before usage to avoid typo errors
Option Explicit

Sub Convert()
Dim FSO
Dim SourceFolder
Dim SubFolder
Dim FileItem
Dim newFileName

Set FSO = CreateObject(“scripting.FileSystemObject”)
‘ The base folder MUST be defined here
Set SourceFolder = FSO.GetFolder(“E:\SVN\rrze-icon-set\trunk\visio\”)

For Each SubFolder In SourceFolder.SubFolders
‘ ignore .svn-folder
If (InStr(SubFolder.Path, “.svn”) = 0) Then
For Each FileItem In SubFolder.Files
‘ process .svg-files only
If (Right(FileItem.Name, 4) = “.svg”) Then
newFileName = Replace(FileItem.Path, “.svg”, “.vdx”)
‘ don’t overwrite existing vdx-files
If (Not FSO.FileExists(newFileName)) Then
‘ open a new document
Application.Documents.AddEx “”, visMSDefault, 0
‘ import icon into new document
Application.ActiveWindow.Page.Import FileItem.Path
‘ set default document properties
Application.ActiveDocument.Company = “RRZE”
‘ save as a file with same name in vdx-format
Application.ActiveDocument.SaveAsEx newFileName, visSaveAsWS + visSaveAsListInMRU
‘ cleanup
Application.ActiveDocument.Close
End If
End If
Next FileItem
End If
Next SubFolder

End Sub
[/vb]
The comments in the code describe the used functions. The script can simply be copied into the VBA-editor in Visio. Remember to set the base-folder correctly. Run the code within the editor (F5). As simple as that.

The script may be enhanced to use a dialog to ask for the base-folder. Simply read here or here about the usage of a FileDialog-Object.