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

4

我正在尝试使用Visual Studio创建一个C++/CLI程序,从Excel工作簿中读取一些数据。

我已经在项目属性中添加了Microsoft.Office.Interop.Excel (v12)的引用。

我的基本目标只是将单元格的值作为字符串获取(工作簿仅包含文本值)。

我的当前代码如下(当然只包括主要部分):

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”开头的代码行开始),出现了问题,因此我甚至无法检查其余部分是否有效。请问是否有人能帮忙解决这个问题?我可能漏掉或做错了什么吗?
提前感谢您的帮助。
1个回答

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

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

(我不确定消息框部分是否在我的代码中起作用,与此同时我进行了更改,主要问题是打开文件)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接