Microsoft.Office.Interop.Excel不能在64位上运行

时间:2011-11-24 22:39:50

标签: asp.net interop hresult comobject

我在使用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);

1 个答案:

答案 0 :(得分:20)

在挖掘互联网后,我发现Microsoft Interop中存在COM对象的错误(至少我的情况是MS Excel 2010)。

错误是.NET检查您的线程(C#或VB代码)本地化是否适合您之前安装的MS Excel本地化,如果不是,则表明Microsoft.Office.Interop库已旧或无效。

您的线程本地化源自您的计算机区域设置(来自控制面板 - >区域和语言)

然后有两种方法可以解决这个问题:

  1. 更改您的线程本地化(按代码)
  2. 安装Office的语言包
  3. 第一个解决方案是这样的:

    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天