1

C# から Excel にデータを書き込もうとしていますが、デバッグ中に例外があります。

タイプ 'System.__ComObject' の COM オブジェクトをインターフェイス タイプ 'Microsoft.Office.Interop.Excel.Range' にキャストできません。IID '{00020846-0000-0000-C000-000000000046}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーのために失敗したため、この操作は失敗しました:

コード :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication3
{
   class Program
  {
    static void Main(string[] args)
    {
        Excel.Application excelapp;
        Excel.Window excelWindow;
        Excel.Workbooks excelappworkbooks;
        Excel.Workbook excelappworkbook;
        Excel.Sheets excelsheets;
        Excel.Worksheet excelworksheet;
        Excel.Range excelcells;
        excelapp = new Excel.Application();
        excelapp.Visible = true;

        excelappworkbooks = excelapp.Workbooks;

        excelappworkbook = excelapp.Workbooks.Open(@"C:\Documents and Settings\дима\Мои документы\Visual Studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\bin\Debug\a.xls",
                           Type.Missing, Type.Missing, Type.Missing,
         "WWWWW", "WWWWW", Type.Missing, Type.Missing, Type.Missing,
          Type.Missing, Type.Missing, Type.Missing, Type.Missing,
          Type.Missing, Type.Missing);

        excelsheets = excelappworkbook.Worksheets;

        excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);
        excelcells = excelworksheet.get_Range("A1", "A1");

        excelcells.Value2 = 10.5;
       }
    }
  }
 }
4

4 に答える 4

1

タイプライブラリの競合のように見えます。複数のバージョンがインストールされている可能性があります。必要なタイプlibへの参照があることを確認してください

9.0 Excel 2000

10.0 Excel 2002

11.0 Excel 2003

12.0 Excel 2007

14.0 Excel 2010

参照を変更した後、ソリューションをクリーンアップし、完全に再コンパイルします。

于 2011-05-28T00:47:02.373 に答える
0

これは質問に直接答えているわけではありませんが、COM インターフェイスを介して Excel を制御するのに苦労している人をたくさん見てきました。

TMS Softwareから FlexCel というライブラリを入手しました。このライブラリを使用すると、マシンに Excel をインストールしなくても、完全にコードで Excel ワークシートを作成または操作できます。

他にも便利な機能がたくさんあります (PDF ファイルの書き込み、Excel テンプレートからの複雑なレポートの実行など)。

満足しているユーザーであることを除いて、私は会社とは何の関係もないことを指摘しておく必要があります.

于 2011-05-12T18:27:11.297 に答える
0

これを試してください: [プログラムの追加と削除] > [プログラムの変更または削除] タブに移動します。 Microsoft Office Professional 2003 に移動します。[サポート情報については、ここをクリック] リンクをクリックします。修復ボタンを使用してください。

これは私にとってはうまくいきました。

于 2011-05-13T11:13:40.617 に答える
0

以下をお試しいただき、ご連絡いただけますでしょうか。次のコードは C# 3.0 で動作するはずです

excelcells = excelworksheet.get_Range("A1", Type.Missing);

C# 4.0 を使用している場合は、次を使用します。

excelcells = excelworksheet.get_Range("A1");

また、常に try/catch ブロックを使用してコードを記述してください。

于 2011-05-13T06:56:09.460 に答える