提问人:David J. Sokol 提问时间:9/18/2008 最后编辑:CommunityDavid J. Sokol 更新时间:4/9/2014 访问量:4944
使用 MSBuild 更改 .xla 文件
Change .xla File with MSBuild
问:
我正在尝试为当前项目创建一个构建脚本,其中包括一个 Excel 加载项。加载项包含一个 VBProject,其中包含一个带有变量 version_Number 的 modGlobal 文件。每次生成都需要更改此数字。确切的步骤:
- 使用 Excel 打开 XLA 文档。
- 切换到 VBEditor 模式。(Alt+F11)
- 打开 VBProject,输入密码。
- 打开 modGlobal 文件。
- 将变量的默认值更改为当前日期。
- 关闭并保存项目。
我对如何自动化该过程感到茫然。我能想到的最好的是 excel 宏或 Auto-IT 脚本。我还可以编写自定义 MSBuild 任务,但这可能会得到......棘手。还有其他人有其他建议吗?
答:
我不是 100% 确定如何完全按照您的要求去做。但是猜测你心目中的目标,有几种可能性。
1) 将部分(或全部)全局变量设置为单独的文本文件,随 .XLA:我会将其用于外部引用,例如应用程序其余部分的版本。在构建时编写此内容并分发,并读取 XLA 的负载。
2)我猜你写的是应用程序的主要组件(即:非XLA部分)的版本。如果这是真的,为什么要将其存储在您的 XLA 中?为什么不让应用程序的主要部分允许某些版本的 XLA 工作。主应用程序的 1.1 版可以接受来自 XLA 7.1 - 8.9 版的呼叫。
3) 如果您只是想更新 XLA,以便将其包含在您的版本控制系统或类似系统中(我在这里猜测),也许只需触摸文件,让它看起来像是更改了。
如果它是您控制的应用程序其余部分的版本,我只需将其粘贴在文本文件中并将其与 XLA 一起分发即可。
您可以从 Excel 中以编程方式修改 xla 中的代码。您将需要对“Microsoft Visual Basic for Applications Extensibility.”组件的引用。
Chip Pearson优秀网站上的示例应该可以帮助您入门。
处理 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
评论