3

xll形式のExcelアドインのテストを自動化しようとしています。xllのロードに問題があります。私はそれをC#で書いています、そして私のコードは次のようになります:


using Microsoft.Office.Interop.Excel;

Application xlApp;
Workbook xlWorkBook;
Worksheet xlWorkSheet;

// create application, open workbook, etc ...
// now try to register xll
xlApp.RegisterXLL("C:\\SomePath\\Whatever.xll");

ただし、これは常にfalseを返します。マクロを記録してxllを手動でロードすると、Excelが密かに何をするかを確認しようとしています。マクロは次のようになります。


Sub Macro1()
ChDir "C:\SomePath"
Application.RegisterXLL Filename:= _
"C:\SomePath\Whatever.xll"
End Sub

唯一の違いはChDirのようですので、コードを次のように変更しました。


FileSystem.ChDir("C:\\SomePath");
xlApp.RegisterXLL("C:\\SomePath\\Whatever.xll");

しかし、それでも機能しません。もう1つの奇妙なことは、RegisterXLL行の前にブレークポイントを置き、最初にxllを手動でロードすると、RegisterXLLメソッドがtrueを返すことです。ただし、それ以外の場合はfalseを返します。

4

5 に答える 5

3

すべての提案をありがとう。

Excelアプリケーションのデフォルトのファイルパスを変更することで問題を解決しました。

Application.xlApp = new ApplicationClass();
xlApp.DefaultFilePath = "C:\\SomePath";
xlApp.RegisterXLL("Whatever.xll");
于 2010-07-19T13:18:34.870 に答える
2

はい、ChDirコマンドは重要な場合があります。これは、Windowsがwhatever.xllが依存するDLLを見つけるのに役立ちます。問題が解決しない理由は、FileSystem.ChDir()がExcelではなくテストプログラムの作業ディレクトリを変更するためです。

あなたができる全体の大騒ぎではありません。xllをデプロイすると、システムのPATH上にあるディレクトリが解決されます。実用的な解決策は、そのマクロを実行することです。

于 2010-07-07T16:32:03.543 に答える
1

これがあなたの質問に対する直接の答えではないことは知っていますが、VisualStudio内でのVSTOの使用を検討することをお勧めします。VSTOは、これらのタイプの問題の多くを自動化します。VS 2010のバージョンは、以前のバージョンよりもはるかに優れており、ドキュメントレベルのアドインだけでなく、アプリケーションレベルのアドインを構築できます。ユーザー定義関数が必要な場合は、ここで説明するようにCOMアドインを使用できます。

http://blogs.officezealot.com/whitechapel/archive/2005/04/10/4514.aspx

もともとはこの記事に基づいていました:

http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx

メインアプリケーションにはVSTOを、ユーザー定義関数にはCOMアドインを組み合わせて使用​​します。それの良いところは、それらが同じアプリドメインにロードされているので、お互いに話すことができるということです。

于 2010-07-07T18:55:10.200 に答える
1

適切な解決策は次のとおりです。

1-現在のディレクトリを次のように保存します

 string CurrentDir =   Directory.GetCurrentDirectory()

2-次に使用します

  Directory.SetCurrentDirectory(dirXll);

ここで、dirXllはxllの場所です(GetExecutingAssembly()を参照)。

3- xllをロードします(RegisterXLL)

4-そして最後にCurrentDirを使用して、現在のディレクトリを元の場所に戻します。

xllが依存しているすべてのdllをxllと同じフォルダに追加することを忘れないでください。

于 2015-11-14T02:29:32.037 に答える
0

ユーザー定義関数[UDF]をVBAコードにロードする際に問題が発生していました。xllファイルをロードできましたが、呼び出すことができませんでした。

次のコードはXLLファイルを正常にロードし、VBAコードからユーザー定義関数を呼び出しましょう。このモジュールには冗長な命令があるかもしれませんが、それは機能します!

Sub InstallAddIn()

On Error GoTo ErrorHandle

Application.DefaultFilePath = "D:\\MyFolder"

Application.RegisterXLL ("MyXLLFileName.xll")

Set AI = AddIns.Add(Filename:="D:\MyFolder\MyXLLFileName.xll")

    If AddIns("MyXLLFileName").Installed Then
       LogInformation ("My XLL is installed")
    Else
       LogInformation ("My XLL is NOT installed")
    End If
Exit Sub

ErrorHandle:

LogInformation ("------------------------") 'Logging function that I have written. Not a std api

LogInformation (Err.HelpFile)

LogInformation (Err.HelpContext)

LogInformation (Err.Description)

LogInformation ("Error in InstallAddIn module")

LogInformation ("------------------------")

End

End Sub
于 2013-08-26T13:29:05.217 に答える