Ako vložiť a automatizovať hárku programu Microsoft Excel s MFC

Preklady článku Preklady článku
ID článku: 184663 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

SUHRN

Tento článok popisuje spôsob vnorenia programu Microsoft Excel Funkcia pracovného hárka do zobrazení objektu v aplikácii SDI MFC.

Tento článok obsahuje podrobné pokyny na vkladanie hárka a pridaní niektorých text na bunky A1, ako aj komentáre vysvetľujúce každý krok.

Hoci vzorky kód v tomto článku možno prijať a dať do vašej aplikácie, skutočný prínos pochádza z čítanie a pochopenie vzorky kód.

DALSIE INFORMACIE

Spoločnosť Microsoft poskytuje príklady programovacieho kódu len ako názornú ukážku bez ľubovoľnej vyjadrenej alebo implicitnej záruky. Toto zahŕňa, okrem iného, implicitné záruky obchodovateľnosti a vhodnosti pre konkrétny účel. Úroveň odbornosti článku predpokladá, že ovládate predvádzaný programovací jazyk a nástroje, ktoré sa používajú na vytváranie a ladenie procedúr. Pracovníci oddelenia technickej podpory spoločnosti Microsoft vám môžu objasniť funkciu určitej konkrétnej procedúry. Publikované príklady však neupravia, aby zaistili požadovanú pridanú funkčnosť alebo pridali ďalšie konštrukčné procedúry zohľadňujúce vaše konkrétne požiadavky.

Ak chcete vytvoriť MFC aplikácia, postupujte nasledovne:
  1. Použitie AppWizard vytvoriť nové AppWizard MFC (EXE) projekt nazvaný „Embed_Excel. ”
  2. Vyberte jednotného dokumentu ako typ žiadosti Vytvorte a vyberte kontajner typ kŕmnych dokumentu podporu zahŕňajú. Akceptovať všetky predvolené nastavenia.

    Tieto triedy sú vytvorené:

    Aplikácia: CEmbed_ExcelApp v Embed_Excel.h a Embed_Excel.cpp

    Rám: CMainFrame v MainFrm.h a MainFrm.cpp

    Dokument: CEmbed_ExcelDoc v Embed_ExcelDoc.h a Embed_ExcelDoc.CPP

    View: CEmbed_ExcelView v Embed_ExcelView.h a Embed_ExcelView.CPP

    Kontajner položka: CEmbed_ExcelCntrItem v CntrItem.h a CntrItem.cpp
  3. Na View ponuky, kliknite na tlačidlo ClassWizard. Kliknite na Automatizácia karte, kliknite na tlačidlo Pridať triedy, a vyberte Od typu knižnice. Vyhľadajte Program Microsoft Excel type library, a pridať všetkých tried v knižnici typov do vášho projektu. Pre Program Excel 97, Knižnica typov sa nachádza v Excel8.olb. Pre program Excel 2000 typu Knižnica sa nachádza v Excel9.olb a programu Excel 2002 a neskôr, Knižnica typov to umiestnené Excel.exe.
  4. Pridajte nasledujúci riadok na CntrItem.h:
    LPDISPATCH GetIDispatch();
    					
  5. Potom pridajte metódu GetIDispatch CntrItem.cpp:
       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. Pridajte nasledujúci riadok na Embed_ExcelView.h:
          void EmbedAutomateExcel();
    					
  7. Potom pridajte EmbedAutomateExcel metóda, ktorá sa Embed_ExcelView.CPP:
    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. Pridajte nasledujúci riadok na Embed_ExcelView.h:
          #include "excel8.h"
    						
    NOTE Ak chcete program Excel 2000, Hlavička súboru je „excel9.h. ” Ak chcete program Excel 2002 alebo novšej verzie programu Excel, hlavičky súbor je „excel.h. ”
  9. Pozrite sa na OnInsertObject() spôsob zobrazenia trieda. To je zaujímavé všimnúť si, že táto metóda a metódy sme práve napísali, sú nápadne podobný. V skutočnosti kódexu sme napísali je len špeciálny prípad OnInsertObject(), ktoré umožňuje používateľom vybrať v zozname dostupných OLE objekty, ktoré chcete vložiť do aplikácie. Pretože len chceme automatizovať Pracovný hárok programu Excel, sme prepísať toto správanie. Pre našu aplikáciu odstrániť všetky kód z vnútra InsertObject() a nahraďte ho hovor EmbedAutomateExcel().
  10. Zostavenie a spustenie aplikácie.
  11. Na Upraviť ponuky, kliknite na tlačidlo Vložiť nový objekt.
Výsledky: Hárku programu Microsoft Excel je vložený do zobrazenia. Okrem toho je osídlena bunka A1 "Hello, World!" prostredníctvom automatizácie.

Vlastnosti

ID článku: 184663 - Posledná kontrola: 18. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
Kľúčové slová: 
kbprogramming kbautomation kbhowto kbinterop kbmt KB184663 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:184663

Odošlite odozvu

 

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