これを引き起こしている可能性が何を確実に知ることは困難です。ですから、上記の元の質問を編集して返信したり、明確にすることができる最初のいくつかの質問。
(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つがあなたの問題を修正するでしょう。
これらのどれも修正されていない場合は、強調表示しているこれらのアイテムのすべてに関する情報をポストバックしてください。
私は私の指があなたのために渡ったんだ
...
マイク