Excel讀取程式設計 4

2021-06-15 22:39:22 字數 4901 閱讀 7101

1.將資料從excel中匯入到資料庫中:

將資料從excel表中匯入到資料中操作的思路比較簡單,就是通過逐行獲取單元格的內容,利用getitem(行位置m,列位置n)來獲取mn列的值,再寫個writetodatabase(cstring a,…cstring z)函式,將資料匯入到資料庫中.

此外設計關鍵在於如何判斷讀取的excel最後一行,在這裡由於從開頭的第一行到最後一行都不為空.所以我利用的是從cstring a=getitem(m,n);

if(a==」」)來實現.但這樣有個弊端,就是如果從第一行到最後一行中有一行的第一列為空,會導致該行後面的資料匯入不到database.解決的辦法暫時沒有找到.

函式如下:

void

ccontentssubmitdlg::onbnclickedimporttosql()

//利用模板檔案建立新文件

cstring

strpath = strparthtosql;//strparthtosql

為要匯入的*.xls路徑,它為全域性變數

if(strpath=="")

wbmybook.attachdispatch(wbsmybooks.add(_variant_t(strpath))); //

得到worksheets

wssmysheets.attachdispatch(wbmybook.getworksheets(),true); //

得到sheet1

wsmysheet.attachdispatch(wssmysheets.getitem(_variant_t("sheet1")),true); //

得到全部cells,此時,rgmyrge是cells的集合

rgmyrge.attachdispatch(wsmysheet.getcells(),true);

intj=2;

cstring

getstr[100][13];

cstdiofile

iniconfigfile;

if(iniconfigfile.m_pstream=fopen(strparthtosql,"r+w"))//

開啟excel檔案

getstr[j][1]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)2));

getstr[j][2]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)3));

getstr[j][3]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)4));

getstr[j][4]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)5));

getstr[j][5]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)6));

getstr[j][6]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)7));

getstr[j][7]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)8));

getstr[j][8]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)9));

idtimenow = coledatetime::getcurrenttime();

intyear = idtimenow.getyear();

intmonth = idtimenow.getmonth();

intday = idtimenow.getday();

inthour = idtimenow.gethour();

intminute = idtimenow.getminute();

intsecond = idtimenow.getsecond();

cyear.format("%d",year);

cmoth.format("%d",month);

cday.format("%d",day);

chour.format("%d",hour);

cmin.format("%d",minute);

csec.format("%d",second);

idcontent=cyear+cmoth+cday+chour+cmin+csec;

getstr[j][9]=idcontent;//

匯入的提報編號

getstr[j][10]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)11));

getstr[j][11]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)12));

getstr[j][12]=rgmyrge.getitem(_variant_t((long)j),_variant_t((long)13));

bool

torf=writedatatosql(getstr[j][0],getstr[j][1],getstr[j][2],getstr[j][3],getstr[j][4],getstr[j][5],getstr[j][6],getstr[j][7],getstr[j][8],getstr[j][9],getstr[j][10],getstr[j][11],getstr[j][12]);

if (torf) //

如果該行資料寫入成功,則繼續寫下一行

else }

}afxmessagebox("

匯入操作成功",mb_ok);

intm=j;

rgmyrge.releasedispatch();

wsmysheet.releasedispatch();

wssmysheets.releasedispatch();

wbmybook.releasedispatch();

wbsmybooks.releasedispatch();

} 其中,

寫入資料庫的函式

writedatatosql(…)

函式**如下:

bool

ccontentssubmitdlg::writedatatosql(

cstring

team,

cstring

project,

cstring

childproject,

cstring

contents,

cstring

schedual,

cstring

completedate,

cstring

principals,

cstring

remark,cstring

speaker,

cstring

id,cstring

submitdata,

cstring

state,

cstring

projecttime)

else

m_conn.exitconnect();}

2.總結

其實對於excel的操作關鍵是六個類,這六個類基本上把excel操作都定義到其中了,我們只需要的是合理的呼叫寫入就可以,從某種意義上來說excel可看成乙個資料庫表,它的第一行不凡看成是表的結構欄位.其他行表示表的內容.只是由行和列就能確定excel的某個位置的具體值了.

Excel讀取程式設計 1

準備工作 新增如下六個excel相關的類 新增方法 在class view 工具中選擇add class mfc mfc class from typelib open 選擇add class from file location中找到本地安裝excel.exe的路徑 如c program file...

讀取excel,類封裝(4)

基礎用例資料類 class caseinfo def init self,case id,case name,case module,case pri,case step,case result self.case id case id self.case name case name self.c...

excel操作 讀取excel

讀取excel步驟 匯入xlrd模組 開啟excel 讀取需要的sheet頁 通過sheet頁編號或者sheet名字 獲取該sheet頁每行每個字段結果 import xlrd book xlrd.open workbook students.xls 開啟excel sheet book.sheet...