Domanda

Sto cercando di creare uno script di compilazione per il mio progetto attuale, che include un componente aggiuntivo di Excel.Il componente aggiuntivo contiene un VBProject con un file modGlobal con una variabile version_Number.Questo numero deve essere modificato per ogni build.I passaggi esatti:

  1. Apri il documento XLA con Excel.
  2. Passa alla modalità VEditor.(Alt+F11)
  3. Apri VBProject, inserendo una password.
  4. Apri il file modGlobal.
  5. Cambia il valore predefinito della variabile nella data corrente.
  6. Chiudi e salva il progetto.

Non so come automatizzare il processo.Il meglio che riesco a trovare è una macro Excel o uno script Auto-IT.Potrei anche scrivere un'attività MSBuild personalizzata, ma ciò potrebbe ottenere...scaltro.Qualcun altro ha altri suggerimenti?

È stato utile?

Soluzione

Un modo alternativo per gestire il controllo delle versioni di un file XLA consiste nell'utilizzare una proprietà personalizzata in Proprietà del documento.È possibile accedere e manipolare utilizzando COM come descritto qui: http://support.microsoft.com/?kbid=224351.

I vantaggi di questo sono:

  • È possibile esaminare il numero di versione senza aprire il file XLA

  • Non è necessario Excel sul computer di compilazione: solo il componente DsoFile.dll

Un'altra alternativa potrebbe essere quella di memorizzare il numero di versione (eventualmente anche altri dati di configurazione) su un foglio di lavoro nel file XLA.Il foglio di lavoro non sarebbe visibile agli utenti di XLA.Una tecnica che ho utilizzato in passato è stata quella di archiviare il componente aggiuntivo come file XLS nel controllo del codice sorgente, quindi come parte del processo di compilazione (ad es.in un evento post-compilazione) esegui lo script seguente per convertirlo in un XLA nella directory di output.Questo script può essere facilmente esteso per aggiornare un numero di versione in un foglio di lavoro prima di salvarlo.Nel mio caso l'ho fatto perché il mio componente aggiuntivo di Excel utilizzava VSTO e Visual Studio non supporta direttamente i file 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

Altri suggerimenti

Non sono sicuro al 100% di come fare esattamente ciò che hai richiesto.Ma indovinando l'obiettivo che hai in mente ci sono alcune possibilità.

1) Rendi parte (o tutti) dei tuoi Globals un file di testo separato distribuito con .XLA. Lo userei per riferimenti esterni come la versione del resto della tua app.Scrivilo al momento della compilazione, distribuiscilo e leggi il caricamento di XLA.

2) Immagino che tu stia scrivendo la versione del componente principale (ovvero:la parte non XLA) della tua domanda.Se questo è vero, perché memorizzarlo nel tuo XLA?Perché la parte principale dell'app non consente il funzionamento di determinate versioni di XLA.La versione 1.1 dell'app principale potrebbe accettare chiamate dalla versione 7.1 - 8.9 dell'XLA.

3) Se stai solo cercando di aggiornare XLA in modo che venga incluso nel tuo sistema di controllo della versione o simile (immagino qui) forse basta toccare il file in modo che sembri cambiato.

Se è la versione del resto dell'app che stai controllando, la inserirei semplicemente in un file di testo e lo distribuirò insieme a XLA.

È possibile modificare il codice in xla a livello di codice da Excel.Sarà necessario un riferimento al componente "Microsoft Visual Basic for Applications Extensibility...".

Gli esempi su L'eccellente sito di Chip Pearson dovrebbe farti iniziare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top