C 通過ADO讀寫Excel檔案

2022-01-31 13:51:38 字數 2836 閱讀 8359

有時候我們需要從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"

inline void testhr(hresult x) ;
首先建立乙個連線字串:

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")->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());

testhr(prec->close());

建立和開啟recordset:

testhr(prec.createinstance(__uuidof(recordset)));       

testhr(prec->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->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.ol...

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...