Frage

Ich versuche, ein Build-Skript für ein aktuelles Projekt zu erstellen, die eine Excel-Add-in enthält. Die Add-in enthält eine VBProject mit einer Datei modGlobal mit einem variablen VERSION_NUMBER. Diese Zahl muss für jeden Build geändert werden. Die genauen Schritte:

  1. Öffnen XLA-Dokument mit Excel.
  2. Wechseln Sie in den VBEditor Modus. (Alt + F11)
  3. Öffnen VBProject, ein Kennwort einzugeben.
  4. Öffnen modGlobal Datei.
  5. Standardwert auf das aktuelle Datum des Änderungsvariable.
  6. Schließen und speichern Sie das Projekt.

Ich bin ratlos, wie Sie den Prozess zu automatisieren. Das Beste, was ich mit oben kommen kann ist ein Excel-Makro oder Auto-IT-Skript. Ich könnte auch eine benutzerdefinierte MSBuild Aufgabe schreiben, aber das könnte bekommen ... heikel. Hat jemand irgendwelche anderen Vorschläge?

War es hilfreich?

Lösung

Eine andere Möglichkeit, die Versionierung einer XLA-Datei von der Handhabung ist eine benutzerdefinierte Eigenschaft in Dokumenteigenschaften zu verwenden. Sie können mit COM Zugriff und Manipulation, wie hier beschrieben: http://support.microsoft.com/?kbid = 224.351 .

Die Vorteile hierfür sind:

  • Sie können die Versionsnummer prüfen, ohne die XLA-Datei zu öffnen

  • Sie müssen Excel nicht auf Ihrer Build-Maschine - nur die dsofile.dll Komponente

Eine weitere Alternative wäre die Versionsnummer zu speichern (möglicherweise auch andere Konfigurationsdaten auch) auf einem Arbeitsblatt in der XLA-Datei. Das Arbeitsblatt wäre nicht sichtbar für die Nutzer des XLA. Eine Technik, die ich in der Vergangenheit verwendet habe, ist die Add-In zu speichern, als XLS-Datei in der Quellcodeverwaltung, dann als Teil des Build-Prozesses (zB in einem Post-Build-Ereignisse) das Skript unten konvertieren es in eine XLA in das Ausgabeverzeichnis. Dieses Skript einfach eine Versionsnummer in einem Arbeitsblatt zu aktualisieren, vor dem Speichern erweitert werden kann. In meinem Fall habe ich das, weil meine Excel-Add-in verwendet VSTO und Visual Studio nicht XLA-Dateien direkt unterstützen.

'
'   ConvertToXla.vbs
'
'   VBScript to convert an Excel spreadsheet (.xls) into an Excel Add-In (.xla)
'
'   The script takes two arguments:
'
'   - the name of the input XLS file.
'
'   - the name of the output XLA file.
'
Option Explicit
Dim nResult
On Error Resume Next
nResult = DoAction
If Err.Number <> 0 Then 
    Wscript.Echo Err.Description
    Wscript.Quit 1
End If
Wscript.Quit nResult

Private Function DoAction()

    Dim sInputFile, sOutputFile

    Dim argNum, argCount: argCount = Wscript.Arguments.Count

    If argCount < 2 Then
        Err.Raise 1, "ConvertToXla.vbs", "Missing argument"
    End If

    sInputFile = WScript.Arguments(0)
    sOutputFile = WScript.Arguments(1)

    Dim xlApplication

    Set xlApplication = WScript.CreateObject("Excel.Application")
    On Error Resume Next 
    ConvertFileToXla xlApplication, sInputFile, sOutputFile
    If Err.Number <> 0 Then 
        Dim nErrNumber
        Dim sErrSource
        Dim sErrDescription
        nErrNumber = Err.Number
        sErrSource = Err.Source
        sErrDescription = Err.Description
        xlApplication.Quit
        Err.Raise nErrNumber, sErrSource, sErrDescription
    Else
        xlApplication.Quit
    End If

End Function

Public Sub ConvertFileToXla(xlApplication, sInputFile, sOutputFile)

    Dim xlAddIn
    xlAddIn = 18 ' XlFileFormat.xlAddIn

    Dim w
    Set w = xlApplication.Workbooks.Open(sInputFile,,,,,,,,,True)
    w.IsAddIn = True
    w.SaveAs sOutputFile, xlAddIn
    w.Close False
End Sub

Andere Tipps

Ich bin nicht 100% sicher, wie genau das zu tun, was Sie anzubieten. Aber raten das Ziel, das Sie im Sinn haben, gibt es ein paar Möglichkeiten.

1) Teil (oder alle) Ihr Globals einer separate Textdatei, die mit dem .XLA verteilt ich dies für externe Referenzen wie die Version des Restes Ihrer App verwenden würde. Schreiben Sie diese bei der Erstellung und Verteilung, und lesen Sie über die Last des XLA.

2) Ich vermute, Sie die Version der Hauptkomponente (sprich: der nicht XLA Teil) Ihre Anwendung. Wenn dies tru, warum dieses Geschäft in Ihrem XLA? Warum nicht der Hauptteil des App erlaubt bestimmte Version der XLA zu arbeiten. Version 1.1 der Haupt App Anrufe von Version 7.1 übernehmen könnte -. 8.9 des XLA

3) Wenn Sie gerade suchen, um die XLA zu aktualisieren, um sie in Ihrem Versionskontrollsystem oder ähnliches enthalten wird (ich vermute hier) vielleicht auch nur die Datei berühren, so dass es aussieht wie es geändert .

Wenn es die Version des Restes der Anwendung, die Sie i steuern nur um es in einer Textdatei bleiben würde und verteilen, dass zusammen mit dem XLA.

Sie können den Code in der XLA programmatisch in Excel ändern. Sie erhalten einen Hinweis auf die Notwendigkeit ‚für Anwendungserweiterbarkeit Microsoft Visual Basic ..‘ Komponente.

Die Beispiele auf Chip Pearson ausgezeichnete Website sollten Sie begonnen erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top