2011-05-19 92 views
8

我有一個使用Excel interop從Excel文件讀取數據的C#WPF(.NET 4.0)應用程序。Excel interop在Office 2007計算機上運行,​​但在Office 2010計算機上運行失敗

當我在我的開發機器上運行這個應用程序,它有Excel 2007,它工作正常。當我有Excel 2010中安裝了另一臺機器上運行它,它失敗,出現以下錯誤信息:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)).

試圖創建一個Microsoft.Office.Interop.Excel.Application對象,如當發生該故障:

var app = new Application(); 

我的項目有Microsoft.Office.Interop.Excel.dll參考(版本14.0.0.0,運行時版本V2.0.50727),它位於:

C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll

我試圖運行與應用對所引用的DLL的默認設置:

  • 複製本地=假
  • 嵌入互操作類型=真
  • 特定版本=真

我還試圖運行具有以下設置應用程序對引用的dll:

  • 複製本地=真
  • 嵌入互操作類型=假
  • 特定版本=真

但與Office 2010的計算機上,無論這些嘗試的工作。

其他說明:Office 2010的機器是64位w/Windows 7.我的開發機器是帶有Windows XP的X86。

問題

是什麼原因造成了「類未註冊」的例外,如何解決?

編輯

針對Alex的答案,我試圖構建的應用程序作爲任何CPU,X86和X64,但它並沒有區別。我仍然得到相同的「班級未註冊」錯誤。

編輯2

剛試過的應用程序在32位計算機上與Office 2010沒有錯誤。因此,它可能是與特定的機器做錯了事,也可以是64位和Office 2010

編輯3

奧凱的組合,所以現在我已經測試了不同與Office 2010的64位機器。再次沒有錯誤。我認爲這意味着某臺機器出了問題,而這不是我的軟件故障。啊編程。

回答

5

初步答案:我的軟件很好,並且在特定機器上的設置有問題。

編輯

我剛剛發現了一些東西,也可能是問題的根源。問題機器有Office,但它設置爲click-to-run(運行在互聯網上)而不是(從EXE運行)。這意味着某些註冊表設置,DLL,組件等不可用於Microsoft.Office.Interop.Excel,因此它失敗。

編輯2

那是肯定的問題。剛剛升級到完整的基於MSI的Office安裝,並且一切都很好。

編輯3

添加這個bug微軟連接:

https://connect.microsoft.com/VisualStudio/feedback/details/672276/excel-interop-fails-on-machine-where-office-is-installed-as-click-to-run#details

相關問題