ado操作excel.doc
文本预览下载声明
VC 利用ADO操作Excel(原创)
把Excel当做数据库来操作,步骤如下:
1、在stdafx.h中加入#import c:\program files\common files\system\ado\msado15.dll no_namespace rename (EOF, adoEOF)
2、在工程的App类的构造函数中打开要操作的Excel表格
?_ConnectionPtr pCon_ex;?CString ConnectionString;
CToolsApp::CToolsApp(){?CString m_strAppPath=_T();?CString excel_path=_T();?CString con_str=_T();??//程序所在目录路径?TCHAR exeFullPath[MAX_PATH];?GetModuleFileName(NULL,exeFullPath,MAX_PATH);??CString str;?str.Format(%s,exeFullPath);??m_strAppPath = str.Left( str.ReverseFind( \\ ) );?excel_path = m_strAppPath+\\Database+\\新全国图数据统计模版--.xls;??CoInitialize(NULL);
?//打开excel?/*HDR=Yes; 表示工作表的第一行是表头,没有数据。 HDR=No;与之相反。 IMEX=1;告诉驱动程序始终将intermixed数据类型(numbers, dates, strings等等)作为文本型读取。 注意:该选项可能引起Excel工作表写权限的修改。如果想写入数据,创建新表等必须使其为0*/?ConnectionString = _T(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=);?? ?ConnectionString += excel_path;?? //excel?? file?? name?? ?ConnectionString += _T(;Extended Properties=\Excel 8.0;HDR=Yes;IMEX=0\); ??BSTR resultsString = ConnectionString.AllocSysString();?pCon_ex.CreateInstance(__uuidof(Connection));??resultsString = ConnectionString.AllocSysString();?pCon_ex-Open(resultsString,,,adModeUnknown);
}
3、从Excel中读数据
??? 读数据比较简单,可以使用SQL查询语句来找到自己感兴趣的记录。
??CString strSQL=_T();??_RecordsetPtr? pRst(__uuidof(Recordset));??? //数据集??_RecordsetPtr? Rs1(__uuidof(Recordset));???? //数目集????strSQL=select * from [道路$] where 城市 like %+str_city+%; //[道路$]为sheet的名称??pRst=(((CDataManaApp*)AfxGetApp())-pCon_ex)-Execute((_bstr_t)strSQL,NULL,adCmdText);? //指定的城市??????CString sql=_T(); ??sql=select?? count(*) as geshu from [道路$] where 城市 like %+str_city+%;?? ??Rs1=(((CDataManaApp*)AfxGetApp())-pCon_ex)-Execute((_bstr_t)sql,NULL,adCmdText);??_variant_t?? vCount=Rs1-GetCollect(geshu);??int num1=vCount.lVal;?? //符合条件的记录个数
? pRst-MoveFirst();? //只读取第一行
? _variant_t t = _variant_t(long(6));? result = (LPCSTR)_bstr_t(pRecordset-GetCollect(t));//以列序号的方式来读取字段内容? 0based
? result = (LPCSTR)_bstr_t(pRecordset-GetCo
显示全部