Pergunta

Eu estou tentando criar um script de construção para o meu projeto atual, que inclui um Excel Add-in. O Add-in contém uma VBProject com um arquivo modGlobal com uma variável VERSION_NUMBER. Este número precisa ser mudado para cada compilação. As etapas exatas:

  1. Abrir documento XLA com Excel.
  2. Mudar para o modo VBEditor. (Alt + F11)
  3. Open VBProject, digitar uma senha.
  4. Abrir arquivo modGlobal.
  5. valor padrão de mudança de variável para a data atual.
  6. Fechar e salvar o projeto.

Eu estou em uma perda para saber como automatizar o processo. O melhor que eu posso vir acima com é uma macro excel ou script Auto-IT. Eu também poderia escrever uma tarefa MSBuild personalizado, mas que pode ter ... complicado. Alguém tem alguma outra sugestão?

Foi útil?

Solução

Uma forma alternativa de lidar com versões de um arquivo de XLA é usar uma propriedade personalizada em Propriedades do documento. Você pode acessar e manipular usando COM, conforme descrito aqui: http://support.microsoft.com/?kbid = 224351 .

As vantagens desta são:

  • Você pode examinar o número da versão sem abrir o arquivo XLA

  • Você não precisa de Excel em sua máquina de construção - apenas o componente DsoFile.dll

Outra alternativa seria armazenar o número da versão (possivelmente outros dados de configuração também) em uma planilha no arquivo XLA. A planilha não seria visível para os usuários do XLA. Uma técnica que tenho usado no passado é para armazenar o add-in como um arquivo XLS no controle de origem, em seguida, como parte do processo de construção (por exemplo, em um evento pós-compilação) executar o script abaixo para convertê-lo em um XLA em o diretório de saída. Este script pode ser facilmente estendido para atualizar um número de versão em uma planilha antes de salvar. No meu caso eu fiz isso porque meu Excel Add-in VSTO usado, e não Visual Studio não suporta XLA arquivos diretamente.

'
'   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

Outras dicas

Eu não estou 100% de certeza de como fazer exatamente o que você pediu. Mas supondo que o objetivo que você tem em mente há algumas possibilidades.

1) Faça parte (ou a totalidade) dos seus Globals um arquivo de texto separado que é distribuído com o .XLA eu usaria isso para referências externas, como a versão do resto do seu aplicativo. Escreve isto em tempo de compilação e distribuir, e ler sobre a carga da XLA.

2) eu estou supondo que a sua escrita a versão do componente principal (ou seja: a parte não XLA) de sua aplicação. Se esta é tru por armazenar isso em seu XLA? Por que não ter a parte principal do aplicativo permitir que certa versão do XLA ao trabalho. A versão 1.1 do aplicativo principal pode aceitar chamadas a partir da Versão 7.1 -. 8.9 do XLA

3) Se você está olhando apenas para atualizar o XLA por isso é incluído em seu sistema de controle de versão ou similar (i estou supondo aqui) talvez apenas tocar o arquivo de modo que parece que mudou .

Se for a versão do resto do aplicativo que você está controlando eu tinha acabado de colocá-lo em um arquivo de texto e distribuir que, juntamente com o XLA.

Você pode modificar o código no xla programática a partir do Excel. Você vai precisar de uma referência para o 'Microsoft Visual Basic for Applications Extensibility ..' componente.

Os exemplos de Chip Pearson local excelente deve você começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top