Ändern .xla Datei mit MSBuild
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:
- Öffnen XLA-Dokument mit Excel.
- Wechseln Sie in den VBEditor Modus. (Alt + F11)
- Öffnen VBProject, ein Kennwort einzugeben.
- Öffnen modGlobal Datei.
- Standardwert auf das aktuelle Datum des Änderungsvariable.
- 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?
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.