一、利用ADO操作Excel:
首先你要手动新建一张Excel表,如命名为text.xls,建好之后再加入头行,如下:
Name Age Sex
然后新建一个工程,创建一个应用程序,如一般的ADO程序一样编写相应代码,只是注意连接Excel的连接字符串如下写:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://test.xls;Extended Properties=/"Excel 8.0;HDR=No;IMEX=1/"";
特别要注意加上你刚刚创建的Excel表的绝对路径,不然的你后面的工作将无法进行。还要注意一下HDR,如果后面是No的话,表示ADO将不把你Excel文件的第一行作为字段名,此时将会用默认的字段名,如F1、F2...。否则如上Excel文件的字段名将是Name、age与sex。另外是IMEX,如果设置了"IMEX=1;" 则通知驱动程序始终将“互混”(数字,日期,字符串等)数据列作为文本读取,同时这个选项有可能影响到excel表格拒绝写操作,也就是说,如果我们要求写入excel的话,这个选项不能被设置。
接下来就是打开记录集了,代码如下:
{
_variant_t var = m_pRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
_bstr_t strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("Age");
if(var.vt != VT_NULL)
_bstr_t strAge = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("Sex");
if(var.vt != VT_NULL)
_bstr_t strSex = (LPCSTR)_bstr_t(var);
string strMid = strName + "--> " + strAge + "--> " + strSex;
cout<<strMid.c_str()<<endl;
m_pRecordset->MoveNext();
}
对test.xls插入新的数据,代码如下:
m_pRecordset->PutCollect("Sex",_variant_t("男"));
m_pRecordset->Update();
对test.xls的数据进行修改,代码如下:
m_pRecordset->MoveFirst();
m_pRecordset->PutCollect("Name",_variant_t("李汉"));
m_pRecordset->Update();
使用ADO操作Excel表不能实现删除指定的数据行。
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Name",_variant_t("张三"));
m_pRecordset->PutCollect("Age",_variant_t("23"));
while(!m_pRecordset->adoEOF)
m_pRecordset->Open("select * from [Sheet1$]",_variant_t((IDispatch*m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
就可以对test.xls进行读取操作了,代码如下: