|
分類:[.NET 全般]
開発環境:WindowsXP SP2 Office2003 使用言語:VS2005.NET
初めて質問をさせて頂きます。 様々な掲示板を参考にして、調べてみたのですが解決できませんでした。 現在、VB.NETからEXCELを操作して、表やグラフを作成しています。
「障害現象」 1.1つのBOOKに2つのシートを出力するアプリケーションを実行させます。 2.正常終了し、出来上がったEXCELを確認します。 3.次に1つのBOOKに5つのシートを出力するアプリケーションを実行させます。 すると、3つめのシートを作成しようとした際に、エラーとなってしまいます。 デバッグで確認した内容が、poExcelWorksheets配下にあるCountが前回出力した、 2シートを保持しており、3シートめを作成したときのExceptionのメッセージが インデックスが無効です。 (HRESULT からの例外: 0x8002000B (DISP_E_BADINDEX))となってしまいます。 4.使用しているオブジェクトは全て、 System.Runtime.InteropServices.Marshal.ReleaseComObject(aoComObject)の処理にて解放しています。
「実装方法」 同じようなアプリケーションを複数作成しますので、EXCEL操作関連をDLL化しています。 ここでいう、EXCEL操作とは ・EXCELアプリケーションの作成 ・EXCELブック、シートの作成 ・新しくシートの追加 ・グラフ作成 など 上記内容の処理を行っています。
質問1:COMコンポーネントを使用して際の、DLL化はそもそもできるものなのでしょうか?
質問2:様々なサイトで、EXCELコンポーネントの解放には十分注意してコーディングを行うと あったので、サンプルコードを実行を行ってみると、以下の部分でエラーとなってしまいます。 ここでは、DLL化せずにアプリケーション自身内で定義したオブジェクトに対して操作しています。 なぜでしょうか?
poExcelApplication = New Microsoft.Office.Interop.Excel.Application poExcelWorkbooks = poExcelApplication.Workbooks poExcelWorkbook = poExcelWorkbooks.Add poExcelWorksheets = poExcelWorkbook.Worksheets(1) ← ここでエラー poExcelWorksheet = poExcelWorksheets
サンプルコードをそのまま使用してもエラーにしまい、どうすることもできません。 ひょっとすると、私のコーディング方法にまだ問題があるかもしれませんが。
前にも記述しましたが、EXCELコンポーネントの解放は他のサイトでも取り上げられていますが、 解決方法、間違いをご指摘、ご教授をお願い致します。
|