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

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            使用VC++操作Excel文件

            • 本文檔適用于:

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

            ·                       Microsoft OLE

             第一步:建立一個自動化工程

            3.                  啟動VC 6.0,打開新建對話框,新建一個MFC AppWizard(exe)工程,這里工程明設置為TestExcel

            4.                  進入MFC 應用程序向導,選擇 基本對話框,直接點擊完成,工程文件結構如下圖:

            clip_image001

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

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

            clip_image002

            6.                  返回編輯器,查看工程文件,可發現多了EXCEL9.HEXCEL9.CPP兩個文件。

            7.                  打開stdafx.h頭文件確保包含如下頭文件:

            #include <afxdisp.h>

            #include "excel9.h"

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

            BOOL CTestExcelApp::InitInstance()

            {

                 if( !AfxOleInit() ){

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

                      return FALSE;

                 }

                 AfxEnableControlContainer();

                ......

                ......

                 return FALSE;

            }

            為保證編譯時不產生重復定義錯誤,打開excel9.h文件,在文件開始位置加入如下代碼:

            #if !defined _HEAD_FILE_EXCEL9_

            #define _HEAD_FILE_EXCEL9_

             相應的,在文件末尾加入:

            #endif

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

            第二步:操作EXCEL文件

            9.                   選擇ResourceView工作區,打開IDD_TESTEXCEL_DIALOG,在對話框中添加一個按鈕控件Button1,雙擊它,生成一個Button1 Click事件的處理函數:

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

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

            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("
            無法創建Excel應用!");
              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,執行程序。按下Button1,將會彈出Excel窗口:

            clip_image003

            12.              到此,即完成了我們的示例程序,下面將對程序進行詳細的說明,如果大家有過使用Visual Basic操作Excel程序的經驗,則應該能看懂下面程序:

            void CTestExcelDlg::OnButton1()

            {

            // TODO: Add your control notification handler code here

            /*

               先創建一個_Application類,用_Application來創建一個Excel應用程序接口。
               Excel
            接口類中層次如下所示:
                -_Application
                  -Workbooks
            工作薄集合
                    -_Workbook
            工作薄
                      -Worksheets
            工作表集合
                        -_Worksheet
            工作表
                          -Range
            單元格區域
              
            故要操作表,必須先逐步獲取Workbooks—>Workbook —>Worksheets —>Worksheet —>Range

            */

            _Application app;

            Workbooks books;

            _Workbook book;

            Worksheets sheets;

            _Worksheet sheet;

            Range range; //Excel中針對單元格的操作都應先獲取其對應的Range對象

            Font font;

            Range cols;
            /*
               COleVariant
            類為VARIANT數據類型的包裝,在自動化程序中,通常都使用VARIANT數據類型進行參數傳遞。故下列程序中,函數參數都是通過COleVariant類來轉換了的。
            */
            //covOptional
            可選參數的VARIANT類型

            COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

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

              this->MessageBox("無法創建Excel應用!");

              return;

            }

            //
            獲取工作薄集合

            books=app.GetWorkbooks();

            //
            添加一個工作薄

            book=books.Add(covOptional);

            //
            獲取工作表集合

            sheets=book.GetSheets();

            //
            獲取第一個工作表

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

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

            //
            設置A1=HELLO EXCEL!"

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

            //
            調整格式,設置粗體

            font=range.GetFont();

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

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

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

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

            //
            選擇A:A列,設置寬度為自動適應

            cols=range.GetEntireColumn();

            cols.AutoFit();


            //
            顯示Excel表格,并設置狀態為用戶可控制

            app.SetVisible(TRUE);

            app.SetUserControl(TRUE);

            13.              如何自動保存我們生成的Excel文件?通過Workbook對象的SaveAs方法即可實現:

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

            14.              上面的程序只能實現新建Excel文件的功能,但大多數情況我們需要的是導入excel中的數據,即要打開現存的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("無法創建Excel應用!");

              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.              運行上面程序,單擊Button1按鈕,會顯示出C:\a.xls文件中A1單元格中的內容。注意看以下代碼,實現了Variant數據類型轉換為CString類,這個只是一個示例,轉換較為簡單。

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

             

            posted on 2011-02-17 12:43 肥仔 閱讀(8437) 評論(0)  編輯 收藏 引用 所屬分類: Windows開發

            99久久免费国产精精品| 久久人人爽人人爽人人片AV不 | 中文精品久久久久国产网址| 久久婷婷是五月综合色狠狠| 久久久WWW成人| 久久青青草原精品国产软件| 国产精品免费久久| 久久精品国产只有精品66| 精品久久久久久无码人妻热 | 久久婷婷五月综合色高清| 中文字幕人妻色偷偷久久| 久久精品国产精品亚洲精品| 国产69精品久久久久久人妻精品| 久久久久免费精品国产| 日本强好片久久久久久AAA| 97久久国产亚洲精品超碰热| 久久精品国产一区二区三区日韩| 秋霞久久国产精品电影院| 国产综合免费精品久久久| 久久精品国产亚洲av瑜伽| 婷婷国产天堂久久综合五月| 精品久久久久久国产| 久久久久99精品成人片直播| 久久国产精品99久久久久久老狼| 国产成人精品久久一区二区三区av| 久久精品无码一区二区三区免费| 三级三级久久三级久久| 久久精品国产亚洲AV无码娇色| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国内精品久久久久| 精品久久久久久久国产潘金莲 | 国产精品美女久久福利网站| 欧美久久亚洲精品| 久久久久久人妻无码| 国产L精品国产亚洲区久久| 久久久久青草线蕉综合超碰 | 99热精品久久只有精品| 亚洲国产精品成人久久蜜臀| 久久精品国产亚洲AV高清热| 无码乱码观看精品久久| 国产69精品久久久久777|