Come incorporare e automatizzare un foglio di lavoro con MFC di Microsoft Excel

Traduzione articoli Traduzione articoli
Identificativo articolo: 184663 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Viene descritto come incorporare un verrà foglio di lavoro in un oggetto visualizzazione in un'applicazione MFC SDI.

Più specificatamente, vengono fornite istruzioni dettagliate e commenti esaurienti in merito alle operazioni necessarie per incorporare il foglio di lavoro e aggiungere del testo alla cella A1.

Sebbene il codice di esempio in questo articolo può essere eseguito e inserire l'applicazione, il reale vantaggio proviene da leggere e comprendere l'esempio codice .

Informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Questo include, ma non è limitato a, le garanzie implicite di commerciabilità o idoneità per uno scopo specifico. Questo articolo si presuppone che conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug di procedure. Tecnici del supporto Microsoft possono spiegare la funzionalità di una particolare procedura. Tuttavia, non modificherà questi esempi per fornire funzionalità aggiuntive o creare procedure per soddisfare specifiche esigenze.

Per creare l'applicazione MFC, attenersi alla seguente procedura:
  1. Utilizzare AppWizard per creare un nuovo progetto MFC AppWizard (EXE) denominato "Embed_Excel"
  2. Selezionare <B>Single Document</B> come tipo di applicazione da creare, quindi <B>Container</B> come tipo di supporto da includere per i documenti composti. Accettare tutte le altre impostazioni predefinite.

    Verranno generate le classi seguenti:

    applicazione : CEmbed_ExcelApp in Embed_Excel.h ed Embed_Excel.cpp

    frame : CMainFrame in MainFrm.h e MainFrm.cpp

    documento : CEmbed_ExcelDoc in Embed_ExcelDoc.h ed Embed_ExcelDoc.cpp

    visualizzazione : CEmbed_ExcelView in Embed_ExcelView.h ed Embed_ExcelView.cpp

    elemento contenitore : CEmbed_ExcelCntrItem in CntrItem.h e CntrItem.cpp
  3. Nel menu Visualizza , fare clic su Creazione guidata classe . Fare clic sulla scheda automazione , fare clic su Aggiungi classe e scegliere Da una libreria dei tipi . Individuare la libreria dei tipi di Microsoft Excel e aggiungere tutte le classi nella libreria dei tipi al progetto. Per Excel 97 la libreria dei tipi si trova in Excel8.olb,. Per Excel 2000 la libreria dei tipi si trova in Excel9.olb e per Excel 2002 e successiva, la libreria dei tipi nella Excel.exe.
  4. Aggiungere la seguente riga a CntrItem.h:
    LPDISPATCH GetIDispatch();
    					
  5. Aggiungere quindi il metodo 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. Aggiungere la seguente riga a Embed_ExcelView.h:
          void EmbedAutomateExcel();
    					
  7. Aggiungere quindi il metodo EmbedAutomateExcel 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. Aggiungere la seguente riga a Embed_ExcelView.h:
          #include "excel8.h"
    						
    N ota se si desidera automatizzare Excel 2000, il file di intestazione è "excel9.h." Se si automatizza Excel 2002 o versione successiva di Excel, il file di intestazione è "excel.h."
  9. Osservare il metodo OnInsertObject() della classe View. È interessante notare come questo metodo e il metodo appena scritto siano sorprendentemente simili. In effetti, il codice che abbiamo scritto è semplicemente un particolare caso di OnInsertObject(), consentendo all'utente di selezionare da un elenco di OLE disponibili oggetti per inserire l'applicazione. Poiché si desidera automatizzare il foglio di lavoro Excel, è ignorare questo comportamento. Per l'applicazione di esempio, rimuovere tutto il codice dall'interno di InsertObject() e sostituirlo con una chiamata a EmbedAutomateExcel().
  10. Compilare ed eseguire l'applicazione.
  11. Scegliere Insert New Object dal menu Modifica .
Risultati: Foglio di lavoro Microsoft Excel è incorporata nella visualizzazione. Inoltre, la cella A1 viene inserita "Hello, World!" tramite l'automazione.

Proprietà

Identificativo articolo: 184663 - Ultima modifica: mercoledì 28 marzo 2007 - Revisione: 5.1
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbprogramming kbautomation kbhowto kbinterop KB184663 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 184663
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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