方案一:利用現(xiàn)成的第三方庫:CSpreadSheet
使用CSpreadSheet操作EXCEL的局限性:你只能夠在EXCEL中創(chuàng)建表,然后才能夠采用ODBC的方式操作EXCEL表,否則查詢語句中FROM后面的表名稱無法填寫.
限制
該控件需要MFC(微軟基礎(chǔ)類庫)支持.未測試是否支持Unicode編碼.控件以ODBC讀寫
Excel文件,需要ODBC驅(qū)動程序.Excel文件必須列標(biāo)記.且首行列標(biāo)記唯一(字段).禁止
刪除工作簿,僅允許刪除工作簿內(nèi)容.列值類型參照程序數(shù)據(jù)類型.不采用Excel格式.
詳細(xì)參考:http://blog.csdn.net/andy205214/article/details/5918648
方案二:自己編寫訪問數(shù)據(jù)庫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
CDatabase db;
//數(shù)據(jù)庫庫需要包含頭文件#include <afxdb.h>
CString sDriver = _T( "MICROSOFTEXCEL DRIVER (*.XLS)" );
// Excel驅(qū)動
CString sSql;
charszRecord[6][128] = {0}; sSql.Format(_T( "DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s" ),sDriver,strFilePath, strFilePath);
if (!db.OpenEx(sSql,CDatabase::noOdbcDialog))
//連接數(shù)據(jù)源DJB.xls
{
MessageBox(_T( "打開EXCEL文件失敗!" ),_T( "錯(cuò)誤" ));
return ;
}
//打開EXCEL表
CRecordset pset(&db);
sSql.Format(_T( "SELECTvalues1,values2 FROM Sheet1" ));
pset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);
while (!pset.IsEOF())
{
pset.GetFieldValue(); //前面字段
pset.MoveNext();
}
db.Close();
|
注意:
1)通過GetFieldValue獲取當(dāng)前行中相應(yīng)屬性值
2)sSql語句是一個(gè)查詢語句,其中Sheet1是表名,說明得先在導(dǎo)出的文件中建立表,然后才能夠?qū)?/span>
|