国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VC-EXCEL2003操作方法
我們制作應(yīng)用軟件的時候,經(jīng)常要把結(jié)果以報表的形式輸出,當(dāng)前使用較為廣泛的當(dāng)然是Excel表格,本文簡略介紹在VC++6.0中如何使用Excel2003的庫函數(shù)并對其進行編程。先創(chuàng)建一個對話框工程,命名為VCExcel。在對話框中添加一個按鈕,控件ID為ID_RUNEXCEL,界面如下(是不是很搞笑哇,不過沒關(guān)系,它照樣能實現(xiàn)強大的功能?。?。 再在該按鈕上添加消息BN_CLICKED,其消息映射函數(shù)為OnRunexcel(),下面我們的工作就是要完成這個OnRunexcel()函數(shù)。在這里我們通過一個實例來說明VC是如何調(diào)用Excel2003的接口編程的。 我們要編程輸出一個如下表格。 格式如下: 1、表頭的字體為宋體,加粗,顏色為白色,底色為深藍,垂直水平居中對齊; 2、表中正文內(nèi)容字體為宋體,顏色為深藍,底色為灰色,垂直水平居中對齊; 3、全部邊框,文本自動換行。 在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()語句之后加入如下代碼: if(CoInitialize(NULL)==0)//初始化COM庫 { AfxMessageBox("初始化COM失敗!"); exit(1); } 在return FALSE;語句之前加入:::CoUninitialize();//釋放COM庫。 為了能調(diào)用Excel的接口我們打開MFC ClassWizard->Automation->Add Class->From a type library,選擇[Excel的安裝路徑]\EXCEL.exe,然后把所有的類都添加進去,頭文件為excel.h,源文件為excel.cpp。當(dāng)然,你也可以只把一些比較常用的類如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加進去,因為網(wǎng)上流傳的絕大部分教程都只添加這幾個類,這完全根據(jù)你個人的需要。但在本例中我們至少還要用到Interior類(設(shè)置底色),F(xiàn)ont類(設(shè)置字體),而且這樣做又簡單又方便擴展功能,不管三七二十一全部弄進去吧!但這樣做會有一個問題,有可能產(chǎn)生類的名字沖突,例如本來你自己寫了一個類叫Font,當(dāng)你全部添加時又再次加入了Font類,這樣就重復(fù)定義了,不過可以通過名字空間來解決這個問題。再在VCExcelDlg.cpp文件的頭部添加(如果系統(tǒng)已經(jīng)自動添加就不要重復(fù)添加了): #include "VCExcel.h" #include "comdef.h" 這樣一來我們的程序就可以自由調(diào)用EXCEL了,一切準備就緒。 下面先在CVCExcelDlg中添加如下成員變量,用來操控Excel應(yīng)用程序、工作簿和單元格。 Range m_ExlRge; _Worksheet m_ExlSheet; Worksheets m_ExlSheets; _Workbook m_ExlBook; Workbooks m_ExlBooks; _Application m_ExlApp; 我們利用加載Excel模板來生成要求的表格,在本工程Debug文件夾中建立一個Excel文件,命名為Template.xls。我們的OnRunexcel()代碼如下(詳見注釋): void CVCExcelDlg::OnRunexcel() { // TODO: Add your control notification handler code here //用m_ExlApp對象創(chuàng)建Excel2003進程 if(!m_ExlApp.CreateDispatch("Excel.Application",NULL)) { AfxMessageBox("創(chuàng)建Excel服務(wù)失敗!"); return; } //設(shè)置為可見 m_ExlApp.SetVisible(TRUE); ///////////////////下面得到應(yīng)用程序所在的路徑/////////////////// CString theAppPath,theAppName; char Path[MAX_PATH]; GetModuleFileName(NULL,Path,MAX_PATH);//得到應(yīng)用程序的全路徑 theAppPath=(CString)Path; theAppName=AfxGetApp()->m_pszAppName; theAppName+=".exe"; //把最后的文件名去掉 int length1,length2; length1=theAppPath.GetLength(); length2=theAppName.GetLength(); theAppPath.Delete(length1-length2,length2); //////////////////////////////////////////////////////////////// CString TempPath=""; TempPath=theAppPath+"Template.xls";//EXCEL模板的路徑 m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE); m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加載EXCEL模板 m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加載Sheet頁面 //添加新的Sheet頁面 m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing); //刪除第二個Sheet頁面 m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE); m_ExlSheet.Delete(); //把第一個Sheet頁面的名字改變?yōu)門estSheet m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE); m_ExlSheet.SetName("TestSheet"); ///////合并第一行單元格A1至D1////// //加載要合并的單元格 m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE); m_ExlRge.Merge(_variant_t((long)0)); ////////設(shè)置表格內(nèi)容//////// m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加載所有單元格 m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("數(shù)學(xué)系研究生課程統(tǒng)計")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("課程名")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("課時")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("難度")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("教學(xué)方式")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("泛函分析")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("普通")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("老師講課")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t("微分流形")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("變態(tài)難")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)4),_variant_t("自學(xué)")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t("二階橢圓型方程與方程組")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)2),_variant_t("60")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("很難")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("討論")); m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//加載已使用的單元格 m_ExlRge.SetWrapText(_variant_t((long)1));//設(shè)置單元格內(nèi)的文本為自動換行 //設(shè)置齊方式為水平垂直居中 //水平對齊:默認=1,居中=-4108,左=-4131,右=-4152 //垂直對齊:默認=2,居中=-4108,左=-4160,右=-4107 m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108)); m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108)); ///////設(shè)置整體的字體、字號及顏色////// Font ft; ft.AttachDispatch(m_ExlRge.GetFont()); ft.SetName(_variant_t("宋體"));//字體 ft.SetColorIndex(_variant_t((long)11));//字的顏色 ft.SetSize(_variant_t((long)12));//字號 ///////////設(shè)置標(biāo)題字體及顏色////////// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1"))); ft.AttachDispatch(m_ExlRge.GetFont()); ft.SetBold(_variant_t((long)1));//粗體 ft.SetSize(_variant_t((long)13)); ft.SetColorIndex(_variant_t((long)2)); CellFormat cf; cf.AttachDispatch(m_ExlRge.GetCells()); //////////////設(shè)置底色///////////////// Interior it; it.AttachDispatch(m_ExlRge.GetInterior()); it.SetColorIndex(_variant_t((long)11));//標(biāo)題底色 ////表格內(nèi)容的底色//// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5"))); it.AttachDispatch(m_ExlRge.GetInterior()); it.SetColorIndex(_variant_t((long)15)); //////////////為表格設(shè)置邊框///////////// Range UnitRge; CString CellName; for(int i=1;i<=4;i++) {="" for(int="" j=""><=4;j++) { cellname.format("%c%d",j+64,i);//單元格的名稱 unitrge.attachdispatch(m_exlrge.getrange(_variant_t(cellname),_variant_t(cellname)));//加載單元格 //linestyle=線型 weight=線寬 colorindex=線的顏色(-4105為自動) unitrge.borderaround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtmissing);//設(shè)置邊框 } } //釋放對象(相當(dāng)重要!) m_exlrge.releasedispatch(); m_exlsheet.releasedispatch(); m_exlsheets.releasedispatch(); m_exlbook.releasedispatch(); m_exlbooks.releasedispatch(); //m_exlapp一定要釋放,否則程序結(jié)束后還會有一個excel進程駐留在內(nèi)存中,而且程序重復(fù)運行的時候會出錯 m_exlapp.releasedispatch(); //退出程序 m_exlapp.quit(); } 小結(jié):一年前就想寫這個東西了,因為網(wǎng)上講vc與office編程的資料實在是太少了,即使有也很片面(vb講這方面的東西卻又多又全,郁悶~),想當(dāng)初做這個東西的時候上網(wǎng)查資料快查瘋掉了,最后還是一堆問題沒有解決。哈哈,現(xiàn)在無聊靜下心來一研究發(fā)現(xiàn)原來vc蹂躪excel也不是一件難事啊,在這個例子里面包含了很多常用的功能,相信做一般的報表是沒什么問題的。要是做更復(fù)雜的報表怎么辦呢?一個例子也不可能包括方方面面呀,那確實,因此有很多東西是需要讀者自己探討的。下面我告訴大家一個方法,細心的讀者可能已經(jīng)發(fā)現(xiàn)有些參數(shù)不知道是從哪里蹦出來的,例如:水平對齊:默認=1,居中=-4108,左=-4131,右=-4152。這就要用到office的宏錄制功能(什么?你沒聽過?網(wǎng)上去查吧^__^),把你要的操作用宏錄制下來,然后用vb打開,單步調(diào)試的時候就能發(fā)現(xiàn)這些秘密了!上面例子中的參數(shù)都是dodo在宏里面找到滴,哈哈,是不是很簡單?快去試試吧~ {="" cellname.format("%c%d",j+64,i);//單元格的名稱="" unitrge.attachdispatch(m_exlrge.getrange(_variant_t(cellname),_variant_t(cellname)));//加載單元格="" linestyle="線型" weight="線寬" colorindex="線的顏色(-4105為自動)" unitrge.borderaround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtmissing);//設(shè)置邊框="" }="" }="" 釋放對象(相當(dāng)重要!)="" m_exlrge.releasedispatch();="" m_exlsheet.releasedispatch();="" m_exlsheets.releasedispatch();="" m_exlbook.releasedispatch();="" m_exlbooks.releasedispatch();="" m_exlapp一定要釋放,否則程序結(jié)束后還會有一個excel進程駐留在內(nèi)存中,而且程序重復(fù)運行的時候會出錯="" m_exlapp.releasedispatch();="" 退出程序="" m_exlapp.quit();="" }="">
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VC導(dǎo)出數(shù)據(jù)到EXCEL .
兩種VC操縱EXCEL的方法
vb調(diào)用excel對象的使用實例:使用excel.application與workbook等并保存工作薄
怎樣把多個EXCEL表格合并成一個EXCEL表格 - 已解決 - 搜搜問問
搜集各種Excel VBA的命令供參考!
MFC對EXCEL的操作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服