




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VC操縱EXCEL的兩種方法第一種方法,簡單的,用CDatabase實(shí)現(xiàn). 程序是一個(gè)基于對話框的,步驟: A,為了避免代碼重復(fù),設(shè)置下面幾個(gè)全局變量(類范圍的),要引入頭文件<afxdb.h> CDatabase m_db; &
2、#160; /數(shù)據(jù)庫 CString m_dbdriver; /要生成的EXCEL文件的目錄 c
3、har m_pathMAX_PATH; /獲取路徑用的數(shù)組 CString m_strdir; /
4、包括EXCEL文件名在內(nèi)的路徑名. CString m_strsql; /SQL命令語句,用m_db可直接執(zhí)行.B,在OnInitDialog方法中,生成一個(gè)xls文件,并插入兩條記錄,可在TRY語句中進(jìn)
5、行,因?yàn)檫@里面要?jiǎng)?chuàng)建一張表,當(dāng)再次啟動程序時(shí),會有異常發(fā)生,說表已經(jīng)存在了,這時(shí)就避免了重復(fù)創(chuàng)建和插入.代碼如下:m_dbdriver="MICROSOFT EXCEL DRIVER (*.XLS)" GetCurrentDirectory(MAX_PATH,m_path); m_strdir=m_path; m_strdir+="/test.xls" /上面初始化各個(gè)變量.
6、0;m_strsql.Format("DRIVER=%s;DSN=''''FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s"DBQ=%s",m_dbdriver,m_strdir,m_strdir); TRY if (m_db.OpenEx(m_strsql,CDatabase:noOdbcDialog) m_strsql="Create Table Od
7、bcExl(Name Text,Age Number,Gener Text)" m_db.ExecuteSQL(m_strsql); m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Bob',34,'Male')" m_db.ExecuteSQL(m_strsql); m_strsql="Insert Into OdbcExl(N
8、ame,Age,Gener) Values('Jane',23,'Female')" m_db.ExecuteSQL(m_strsql); m_db.Close(); CATCH_ALL(e) / e->ReportError(); m_db.Close(); return FALSE; END_CATCH_ALL;C,其實(shí)上
9、面已經(jīng)達(dá)到了答題人的要求,但作為一個(gè)程序,這也太不像話了,于是我又稍微加了點(diǎn)不值一提的東西,在對話框上輸入信息,再插入到EXCEL表中去,這一切都在按下"插入"按鈕后發(fā)生: UpdateData(); m_strsql.Format("DRIVER=%s;DSN=''''FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s"DBQ=%s", m_dbdriver,m_strdir,m_strdir); TRY
10、 if (m_db.OpenEx(m_strsql,CDatabase:noOdbcDialog) m_strsql.Format("Insert into OdbcExl(Name,Age,Gener)Values('%s',%d,'%s')",m_name,m_age,m_gener); m_db.ExecuteSQL(m_strsql); CATCH_ALL(e)
11、160; e->ReportError(); / db.Close(); END_CATCH_ALL; m_db.Close();可以說,只要對CDatabase稍有了解,對SQL語句稍有了解,這個(gè)問題就很容易解決,如果要說這是一個(gè)針對Excel文件操作的方法,那是因?yàn)樵贠penEx初始化數(shù)據(jù)庫對象(不是"打開"哦)時(shí)用的文件后綴名為.xls而已,我們可以像在普通的數(shù)據(jù)庫中一樣進(jìn)行其他操作,如用SELECT語句來讀取EXCEL文件的內(nèi)容等, 第一種方法完.下面是第二種方法,這里涉及的原理要復(fù)雜一些了,傳說中
12、的OLE(對象鏈接與嵌入)技術(shù)在這里用上了,EXCEL.EXE作為一個(gè)組件服務(wù)器,應(yīng)用程序作為客戶端.,還是直接寫過程吧,頭暈暈的,只能平鋪直述了.A,從classwizard中add class處from type library,去office的安裝目錄下引入excel.exe(這是office 2003的選擇,其他版本都是用olb文件),服務(wù)器就算引入了,這時(shí)會彈出對話框,要求加入一些類,這些類都是一些接口,里面有大量的方法,類的對象表征著excel文件的一個(gè)個(gè)部分,常用的有這幾個(gè)_application,workbooks,_workbook,worksheets,_worksheet
13、,Range,它們分別代表不同的意義._application代表了EXCEL服務(wù)器,workbooks表示整個(gè)Excel服務(wù)器(表現(xiàn)為一個(gè).xls文件)里所有的表,(可以通過"新建"得到多個(gè)表,即MDI程序里的一個(gè)視窗一樣,所有的視窗就是workbooks), _workbook就是一個(gè)表,相當(dāng)于MDI中的一個(gè)視窗, worksheets表示所有的表單,每個(gè)表都可能有很多表單(建立一個(gè)Excel文件之后,打開,可以看到有sheet1,sheet2等,所有這些sheetn就組成了worksheets), _worksheet就表示一個(gè)表單, range表示元素的集合. 搞清
14、楚上面這幾個(gè)名詞的意思非常重要.B,在dlg.h中聲明下面幾個(gè)變量: _Application exlapp; /組件服務(wù)器的各個(gè)classes _Workbook wbk; Workbooks wbks; _Worksheet wht; Worksheets whts; LPDISPATCH lpDisp; 并在app.cpp的InitInstance方法中加入下面兩句AfxInitOle(); AfxEnableControlContainer();C,這里我沒有像上面一樣完全用程序來生
15、成一個(gè)Excel文件,而是在開始時(shí)就在當(dāng)前目錄下生成了一個(gè)Excel文件,在對話框上我設(shè)置了兩個(gè)按鈕,下面是"顯示"按鈕的代碼: /創(chuàng)建Excel服務(wù)器 if(!exlapp.CreateDispatch("Excel.Application") AfxMessageBox("無法啟動Excel服務(wù)器!"); return; COleVariant avar(long)DISP_E_PARAMNOTFOUND,VT_
16、ERROR); exlapp.SetVisible(TRUE);/使Excel可見 exlapp.SetUserControl(TRUE);/允許其它用戶控制Excel,否則Excel將一閃即逝. /Open an excel file char pathMAX_PATH; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += "VCOpExcel" wbks.AttachDispatch(exl
17、app.GetWorkbooks(); lpDisp=wbks.Open(strPath, avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbks.ReleaseDispatch(); exlapp.ReleaseDispatch();D,與上面第一種方法一樣,可以插入記錄: UpdateData(); /讀入數(shù)據(jù) if (""
18、;=m_name) /判斷名字輸入有效 MessageBox("Please input a right name"); return; if (0>=m_age|100<=m_age) /判斷年齡輸入有效 MessageBox("Please input a right age"); return; char
19、 *p=strupr(_strdup(m_gener); if (strcmp(p,"FEMALE")&&strcmp(p,"MALE") /判斷性別輸入有效 MessageBox("Please input a right gener"); return; Range range; Range usedRange; COleVariant avar(long)DISP_E_PA
20、RAMNOTFOUND,VT_ERROR); if(!exlapp.CreateDispatch("Excel.Application") /啟動服務(wù)器 AfxMessageBox("無法啟動Excel服務(wù)器!"); return; char pathMAX_PATH; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += "VCOpExcel" wbks.AttachDispatch(exlapp.GetWorkbooks(); lpDisp=wbks.Open(strPath, /初始化. avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbk.AttachDispatch(lpDisp);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 食品衛(wèi)生與安全質(zhì)量控制試題及答案
- 經(jīng)濟(jì)數(shù)據(jù)分析與應(yīng)用試題
- 游戲公司美術(shù)資源管理方案
- 鍍鋅花壇施工方案
- 2025年成人高考《語文》語言邏輯訓(xùn)練題庫:古代文化知識解析
- 2025年護(hù)士執(zhí)業(yè)資格考試題庫(急危重癥護(hù)理學(xué)專項(xiàng))護(hù)理專業(yè)英語試題
- 2025年消防執(zhí)業(yè)資格考試題庫(消防標(biāo)準(zhǔn)化建設(shè))消防技術(shù)標(biāo)準(zhǔn)試題
- 2025年成人高考《語文》古詩詞鑒賞經(jīng)典名篇分析試題庫
- DB32-T 5080-2025 工程竹結(jié)構(gòu)建筑技術(shù)規(guī)程
- 2025年安全生產(chǎn)考試題庫:安全生產(chǎn)隱患排查治理安全檢查報(bào)告試題
- 哈薩克斯坦鐵路車站代碼
- 產(chǎn)業(yè)經(jīng)濟(jì)學(xué)的課后復(fù)習(xí)答案
- 中國綠色經(jīng)濟(jì)發(fā)展之路(PPT-37張)課件
- 客房控制系統(tǒng)——RCU系統(tǒng)培訓(xùn)PPT通用通用課件
- 履帶式液壓挖掘機(jī)挖掘機(jī)構(gòu)設(shè)計(jì)
- 川崎病診治指南最新ppt課件
- (會議紀(jì)要(2011)第29期)河南煤業(yè)化工集團(tuán)有限責(zé)任公司會議紀(jì)要
- 原子吸收分光光度計(jì)檢定規(guī)程
- SBS改性瀝青供貨方案
- 古羅馬藝術(shù)(課堂PPT)
- 標(biāo)簽紙打印a4模板
評論
0/150
提交評論