使用 MSBuild 更改 .xla 文件
我正在尝试为我当前的项目创建一个构建脚本,其中包括一个 Excel 插件。 该插件包含一个 VBProject,其中包含带有变量 version_Number 的 modGlobal 文件。 每次构建都需要更改此数字。 具体步骤:
- 使用 Excel 打开 XLA 文档。
- 切换到 VBEditor 模式。 (Alt+F11)
- 打开 VBProject,输入密码。
- 打开 modGlobal 文件。
- 将变量的默认值更改为当前日期。
- 关闭& 保存项目。
我不知道如何自动化该过程。 我能想到的最好的办法是 Excel 宏或 Auto-IT 脚本。 我还可以编写自定义 MSBuild 任务,但这可能会变得……很棘手。 还有其他人有其他建议吗?
I'm trying to create a build script for my current project, which includes an Excel Add-in. The Add-in contains a VBProject with a file modGlobal with a variable version_Number. This number needs to be changed for every build. The exact steps:
- Open XLA document with Excel.
- Switch to VBEditor mode. (Alt+F11)
- Open VBProject, entering a password.
- Open modGlobal file.
- Change variable's default value to the current date.
- Close & save the project.
I'm at a loss for how to automate the process. The best I can come up with is an excel macro or Auto-IT script. I could also write a custom MSBuild task, but that might get... tricky. Does anyone else have any other suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以在 Excel 中以编程方式修改 xla 中的代码。 您将需要对“Microsoft Visual Basic for Applications Extensibility..”组件的引用。
Chip Pearson 的优秀网站 上的示例应该可以帮助您入门。
You can modify the code in the xla programmatically from within Excel. You will need a reference to the 'Microsoft Visual Basic for Applications Extensibility..' component.
The examples on Chip Pearson's excellent site should get you started.
我不是 100% 确定如何完全按照您的要求进行操作。 但猜测你心中的目标有几种可能性。
1) 将全局变量的一部分(或全部)设为与 .XLA 一起分发的单独文本文件,我会将其用于外部引用,例如应用程序其余部分的版本。 在构建时写入并分发,并在 XLA 的负载上读取。
2) 我猜您正在编写应用程序主要组件的版本(即:非 XLA 部分)。 如果这是真的,为什么要把它存储在您的 XLA 中? 为什么不让应用程序的主要部分允许某些版本的 XLA 工作。 主应用程序的版本 1.1 可以接受来自 XLA 版本 7.1 - 8.9 的调用。
3) 如果您只是想更新 XLA,以便将其包含在您的版本控制系统或类似系统中(我猜是这里),则可能只需触摸该文件,使其看起来像已更改。
如果它是您正在控制的应用程序其余部分的版本,我只需将其粘贴在文本文件中并与 XLA 一起分发。
I'm not 100% sure how to do exactly what you have requested. But guessing the goal you have in mind there are a few possibilities.
1) Make part (or all) of your Globals a separate text file that is distributed with the .XLA I would use this for external references such as the version of the rest of your app. Write this at build time and distribute, and read on the load of the XLA.
2) I'm guessing your writing the version of the main component (ie: the non XLA part) of your application. If this is tru why store this in your XLA? Why not have the main part of the app allow certain version of the XLA to work. Version 1.1 of the main app could accept calls from Version 7.1 - 8.9 of the XLA.
3) If you are just looking to update the XLA so it gets included in your version control system or similar (i'm guessing here) maybe just touch the file so it looks like it changed.
If it's the version of the rest of the app that you are controlling i'd just stick it in a text file and distribute that along with the XLA.
处理 XLA 文件版本控制的另一种方法是使用文档属性中的自定义属性。 您可以使用 COM 进行访问和操作,如下所述:http://support.microsoft.com/?kbid =224351。
这样做的优点是:
您可以在不打开 XLA 文件的情况下检查版本号
您的构建计算机上不需要 Excel - 只需要DsoFile.dll 组件
另一种替代方法是将版本号(可能还有其他配置数据)存储在 XLA 文件中的工作表上。 XLA 用户看不到该工作表。 我过去使用的一种技术是将加载项作为 XLS 文件存储在源代码管理中,然后作为构建过程的一部分(例如在构建后事件中)运行下面的脚本将其转换为 XLA输出目录。 该脚本可以轻松扩展以在保存之前更新工作表中的版本号。 就我而言,我这样做是因为我的 Excel 加载项使用 VSTO,而 Visual Studio 不直接支持 XLA 文件。
An alternative way of handling versioning of an XLA file is to use a custom property in Document Properties. You can access and manipulate using COM as described here: http://support.microsoft.com/?kbid=224351.
Advantages of this are:
You can examine the version number without opening the XLA file
You don't need Excel on your build machine - only the DsoFile.dll component
Another alternative would be to store the version number (possibly other configuration data too) on a worksheet in the XLA file. The worksheet would not be visible to users of the XLA. One technique I have used in the past is to store the add-in as an XLS file in source control, then as part of the build process (e.g. in a Post-Build event) run the script below to convert it to an XLA in the output directory. This script could be easily extended to update a version number in a worksheet before saving. In my case I did this because my Excel Add-in used VSTO, and Visual Studio doesn't support XLA files directly.