今天花時間研究了一下ado操作excel檔案的問題,跟大家分享一下:
首先利用excel2003建立了乙個名為demo.xls的檔案,內容如下:
name
agety 12
tzl15
然後開啟vc,建立乙個命令列應用程式。然後如一般的ado程式一樣編寫相應**,只是注意開啟資料庫的**如下寫:
m_pconnection->open("provider=microsoft.jet.oledb.4.0;data source=demo.xls;extended properties=/"excel 8.0;hdr=no;imex=1/"","","",admodeunknown);
注意一下hdr,如果後面是no的話,表示ado將不把你excel檔案的第一行作為欄位名(此時使用預設欄位名:f1,f2。。以此類推,當然也可以用(lpctstr)m_precordset->getfields()->getitem((_variant_t)zz)->name之類的**來獲得相應的欄位名)。否則如上excel檔案的欄位名將是name與age。另外是imex,如果設定了"imex=1;" 則通知驅動程式始終將「互混」(數字,日期,字串等)資料列作為文字讀取,同時這個選項有可能影響到excel**拒絕寫操作,也就是說,如果我們要求寫入excel的話,這個選項不能被設定。
接下來是開啟記錄集,**如下(注意一下表名的寫法):
m_precordset->open("select * from [sheet1$]",_variant_t((idispatch*)m_pconnection,true),adopendynamic,adlockoptimistic,adcmdunknown);
知道了欄位名,開啟了資料庫跟記錄集,隨後的操作就跟普通ado的操作一樣了:
讀取操作:
while(!m_precordset->adoeof)
插入操作:
m_precordset->addnew();
m_precordset->putcollect("name",_variant_t("zz"));
m_precordset->putcollect("age",_variant_t("23"));
m_precordset->update();
更新操作:
m_precordset->movefirst();
m_precordset->putcollect("name",_variant_t("zz"));
m_precordset->update();
刪除操作:
不支援!這也是感到很遺憾的地方。好在我們可以通過執行 update [sheet1$] set name=null, age=null where name='zz' 之類的sql語句來實現類似功能。當然,你要知道的是,這一行並沒有真正刪除掉,所以通常在select的時候要進行一定的篩選,例如:select * from [sheet1$] where name is not null;
其它注意事項:
如果通過執行sql語句的方法完成資料插入與更新操作,需要注意所有的字段,包括數字,都要按文本來處理,否則會報型別不正確的錯誤。
利用ADO操作Excel檔案
使用adodb物件可以訪問和操作excel檔案 asp在asp中,使用adodb物件可以訪問和操作excel檔案。下面我們以乙個excel檔案匯入access為例子,簡要看看在asp中使用excel的方法。1 乙個.xls檔案可以看成乙個資料庫,其中的每乙個工作表 sheet 看成資料庫表。2 ac...
VC 利用ADO操作Excel
把excel當做資料庫來操作,步驟如下 1 在stdafx.h中加入 import c program files common files system ado msado15.dll no namespace rename eof adoeof connectionptr pcon ex cst...
C 通過ADO讀寫Excel檔案
有時候我們需要從excel 裡匯入 匯出資料。其中一種方式就是通過ado的方式。在這裡,excel檔案被當作資料庫來處理,該方式不需要客戶端安裝microsoft excel,速度也夠快。連線字串 這裡有兩種型別的連線字串,第一種是針對xls格式的 provider microsoft.jet.ol...