首先,咱們要明白的是,VC是經過ODBC來訪問Excel表格的,也就是說,VC將Excel表格,看成數據庫來處理。固然了,也能夠經過讀以tab鍵隔開的文件來處理這樣的文件,可是,我仍是更加願意用讀取數據庫的方式來訪問Excel表格。
第二,既然是數據庫,那麼,就須要創建一個與該庫對應的dsn,這個,並且,在創建dsn以前,首先要肯定,已經安裝了Excel的驅動。
第三,要訪問數據庫中的表格,就要先打開該表格,如此,就須要一個與之對應的RecordSet。如此,有以下代碼:
- void CRWExcel::ReadFromExcel()
- {
- CDatabase database;
- CString sSql;
- CString sItem1, sItem2;
- CString sDriver;
- CString sDsn;
- CString sFile = "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
- database.Open(NULL, false, false, sDsn);
- CRecordset recset(&database);
- // 設置讀取的查詢語句.demo.xls並不是文件名,須要在excel中進行//設置,具體文章最後有講
- sSql = "SELECT Age, Name FROM DEMO.XLS";
- // 執行查詢語句,打開表格
- recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
- // 獲取查詢結果
- while (!recset.IsEOF())
- {
- //讀取Excel內部數值
- recset.GetFieldValue("Name ", sItem1);
- recset.GetFieldValue("Age", sItem2);
- // 移到下一行
- recset.MoveNext();
- }
- // 關閉數據庫
- database.Close();
- }
- CATCH(CDBException, e)
- {
- // 數據庫操做產生異常時...
- AfxMessageBox("數據庫錯誤: " + e->m_strError);
- }
- END_CATCH;
- }
須要注意的是,咱們對咱們的Excel表格須要進行一些處理,須要先選定咱們要讀取的數據,以後,選擇插入>>名字>>以後,在輸入框中輸入咱們在select語句中用到的表名。第二,須要設置列名,爲咱們選定部分的最前面的一行的數據。