Frage von Krautner, 49

Ich möchte gerade ein kleines Programm schreiben für Excel, welches als eine Art Update fungiert um Menübänder einzufügen und wollte fragen ob wer helfen könnt?

Kurz zur Erklärung wie das ablaufen sollte, die neusten Office Programme wenn man sie abspeichert, sind ja alles in allem verpackte Dateien, bei Excel mit Makros wäre dieses Dateiformat eben xlsm. So nun möchte ich dieses via Visual studio öffnen, darin befinden sich dann 3 Ordner und eine xml Datei, so lange keine Menübänder bereits vorhanden sind.

Die 3 Ordner wären: der Relationship Ordner worin eine Rels-Datei ist, welche ich bearbeiten muss, da dort der Pfad zur CustomUI eingegeben wird, der nächste die docProbs und der letzte der xl Ordner - welche jedoch meines wissens nach nicht relevant sind.

Nun muss ich dort einen neuen Ordner erstellen, namens CustomUI und dort dann die XML Datei, also das Menüband, einfügen.

So mein erstes Problem wäre, ob ich das mit Visual Studio 2010 .Net Framework simpel hinbekommen kann, oder eine höheren Version sinnvoll wäre, da ein Problem davon ist das es ZipArchiveEntry und ZipArchive als Datentyp nicht erkennt.

Als Beispiel

Public Sub UpdateCustomUI(ByRef strCustomUI As String)
    'strCustomUI - Pfad und Name der CustomUI-Datei
    Dim bUIFound As Boolean = False
    Dim rels As ZipArchiveEntry = Nothing
    Dim customUI As ZipArchiveEntry = Nothing
    If Not System.IO.File.Exists(strCustomUI) Then
        MsgBox("Datei " & strCustomUI & " nicht gefunden!", MsgBoxStyle.Critical)
        Exit Sub
    End If
    Dim strName As String = System.IO.Path.GetFileName(strCustomUI)
    Using archive As ZipArchive = ZipFile.Open(DocName, ZipArchiveMode.Update)
        For Each entry As ZipArchiveEntry In archive.Entries
            If entry.FullName.EndsWith(strName, StringComparison.OrdinalIgnoreCase) Then
                entry.Delete()
                bUIFound = True
            ElseIf entry.FullName = "_rels/.rels" Then
                rels = entry
            End If
        Next
        If Not bUIFound Then 'CustomUI war noch nicht vorhanden und der Verweis muss eingefügt werden
            If rels Is Nothing Then
                MsgBox("Rels wurde nicht im Archiv gefunden!", vbCritical)
                Exit Sub
            Else
                AddReference(archive, rels)


            End If
        End If
        'Neue CustomUI einfügen
        archive.CreateEntryFromFile(strCustomUI, "customUI\" & strName)
    End Using

End Sub

Also, manuell funktioniert das alles wunderbar, ich schreib die xlsm als zip datei um, entpacke diesen, ändere die Rels Datei, erstelle einen neuen Ordner namens CustomUI und füge dort die xml Datei ein, markiere wieder jeden Ordner, sende sie an zip komprimierte Ordner und benenne diesen wieder um als xlsm Datei, führe diese aus - klickt auf Ansicht einblenden und das Menüband ist vorhanden.

Antwort
von geri3d, 30

Ich bin leider kein Experte aber hast Du auch die Imports gesetzt?

Imports System.IO
Imports System.IO.Compression

Natürlich bezieht sich dieser Artikel auf die aktuelle Version:
https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchiveentry%2...

Kommentar von Krautner ,

Ja habe ich selbstverständlich getan, wird aber vermutlich an der Framework version liegen, diese sind glaub erst in 4.5 enthalten...morgen mal kucken wenni wieder am PC bin ;) 

Keine passende Antwort gefunden?

Fragen Sie die Community