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:
- Abra el documento XLA con Excel.
- Cambia al modo VBEditor. (Alt + F11)
- Abra VBProject, ingrese una contraseña.
- Abra el archivo modGlobal.
- Cambiar el valor predeterminado de la variable a la fecha actual.
- 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