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:

  1. Ouvrez un document XLA avec Excel.
  2. Basculez en mode VBEditor. (Alt + F11)
  3. Ouvrez VBProject, entrez un mot de passe.
  4. Ouvrir le fichier modGlobal.
  5. Remplace la valeur par défaut de la variable par la date du jour.
  6. 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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top