2012-11-01 62 views
3

我想用C++/CLI創建一個程序,它使用Visual Studio從Excel工作簿中讀取一些數據。 我已將Microsoft.Office.Interop.Excel(v12)添加到項目屬性中的引用。 我的基本目標只是將單元格的值作爲字符串獲取(工作簿僅包含文本值)。 我當前的代碼如下(僅主要部分包括課程):用C++/CLI打開並讀取Excel文件

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和:

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); 
} 

當我運行它,它與下面的錯誤崩潰xlsx文件,當我嘗試打開工作簿時(以「Workbook^wb = exApp-> Workbooks-> Open」開頭的行 - 所以我甚至無法檢查其他工作簿是否正常工作)。 請幫助一下,我錯過/做錯了什麼?

預先感謝您。

回答

3

好,我知道的主要問題。最後,如果別人跑進了同樣的問題:

當打開Excel文件時,Windows'和安裝Excel程序的區域設置必須是相同的。我住在匈牙利,匈牙利在Windows中的區域設置[注:我使用英語Windows,只是區域設置不同],我有英文版的Excel。一旦我將Windows的區域設置切換到美國(與Excel的區域相同),清理並重建解決方案後,所有事情都開始像魅力一樣工作。

(我不確定messagebox部分是否工作在我的代碼中,我同時修改了它,主要問題是打開文件)