Použití automatizace Excel a výplně rozsah s Array MFC

Překlady článku Překlady článku
ID článku: 186120 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek ukazuje, jak automatizovat uzavřený a vyplnění multi-cell rozsah pole hodnot.

Další informace

Vyplnit multi-cell oblast bez vyplnění buněk po jednom, je nutné vytvořit dvojrozměrné variant SAFEARRAY, které předávají apl.Excel voláním funkce NastavitHodnotu pro objekt rozsah. Následující kroky ukazují tento proces.

Poznámky pro automatizování Microsoft Excel 2000 a 2002

Ukázkový kód v tomto článku používá třídy obálky generovaných z aplikace Excel 97 objektu knihovny (Excel 8.olb). Tento kód, s nepatrné změny mohou být použity klientovi automatizace, který používá třídy obálky pro Excel 2000 (Excel9.olb) nebo aplikaci Excel 2002 (Excel.olb) Další informace o použití ukázkového kódu popsané v tomto článku s Microsoft Excel 2000 nebo 2002 typ knihovny klepněte na článek znalostní báze Microsoft Knowledge Base:
224925INFORMACE: Typ knihovny pro Office může změnit s novou verzi

Kroky vytvoření projektu

  1. Postupujte podle kroků 1 až 12 v následujícím článku v databáze Microsoft Knowledge Base vytvořit ukázkový projekt používá rozhraní IDispatch a funkce členů definovaných v knihovně typů Excel8.olb:
    178749Vytvoření projektu aplikace automatizace pomocí MFC a knihovny typů
  2. Do dialogového okna vytvořených v krocích 4 a 5 článku nadřazené 178749 přidejte následující ovládací prvky s vlastnostmi jako zadané. Přidat také odpovídající proměnné členů:
                                      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. Přidejte následující řádek v horní části souboru AutoProjectDlg.cpp:
          #include "excel8.h"
    					
  4. Přidejte následující kód CAutoProjectDlg::OnRun() v souboru AutoProjectDlg.cpp.

    Ukázkový kód

          // 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. Kompilace a spuštění projektu.
  6. Zadejte následující hodnoty pro ovládací prvky v dialogovém okně:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      A1
          IDC_NUMROWS           10
          IDC_NUMCOLS           5
          IDC_STRING            True
    						
    klepnutí OK.

    Výsledky: Generovány nový sešit a A1:E10 buňky prvního listu jsou zaplněny hodnoty řetězce.
  7. Zadejte následující hodnoty pro ovládací prvky v dialogovém okně:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      C3
          IDC_NUMROWS           2
          IDC_NUMCOLS           9
          IDC_STRING            False
    						
    klepnutí OK.

    Výsledky: Generovány nový sešit a C3:K4 buňky prvního listu jsou zaplněny číselné hodnoty.

Odkazy

Další informace o automatizaci uzavřený pomocí MFC naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
186122Jak automatizovat Excel a získat Array ze oblasti pomocí MFC

184663Jak vložit a automatizovat listu Microsoft Excel s MFC

179706Formát nebo vytvořit nový sešit a automatizovat Excel pomocí MFC

178781Jak automatizovat Excel použití funkcí sešitu a MFC

178783Použití MFC vytvoření graf Microsoft Excel

Vlastnosti

ID článku: 186120 - Poslední aktualizace: 23. ledna 2007 - Revize: 4.2
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbautomation kbcode kbhowto kbinterop KB186120 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:186120

Dejte nám zpětnou vazbu

 

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