加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Microsoft.Office.Interop.Excel在64位上不起作用

发布时间:2020-12-16 00:02:22 所属栏目:asp.Net 来源:网络整理
导读:我在MS Visual Web Developer 2008 Express Ed上进行开发时遇到了问题. 在Windows7 64位操作系统上开发ASP.NET C#. 我正在尝试打开Excel文档,但它给了我Old格式或无效的类型库. (HRESULT异常:0x80028018(TYPE_E_INVDATAREAD)) 我确实将构建配置到所有处理器
我在MS Visual Web Developer 2008 Express Ed上进行开发时遇到了问题.
在Windows7 64位操作系统上开发ASP.NET C#.

我正在尝试打开Excel文档,但它给了我Old格式或无效的类型库. (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,true,5,"",Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,"t",false,1,0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);

解决方法

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

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

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

然后有两个选项来解决这个问题:

>更改您的线程本地化(通过代码)
>为您的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天

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读