HOWTO: 使用 MFC 复制到 Excel 的自动化的 DAO 记录集

文章翻译 文章翻译
文章编号: 243394 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

Microsoft Excel 公开 CopyFromRecordset 方法为一个 Range 对象,对象将复制到工作表的数据访问对象 (DAO) 记录集的内容。本文演示了如何使用 MFC DAO 来构建一个记录集,然后,可以将复制到 Excel 工作表使用自动化。

更多信息

下面的步骤演示了如何获得所有的记录集在示例中访问"产品"表中的记录数据库 Northwind.mdb,然后自动化 Excel 将复制到工作表的记录集的内容。尽管本示例为其记录集使用 Access 数据库中,但您可以使用任何数据库,您可以为其提供一个 ODBC 连接字符串。详细在 DAO 中使用 ODBC 数据源,请参阅 MFC DAO 联机帮助。

示例代码

  1. 启动一个新的 MFC 应用程序向导 EXE 项目是基于对话框和命名 AutoExcel
  2. 视图 菜单上单击 类向导 (或按 CTRL + W)。在 自动化 选项卡上单击 添加类,然后选择"从一个类型库"。浏览以查找有关 Excel 97 Excel8.olb Excel9.olb 为 Excel 2000 或 Excel 2002 和 Excel 2003 Excel.Exe) 时,Excel 类型库。
    : 类型库都位于 Excel 可执行文件所在的目录。
  3. 类向导提供了在 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. 包含类向导 CAutoExcelDlg.cpp 要从 Excel 类型库生成的头文件。例如:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    : 对于"Stdafx.h"以避免编译器错误包括后添加此指令。
  6. 对于 MFC DAO 中 StdAfx.h 包括头文件:
        #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 标准版
  • Microsoft Excel 2000 标准版
  • Microsoft Excel 97 标准版
  • Microsoft Visual C++ 6.0 专业版
  • Microsoft Visual C++ 5.0 专业版
关键字:?
kbmt kbautomation kbhowto KB243394 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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