HOWTO: 使用 MFC,將 DAO 資料錄集複製到 Excel 與自動化

文章翻譯 文章翻譯
文章編號: 243394 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

Microsoft Excel 會公開 Range 物件,物件複製到工作表的一個資料存取物件 (DAO) 資料錄集內容 CopyFromRecordset 的方法。本文將告訴您,如何使用 MFC DAO 來建置您可以再將複製到 Excel 工作表使用自動化資料錄集。

其他相關資訊

下列步驟將示範如何取得所有的資料錄集範例 Access 中 [產品] 資料表中的記錄資料庫 Northwind.mdb 和自動化 Excel 複製到工作表上該資料錄集的內容。雖然此範例為其資料錄集使用 Access 資料庫中,您可以使用任何您可以提供 ODBC 的資料庫連接字串。如需在 DAO 中使用 ODBC 資料來源的詳細資料,請參閱 MFC DAO 線上說明。

範例程式碼

  1. 啟動新的 MFC AppWizard EXE 專案、 以對話方塊為基礎且名為 AutoExcel
  2. 在 [檢視] 功能表上按一下 ClassWizard (或按下 CTRL + W 鍵)。在 自動化] 索引標籤按一下 [加入類別],然後選擇 [從一類型庫]。瀏覽以便找出 Excel 型別程式庫 (如 Excel 97 Excel8.olb、 Excel9.olb Excel 2000 或 Excel 2002 及 Excel 2003 Excel.Exe)。
    注意: 這個型別程式庫放置成 Excel 可執行檔相同的目錄中。
  3. 在 ClassWizard 會呈現 [Excel 型別程式庫中新增的所有類別。
  4. 新增按鈕至對話方塊資源命名 IDC_RUN IDD_AUTOEXCEL_DIALOG 並將下列程式碼加入至按鈕處理常式。
    
    void CAutoExcelDlg::OnRun() 
    {
        //For optional arguments
        COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
    
        CDaoDatabase db;
        CDaoRecordset rs;
        CString sConn;
        long lNumCols;
    
        //Get a recordset that represents all the records in the Products 
        //table of the sample Northwind database
        sConn = 
         "C:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb";
        db.Open(sConn, FALSE, FALSE);
        rs.m_pDatabase = &db;    
        rs.Open(AFX_DAO_USE_DEFAULT_TYPE, "Select * From Products", 0);
        lNumCols = rs.GetFieldCount();
    
        //Start a new workbook in Excel
        _Application oApp;
        oApp.CreateDispatch("Excel.Application");
        if (!oApp)
        {
            AfxMessageBox("Cannot start Excel");
            return;
        }
    
        Workbooks oBooks = oApp.GetWorkbooks();
        _Workbook oBook = oBooks.Add(vOpt);
        Worksheets oSheets = oBook.GetWorksheets();
        _Worksheet oSheet = oSheets.GetItem(COleVariant((short)1));
        Range oRange;
    
        //Transfer the data in the recordset to the worksheet
        COleDispatchDriver rs2;
        rs2.AttachDispatch((LPDISPATCH) rs.m_pDAORecordset);
        oRange = oSheet.GetRange(COleVariant("A2"), vOpt);
        oRange.CopyFromRecordset((LPUNKNOWN) rs2.m_lpDispatch, vOpt, vOpt);
        rs2.DetachDispatch();
        rs2.ReleaseDispatch();
    
        //Add the field names to row 1
        CDaoFieldInfo FieldInfo;
        for(long i=0; i<=lNumCols-1;i++)
        {
            oRange = oSheet.GetRange(COleVariant("A1"), vOpt);
            oRange = oRange.GetOffset(vOpt, COleVariant(i));
            rs.GetFieldInfo(i, FieldInfo, AFX_DAO_PRIMARY_INFO);
    
            oRange.SetValue(COleVariant(FieldInfo.m_strName));
            // For Excel 2003, SetValue takes two parameters.
           // oRange.SetValue(COleVariant(FieldInfo.m_strName),COleVariant());
        }
    
        //Format the worksheet
        oRange = oSheet.GetRange(COleVariant("A1"), vOpt);
        oRange = oRange.GetResize(COleVariant((short)1), 
                                  COleVariant(lNumCols));
        Font oFont = oRange.GetFont();
        oFont.SetBold(COleVariant((short)TRUE));
        oRange = oRange.GetEntireColumn();
        oRange.AutoFit();
    
        //Make Excel visible and give the user control
        oApp.SetVisible(TRUE);
        oApp.SetUserControl(TRUE);
    }
    
    						
  5. 包含 ClassWizard 產生自 Excel 型別程式庫 CAutoExcelDlg.cpp 標頭檔。例如:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    注意: 加入這個指示詞之後包含如"Stdafx.h 」 以避免編譯器錯誤。
  6. 包含標頭檔中 StdAfx.h MFC DAO:
        #include <afxdao.h>
    						
  7. 修改 CAutoExcelApp::InitInstance AutoExcel.cpp 中的,讓您的應用程式啟動時,會初始化 COM 服務:
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    注意: 新增至 DoModal() 呼叫之前的這段程式碼。
  8. 建置並執行應用程式。
  9. 按一下按鈕] 對話方塊。按鈕處理常式完成時, 您將活頁簿在 Excel 中的第一張工作表上看到從北風的 [產品] 資料表的內容。

屬性

文章編號: 243394 - 上次校閱: 2007年1月25日 - 版次: 4.5
這篇文章中的資訊適用於:
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++ 5.0 Professional Edition
關鍵字:?
kbmt kbautomation kbhowto KB243394 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:243394
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com