web-dev-qa-db-ja.com

C#でExcelブックを作成するときのクラスが登録されていないエラー

次のコードを使用してExcelスプレッドシートにアクセスしようとすると、Office 2007(ver 12)がインストールされたVisual Studio 2012からC#を使用してワークブックオブジェクトwrkbukを定義するときに「ライブラリが登録されていません」エラーが表示されます

Microsoft.Office.Interop.Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application();
        string bookname = @"C:\Users\Public\Documents\RECRUITMENT & SELECTION\MOVEMENTS\MOVEMENTS\Miscellaneous Documents\VacanciesREAL.xls";
        Workbook wrkbuk = excapp.Workbooks.Open(bookname); 
        Worksheet wrksht = new Worksheet();

エラーの詳細は

System.InvalidCastExceptionは処理されませんでしたHResult = -2147467262
Message =「Microsoft.Office.Interop.Excel.ApplicationClass」型のCOMオブジェクトを「Microsoft.Office.Interop.Excel._Application」型のインターフェースにキャストできません。 IID '{000208D5-0000-0000-C000-000000000046}'のインターフェイスのCOMコンポーネントでのQueryInterface呼び出しが次のエラーのために失敗したため、この操作は失敗しました:ライブラリが登録されていません。 (HRESULTからの例外:0x8002801D(TYPE_E_LIBNOTREGISTERED))。 Source = mscorlib

VS 2012に付属しているOffice 14プライマリ相互運用機能アセンブリでMicrosoft.Office.Interop.Excel.dllへの参照を作成しました。これは、Office 12バージョンのdll用でもあり、どちらも問題を修正しません。 Regasmでdllを登録しようとしましたが、これも役に立ちません。

次の行でワークシートwrkshtを作成できます。Office14およびOffice 12のdllを使用すると、問題はワークブックの定義にのみ影響するようです。

2013年12月17日

Office 2007を再インストールしようと試みましたが、このソリューションは見つかりませんでした。でした

http://social.msdn.Microsoft.com/Forums/vstudio/en-US/d3f92da7-96d3-404b-89d0-d236800ceae5/vs-2012-rc-and-visual-studio-tools-for- office?forum = vsto

問題はOfficeの複数のバージョンのコードです-Office 14のコードがあり、おそらくVS 2012のインストールに由来します

VS 2012 RCがOffice 2013タイプライブラリをインストールし、現在、重複したバージョンが登録されていると思われます。特定のエラーメッセージが表示されました

(「アプリケーションをキャストできません」....「TYPE_E_LIBNOTREGISTERED」)

乱雑なアンインストールの後、古いバージョンのOfficeを再インストールします。私はここで別のフォーラムスレッドのアドバイスに従って解決しましたが、残念ながら見つけることができません...基本的に、エラーメッセージでCLSIDをレジストリで検索したので、{00020970-0000-0000-C000-000000000046}。そのレジストリキーには2つのキーが含まれており、そのうちの1つは「TypeLib」と呼ばれ、タイプライブラリの別のCLSIDが含まれていました。次に、レジストリを検索し、最初からもう一度、その2番目のCLSIDを検索し、関連する相互運用タイプライブラリに移動しました。 8.3と8.4の2つのエントリがありました。大きい番号は、Officeの新しいバージョンに対応しています。削除したもので、すぐにプログラムを実行できました。

33
SimonKravis

これとまったく同じ問題がありました。修正方法は次のとおりです。

に行く

_HKEY_CLASSES_ROOT\TypeLib\_および_Office.Interop.Excel_を検索します。

HKEY_CLASSES_ROOT\TypeLib\(guid)\1.8が見つかりましたが、その子ノードは空でした!削除しましたそのマシンにOffice 15がインストールされていなかったため、そしてそれはうまくいきました。

VSTOプロジェクトインストーラーまたは独自のカスタムインストーラーが1.8フォルダーをそこに配置している必要があります。

私はここで解決策を見つけました:

COMコンポーネントへのアクセスエラー

32
stuzor

私はまったく同じ問題を抱えていました。新しいバージョンのOfficeをインストールしていて、何らかの理由で新しいバージョンを削除せずに古いバージョンをインストールする必要がある場合(私の場合は、Office XP Photo Editor)をインストールするだけです)これが問題の原因でした。

上下に3時間を費やした後の最善の方法は、新しいバージョンのOfficeを修復することであり、すべてが正常に戻ったはずです。

この情報が、同じまたは類似のシナリオを提供するのに役立つことを願っています。

7
Anand

私が遭遇した2台のマシンで@stuzorの答えを確認します。

バックグラウンド:

Windows7 64 bit
Office 2010 (32bit) 
Lync 2013 

HKEY_CLASSES_ROOT\TypeLib \、「Office.Interop.Excel」を検索しました。かろうじて存在する「1.8」フォルダが見つかりました。削除すると、古いVB.netアプリの機能がすぐに機能し始めました。

6
matt.bungard

ここでは言及していませんが、有用な可能性があるのは、1.XXのサブキーも問題を引き起こす可能性があることです。例:Computer\HKEY_CLASSES_ROOT\TypeLib {00020813-0000-0000-C000-000000000046}サブキー1.9がありました。これには、サブキー(またはshould)があります。この下に、twoサブキーがありました-Win32およびWin64。その結果、Visual StudioはMicrosoft.Office.Interop.Excel.dllの場所を解決できませんでした。1つしか読み取れないサブキーを2つ読み取っていました。 Win32サブキーを削除すると、問題が完全に修正されました。これは、VS 2017およびOffice 365 Pro Plusの完全な再インストール後に行われたことに注意してください。これが誰かを助けることを願っています。

3
VBAMadeMeDoIt

上記のレジストリハックは、私にとって同じ問題を修正しました。唯一の違いは、1.9と1.7のエントリがあったことです。 1.9キーを削除し、問題を修正しました。

他の情報:

OS:Windows 10

Visual Studio Professional 2015

C#Windowsフォームアプリケーション

これは私の仕事用ラップトップでした。各ワークステーションにOffice 2010がインストールされています。

私が試した他のいくつかのDID NOT WORKは以下でした:

MSオフィスの修復

MS OFFICEの再インストール

Microsoft Office 2010のダウンロード:Microsoftからのプライマリ相互運用機能アセンブリ。

また、ラップトップにはMicrosoft.Office.Interop.Excel.dllのいくつかのバージョンがありました。以前のバージョンを削除しても問題は解決しませんでした。

この場所がROCKS !!!!!!だからSTACKOVERFLOW.COMに行って良かった

1
P. Mennetti

これは、regeditレコードを変更または削除できない場合の答えです。私が働いている会社には同じ問題がありました。Office2010には約30台のマシンがあり、regeditでレコードを消去または開くことができませんでした。クライアントマシンが私を許可しないドメインにあったためです。管理者権限がありましたが、regeditのレコードを削除できませんでした。 1か月間解決策を見つけようとしましたが、見つかりませんでした。そのため、相互運用の使用を停止し、OpenXmlに移行してExcelテンプレートを編集し、ClosedXmlに移行して新しいExcelを作成する必要がありました。これは私の命を救った。なぜなら上司がすでに私に迫っていたからだ。

Visual Studioでプロジェクト/ソリューションを開き、[ツール]> [NuGetパッケージマネージャー]> [パッケージマネージャーコンソール]コマンドを使用してコンソールを開きます。 2つのパッケージをインストールします

  1. Install-Package DocumentFormat.OpenXml-バージョン2.5.0
  2. インストールパッケージSpreadsheetLight

pd:OpenXml 2.8はSpreadsheetLightで動作しない、2.5.0を使用する方が良い

これを最初に追加します

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;

ボタンまたはクラスのコピーおよび変更

    SaveFileDialog fichero = new SaveFileDialog();
    fichero.Filter = "Excel (*.xlsx)|*.xlsx";
    if (fichero.ShowDialog() == DialogResult.OK)
    {
        SLDocument sl = new SLDocument("c:\\bin\\est1.xlsx", "Sheet1");

        sl.SetCellValue("E9", "Let's party!!!!111!!!1");

        sl.SelectWorksheet("Sheet2");
        sl.SetCellValue("C7", "Before anyone calls the popo!");

        sl.AddWorksheet("ERTRT");
        sl.SetCellValue("B4", "Who let the dogs out?");
        sl.SetCellValue("B5", "Woof!");

        sl.SaveAs(fichero.FileName);    

        MessageBox.Show("Report " + fichero.FileName + "!");
    }
1
Aliendo

同じ問題がありました...以前に実行されていたコードは、新しいアプリケーションインスタンスが作成されたときに同じ例外をスローし始めました。これを修正するには:

  1. プログラムと機能、インストールされた日付順で注文を行い、コードが機能しなくなった同じ日にMicrosoft Office 365の更新があることを確認できました。
  2. Microsoft Office 365 -en-usMicrosoft Office 365 Pro Plus -en-usの両方で、変更を右クリックしてクイックフィックス

ソリューションを実行しようとしましたが、再び機能していました。

0
Carolina_G

同じ問題がありました。

セットアップは次のようになります。
Office 2010:WordとExcel、Office 2013:Outlook

Office 2010のインストールプログラムを実行し、修復オプションを選択してください。その後、WordおよびExcelのレジストリ内のすべての間違ったキーが削除され、問題は解決しました。

0
cpelletier