Katıştırmak ve bir Excel çalışma sayfası MFC ile otomatikleştirme

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

Özet

Bu makale Microsoft Excel katıştırmak çalışma sayfası içine SDI MFC uygulamadaki bir View nesnesi.

Bu makalede, çalışma sayfası katıştırma ve metin, A1 hücresi, yan? s?ra her adım açıklayan açıklamalar ekleme hakkında adım adım yönergeler içerir.

Bu makaledeki örnek kod alınan ve uygulamanıza koy olsa da, okuma ve örnek anlama gerçek yararı gelen <a1>Kod</a1> .

Daha fazla bilgi

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna satılabilirlik veya belirli bir amaca uygunluk zımni garantileri de dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir. Ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.

MFC uygulaması oluşturmak için <a0></a0>, aşağıdaki adımları izleyin:
  1. AppWizard yeni MFC AppWizard (EXE) oluşturmak için kullanın. "Embed_Excel" adlı bir proje
  2. Tek bir belge oluşturmak için kullanılan uygulama türünü seçin ve türü olarak eklemek için bileşik belge desteği Container'ı seçin. Tüm varsayılan ayarları kabul edin.

    Aşağıdaki sınıflar oluşturulur:

    Uygulama: CEmbed_ExcelApp Embed_Excel.h ve Embed_Excel.cpp

    Kare: CMainFrame MainFrm.h ve MainFrm.cpp

    Belge: CEmbed_ExcelDoc Embed_ExcelDoc.h ve Embed_ExcelDoc.cpp

    Görünüm: CEmbed_ExcelView Embed_ExcelView.h ve Embed_ExcelView.cpp

    Kapsayıcı öğe: CEmbed_ExcelCntrItem CntrItem.h ve CntrItem.cpp
  3. Görünüm menüsünde ClassWizard ' ı tıklatın. Otomasyon sekmesini tıklatın, Add Class ' ı tıklatın ve Gönderen bir tür kitaplığı ' nı seçin. Microsoft Excel'in tür kitaplığı ' nı bulun ve tüm sınıfları, Tür kitaplığında Projenize eklemek. Excel 97'için tür kitaplığı Excel8.olb bulunur. Excel 2000 için tür kitaplığı Excel9.olb içinde bulunan ve Excel 2002 ve sonraki için tür kitaplığı, Excel.exe bulunur.
  4. CntrItem.h için aşağıdaki satırı ekleyin:
    LPDISPATCH GetIDispatch();
    					
  5. Sonra da CntrItem.cpp için GetIDispatch yöntemini ekleyin:
       Sample Code
       -----------
    
    
          /*******************************************************************
          *   This method returns the IDispatch* for the application linked to
          *   this container.
          ********************************************************************/ 
          LPDISPATCH CEmbed_ExcelCntrItem::GetIDispatch()
          {
             //The this and m_lpObject pointers must be valid for this function
             //to work correctly. The m_lpObject is the IUnknown pointer to
             // this object.
             ASSERT_VALID(this);
    
             ASSERT(m_lpObject != NULL);
    
             LPUNKNOWN lpUnk = m_lpObject;
    
             //The embedded application must be running in order for the rest
             //of the function to work.
             Run();
    
             //QI for the IOleLink interface of m_lpObject.
             LPOLELINK lpOleLink = NULL;
             if (m_lpObject->QueryInterface(IID_IOleLink,
                (LPVOID FAR*)&lpOleLink) == NOERROR)
             {
                ASSERT(lpOleLink != NULL);
                lpUnk = NULL;
    
                //Retrieve the IUnknown interface to the linked application.
                if (lpOleLink->GetBoundSource(&lpUnk) != NOERROR)
                {
                   TRACE0("Warning: Link is not connected!\n");
                   lpOleLink->Release();
                   return NULL;
                }
                ASSERT(lpUnk != NULL);
             }
    
             //QI for the IDispatch interface of the linked application.
             LPDISPATCH lpDispatch = NULL;
             if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&lpDispatch)
                !=NOERROR)
             {
                TRACE0("Warning: does not support IDispatch!\n");
                return NULL;
             }
    
             //After assuring ourselves it is valid, return the IDispatch
             //interface to the caller.
             ASSERT(lpDispatch != NULL);
             return lpDispatch;
          }
    					
  6. Embed_ExcelView.h için aşağıdaki satırı ekleyin:
          void EmbedAutomateExcel();
    					
  7. Sonra da Embed_ExcelView.cpp için EmbedAutomateExcel yöntemini ekleyin:
    Sample Code
    -----------
          /********************************************************************
          *   This method encapsulates the process of embedding an Excel
          *   Worksheet in a View object and automating that worksheet to add
          *   some text to cell A1.
          ********************************************************************/ 
          void CEmbed_ExcelView::EmbedAutomateExcel()
          {
             //Change the cursor so the user knows something exciting is going
             //on.
             BeginWaitCursor();
    
             CEmbed_ExcelCntrItem* pItem = NULL;
             TRY
             {
                //Get the document associated with this view, and be sure it's
                //valid.
                CEmbed_ExcelDoc* pDoc = GetDocument();
                ASSERT_VALID(pDoc);
    
                //Create a new item associated with this document, and be sure
                //it's valid.
                pItem = new CEmbed_ExcelCntrItem(pDoc);
                ASSERT_VALID(pItem);
    
                // Get Class ID for Excel sheet.
                // This is used in creation.
                CLSID clsid;
                if(FAILED(::CLSIDFromProgID(L"Excel.sheet",&clsid)))
                   //Any exception will do. We just need to break out of the
                   //TRY statement.
                   AfxThrowMemoryException();
    
                // Create the Excel embedded item.
                if(!pItem->CreateNewItem(clsid))
                   //Any exception will do. We just need to break out of the
                   //TRY statement.
                   AfxThrowMemoryException();
    
                //Make sure the new CContainerItem is valid.
                ASSERT_VALID(pItem);
    
                // Launch the server to edit the item.
                pItem->DoVerb(OLEIVERB_SHOW, this);
    
    
                // As an arbitrary user interface design, this sets the
                // selection to the last item inserted.
                m_pSelection = pItem;   // set selection to last inserted item
                pDoc->UpdateAllViews(NULL);
    
                //Query for the dispatch pointer for the embedded object. In
                //this case, this is the Excel worksheet.
                LPDISPATCH lpDisp;
                lpDisp = pItem->GetIDispatch();
    
                //Add text in cell A1 of the embedded Excel sheet
                _Workbook wb;
                Worksheets wsSet;
                _Worksheet ws;
                Range range;
                _Application app;
    
                //set _Workbook wb to use lpDisp, the IDispatch* of the
                //actual workbook.
                wb.AttachDispatch(lpDisp);
    
    
                //Then get the worksheet's application.
                app = wb.GetApplication();
    
                //Then get the first worksheet in the workbook
                wsSet = wb.GetWorksheets();
                ws = wsSet.GetItem(COleVariant((short)1));
    
                //From there, get a Range object corresponding to cell A1.
                range = ws.GetRange(COleVariant("A1"), COleVariant("A1"));
    
                //Fill A1 with the string "Hello, World!"
                range.SetValue(COleVariant("Hello, World!"));
    
               //NOTE: If you are automating Excel 2002, the Range.SetValue method has an 
               //additional optional parameter specifying the data type.  Because the 
               //parameter is optional, existing code will still work correctly, but new 
               //code should use the new convention.  The call for Excel2002 should look 
               //like the following:
    
               //range.SetValue( C<?xm-insertion_mark_start author="v-thomr" time="20070326T121607-0600"?>O<?xm-insertion_mark_end?><?xm-deletion_mark author="v-thomr" time="20070326T121606-0600" data="o"?>leVariant( (long)DISP_E_PARAMNOTFOUND, VT_ERROR ), 
               //                COleVariant("Hello, World!"));
             }
    
               //Here, we need to do clean up if something went wrong.
               CATCH(CException, e)
               {
                  if (pItem != NULL)
                  {
                     ASSERT_VALID(pItem);
                     pItem->Delete();
    
                  }
                  AfxMessageBox(IDP_FAILED_TO_CREATE);
               }
               END_CATCH
    
               //Set the cursor back to normal so the user knows exciting stuff
               //is no longer happening.
               EndWaitCursor();
            }
    
    					
  8. Embed_ExcelView.h için aşağıdaki satırı ekleyin:
          #include "excel8.h"
    						
    <a1>N</a1> ot Excel 2000 otomatikleştirme, üstbilgi dosyası "excel9.h" olur. Excel 2002 veya sonraki bir sürümünü, Excel'in otomatikleştirme, üstbilgi dosyası "excel.h" olur.
  9. <a0>Görünüm</a0> sınıfının OnInsertObject() yöntemi bakın. Bu yöntem ve size yalnızca yazdıktan, yöntem strikingly benzer olduğunu unutmayın, ilgi çekici bir durumda. Aslında, biz yazdıktan yalnızca bir özel kodudur uygulamasına eklemek için kullanılabilir OLE bir listeden seçmek kullanıcı sağlayan OnInsertObject() harf nesneleri. Excel çalışma sayfasına otomatikleştirmek yalnızca istediğimiz olduğundan, size bu davranışı geçersiz kılar. Müşterilerimizin bu uygulama için iç InsertObject(), tüm kodları kaldırmak ve EmbedAutomateExcel() bir ça?r? yerine.
  10. Derleyip uygulamanın çalıştırın.
  11. Düzen menüsünde, Yeni Nesne Ekle) tıklatın.
Sonuçları: BIR Microsoft Excel çalışma sayfası görünümü katıştırılır. Buna ek olarak, A1 hücresi "Merhaba ile World!" Otomasyon yoluyla doldurulur.

Özellikler

Makale numarası: 184663 - Last Review: 28 Mart 2007 Çarşamba - Gözden geçirme: 5.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
Anahtar Kelimeler: 
kbmt kbprogramming kbautomation kbhowto kbinterop KB184663 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:184663

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