gpt4 book ai didi

excel - 使用 MSBuild 更改 .xla 文件

转载 作者:行者123 更新时间:2023-12-02 10:58:15 25 4
gpt4 key购买 nike

我正在尝试为我当前的项目创建一个构建脚本,其中包括一个 Excel 插件。该插件包含一个 VBProject,其中包含带有变量 version_Number 的 modGlobal 文件。每次构建都需要更改此数字。具体步骤:

  1. 使用 Excel 打开 XLA 文档。
  2. 切换到 VBEditor 模式。 (Alt+F11)
  3. 打开 VBProject,输入密码。
  4. 打开 modGlobal 文件。
  5. 将变量的默认值更改为当前日期。
  6. 关闭并保存项目。

我不知道如何自动化该过程。我能想到的最好的办法是 Excel 宏或 Auto-IT 脚本。我还可以编写自定义 MSBuild 任务,但这可能会变得......棘手。还有其他人有其他建议吗?

最佳答案

处理 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

关于excel - 使用 MSBuild 更改 .xla 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/86763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com