Pregunta

Estoy intentando crear un script de compilación para mi proyecto actual, que incluye un complemento de Excel.El complemento contiene un VBProject con un archivo modGlobal con una variable version_Number.Este número debe cambiarse para cada compilación.Los pasos exactos:

  1. Abra el documento XLA con Excel.
  2. Cambie al modo VBEditor.(Alt+F11)
  3. Abra VBProject, ingresando una contraseña.
  4. Abra el archivo modGlobal.
  5. Cambie el valor predeterminado de la variable a la fecha actual.
  6. Cierra y guarda el proyecto.

No sé cómo automatizar el proceso.Lo mejor que se me ocurre es una macro de Excel o un script Auto-IT.También podría escribir una tarea personalizada de MSBuild, pero eso podría resultar...complicado.¿Alguien más tiene alguna otra sugerencia?

¿Fue útil?

Solución

Una forma alternativa de manejar el control de versiones de un archivo XLA es utilizar una propiedad personalizada en Propiedades del documento.Puede acceder y manipular usando COM como se describe aquí: http://support.microsoft.com/?kbid=224351.

Las ventajas de esto son:

  • Puede examinar el número de versión sin abrir el archivo XLA

  • No necesita Excel en su máquina de compilación, solo el componente DsoFile.dll

Otra alternativa sería almacenar el número de versión (posiblemente también otros datos de configuración) en una hoja de trabajo en el archivo XLA.La hoja de trabajo no sería visible para los usuarios de XLA.Una técnica que he usado en el pasado es almacenar el complemento como un archivo XLS en el control de código fuente y luego como parte del proceso de compilación (p. ej.en un evento posterior a la compilación) ejecute el siguiente script para convertirlo a XLA en el directorio de salida.Este script podría ampliarse fácilmente para actualizar un número de versión en una hoja de trabajo antes de guardarla.En mi caso, hice esto porque mi complemento de Excel usaba VSTO y Visual Studio no admite archivos XLA directamente.

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

Otros consejos

No estoy 100% seguro de cómo hacer exactamente lo que has solicitado.Pero acertando el objetivo que tienes en mente hay unas cuantas posibilidades.

1) Haga que parte (o la totalidad) de sus Globals sea un archivo de texto separado que se distribuya con .XLA. Lo usaría para referencias externas, como la versión del resto de su aplicación.Escriba esto en el momento de la compilación, distribúyalo y léalo durante la carga del XLA.

2) Supongo que estás escribiendo la versión del componente principal (es decir:la parte no XLA) de su aplicación.Si esto es cierto, ¿por qué guardarlo en su XLA?¿Por qué no hacer que la parte principal de la aplicación permita que funcione cierta versión de XLA?La versión 1.1 de la aplicación principal podría aceptar llamadas de la versión 7.1 - 8.9 de XLA.

3) Si solo está buscando actualizar el XLA para que se incluya en su sistema de control de versiones o similar (supongo que aquí), tal vez simplemente toque el archivo para que parezca que ha cambiado.

Si es la versión del resto de la aplicación la que estás controlando, simplemente la pegaría en un archivo de texto y lo distribuiría junto con el XLA.

Puede modificar el código en xla mediante programación desde Excel.Necesitará una referencia al componente 'Microsoft Visual Basic para extensibilidad de aplicaciones...'.

Los ejemplos en Excelente sitio de Chip Pearson debería ayudarte a empezar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top