• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            使用VC++操作Excel文件

            • 本文檔適用于:

            ·                       Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0 以上

            ·                       Microsoft OLE 庫(kù)

             第一步:建立一個(gè)自動(dòng)化工程

            3.                  啟動(dòng)VC 6.0,打開(kāi)新建對(duì)話框,新建一個(gè)MFC AppWizard(exe)工程,這里工程明設(shè)置為TestExcel

            4.                  進(jìn)入MFC 應(yīng)用程序向?qū)Вx擇 基本對(duì)話框,直接點(diǎn)擊完成,工程文件結(jié)構(gòu)如下圖:

            clip_image001

            5.                  打開(kāi)MFC ClassWizard窗口(查看—>建立類向?qū)?span lang="EN-US">),選擇Automation,單擊Add Class按鈕,選擇From a type library...,彈出文件選擇對(duì)話框,之后定位到Microsoft Office的安裝目錄(通常為C:\Program Files\Microsoft Office\Office),選擇EXCEL9.OLB注意,確定后,彈出Confirm Classes窗口,選擇列表中的所有類,單擊OK按鈕。

            注意 文件名EXCEL9.OLB,因安裝的Office版本不同而有所差異,EXCEL9.OLB對(duì)應(yīng)的是Microsoft Office 2000,微軟命名方式為Excel+數(shù)字的形式,Office版本越高,數(shù)字越大。

            clip_image002

            6.                  返回編輯器,查看工程文件,可發(fā)現(xiàn)多了EXCEL9.HEXCEL9.CPP兩個(gè)文件。

            7.                  打開(kāi)stdafx.h頭文件確保包含如下頭文件:

            #include <afxdisp.h>

            #include "excel9.h"

            8.                  打開(kāi)TestExcel.cpp文件,修改CTestExcelApp::InitInstance(),加入如下代碼:

            BOOL CTestExcelApp::InitInstance()

            {

                 if( !AfxOleInit() ){

                      AfxMessageBox("初始化Ole出錯(cuò)!");

                      return FALSE;

                 }

                 AfxEnableControlContainer();

                ......

                ......

                 return FALSE;

            }

            為保證編譯時(shí)不產(chǎn)生重復(fù)定義錯(cuò)誤,打開(kāi)excel9.h文件,在文件開(kāi)始位置加入如下代碼:

            #if !defined _HEAD_FILE_EXCEL9_

            #define _HEAD_FILE_EXCEL9_

             相應(yīng)的,在文件末尾加入:

            #endif

            到此,OLE自動(dòng)化工程建立完成。按下F7,看是否能通過(guò)編譯。

            第二步:操作EXCEL文件

            9.                   選擇ResourceView工作區(qū),打開(kāi)IDD_TESTEXCEL_DIALOG,在對(duì)話框中添加一個(gè)按鈕控件Button1,雙擊它,生成一個(gè)Button1 Click事件的處理函數(shù):

            void CTestExcelDlg::OnButton1()
            {
            // TODO: Add your control notification handler code here
             
            }

            10.              OnButton1()函數(shù)中,添加代碼:

            void CTestExcelDlg::OnButton1()
            {
            // TODO: Add your control notification handler code here
            _Application app;
            Workbooks books;
            _Workbook book;
            Worksheets sheets;
            _Worksheet sheet;
            Range range;
            Font font;
            Range cols;
            COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

            if( !app.CreateDispatch("Excel.Application") ){
              this->MessageBox("
            無(wú)法創(chuàng)建Excel應(yīng)用!");
              return;
            }
            books=app.GetWorkbooks();
            book=books.Add(covOptional);
            sheets=book.GetSheets();
            sheet=sheets.GetItem(COleVariant((short)1));
            range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
            range.SetValue(COleVariant("HELLO EXCEL!"));
            font=range.GetFont();
            font.SetBold(COleVariant((short)TRUE));
            range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));
            range.SetFormula(COleVariant("=RAND()*100000"));
            range.SetNumberFormat(COleVariant("$0.00"));
            cols=range.GetEntireColumn();
            cols.AutoFit();
             
            app.SetVisible(TRUE);
            app.SetUserControl(TRUE);

            }

            11.              按下Ctrl+F5,執(zhí)行程序。按下Button1,將會(huì)彈出Excel窗口:

            clip_image003

            12.              到此,即完成了我們的示例程序,下面將對(duì)程序進(jìn)行詳細(xì)的說(shuō)明,如果大家有過(guò)使用Visual Basic操作Excel程序的經(jīng)驗(yàn),則應(yīng)該能看懂下面程序:

            void CTestExcelDlg::OnButton1()

            {

            // TODO: Add your control notification handler code here

            /*

               先創(chuàng)建一個(gè)_Application類,用_Application來(lái)創(chuàng)建一個(gè)Excel應(yīng)用程序接口。
               Excel
            接口類中層次如下所示:
                -_Application
                  -Workbooks
            工作薄集合
                    -_Workbook
            工作薄
                      -Worksheets
            工作表集合
                        -_Worksheet
            工作表
                          -Range
            單元格區(qū)域
              
            故要操作表,必須先逐步獲取Workbooks—>Workbook —>Worksheets —>Worksheet —>Range

            */

            _Application app;

            Workbooks books;

            _Workbook book;

            Worksheets sheets;

            _Worksheet sheet;

            Range range; //Excel中針對(duì)單元格的操作都應(yīng)先獲取其對(duì)應(yīng)的Range對(duì)象

            Font font;

            Range cols;
            /*
               COleVariant
            類為VARIANT數(shù)據(jù)類型的包裝,在自動(dòng)化程序中,通常都使用VARIANT數(shù)據(jù)類型進(jìn)行參數(shù)傳遞。故下列程序中,函數(shù)參數(shù)都是通過(guò)COleVariant類來(lái)轉(zhuǎn)換了的。
            */
            //covOptional
            可選參數(shù)的VARIANT類型

            COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

            if( !app.CreateDispatch("Excel.Application") ){

              this->MessageBox("無(wú)法創(chuàng)建Excel應(yīng)用!");

              return;

            }

            //
            獲取工作薄集合

            books=app.GetWorkbooks();

            //
            添加一個(gè)工作薄

            book=books.Add(covOptional);

            //
            獲取工作表集合

            sheets=book.GetSheets();

            //
            獲取第一個(gè)工作表

            sheet=sheets.GetItem(COleVariant((short)1));
             
            //
            選擇工作表中A1:A1單元格區(qū)域

            range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));

            //
            設(shè)置A1=HELLO EXCEL!"

            range.SetValue(COleVariant("HELLO EXCEL!"));

            //
            調(diào)整格式,設(shè)置粗體

            font=range.GetFont();

            font.SetBold(COleVariant((short)TRUE));
             
            //
            選擇A2單元格,插入一個(gè)公式"=RAND()*100000",并設(shè)置A2數(shù)字格式為貨幣形式

            range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));

            range.SetFormula(COleVariant("=RAND()*100000"));

            range.SetNumberFormat(COleVariant("$0.00"));

            //
            選擇A:A列,設(shè)置寬度為自動(dòng)適應(yīng)

            cols=range.GetEntireColumn();

            cols.AutoFit();


            //
            顯示Excel表格,并設(shè)置狀態(tài)為用戶可控制

            app.SetVisible(TRUE);

            app.SetUserControl(TRUE);

            13.              如何自動(dòng)保存我們生成的Excel文件?通過(guò)Workbook對(duì)象的SaveAs方法即可實(shí)現(xiàn):

            book.SaveAs(COleVariant("C:\\a.xls"),covOptional,
              covOptional,covOptional,
              covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,
              covOptional);

            14.              上面的程序只能實(shí)現(xiàn)新建Excel文件的功能,但大多數(shù)情況我們需要的是導(dǎo)入excel中的數(shù)據(jù),即要打開(kāi)現(xiàn)存的xls文件,那么可用如下代碼:

            _Application app;

            Workbooks books;

            _Workbook book;

            Worksheets sheets;

            _Worksheet sheet;
            LPDISPATCH lpDisp;  //
            接口指針

            COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

            if( !app.CreateDispatch("Excel.Application") ){

              this->MessageBox("無(wú)法創(chuàng)建Excel應(yīng)用!");

              return;

            }


            books=app.GetWorkbooks();
            lpDisp = books.Open("C:\\a.xls",
                    covOptional, covOptional, covOptional, covOptional,
                    covOptional, covOptional, covOptional, covOptional,
                    covOptional, covOptional, covOptional, covOptional
                    );
            book.AttachDispatch( lpDisp );
            sheets=book.GetSheets();
            sheet=sheets.GetItem(COleVariant((short)1));
            range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));

            COleVariant rValue;
            rValue=COleVariant(range.GetValue());
            rValue.ChangeType(VT_BSTR);
            this->MessageBox(CString(rValue.bstrVal));

            book.SetSaved(TRUE);
            app.Quit();

            15.              運(yùn)行上面程序,單擊Button1按鈕,會(huì)顯示出C:\a.xls文件中A1單元格中的內(nèi)容。注意看以下代碼,實(shí)現(xiàn)了Variant數(shù)據(jù)類型轉(zhuǎn)換為CString類,這個(gè)只是一個(gè)示例,轉(zhuǎn)換較為簡(jiǎn)單。

            COleVariant rValue;
            rValue=COleVariant(range.GetValue());
            rValue.ChangeType(VT_BSTR);
            this->MessageBox(CString(rValue.bstrVal));

             

            posted on 2011-02-17 12:43 肥仔 閱讀(8462) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows開(kāi)發(fā)

            精品精品国产自在久久高清| 国产成人综合久久精品红| 粉嫩小泬无遮挡久久久久久| 国产精品一区二区久久精品| 久久午夜福利电影| 久久婷婷五月综合色奶水99啪| 久久w5ww成w人免费| 久久中文字幕视频、最近更新| 天天爽天天狠久久久综合麻豆| 欧美性猛交xxxx免费看久久久| 欧洲精品久久久av无码电影| 色综合久久久久综合99| 69久久精品无码一区二区| 伊人情人综合成人久久网小说| 国色天香久久久久久久小说| 伊人久久综合热线大杳蕉下载| 综合网日日天干夜夜久久| 国产三级观看久久| 国产精品久久免费| 99久久无色码中文字幕| 久久精品成人欧美大片| 日本精品一区二区久久久| 国产成人精品久久亚洲高清不卡| 99国产欧美久久久精品蜜芽| 老色鬼久久亚洲AV综合| 99精品久久久久久久婷婷| 久久综合视频网| 色综合久久久久综合99| 无码任你躁久久久久久| 久久国产成人精品国产成人亚洲| 天天爽天天爽天天片a久久网| 少妇内射兰兰久久| 久久99国内精品自在现线| 久久国产精品77777| 国产成人久久AV免费| 久久精品无码一区二区三区| 久久人人爽人人爽人人AV东京热| 天堂久久天堂AV色综合| 99麻豆久久久国产精品免费| 久久综合综合久久97色| 99久久精品九九亚洲精品|