我正在尝试为我当前的项目创建一个构建脚本,其中包含一个Excel加载项。该加载项包含一个带有modGlobal文件的VBProject,其中包含一个变量version_Number。每个构建都需要更改此数字。具体步骤:
我对如何自动化这个过程感到茫然。我能想到的最好的是excel宏或Auto-IT脚本。我也可以写一个自定义的MSBuild任务,但这可能会变得棘手。还有其他人有其他建议吗?
答案 0 :(得分:3)
处理XLA文件版本控制的另一种方法是在“文档属性”中使用自定义属性。您可以按照此处所述访问和操作COM:http://support.microsoft.com/?kbid=224351。
这样做的好处是:
您可以在不打开XLA文件的情况下检查版本号
您的构建计算机上不需要Excel - 只需要DsoFile.dll组件
另一种替代方法是将版本号(也可能是其他配置数据)存储在XLA文件中的工作表上。 XLA的用户不会看到工作表。我过去使用的一种技术是将加载项作为XLS文件存储在源代码控制中,然后作为构建过程的一部分(例如,在构建后事件中)运行下面的脚本以将其转换为XLA输出目录。在保存之前,可以轻松扩展此脚本以更新工作表中的版本号。在我的情况下,我这样做是因为我的Excel加载项使用了VSTO,而Visual Studio不直接支持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
答案 1 :(得分:1)
我不是100%确定如何完全按照您的要求行事。但是猜测你想到的目标有几种可能性。
1)将您的Globals的一部分(或全部)作为与.XLA一起分发的单独文本文件。我会将其用于外部引用,例如应用程序其余部分的版本。在构建时写下这个并分发,并阅读XLA的负载。
2)我猜你正在编写你的应用程序的主要组件版本(即:非XLA部分)。如果这是真的,为什么要将它存储在你的XLA中?为什么不让应用程序的主要部分允许某些版本的XLA工作。主应用程序的1.1版可以接受来自XLA版本7.1 - 8.9的调用。
3)如果您只是想更新XLA以便它包含在您的版本控制系统中或类似(我在这里猜测)可能只是触摸该文件,使其看起来像是已更改
如果它是您正在控制的应用程序其余部分的版本,我只需将其粘贴在文本文件中,然后将其与XLA一起分发。
答案 2 :(得分:0)
您可以在Excel中以编程方式修改xla中的代码。您将需要对“Microsoft Visual Basic for Applications Extensibility ..”组件的引用。
Chip Pearson's excellent site上的示例可以帮助您入门。