2009-09-01 7 views
0

新しいExcelを作成するC#.netのコンソールアプリケーションを開発しました&は、[Interop]でいくつかの操作を実行します。VistaでのExcel 2007操作の例外

私は

コードがあまりにもVistaでXP &に正常に動作します私のプロジェクトに参照としてInterop.Microsoft.Office.Interop.Excel.dllを追加しました。私は、フォルダのいずれかで私のexeファイルを続ければしかし、それは

Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C0 00-000000000046} failed due to the following error: 80090006.

Unhandled Exception: System.Exception: Unhandled exception during execution ---> System.NullReferenceException: Object reference not set to an instance of an object.

誰もがこれが原因で任意のフォルダに設定されている可能性があり、より厳しい政策を可能することができるかどうか任意のアイデアを持っている私にexcceptionを与えます。私はこのexeファイルを別のフォルダにコピーするとexeファイルが完全に動作するので、これを求めています。

execptionがあるスローされるコードの一部、

/* Create spreadsheet update data */ 
InteropExcel.Workbook oWorkbook = null; 
InteropExcel.Worksheet oWorkSheet = null; 
InteropExcel.ApplicationClass appExcel = null; 

try 
{ 
    // Probable at this line 
    appExcel = new InteropExcel.ApplicationClass(); 

    oWorkbook = (InteropExcel.Workbook)appExcel.Workbooks.Add(true); 
    oWorkSheet = (InteropExcel.Worksheet)oWorkbook.ActiveSheet; 
    // ... 

私も、私はtry-catchブロックでこのコードを書かれているとしても、それを処理することはできませんよ。

誰でもそれを解決する方法はありますか?

おかげで、

アミット

答えて

0

これを引き起こしている可能性が何を確実に知ることは困難です。ですから、上記の元の質問を編集して返信したり、明確にすることができる最初のいくつかの質問。

(1) "Interop.Microsoft.Office.Interop.Excel.dll"を参照していると言えば、Microsoft.Office.Interop.Excel.dllを意味すると思いますか?

また、この参照のプロパティを確認すると、その場所がGACにあることが示されますか?これを確認するには、ソリューションエクスプローラでプロジェクトを展開し、参照を展開し、Microsoft.Office.Interop.Excel参照を右クリックしてPathプロパティを確認します。それがGACにある場合、Pathプロパティは "C:\ Windows \ Assembly \ GAC ..."で始まる必要があります。

(2)InteropExcelをどこかに定義するusingステートメントがあるようですか?このような何か:

using InteropExcel = Microsoft.Office.Interop.Excel; 

は、この正しいですかInteropExcel別個の基準ですか?

(3)あなたがexeを動かしていると言ったら、exeだけ、またはexeファイルと関連するファイルを保持するフォルダ全体を移動していますか? .NETアセンブリは自己完結型ではありません。exeと同じフォルダ内に、またはexeを保持する同じフォルダのサブフォルダ内にあるように、参照ファイル、設定ファイル、その他のファイルが必要です。すべてを一緒に動かすようにしてください。

(4)Visual Studio IDE内からホストされているデバッグモードでコードを実行して、例外をスローしている行を正確に把握する必要があります。私の推測では、あなたの最初の行はnullを返しているということです。

appExcel = new InteropExcel.ApplicationClass(); 

そして私はあなたの「appExcel」参照がnullであるため、あなたの次の行は、NullReferenceExceptionを投げていると思う:

oWorkbook = (InteropExcel.Workbook)appExcel.Workbooks.Add(true); 

(うーん..テストされていませんが、appExcel = new InteropExcel.ApplicationClass()への呼び出しが静かにnullを返すとは思わないでしょう。アプリケーションオブジェクトを正しく返すか、例外をスローすると思いますが、実際には、返すことで静かに失敗することはありませんnull。だけど、たぶん。そうでない場合は、表示されているコードのの外にの例外が発生している可能性があります。したがって、Visual Studio IDEでこれを実行して、どの回線が故障しているかを知ることができます。

(5)さらに、Workbooks.Addメソッドへの呼び出しが正しくありません。 Templateパラメータは、新しいワークブックのテンプレートとして機能するワークブックがある場合、それを決定するために使用されます。一般に、この引数を省略するために渡される引数はType.Missingである必要があります。これにより、既定の空白のブックに基づいて新しいブックが作成されます。引数を渡す場合は、新しいブックのテンプレートとして機能するブックへのフルパスを保持する文字列か、Excel.XlWBATemplate.xlWBATChartまたはExcel.XlWBATemplate.xlWBATWorksheetのような定数Excel.XlWBATemplateを使用して、ワークブックの種類を決定します作成した。ここでも、一般に、このパラメータはType.Missingを渡すことで省略する必要があります。 (この詳細については、Workbooks.Add Methodに役立つ参照。)

したがって、私はあなたがよりあなたの行を変更することを示唆している:

oWorkbook = (InteropExcel.Workbook)appExcel.Workbooks.Add(true); 

oWorkbook = (InteropExcel.Workbook)appExcel.Workbooks.Add(Type.Missing); 

(6)一般的に、あなたがしなければなりませんApplicationを使用し、ApplicationClassを使用しないでください。 Excel.Applicationはインターフェイスであり、newインターフェイスを作成することは矛盾しているように見えますが、これはMS Officeプログラムを自動化するときに行うべき方法です。 (この詳細については、Don't use ApplicationClass (unless you have to)Excel interop: _Worksheet or Worksheet?を参照してください。)

したがって、あなたの行:

InteropExcel.ApplicationClass appExcel = null; 
appExcel = new InteropExcel.ApplicationClass(); 

ではなく、次のようになります。

InteropExcel.Application appExcel = null; 
appExcel = new InteropExcel.Application(); 

私が原因となっているこれらの問題のどれかわかりませんあなたの問題は、おそらくそれらのうちのいくつかはここでプレー中ですが、それらのすべてがチェックされ、そして/または訂正されるべきです。うまくいけば、これらのうちの1つがあなたの問題を修正するでしょう。

これらのどれも修正されていない場合は、強調表示しているこれらのアイテムのすべてに関する情報をポストバックしてください。

私は私の指があなたのために渡ったんだ

...

マイク

0

使用して、(コンソールアプリケーションを含む)の.NETアプリケーションからの展開が容易とCOM相互運用機能を介したエクセルよりもはるかに高速です。

無料トライアルhereをダウンロードできます。

免責事項:私はSpreadsheetGear LLCを所有しています

関連する問題