Changer le fichier .xla avec MSBuild
Question
J'essaie de créer un script de construction pour mon projet actuel, qui inclut un complément Excel. Le complément contient un VBProject avec un fichier modGlobal avec une variable version_Number. Ce nombre doit être changé pour chaque build. Les étapes exactes:
- Ouvrez un document XLA avec Excel.
- Basculez en mode VBEditor. (Alt + F11)
- Ouvrez VBProject, entrez un mot de passe.
- Ouvrir le fichier modGlobal.
- Remplace la valeur par défaut de la variable par la date du jour.
- Fermer & amp; enregistrer le projet.
Je ne sais pas comment automatiser le processus. Le mieux que je puisse trouver est une macro Excel ou un script Auto-IT. Je pourrais aussi écrire une tâche MSBuild personnalisée, mais cela pourrait être… compliqué. Quelqu'un d'autre a-t-il d'autres suggestions?
La solution
Une autre façon de gérer le contrôle de version d'un fichier XLA consiste à utiliser une propriété personnalisée dans les propriétés du document. Vous pouvez accéder et manipuler à l'aide de COM comme décrit ici: http://support.microsoft.com/?kbid = 224351 .
Les avantages sont:
-
Vous pouvez examiner le numéro de version sans ouvrir le fichier XLA
-
Vous n'avez pas besoin d'Excel sur votre machine de génération, mais uniquement du composant DsoFile.dll
Une autre alternative serait de stocker le numéro de version (éventuellement d'autres données de configuration) sur une feuille de calcul dans le fichier XLA. La feuille de calcul ne serait pas visible pour les utilisateurs de XLA. Une technique que j’ai utilisée par le passé consiste à stocker le complément en tant que fichier XLS dans le contrôle de code source, puis, dans le cadre du processus de construction (par exemple, lors d’un événement post-construction), exécutez le script ci-dessous pour le convertir en fichier XLA en le répertoire de sortie. Ce script pourrait être facilement étendu pour mettre à jour un numéro de version dans une feuille de calcul avant de l'enregistrer. Dans mon cas, je l'ai fait parce que mon complément Excel utilisait VSTO et que Visual Studio ne prend pas directement en charge les fichiers XLA.
'
' 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
Autres conseils
Je ne suis pas sûr à 100% de savoir comment faire exactement ce que vous avez demandé. Mais en devinant le but que vous avez en tête, il y a quelques possibilités.
1) Faites de votre Globals (ou de tous ses membres) un fichier texte séparé, distribué avec .XLA. Je l'emploierais pour des références externes telles que la version du reste de votre application. Écrivez-le au moment de la construction, distribuez-le et lisez-le sur la charge de XLA.
2) Je suppose que vous écrivez la version du composant principal (c'est-à-dire: la partie non XLA) de votre application. Si c'est vraiment le cas, pourquoi le stocker dans votre XLA? Pourquoi ne pas laisser la partie principale de l'application permettre à certaines versions de XLA de fonctionner. La version 1.1 de l'application principale peut accepter les appels des versions 7.1 à 8.9 de XLA.
3) Si vous souhaitez simplement mettre à jour XLA afin qu'il soit inclus dans votre système de contrôle de version ou similaire (je suppose que c'est ici), il vous suffit peut-être de toucher le fichier pour qu'il ait changé. .
S'il s'agit de la version du reste de l'application que vous contrôlez, il suffit de la coller dans un fichier texte et de la distribuer avec le XLA.
Vous pouvez modifier le code dans xla par programmation à partir d’Excel. Vous aurez besoin d'une référence au composant 'Microsoft Visual Basic pour Applications Extensibility ..'.
Les exemples de l'excellent site de Chip Pearson devraient vous aider à démarrer.