1.將資料從excel中匯入到資料庫中:
將資料從excel表中匯入到資料中操作的思路比較簡單,就是通過逐行獲取單元格的內容,利用getitem(行位置m,列位置n)來獲取m行n列的值,再寫個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...