2

Excel 2003 ファイルからデータを自動的に読み取るバックグラウンド サービス アプリケーションを作成しています。しかし、何を試しても、アドレス「00000800」から読み取ろうとすると、メソッド OlePropertyGet() は常に EAccessViolation エラーになります。

エラーは常にこのコード スニペットの最後の行で発生し、メソッドが受け取るパラメーターとは無関係のようです。

Variant excel, workbooks;

try
{
    excel = GetActiveOleObject("Excel.Application");
}
catch(...)
{
    excel = CreateOleObject("Excel.Application");
}

workbooks = excel.OlePropertyGet("Workbooks");

私はこれについていくつかの広範なGoogle検索を行いましたが、リモートでさえ役立つものは何も見つかりませんでした.誰かが同じ問題を抱えているこのフォーラムスレッドだけですが、原因や解決策についての情報を提供していません.著者は原因を知っていると述べていますが、それが何であるかは述べていません!)。

これを引き起こしている原因とこの問題を解決する方法についてのアイデアだけでなく、Excel OLE オートメーションへの代替アプローチも歓迎します。

4

4 に答える 4

2

私の推測では、ヌルポインタの問題です..

GetActiveOleObject()どちらも機能していないように見えますCreateOleObject()

を呼び出す前に、'excel' の有効性を確認してくださいOlePropertyGet

また、Excel がインストールされていることを確認する必要があると思います。

于 2009-09-04T13:57:59.747 に答える
1

Visual Studio Tools for Office を使用できます ( http://msdn.microsoft.com/en-us/library/d2tx7z6d.aspxを参照)。

または、ATL サポートを使用して、Office が提供するオブジェクト モデルをインスタンス化することもできます。

于 2009-04-03T14:06:26.967 に答える
0

コードが "Excel.Application" を正常に解決できず、null ポインターになる可能性があります。その文字列でレジストリ ルックアップを使用して、Excel を識別します。そのレジストリ エントリが欠落しているようです。

于 2010-01-13T15:16:41.017 に答える