您目前已離線,請等候您的網際網路重新連線

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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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 - 最後檢閱時間:01/11/2015 03:08:27 - 修訂: 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

  • kbnosurvey kbarchive kbmt kbautomation kbhowto KB243394 KbMtzh
意見反應