2011-03-09 85 views
1

C#dotnet v1.1アプリケーションを3.5にアップグレードしています。これは年間の、および1.1での私のデスクトップ上の生産に喜んで実行しているアプリですので、私は何かが1.1と3.5タイプ 'System .__ ComObject'のCOMオブジェクトをインターフェイスタイプ 'Excel._Workbook'にキャストすることができません

フル例外の間エクセルCOMのためのAPIに変更されますと仮定しています:

InvalidClassCastException was unhandled 
Unable to cast COM object of type 'System.__ComObject' to interface type 'Excel._Workbook'. 

次のエラーのため、IID '{000208DA-0000-0000-C000-000000000046}'のインターフェイスのCOMコンポーネントのQueryInterface呼び出しが失敗しました: このようなインターフェイスはサポートされていません(HRESULTからの例外:0x80004002(E_NOINTERFACE ))。

コード:

Excel.ApplicationClass excel = new Excel.ApplicationClass(); 
excel.Application.Workbooks.Add(true); 
((Excel.Range)excel.Cells[1,1]).EntireRow.Font.Bold = true;  

excel.Cells[1,1] = "col a"; 
excel.Cells[1,2] = "col b"; 
excel.Cells[1,3] = "col c"; 

// here loop and populate rows, nothing special just as above, all strings 

excel.Visible = true; 

Excel.Worksheet worksheet = (Excel.Worksheet)excel.ActiveSheet; 
((Excel._Workbook)worksheet).Activate(); 

どのように私はこの問題を解決するのですか? MSDN社会のthis postが示唆したように、私はExcel.ApplicationClassからまずExcel.Applicationに名前を変更しようとしたが、運:(

+1

本はシートの集まりです。ワークシートをワークブックにキャストすると、大きな音が出るはずです。それが以前にどのように機能するかは、私には非常に不思議です。 –

+0

一般的には、PIAで '_'を前に付けたクラス(およびいくつかのインターフェイス?)を*使用しません。これらは「内部」とみなされるべきであり、PIA階層は非常にうまく変わっているかもしれない。 –

答えて

1

が答えを判明は

;-)おっと、ワークシートではなく、ワークブックにアクティブに呼び出すことはありません
((Excel._Worksheet)worksheet).Activate(); 
関連する問題