利用ADO进行数据库访问,访问EXcel的不同版本,如Excel2003和excel2007
下面是相关代码
//初始化
void CSTExcel::OnInitSTExcel() //CSTExcel在头文件中定义
{
::CoInitialize(NULL);
try
{
CSTImportFileSelectDlg dlg;
dlg.DoModal();//create()
CString DBPathName=dlg.GetFileName(); //获得文件路径名
CString p; //通过比较获得的末尾是.xls还是.xlsx
p=wcschr(DBPathName,L'.'); //宽字节的比较,多字节为 p=strchr(DBPathName,L'.');
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
if(p==".xlsx")
{
//访问Excel 2007
_bstr_t str="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
str +=(_bstr_t)DBPathName;
str +=";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"";
m_pConnection->Open(str,_T(""),_T(""),adModeUnknown);
}
else if(p==".xls")
{
//访问Excel 2003
_bstr_t str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
str +=(_bstr_t)DBPathName;
str +=";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
m_pConnection->Open(str,_T(""),_T(""),adModeUnknown);
}
}
catch(_com_error e)//捕捉异常
{
AfxMessageBox(e.Description());//显示错误信息
}
}