用C ++ / CLI打开并读取Excel文件

我试图用C ++ / CLI创build一个程序,使用Visual Studio从Excel工作簿中读取一些数据。 我已经将Microsoft.Office.Interop.Excel(v12)添加到项目属性中的引用。 我的基本目标是将单元格的值作为string(工作簿仅包含文本值)。 我目前的代码是以下(当然只包括主要部分):

using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace Microsoft::Office::Interop::Excel; start(void){ Microsoft::Office::Interop::Excel::Application^ exApp= gcnew Microsoft::Office::Interop::Excel::ApplicationClass(); String^ filename="e:\\test.xls"; Workbook^ wb = exApp->Workbooks->Open(filename, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing); Worksheet^ exWs = safe_cast<Worksheet^>(exApp->ActiveSheet); int row=1; int col=1; String^ tmp=((Microsoft::Office::Interop::Excel::Range^)exWs->Cells[(System::Object^)row, (System::Object^)col])->Value2->ToString(); MessageBox::Show(tmp); } 

当我运行它,它崩溃与以下错误:

 An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in exc2.exe Additional information: Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)) 

它发生在xls和xlsx文件中,当我尝试打开工作簿(以“Workbook ^ wb = exApp-> Workbooks-> Open”开始的行 – 所以我甚至无法检查其余的工作)。 请帮助一下,我错过/做错了什么?

先谢谢你。

好的,我最终得到了主要问题,如果有人遇到同样的问题:

打开Excel文件时,Windows和安装的Excel程序的区域设置必须相同。 我住在匈牙利,匈牙利在Windows中的区域设置[注:我使用英语Windows,只是区域设置不同],我有一个英文版的Excel。 一旦我将Windows中的区域设置切换到美国(与Excel的区域相同),清理并重build解决scheme,一切都开始像魅力一样工作。

(我不确定messagebox部分是否在我的代码中工作,我同时改变了它,主要问题是打开文件)