xlam proyecto online desproteger crear convert complementos como archivo abrir excel excel-vba msbuild build-automation xla

excel - proyecto - Cambie el archivo.xla con MSBuild



xla excel (3)

Intento 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. Cambia al modo VBEditor. (Alt + F11)
  3. Abra VBProject, ingrese una contraseña.
  4. Abra el archivo modGlobal.
  5. Cambiar el valor predeterminado de la variable a la fecha actual.
  6. Cierre y guarde el proyecto.

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


No estoy 100% seguro de cómo hacer exactamente lo que ha solicitado. Pero adivinar el objetivo que tiene en mente hay algunas posibilidades.

1) Haga una parte (o la totalidad) de sus Globals en un archivo de texto separado que se distribuye con .XLA. Utilizaría esto para referencias externas, como la versión del resto de su aplicación. Escriba esto en el momento de la compilación y distribúyalo y lea sobre la carga del XLA.

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

3) Si solo buscas actualizar el XLA para que esté incluido en tu sistema de control de versiones o similar (supongo que aquí), tal vez solo toques el archivo para que parezca que ha cambiado.

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


Puede modificar el código en el xla mediante programación desde Excel. Necesitará una referencia al componente ''Microsoft Visual Basic for Applications Extensibility ..''.

Los ejemplos en el excelente sitio de Chip Pearson deberían ayudarlo a comenzar.


Una forma alternativa de manejar las versiones de un archivo XLA es usar una propiedad personalizada en Propiedades del documento. Puede acceder y manipular utilizando 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, luego como parte del proceso de compilación (por ejemplo, en un evento Post-Build) ejecute el script a continuación para convertirlo a un XLA en el directorio de salida. Este script podría extenderse fácilmente para actualizar un número de versión en una hoja de trabajo antes de guardarlo. En mi caso, hice esto porque mi complemento de Excel usa 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