【问题标题】:Microsoft.Office.Interop.Excel doesn't work on 64 bitMicrosoft.Office.Interop.Excel 不适用于 64 位
【发布时间】:2011-11-24 22:39:50
【问题描述】:

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

【问题讨论】:

  • 我不完全确定这会解决你的问题,但如果你有一个 32 位 COM DLL,你可能需要使用你的项目的 x86 版本,即使你运行在 64-位窗口。
  • 我认为您的想法是正确的@Andrew。如果它是 32 位 Excel,64 位 .net 将不想使用它。将其构建为 x86,它应该可以工作。
  • 已经试过了.. 但是同样的事情发生了,我不明白为什么这个问题在 Visual C# 中没有出现,并且只出现在 Web 开发人员中

标签: asp.net interop hresult comobject


【解决方案1】:

在挖掘互联网后,我发现 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天

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-09-11
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多