Asp.net

Microsoft.Office.Interop.Excel 不適用於 64 位

  • September 21, 2015

我在 MS Visual Web Developer 2008 Express Ed 上開發時遇到了問題。在 Windows7 64 位作業系統上開發 ASP.NET C#。

我正在嘗試打開一個 Excel 文件,但它給了我Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

我確實為所有處理器(任何 CPU、x64、x86)配置了建構,但它不起作用。我在網際網路上搜尋了答案,但找不到如何處理它。

奇怪的是,當我在 Microsoft Visual C# 2010 Express 上開發時,相同的程式碼在同一系統上執行!怎麼來的?後面工作的不是同一個dll嗎?

我是否需要更改該 COM dll 才能在 x64 系統上執行?

請幫幫我,我該怎麼辦?

我的程式碼是:

using Excel = Microsoft.Office.Interop.Excel;
xlApp = new Excel.Application();
__Log("Openning " + excelFileName);
xlWorkBook = xlApp.Workbooks.Open(excelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);

在探勘網際網路後,我發現 Microsoft Interop 與 COM 對象存在一個錯誤(至少在我的情況下是 MS Excel 2010)。

錯誤是 .NET 檢查您的執行緒(C# 或 VB 程式碼)本地化是否適合您之前安裝的 MS Excel 本地化,如果不適合,則表明該Microsoft.Office.Interop庫已舊或無效。

您的執行緒本地化來自您的電腦區域設置(來自控制面板 –> 區域和語言)

那麼有兩種方法可以解決這個問題:

  1. 更改您的執行緒本地化(通過程式碼)
  2. 為您的 Office 安裝語言包

第一個解決方案是這樣的:

using System.Threading;     // For setting the Localization of the thread to fit
using System.Globalization; // the of the MS Excel localization, because of the MS bug

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
excelFileName = System.IO.Path.Combine(excelPath, "Ziperty Buy Model for Web 11_11_2011.xlsm");

希望它有所幫助:) gr8 day

引用自:https://stackoverflow.com/questions/8263130