質問

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

  1. XLA ドキュメントを Excel で開きます。
  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 コンポーネントのみが必要です。

もう 1 つの方法は、バージョン番号 (おそらく他の構成データも) を XLA ファイル内のワークシートに保存することです。ワークシートは XLA のユーザーには表示されません。私が過去に使用したテクニックの 1 つは、アドインをソース管理に 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

他のヒント

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

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

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

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

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

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

の例 チップ・ピアソンの素晴らしいサイト 始めましょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top