首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用.xla更改MSBuild文件

用.xla更改MSBuild文件
EN

Stack Overflow用户
提问于 2008-09-17 19:36:00
回答 3查看 4.5K关注 0票数 4

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

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

我不知道如何使这个过程自动化。我能想到的最好的就是一个excel宏或自动IT脚本。我也可以编写一个自定义的MSBuild任务,但这可能会.很棘手。还有其他人有其他建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-23 06:56:18

处理XLA文件版本控制的另一种方法是在Document中使用自定义属性。您可以使用COM访问和操作,如下所述:http://support.microsoft.com/?kbid=224351

这样做的好处是:

  • 可以在不打开XLA文件的情况下检查版本号。
  • 在构建机器上不需要Excel --只需要DsoFile.dll组件

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

代码语言:javascript
复制
'
'   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
票数 3
EN

Stack Overflow用户

发布于 2008-09-18 01:12:41

我不能百分之百地确定如何做你所要求的事情。但猜测你心中的目标有几种可能性。

1)使您的Globals的一部分(或全部)成为一个单独的文本文件,与.XLA一起分发,我将使用它作为外部引用,例如您的应用程序的其他版本。在构建时编写并分发,并在XLA的负载上读取。

2)我猜您正在编写应用程序的主组件(即非XLA部分)的版本。如果这是你为什么要把这个放在你的XLA里?为什么不让应用程序的主要部分允许某些版本的XLA工作。主应用程序的1.1版可以接受XLA 7.1-8.9版本的呼叫。

3) --如果您只是想更新XLA,以便将其包含在版本控制系统或类似系统中(我在这里猜测)--也许只需触摸文件就可以了。

如果这是你控制的应用程序的其他版本,我会把它放在一个文本文件中,并与XLA一起分发。

票数 1
EN

Stack Overflow用户

发布于 2008-09-18 13:44:09

您可以在Excel中以编程方式修改xla中的代码。您将需要引用可扩展性。组件。

皮尔逊公司的优秀网站上的示例应该可以让您开始学习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/86763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档