从EXCEL文件中读取数据的问题

dadou1120 2006-03-27 12:05:48
BOOL CIcupsDlg::CheckExcel(CString strFile,BOOL bShow)
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = strFile;

sDriver = GetExcelDriver();
if( sDriver.IsEmpty() )
{
AfxMessageBox("No Excel ODBC driver found,请确保您的机器上安装有 Excel!");
return FALSE;
}

sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);

BOOL bSucc = FALSE;
TRY
{
database.Open(NULL,false,false,sDsn);

// Allocate the recordset
CRecordset recset( &database );


if(bShow == 0)
sSql = "select partno, brand, datecode, note, package, quantity, price from [sheet1$]";
else
sSql = "select top 100 partno, brand, datecode, note, package, quantity, price from [sheet1$]";
// Execute that query (implicitly by opening the recordset)
recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);

//Checking the quantity
while( !recset.IsEOF() )
{
recset.GetFieldValue("quantity",sItem1);
//AfxMessageBox(sItem1);
int iLen = strlen(sItem1);
for(int i = 0 ; i <iLen; i++ )
{
char c= sItem1.GetAt(i);
//AfxMessageBox(c);
if ( !isdigit(c) && c != '.')
{
AfxMessageBox("数量字段中包括其他字符,请去除!");
return false;
}
}
recset.MoveNext();
}
recset.Close();

// Browse the result
recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);
int nRow = 0;
int nIndex = 0,nCol = 0;;
while( !recset.IsEOF() )
{
//recset.MoveFirst();
if(bShow == TRUE)
{
nCol = 1;
recset.GetFieldValue("partno",sItem1);
nIndex = m_lstIc.InsertItem(m_lstIc.GetItemCount(),sItem1);

recset.GetFieldValue("brand",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);

recset.GetFieldValue("datecode",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);

recset.GetFieldValue("note",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);

recset.GetFieldValue("package",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);

recset.GetFieldValue("quantity",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);

recset.GetFieldValue("price",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);

}

recset.MoveNext();

}

int nCount = recset.GetRecordCount();


if(bShow == FALSE)
{
m_nRecordCount = nCount;
}
if(nCount > 0)
//CString strcount;
//strcount.Format("无法创建套接字,建议您重新启动计算机");
// MessageBox(strcount,"报告!",MB_ICONERROR);
bSucc = TRUE;
// Close the database
database.Close();

}
CATCH(CDBException, e)
{
// A database exception occured. Pop out the details...
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;


return bSucc;
}
以上过程是从excel文件中提取数据,存储在临时数据库中,“//Checking the quantity"和”// Browse the result“之间的部分,数据校验的过程,我想检查excel文件quantity字段是不是都是数字,如果不是数字及时提醒,测试数据一个包含4条记录的excel文件, 我的问题是:如果excel文件中有3条记录的quantity字段包含字符,比如5000S ,则程序能正确执行,校验过程可以提醒,但是如果不是3条,而是2条,既前两条记录的quantity是数字,后两条带字符,则校验过程没执行,临时数据库中取不到相应的值,请高手指点,这是怎么回事?
...全文
173 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dadou1120 2006-03-27
  • 打赏
  • 举报
回复
up
OpenHero 2006-03-27
  • 打赏
  • 举报
回复
在msdn自带的example中有一个处理excel的例子
逸学堂 2006-03-27
  • 打赏
  • 举报
回复
自己在EXCEL中,写一个宏。先测试通过这个宏,用VBA把这个宏写入C++代码中测试。
dadou1120 2006-03-27
  • 打赏
  • 举报
回复
UP

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧