我用过两种方式访问过EXCEL表格,一种是ODBC数据库方式优点数据读取速度快,但是如果EXCEL表示一列中有数字和字符串并存的情况下可能会出现一种数据类型读取不出来,另一种是用excel提供的COM组件,此类方法操作EXCEL功能全,但是打开EXCEL和关闭速度慢,一种可行的方法是打开EXCEL表格然后读取一行保存一行数据到数据库中,这样就避免了在打开关闭EXCEL表格上花费大量时间。我这有个用这类方法读取EXCEL到数据库的例子,不过不在这里所以没法给你提供现成的代码
如果你的问题没解决咱们可以互相交流下,
先给你提供一点不是很全面的代码,
用ODBC方式读取EXCEL表格
CDatabase database;
CString sSql;
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)");
CString sDsn,sFile;
filename.TrimLeft();
filename.TrimRight();
// MessageBox(filename);
sFile=filename;
sDsn.Format(_T("ODBC;DRIVER={%s};DSN='''';Auto Translate=false;DBQ=%s"), sDriver, sFile);
try
{
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
CString str,str1;
tbname.TrimLeft();
tbname.TrimRight();
str="SELECT * from ["+tbname+"$]" ;
sSql = _T(str);
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
int count = recset.GetRecordCount();
int row=0;
CString data,data1,data2;
while (!recset.IsEOF())
{
if(row++>=strow)
{
recset.GetFieldValue(comnum, data);
data2="";
if(data!="")
{
str1=data.Right(2);
if(str1!=".0")
i=list->InsertString(0,data);
else i=list->InsertString(0,data.Left(data.GetLength()-2));
for(int xx=0;a[xx]!=-1;xx++)
{
recset.GetFieldValue(a[xx], data1);
data2+=" ["+data1+"] ";
}
list->SetItemDataPtr(i,new CString(data2));
}
}
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
catch(CDBException e)
{
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e.m_strError);
}