2011-11-24 147 views
7

我在MS Visual Web Developer 2008 Express Ed上开发时遇到问题。 在Windows7 64位操作系统上开发ASP.NET C#。Microsoft.Office.Interop.Excel不能在64位上工作

我试图打开一个Excel文件,但它给了我Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

我并配置构建于所有处理器(任何CPU,64,86),但它不工作。我在网上搜索了答案,但无法找到如何处理它。

奇怪的是我在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); 
+0

我不能完全肯定这预订购解决您的问题,但如果你有一个32位COM DLL,您可能需要使用的x86版本即使您在64位Windows上运行,您的项目也是如此。 – Andrew

+0

我认为你有正确的想法@安德鲁。如果是32位Excel,64位.net将不想使用它。将它构建为x86,它应该可以工作。 –

+0

已经尝试过..但同样的事情发生,我不明白为什么这个问题不是在Visual C#中发生,只有在Web开发人员 – Bush

回答

19

挖我发现有在微软互操作性与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日

+0

...有关更多信息,KB条目对应:http://support.microsoft。 com/default.aspx?scid = kb; en-us; 320369 – Otiel

+1

@Otiel:KB似乎说这个错误适用于VS 2005和Excel 2007(和旧版本)。描述似乎相符,但它可能是一个无关的错误。 –

相关问题