• <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ā)

            国产日韩久久免费影院| 麻豆av久久av盛宴av| 91久久香蕉国产熟女线看| 久久久久久亚洲精品不卡| 亚洲精品无码久久久久sm| 午夜不卡888久久| 奇米综合四色77777久久| 国产精品日韩深夜福利久久 | 熟妇人妻久久中文字幕| 久久精品夜色噜噜亚洲A∨| 久久综合九色综合网站| 久久本道综合久久伊人| 精品国产VA久久久久久久冰 | 久久精品国产亚洲AV高清热 | 亚洲国产成人久久笫一页| 狠狠久久亚洲欧美专区| 狠狠色综合网站久久久久久久高清| 亚洲国产精品久久久久| 国产精品久久波多野结衣| 国内高清久久久久久| 国产精品久久久久久久app| 久久se精品一区二区| 久久成人国产精品| 狠狠色婷婷久久综合频道日韩| 久久综合久久伊人| 久久996热精品xxxx| 精品国产乱码久久久久久浪潮| 国产成人久久激情91| 国产精品久久亚洲不卡动漫| 人妻丰满AV无码久久不卡 | 久久久久亚洲AV无码麻豆| 精品久久人人爽天天玩人人妻| 偷窥少妇久久久久久久久| 色综合久久88色综合天天 | 亚洲国产成人精品久久久国产成人一区二区三区综 | AV无码久久久久不卡网站下载 | 久久大香香蕉国产| 精品久久777| 久久精品人妻一区二区三区| 久久精品一区二区三区中文字幕| 久久精品无码一区二区日韩AV|