2008-09-17 7 views
2

J'essaye 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:Modifier le fichier .xla avec MSBuild

  1. Ouvrez le document XLA avec Excel.
  2. Passez en mode VBEditor. (Alt + F11)
  3. Ouvrez VBProject en entrant un mot de passe.
  4. Ouvrir le fichier modGlobal.
  5. Modifiez la valeur par défaut de la variable à la date actuelle.
  6. Fermez & enregistrez 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 ... difficile. Quelqu'un d'autre a-t-il d'autres suggestions?

Répondre

3

Une autre méthode de gestion des versions d'un fichier XLA consiste à utiliser une propriété personnalisée dans les propriétés du document. Vous pouvez accéder et manipuler en utilisant COM comme décrit ici: http://support.microsoft.com/?kbid=224351.

Les avantages de ce sont:

  • Vous pouvez examiner le numéro de version sans ouvrir le fichier XLA

  • Vous n'avez pas besoin Excel sur votre machine de construction - seulement le Dsofile.Composant 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 la XLA. Une technique que j'ai utilisée dans le passé est de stocker le complément en tant que fichier XLS dans le contrôle source, puis dans le cadre du processus de construction (par exemple dans un événement Post-Build), exécutez le script ci-dessous pour le convertir en XLA. le répertoire de sortie. Ce script peut être facilement étendu pour mettre à jour un numéro de version dans une feuille de calcul avant de l'enregistrer. Dans mon cas, j'ai fait cela parce que mon complément Excel utilisait VSTO, et Visual Studio ne supporte pas directement 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 
+0

Une autre façon à la version d'un XLA, est de stocker le numéro de version dans la propriété de commmand bar/barre d'outils si vous avez un (par exemple, stocker le verison dans l'info-bulle). Le code VBA peut être désynchronisé avec la barre de commande du code xla si vous échangez les fichiers xla. Comparer cette info-bulle avec le code VBA - avoir une fonction dans le code qui se compare avec la version de l'info-bulle avec le code. De là, vous pouvez ensuite supprimer la barre de commande et la reconstruire. J'espère que cela pourra aider. – ozmike

1

Je ne suis pas sûr à 100% comment faire exactement ce que vous avez demandé. Mais devinant l'objectif que vous avez en tête, il y a quelques possibilités.

1) Faire partie (ou la totalité) de votre Globals un fichier texte séparé qui est distribué avec le .XLA j'utiliser pour des références externes telles que la version du reste de votre application. Écrivez ceci au moment de la construction et distribuez, et lisez sur le chargement du XLA.

2) Je suppose que vous écrivez la version du composant principal (c'est-à-dire: la partie non XLA) de votre application. Si cela est pourquoi stocker dans votre XLA? Pourquoi ne pas avoir la partie principale de l'application permettant à certaines versions de la XLA de fonctionner. La version 1.1 de l'application principale pourrait accepter les appels de la version 7.1 - 8.9 de la XLA. Si vous cherchez simplement à mettre à jour le XLA afin qu'il soit inclus dans votre système de contrôle de version ou similaire (je devine ici) peut-être simplement toucher le fichier de sorte qu'il semble avoir changé.

Si c'est la version du reste de l'application que vous contrôlez, je la collerais dans un fichier texte et la distribuerais avec le XLA.

0

Vous pouvez modifier le code dans la xla par programmation depuis Excel. Vous aurez besoin d'une référence au composant 'Microsoft Visual Basic pour Applications Extensibility ..'.

Les exemples sur Chip Pearson's excellent site devraient vous aider à démarrer.

Questions connexes