有時候我們需要從excel**裡匯入、匯出資料。其中一種方式就是通過ado的方式。在這裡,excel檔案被當作資料庫來處理,該方式不需要客戶端安裝microsoft excel,速度也夠快。
連線字串
這裡有兩種型別的連線字串,第一種是針對xls格式的:
provider=microsoft.jet.oledb.4.0;data source=data.xls;extended properties="excel 8.0"
第二種是針對xlsx格式的:
provider=microsoft.ace.oledb.12.0;data source=data.xlsx;
extended properties="excel 12.0 xml"
寫入首先建立乙個連線字串:
testhr(pcon.createinstance(__uuidof(connection)));
testhr(pcon->open(connstr, "", "", null));
然後建立command物件和表,注意表名就是excel的頁:
testhr(pcmd.createinstance(__uuidof(command)));
pcmd->activeconnection = pcon;
pcmd->commandtext = "create table mysheet
(a int, b varchar, c int, d int, e int, f int, g int, h int, i int, j varchar)";
pcmd->execute(null, null, adcmdtext);
建立recordset並增加記錄:
testhr(prec.createinstance(__uuidof(recordset)));
prec->open("select * from mysheet", _variant_t((idispatch*)pcon),
adopenkeyset, adlockoptimistic, adcmdtext);
for(int i = 0; i < writerows; ++i)
; for(int j = 0; j < 10; ++j) str[j] = 'a' + (rand() % 26);
prec->fields->getitem("a")->value = _variant_t(i);
prec->fields->getitem("b")->value = _variant_t(str);
prec->fields->getitem("c")->value = _variant_t(i);
prec->fields->getitem("d")->value = _variant_t(i);
prec->fields->getitem("e")->value = _variant_t(i);
prec->fields->getitem(" f www.taohuayuan178.com")->value = _variant_t(i);
prec->fields->getitem("g")->value = _variant_t(i);
prec->fields->getitem("h")->value = _variant_t(i);
prec->fields->getitem("i")->value = _variant_t(i);
prec->fields->getitem("j")->value = _variant_t(str);
}testhr(prec->update(www.272345.cn ));
testhr(prec->close(www.567860.cn ));
讀取建立和開啟recordset:
testhr(prec.createinstance(__uuidof(recordset)));
testhr(prec->www.huachenj157.com open("select * from [sheet1$]", connstr,
adopenstatic, adlockoptimistic, adcmdtext));
如果excel的頁不清楚,可以通過索引來查詢:
testhr(pcon.createinstance(__uuidof(connection)));
testhr(pcon->open(connstr, "", "", null));
pschema = pcon->openschema(adschematables);
for(int i = 0; i < sheetindex; ++i) pschema->movenext();
std::string sheetname =
(char*)(_bstr_t)pschema->www.2636666.cn fields->getitem("table_name")->value.bstrval;
讀取單元格的值:
while(!prec->adoeof)
stream << std::endl;
prec->movenext();
}參考資料
how to read and write excel files in c++ via ado
c++ using adodb to read excel file in 64-bit windows 7?
accessdatabaseengine#install instruction
C 通過ADO讀寫Excel檔案
有時候我們需要從excel 裡匯入 匯出資料。其中一種方式就是通過ado的方式。在這裡,excel檔案被當作資料庫來處理,該方式不需要客戶端安裝microsoft excel,速度也夠快。這裡有兩種型別的連線字串,第一種是針對xls格式的 provider microsoft.jet.oledb.4...
C 讀寫Excel檔案
公司遇到一些tasks,需要將分析完畢的資料結果儲存在excel檔案中。陸陸續續參與了這麼多tasks後,現簡單總結下 操縱excel 檔案有多種方法,每種方法都有特色,適用於不同場景。方法1 呼叫office com元件 也就是呼叫interop類。此方法適用於desktop已經安裝有window...
利用ADO操作Excel檔案
今天花時間研究了一下ado操作excel檔案的問題,跟大家分享一下 首先利用excel2003建立了乙個名為demo.xls的檔案,內容如下 name agety 12 tzl15 然後開啟vc,建立乙個命令列應用程式。然後如一般的ado程式一樣編寫相應 只是注意開啟資料庫的 如下寫 m pconn...