Nasıl YAPıLıR: MFC Otomasyon ile Excel'e bir DAO Kayıt kümesi kopyalamak için kullanın.

Makale çevirileri Makale çevirileri
Makale numarası: 243394 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Microsoft Excel'in bir çalışma sayfası üzerine bir veri erişim nesneleri (DAO) Recordset içeriğini kopyalamak bir aralık nesnesine ilişkin CopyFromRecordset yöntemini sunar. Bu makalede, MFC DAO sonra Otomasyon kullanarak bir Excel çalışma sayfasına kopyalayabilirsiniz bir kayıt oluşturmak için nasıl kullanabileceğiniz gösterilmektedir.

Daha fazla bilgi

Aşağıdaki adımlarda, tüm bir recordset elde gösterilmektedir örnek Access "Ürünler" tablosundaki kayıtlar, Northwind.mdb veritabanı ve sonra bir çalışma bu kayıt kümesi içeriğini kopyalamak için Excel otomatik. Bu örnek, recordset için bir Access veritabanını kullanır, ancak herhangi bir veritabanı için ODBC sağlayabilir kullanabilir bağlantı dizesi. ODBC veri kaynakları, DAO ile kullanma hakkında daha fazla bilgi için MFC DAO için çevrimiçi yardıma bakın.

Örnek kod

  1. Iletişim tabanlı ve AutoExcel adlı yeni bir MFC AppWizard EXE proje başlatın.
  2. Görünüm menüsünde ClassWizard tıklatın (veya CTRL + W tuşlarına basın). Otomasyon sekmesinde Add Class ' ı tıklatın ve "Kimden bir Type Library"'ı seçin. Excel'in tür kitaplığı (Excel8.olb için Excel 97, Excel 2000 Excel9.olb veya Excel.Exe Excel 2002 ve Excel 2003) bulmak için göz atın.
    Not: tür kitaplığı yürütülebilir Excel ile aynı dizinde bulunur.
  3. Tüm sınıfları ClassWizard sunan Excel Tür kitaplığında ekleyin.
  4. Iletişim kaynağa IDC_RUN adlı bir düğme eklemek IDD_AUTOEXCEL_DIALOG ve düğme işleyicisine aşağıdaki kodu ekleyin.
    
    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 CAutoExcelDlg.cpp için Excel'in tür kitaplığından oluşturulan üstbilgi dosyası içerir. Örneğin:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    Not: Bu yönerge, sonra derleyici hatalarını önlemek "Stdafx.h" için içerik ekleme.
  6. MFC DAO StdAfx.h içinde için üstbilgi dosyasına ekleyin:
        #include <afxdao.h>
    						
  7. Uygulamanızı başladığında COM hizmetlerini başlatılır CAutoExcelApp::InitInstance AutoExcel.cpp de değiştirin:
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    Not: Bu kod DoModal() çağrısı önce Ekle.
  8. Oluşturup uygulamayı çalıştırın.
  9. Iletişim kutusunda düğmesini tıklatın. Düğme işleyicisi tamamladığında, Excel'deki bir çalışma kitabının ilk çalışma sayfasındaki içeriği Northwind Ürünler tablosundan görürsünüz.

Özellikler

Makale numarası: 243394 - Last Review: 25 Ocak 2007 Perşembe - Gözden geçirme: 4.5
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbautomation kbhowto KB243394 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:243394

Geri Bildirim Ver

 

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