vc读写Excel文件的方法

来源:百度文库 编辑:神马文学网 时间:2024/04/28 19:54:46

void ReadExcel()
{
     CDatabase database;
     CString sSql;
     CString sItem1, sItem2 , sItem3;
     CString sDriver;
     CString sDsn;
     CString sFile,sPath;

                                    
//获取主程序所在路径,存在sPath中
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind (‘\\‘);
sPath=sPath.Left (nPos);

sFile = sPath + "\\Demo.xls";     // 将被读取的Excel文件名

     // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
     sDriver = GetExcelDriver();
     if (sDriver.IsEmpty())
     {
         // 没有发现Excel驱动
         AfxMessageBox("没有安装Excel驱动!");
         return;
     }
    
     // 创建进行存取的字符串
     sDsn.Format("ODBC;DRIVER={%s};DSN=‘‘;DBQ=%s", sDriver, sFile);

     TRY
     {
         // 打开数据库(既Excel文件)
         database.Open(NULL, false, false, sDsn);
        
         CRecordset recset(&database);

         // 设置读取的查询语句.注意此处表名的写法,excel里的表默认为系统表所以访问表时表名应为[表名$]

         sSql = "SELECT 考生编号,考生姓名,来源 "       
                "FROM [student2$] "                 
                "ORDER BY 考生编号 ";
    
         // 执行查询语句
         recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);

         // 获取查询结果
         while (!recset.IsEOF())
         {
             //读取Excel内部数值
             recset.GetFieldValue("考生编号", sItem1);
             recset.GetFieldValue("考生姓名", sItem2);
             recset.GetFieldValue("来源", sItem3);
    //显示记取的内容
           m_ExcelList.AddString( sItem1 + " --> "+sItem2 );

             // 移到下一行
             recset.MoveNext();
         }

         // 关闭数据库
         database.Close();
                             
     }
     CATCH(CDBException, e)
     {
         // 数据库操作产生异常时...
         AfxMessageBox("数据库错误: " + e->m_strError);
     }
     END_CATCH;
}