Utilizzo MFC per automatizzare Excel e riempire un intervallo con una matrice

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

In questa pagina

Sommario

In questo articolo viene illustrato come automatizzare Microsoft Excel e inserire una matrice di valori in un intervallo di celle.

Informazioni

Per riempire un intervallo di celle senza popolare le celle una per una, è necessario creare un SAFEARRAY variant bidimensionale che verrà passato a Excel attraverso una chiamata alla funzione SetValue per l'oggetto intervallo. Questo processo è illustrato dalla procedura descritta di seguito.

Note relative all'automazione di Microsoft Excel 2000 e 2002

Nel codice di esempio riportato in questo articolo sono utilizzati wrapper di classe generati dalla libreria degli oggetti di Excel 97 (Excel 8.olb). Con una lieve modifica questo codice può essere applicato a un client di automazione che utilizza wrapper di classe per Excel 2000 (Excel9.olb) o Excel 2002 (Excel.olb). Per ulteriori informazioni sull'utilizzo del codice di esempio descritto in questo articolo con la libreria dei tipi di Microsoft Excel 2000 o 2002, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
224925INFORMAZIONI: Librerie dei tipi per Office Modifica con la nuova versione

Procedura per la creazione del progetto

  1. Eseguire i passaggi da 1 a 12 descritti nell'articolo della Microsoft Knowledge Base riportato di seguito per creare un progetto di esempio che utilizzi le interfacce IDispatch e le funzioni membro definite nella libreria dei tipi di Excel8.olb:
    178749Creazione di un progetto di automazione tramite MFC e una libreria dei tipi
  2. Nella finestra di dialogo creato nei passaggi 4 e 5 articolo padre 178749, aggiungere i seguenti controlli con proprietà come specificato. Inoltre, aggiungere le variabili membro corrispondente:
                                      Member                Member
          Control   Name              Variable Type         Variable Name
          -----------------------------------------------------------------
          Edit      IDC_STARTINGCELL  m_sStartingCell       CString
          Edit      IDC_NUMROWS       m_iNumRows            short
          Edit      IDC_NUMCOLS       m_iNumCols            short
          CheckBox  IDC_STRING        m_bFillWithStrings    BOOL
    					
  3. Nella parte superiore del file AutoProjectDlg.cpp, aggiungere la seguente riga:
          #include "excel8.h"
    					
  4. Aggiungere il codice riportato di seguito a CAutoProjectDlg::OnRun() nel file AutoProjectDlg.cpp.

    Codice di esempio

          // OLE Variant for Optional.
          COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          _Application objApp;
    
          _Workbook objBook;
          Workbooks objBooks;
          Worksheets objSheets;
          _Worksheet objSheet;
          Range range;
    
          if(!UpdateData(TRUE))
          {
             return;
          }
    
          // Instantiate Excel and start a new workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Add(VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range where the starting cell has the address
          //m_sStartingCell and it's dimensions are m_iNumRows x m_iNumCols.
          range = objSheet.GetRange(COleVariant(m_sStartingCell),
                                    COleVariant(m_sStartingCell));
          range = range.GetResize(COleVariant(m_iNumRows),
                                  COleVariant(m_iNumCols));
    
          //*** Fill the range with an array of values.
    
          //Create the SAFEARRAY.
          COleSafeArray saRet;
          DWORD numElements[2];
          numElements[0]= m_iNumRows;   //Number of rows in the range.
          numElements[1]= m_iNumCols;   //Number of columns in the range.
    
          if(m_bFillWithStrings)
          {
             saRet.Create(VT_BSTR, 2, numElements);
          }
          else
          {
             saRet.Create(VT_R8, 2, numElements);
          }
    
          //Fill the SAFEARRAY.
          long index[2];
          long iRow;
          long iCol;
    
          for(iRow=0;iRow<=m_iNumRows-1;iRow++)
          {
             for(iCol=0;iCol<=m_iNumCols-1;iCol++)
             {
                index[0] = iRow;
                index[1] = iCol;
                if(m_bFillWithStrings)      //Fill with Strings.
                {
                   VARIANT v;
                   CString s;
                   VariantInit(&v);
                   v.vt = VT_BSTR;
                   s.Format("r%dc%d", iRow, iCol);
                   v.bstrVal = s.AllocSysString();
                   saRet.PutElement(index, v.bstrVal);
                   SysFreeString(v.bstrVal);
                   VariantClear(&v);
                }
                else                     //Fill with Numbers.
                {
                   double d;
                   d = (iRow*1000) + iCol;
                   saRet.PutElement(index, &d);
                }
             }
          }
    
          //Set the range value to the SAFEARRAY.
          range.SetValue(COleVariant(saRet));
          saRet.Detach();
    
          //Return control of Excel to the user.
          objApp.SetVisible(TRUE);
          objApp.SetUserControl(TRUE);
    					
  5. Compilare ed eseguire il progetto.
  6. Specificare i seguenti valori per i controlli nella finestra di dialogo:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      A1
          IDC_NUMROWS           10
          IDC_NUMCOLS           5
          IDC_STRING            True
    						
    scegliere OK.

    Risultati: Viene generata una nuova cartella di lavoro e a1: E10 celle del primo foglio di lavoro verranno popolate con valori stringa.
  7. Specificare i seguenti valori per i controlli nella finestra di dialogo:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      C3
          IDC_NUMROWS           2
          IDC_NUMCOLS           9
          IDC_STRING            False
    						
    scegliere OK.

    Risultati: Viene generata una nuova cartella di lavoro e celle C3:K4 del primo foglio di lavoro verranno popolate con valori numerici.

Riferimenti

Per ulteriori informazioni sull'automazione di Microsoft Excel utilizzando MFC, vedere i seguenti articoli della Microsoft Knowledge Base:
186122Utilizzo di MFC per automatizzare Excel e ottenere una matrice da un intervallo

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

179706Utilizzare MFC per automatizzare Excel e creare/formato una nuova cartella di lavoro

178781Automazione di Excel utilizzando MFC e funzioni del foglio di lavoro

178783Utilizzo di MFC per creare un grafico di Microsoft Excel

Proprietà

Identificativo articolo: 186120 - Ultima modifica: martedì 23 gennaio 2007 - Revisione: 4.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Chiavi: 
kbmt kbautomation kbcode kbhowto kbinterop KB186120 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: 186120
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