vc/mfc Dialog项目小弟根据http://www.vckbase.com/document/viewdoc/?id=421提供的方法,实现了通过ODBC读取Excel文件的功能。但是在几次测试后发现,有时候某条记录没有办法读出来!!有时候某几个单元格里面的数据没有办法读取出来。除了定义好了工作表外,是不是还要进行什么设置,才可以让读取操作稳定?请指点……

解决方案 »

  1.   

    先贴一下我的代码吧,欢迎指正:
    void CMTBill::OnBnClickedBndatabase()
    {
    try
    {
    CDatabase db;
    CString sSql;
    CString sItem[12];
    CString sDsn;
    CString pathName;
    CFileDialog dlg(TRUE,//Save;
    "xls",NULL,OFN_HIDEREADONLY, "Microsoft Excel 2000 (*.xls)|*.xls|所有文件(*.*)|*.*||",this);
    if(dlg.DoModal() == IDOK)
    {
    pathName = dlg.GetPathName();
    pathName.Replace("\\", "\\\\");//路径格式转换
    }
    else return;//返回
    CString sDriver = GetExcelDriver(); 
    sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver, pathName);
    if (db.Open(NULL, false, false, sDsn))
    {
    int nIndex = 0;
    CRecordset recset(&db);
    //设置读取的查询语句.
                sSql = "SELECT * FROM MT";//“MT”是我在EXCEL中定义的表名
                //执行查询语句
                recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
                //获取查询结果
    while (!recset.IsEOF())
    {
    //读取Excel内部数值
    recset.GetFieldValue(nIndex, sItem[0]);
    recset.GetFieldValue(nIndex + 1, sItem[1]);
    recset.GetFieldValue(nIndex + 2, sItem[2]);
    recset.GetFieldValue(nIndex + 3, sItem[3]);
    recset.GetFieldValue(nIndex + 4, sItem[4]);
    recset.GetFieldValue(nIndex + 5, sItem[5]);
    recset.GetFieldValue(nIndex + 6, sItem[6]);
    recset.GetFieldValue(nIndex + 7, sItem[7]);
    recset.GetFieldValue(nIndex + 8, sItem[8]);
    recset.GetFieldValue(nIndex + 9, sItem[9]);
    // 移到下一行
    recset.MoveNext();
    }
    }
    db.Close();
    }
    }
    catch (CDBException* e)
    {
    e->ReportError();
    e->Delete();
    }
      

  2.   

    楼主的说明:系统为XP,安装OFFICE2000有没有哪位大侠可以给我指点一下,谢谢!关注……
      

  3.   

    没碰到。
    我所见到的都是简单应用。
    据说有点限制:
    方法1:将要读的区域定义一下。
    方法2:表名用[sheet1$]格式。这种方法要求题目与数据间无空行,是一种简单EXCEL表的读取,如果你的EXCEL表较复杂,则可能会有此问题。
    你是用方法1,但我没有碰到。
      

  4.   

    楼主的说明:谢谢ggw(格格巫)的回复,我的确是使用的方法1。1、我的EXCEL并不复杂,我进行的也只是简单的逐行读取EXCEL中单元格的数据。2、你所说的方法2,我不是很清楚,能不能具体一点给我讲述一下?3、哪位大侠有兴趣的话,可以试一下我的代码,看看会不会出现不稳定的现象。学习……