ODBC操作Excel

5 篇文章 0 订阅

http://blog.csdn.net/boxer2011111/article/details/6988848


想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:

1. 在StdAfx.h文件中加入:

[cpp]  view plain copy
  1. #include <afxdb.h>   
  2. #include <odbcinst.h>  
2. 通过ODBC直接创建Excel文件并在表中插入数据(暂定文件名:c:\demo.xls)

 

[cpp]  view plain copy
  1. void CRWExcelDlg::Onwrite()   
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     CDatabase database;  
  5.     CString sDriver="MICROSOFT EXCEL DRIVER (*.XLS)";  
  6.     CString sExcelFile="c:\\demo.xls";  
  7.     CString sSql;  
  8.       
  9.     TRY  
  10.     {  
  11.         //sql  
  12.         sSql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",  
  13.             sDriver,sExcelFile,sExcelFile);  
  14.         //create db  
  15.         if (database.OpenEx(sSql,CDatabase::noOdbcDialog))  
  16.         {  
  17.             //create table  
  18.             sSql="CREATE TABLE demo (Name TEXT,Age NUMBER)";  
  19.             database.ExecuteSQL(sSql);  
  20.               
  21.             //insert value  
  22.             sSql="INSERT INTO demo (Name,Age) VALUES ('boxer',24)";  
  23.             database.ExecuteSQL(sSql);  
  24.               
  25.             sSql="INSERT INTO demo (Name,Age) VALUES ('youngboxer',14)";  
  26.             database.ExecuteSQL(sSql);  
  27.               
  28.             sSql="INSERT INTO demo (Name,Age) VALUES('matureboxer',30)";  
  29.             database.ExecuteSQL(sSql);  
  30.               
  31.         }  
  32.         //close db  
  33.         database.Close();  
  34.           
  35.     }  
  36.     CATCH_ALL (e)  
  37.     {  
  38.         TRACE1("Excel driver not installed: %s",sDriver);  
  39.     }  
  40.     END_CATCH_ALL;  
  41. }  


3. 通过ODBC直接读取Excel文件(暂定文件名:c:\demo.xls)

[cpp]  view plain copy
  1. void CRWExcelDlg::Onread()   
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     CDatabase database;  
  5.     CString sDriver;  
  6.     CString sItem1,sItem2;  
  7.     CString sDsn;  
  8.     CString sFile="c:\\demo.xls";//filename  
  9.     CString sSql;  
  10.       
  11.     //check driver  
  12.     sDriver=GetExcelDriver();  
  13.     if (sDriver.IsEmpty())  
  14.     {  
  15.         //not found  
  16.         AfxMessageBox("driver not found");  
  17.         return;  
  18.     }  
  19.       
  20.     //con string  
  21.       
  22.     sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s",sDriver,sFile);  
  23.       
  24.     TRY  
  25.     {  
  26.         //open db  
  27.         database.Open(NULL,false,false,sDsn);  
  28.           
  29.         CRecordset recset(&database);  
  30.         //read sql   
  31.         sSql="SELECT Name,Age "  
  32.             "FROM demo "  
  33.             "ORDER BY Name";  
  34.         recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);  
  35.           
  36.         //get query results  
  37.         while(!recset.IsEOF())  
  38.         {  
  39.             //read inside value  
  40.             recset.GetFieldValue("Name",sItem1);  
  41.             recset.GetFieldValue("Age",sItem2);  
  42.               
  43.             //show   
  44.             m_ctrlList1.AddString(sItem1+"--->"+sItem2);  
  45.             m_ctrlList1.SendMessage(WM_VSCROLL,SB_PAGEDOWN,0);  
  46.             //next  
  47.             recset.MoveNext();  
  48.         }  
  49.           
  50.         //close db  
  51.         database.Close();  
  52.           
  53.     }  
  54.     CATCH (CDBException,e)  
  55.     {  
  56.         //db exception occur  
  57.         AfxMessageBox("db error: "+e->m_strError);  
  58.     }  
  59.     END_CATCH;  
  60. }  


 

4.获取ODBC中Excel驱动的函数

[cpp]  view plain copy
  1. CString CRWExcelDlg::GetExcelDriver()  
  2. {  
  3.     char szBuf[2001];  
  4.     WORD cbBufMax=2000;  
  5.     WORD cbBufOut;  
  6.     char *pszBuf=szBuf;  
  7.     CString sDriver;  
  8.       
  9.     //get driver name function(included in odbcinst.h)  
  10.     if (!SQLGetInstalledDrivers(szBuf,cbBufMax,&cbBufOut))  
  11.         return "";  
  12.     //check excel included or not  
  13.     do   
  14.     {  
  15.         if (strstr(pszBuf,"Excel")!=0)  
  16.         {  
  17.             //found  
  18.             sDriver=CString(pszBuf);  
  19.             break;  
  20.         }  
  21.         pszBuf=strchr(pszBuf,'\0')+1;  
  22.     } while (pszBuf[1]!='\0');  
  23.       
  24.     return sDriver;  
  25. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值