2024年4月19日发(作者:)

ADO读写EXCEL

用ADO读写EXCEL。操作部分代码如下:

//打开excel数据文件

::CoInitialize(NULL);

_RecordsetPtr m_pRecordset("set");

_ConnectionPtr m_pConnection("tion");

m_Instance("tion");

CString adoinfo;

adoinfo="Provider=.4.0;Data Source="+filepath

+";Extended

Properties=Excel 8.0;Persist Security Info=False";//filepat

h是文件路径

m_pConnection->Open((_bstr_t)adoinfo,"","",adModeUnknown);

if(m_pConnection==NULL)

MessageBox("打开文件错误");

//打开sheet 1工作表、处理数据

//1、打开SHEET1工作表并读出班级字段等于nClass的记录

m_Instance(__uuidof(Recordset));

("select * from [Sheet1$] WHERE 班级

=%d",nClass);

m_pRecordset->Open((_bstr_t)tiaojian,

_variant_t((IDispatch *)m_pConnection,true),

adOpenStatic,adLockOptimistic,adCmdText);

//2、获得记录数量

long ab;

m_pRecordset->get_RecordCount(&ab);

//3、把数据指针指向第一条记录

m_pRecordset->MoveFirst();

//4、读出第一条记录里面的值

CString ztemp;

ztemp=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("数

学成绩"))-

>Value);

//这样就得到了本条记录“数学成绩”列的值了。如果是数值的话转下就

可以了。

//5、指向下一条记录

m_pRecordset->MoveNext();

//6、创建表

m_pConnection->Execute("CREATE TABLE 成绩统计(班级 TEXT,学

科 TEXT,总人数

INTEGER,总分 INTEGER,平均分 SINGLE,

及格人数 INTEGER,

及格率 SINGLE,高分人数 INTEGER,高分

率 SINGLE)",

&ra,adCmdText);

//7、写数据(新创建的表需要先打开,下面是向新记录的'学科'字段填文本数

据)

m_pRecordset->Fields->GetItem(_variant_t("学科"))->Value=_bstr_t("

语文");

//工作结束,打扫战场

if(m_pRecordset->State)

m_pRecordset->Close();

m_pRecordset=NULL;

if( m_pConnection->State )

m_pConnection->Close();

m_pConnection = NULL;

::CoUninitialize();

excel文件所谓的字段就是第一行。