用C/C++ 读取一个存储在EXCEL中 (.xls)格式的矩阵二维数组,里面存储的整数。

请教:现在我用C/C++做的一个项目,需要读取EXCEL.xls格式的二维数组,里面存放了整数。第一行第一列存储的是行列信息,所以只要求从(1,1)开始读取。并能打印(c... 请教: 现在我用C/C++做的一个项目,需要读取EXCEL .xls 格式的二维数组,里面存放了整数。 第一行第一列存储的是行列信息, 所以只要求从 (1,1)开始读取。并能打印(cout、printf)出来。 展开
 我来答
zhjiemm
2012-04-30 · TA获得超过2643个赞
知道大有可为答主
回答量:1834
采纳率:75%
帮助的人:714万
展开全部

可以用ADO来读取。先导入msado15.dll库。

参考如下代码:

// stdafx.h : include file for standard system include files,

//  or project specific include files that are used frequently, but

//      are changed infrequently

//

#if !defined(AFX_STDAFX_H__9DD2CDAB_EAB0_430E_A985_2215981EA616__INCLUDED_)

#define AFX_STDAFX_H__9DD2CDAB_EAB0_430E_A985_2215981EA616__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include <afx.h>

#include <afxwin.h>         // MFC core and standard components

#include <afxext.h>         // MFC extensions

#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers

//#import "C:\\Program Files\\common files\\system\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")

#include <iostream>

// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__9DD2CDAB_EAB0_430E_A985_2215981EA616__INCLUDED_)

//--------------------

// READ1.cpp : Defines the entry point for the console application.

//

#include   "stdafx.h" 

using namespace std;

int main(int argc, char* argv[])

{

//printf("Hello World!\n");

HRESULT iniOK;

_ConnectionPtr m_pConnection;

_RecordsetPtr m_pRs;

iniOK = CoInitialize(NULL);

if(iniOK == S_OK)

{

m_pConnection.CreateInstance(__uuidof(Connection));

try

{

m_pConnection->Open("Provider=MSDASQL;Driver={Microsoft Excel Driver (*.xls)};DBQ=D:\\test.xls;ReadOnly=false;","","",adModeUnknown); 

//cout << "_com_ OK"<<endl;

}

catch(_com_error e)

{

cout << "_com_ error"<<endl;

}

}

else

cout << "init Error"<<endl;

CString ss,s1,s2,s3;

int i=0;

try

{

m_pRs = m_pConnection->Execute((_bstr_t)("select * from [Sheet1$]"),NULL,adCmdText);

while(!m_pRs->adoEOF)

{

s1=(char*)(_bstr_t)m_pRs->GetCollect("第一列");

s2=(char*)(_bstr_t)m_pRs->GetCollect("第二列");

s3=(char*)(_bstr_t)m_pRs->GetCollect("第三列");

ss = s1 + "\t" +s2 + "\t" + s3;

cout << (LPCTSTR)ss << endl;

i++;

m_pRs->MoveNext();

}

catch(_com_error e)

{

cout << "_select_ error" <<endl;

}

   cout << "records:" << i <<endl; 

return 0;

}

在VC6.0下编译通过:

追问
你好  非常感谢你的回答!

CString ss,s1,s2,s3;
假如是一个100X100的矩阵呢 那岂不是要S100~
追答
你是说有100列?一般的EXCEL表也没有这么多的吧。
可以考虑用循环,每别读出每个列!~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式