4

Excel アドインを含む現在のプロジェクト用のビルド スクリプトを作成しようとしています。アドインには、変数 version_Number を持つファイル modGlobal を含む VBProject が含まれています。この番号は、ビルドごとに変更する必要があります。正確な手順:

  1. XLA ドキュメントを Excel で開きます。
  2. VBEditor モードに切り替えます。(Alt+F11)
  3. パスワードを入力して VBProject を開きます。
  4. modGlobal ファイルを開きます。
  5. 変数のデフォルト値を現在の日付に変更します。
  6. プロジェクトを閉じて保存します。

プロセスを自動化する方法がわかりません。私が思いつく最善の方法は、Excel マクロまたは Auto-IT スクリプトです。カスタムの MSBuild タスクを作成することもできますが、それは難しいかもしれません。他に何か提案はありますか?

4

3 に答える 3

3

XLAファイルのバージョン管理を処理する別の方法は、ドキュメントのプロパティでカスタムプロパティを使用することです。http://support.microsoft.com/?kbid=224351で説明されているように、COMを使用してアクセスおよび操作できます。

これの利点は次のとおりです。

  • XLAファイルを開かなくてもバージョン番号を調べることができます

  • ビルドマシンにExcelは必要ありません。DsoFile.dllコンポーネントのみが必要です。

もう1つの方法は、バージョン番号(場合によっては他の構成データも)をXLAファイルのワークシートに保存することです。ワークシートはXLAのユーザーには表示されません。私が過去に使用した手法の1つは、アドインをXLSファイルとしてソース管理に保存し、ビルドプロセスの一部として(ビルド後のイベントなどで)、以下のスクリプトを実行して、でXLAに変換することです。出力ディレクトリ。このスクリプトは、保存する前にワークシートのバージョン番号を更新するように簡単に拡張できます。私の場合、ExcelアドインがVSTOを使用し、VisualStudioが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
于 2008-09-23T06:56:18.500 に答える
1

あなたが要求したことを正確に行う方法が 100% わかりません。しかし、あなたが念頭に置いている目標を推測すると、いくつかの可能性があります。

1)グローバルの一部 (またはすべて) を、.XLA と共に配布される個別のテキスト ファイルにします。アプリの残りのバージョンなどの外部参照にこれを使用します。ビルド時にこれを記述して配布し、XLA のロード時に読み取ります。

2)アプリケーションのメイン コンポーネント (つまり、非 XLA 部分) のバージョンを書いていると思います。これが本当なら、なぜこれを XLA に保存するのですか? アプリの主要部分で、特定のバージョンの XLA が機能することを許可しないのはなぜですか。メイン アプリのバージョン 1.1 は、XLA のバージョン 7.1 ~ 8.9 からの呼び出しを受け入れることができました。

3)バージョン管理システムなどに含まれるように XLA を更新するだけの場合 (ここでは推測しています)、変更されたように見えるようにファイルをタッチするだけです。

制御しているアプリの残りのバージョンの場合は、それをテキスト ファイルに貼り付けて、XLA と共に配布します。

于 2008-09-18T01:12:41.857 に答える
0

Excel 内からプログラムで xla のコードを変更できます。「Microsoft Visual Basic for Applications Extensibility..」コンポーネントへの参照が必要になります。

Chip Pearson の優れたサイトにある例を参考にしてください。

于 2008-09-18T13:44:09.367 に答える