当前位置:首页> 正文

关于excel:使用MSBuild更改.xla文件

关于excel:使用MSBuild更改.xla文件

Change .xla File with MSBuild

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

  • 用Excel打开XLA文档。
  • 切换到VBEditor模式。 (Alt F11)
  • 打开VBProject,输入密码。
  • 打开modGlobal文件。
  • 将变量的默认值更改为当前日期。

  • 处理XLA文件版本控制的另一种方法是使用"文档属性"中的自定义属性。您可以按照以下说明使用COM进行访问和操作:http://support.microsoft.com/?kbid=224351。

    它的优点是:

    • 您可以在不打开XLA文件的情况下检查版本号

    • 您在构建计算机上不需要Excel-仅DsoFile.dll组件

    另一种选择是将版本号(可能也包括其他配置数据)存储在XLA文件中的工作表上。 XLA的用户看不到该工作表。我过去使用的一种技术是将加载项作为XLS文件存储在源代码管理中,然后作为构建过程的一部分(例如在Post-Build事件中)运行以下脚本以将其转换为XLA:输出目录。保存之前,可以轻松扩展此脚本以更新工作表中的版本号。就我而言,我这样做是因为我的Excel加载项使用VSTO,而Visual Studio不直接支持XLA文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    '
    '   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

    我不确定100%如何准确地执行您的要求。但是,猜测您要实现的目标有几种可能性。

    1)将部分(或全部)全局变量与.XLA分发在一起,成为一个单独的文本文件,我可以将其用作外部引用,例如应用程序其余部分的版本。在构建时编写并分发,然后阅读XLA的负载。

    2)我猜您正在编写应用程序的主要组件(即非XLA部分)的版本。如果这是tru,为什么将其存储在您的XLA中?为什么不让应用的主要部分允许XLA的某些版本正常工作。主应用程序的版本1.1可以接受来自XLA的版本7.1-8.9的呼叫。

    3)如果您只是想更新XLA,使其包含在您的版本控制系统或类似版本中(我猜是在这里),也许只需触摸该文件,以使其看起来已更改。

    如果这是您要控制的其余应用程序的版本,则将其粘贴在文本文件中,并将其与XLA一起分发。


    您可以在Excel中以编程方式修改xla中的代码。您将需要对" Microsoft Visual Basic for Applications Extensibility .."组件的引用。

    Chip Pearson优秀站点上的示例应帮助您入门。


  • 展开全文阅读

    相关内容