POSTUPY: Kopírování do aplikace Excel pomocí automatizace objektu Recordset DAO pomocí MFC

Překlady článku Překlady článku
ID článku: 243394 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Aplikace Microsoft Excel poskytuje metodu CopyFromRecordset pro rozsah objekt, který chcete kopírovat obsah objektu Recordset objekty DAO (Data Access OBJECTS) do listu. Tento článek dokumentuje, jak vytvořit sady záznamů, která se potom můžete zkopírovat do listu aplikace Excel pomocí automatizace pomocí MFC DAO.

Další informace

Následující kroky ukazují, jak lze získat sadu záznamů všech záznamů v tabulce "Výrobky" ve vzorku Access databáze Northwind.mdb a potom automatizovat zkopírovat obsah této sady záznamů do listu aplikace Excel. Ačkoliv tento příklad používá pro jeho záznamů databáze aplikace Access, můžete použít libovolné databázi, pro něž lze poskytnout ODBC připojovací řetězec. Podrobné informace o použití zdrojů dat ODBC s DAO naleznete naleznete v nápovědě online MFC DAO.

Ukázkový kód

  1. Spuštění nového projektu EXE AppWizard MFC je založen na dialogové okno a pojmenované AutoExcel.
  2. V nabídce Zobrazit klepněte na možnost ClassWizard (nebo stiskněte klávesy CTRL + W). Na kartě automatizace klepněte na tlačítko Přidat třídu a zvolte "Od knihovny typů". Procházením vyhledejte knihovnu typů aplikace Excel (Excel8.olb pro Excel 97, aplikace Excel 2000 Excel9.olb nebo Excel.Exe pro aplikaci Excel 2002 a Excel 2003).
    Poznámka: typ knihovna je umístěn v stejné adresáři jako spustitelný soubor aplikace Excel.
  3. Přidání všech tříd v knihovně typů aplikace Excel obsahující ClassWizard.
  4. Přidání tlačítka zdroje dialogové okno s názvem IDC_RUN IDD_AUTOEXCEL_DIALOG a přidejte následující kód do zpracování tlačítka.
    
    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. Zahrnout soubor záhlaví, generovaných ClassWizard z aplikace Excel knihovny typů do CAutoExcelDlg.cpp. Například:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    Poznámka: Po zahrnutí pro "Stdafx.h", aby nedocházelo k chybám kompilátoru přidáním této směrnice.
  6. Zahrnout soubor záhlaví pro MFC DAO v StdAfx.h:
        #include <afxdao.h>
    						
  7. Upravit CAutoExcelApp::InitInstance v AutoExcel.cpp tak, aby služby modelu COM jsou inicializovány při spuštění aplikace:
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    Poznámka: Tento kód před volání DoModal() přidat.
  8. Vytvoření a spuštění aplikace.
  9. Klepněte na tlačítko v dialogovém okně. Po dokončení zpracování tlačítka, zobrazí se obsah tabulky produkty z Northwind na prvním listu sešitu aplikace Excel.

Vlastnosti

ID článku: 243394 - Poslední aktualizace: 25. ledna 2007 - Revize: 4.5
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbautomation kbhowto KB243394 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:243394

Dejte nám zpětnou vazbu

 

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