Teď jste offline a čekáte, až se znova připojí internet.

Jak automatizovat pomocí funkce listu a MFC Excel

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:178781
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Souhrn
Tento článek popisuje, jak automatizovat aplikaci Microsoft Excel 97, Microsoft Excel 2000, Microsoft Excel 2002 nebo Microsoft Excel 2003 pomocí knihovny Microsoft Foundation Class (MFC) verze 4.2 (nainstalována s Microsoft Visual C++ verze 5.0 a 6.0). Konkrétně tento článek ukazuje používat funkce listu poskytované doplněk například ATP (Analysis ToolPak) a použití funkce listu vzorce, které jsou vestavěné do aplikace Excel.
Další informace
Kopírovat kód v tomto článku lze funkci zpráva obslužné rutiny události definované v souboru cpp MFC. Účel kód je však ilustrovat proces pomocí rozhraní IDispatch a funkce členů definovaných v Excel8.olb Excel 97 v Excel9.olb Excel 2000 a v Excel.exe pro aplikaci Excel 2002 a Excel 2003 knihovny typů. Primárním přínosem pochází z čtení a Principy kód v příkladu tak, aby upravit příkladu nebo napsat kód zcela zautomatizovat funkce listu v aplikaci Microsoft Excel pomocí MFC.

Kroky vytvoření projektu

  1. Postupujte podle kroků 1 až 12 v následujícím článku znalostní báze Microsoft Knowledge Base vytvořit ukázkový projekt, který používá rozhraní IDispatch a funkce členů definovaných v Excel8.olb, nebo Excel9.olb nebo Excel.exe pro aplikaci Excel 2002 a Excel 2003 knihovny typů:
    178749Vytvoření projektu aplikace automatizace pomocí MFC a knihovny typů
  2. Přidejte následující řádek v horní části AutoProjectDlg.cpp:
          #include "excel8.h"					
    Pokud Excel 2000 jsou automatizace, zahrnout excel9.h. Pokud jsou automatizace aplikace Excel 2002 nebo Excel 2003, zahrnout excel.h

  3. Přidejte následující kód CAutoProjectDlg::OnRun() v souboru AutoProjectDLG.cpp: ukázkový kód:
          try      {      _Application app;     // app is an _Application object.      _Workbook book;       // More object declarations.      _Worksheet sheet;      Workbooks books;      Worksheets sheets;      Range range;          // Used for Microsoft Excel 97 components.      LPDISPATCH lpDisp;    // Often reused variable.      // Common OLE variants. Easy variants to use for calling arguments.      COleVariant        covTrue((short)TRUE),        covFalse((short)FALSE),        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      // Start Microsoft Excel, get _Application object,      // and attach to app object.      if(!app.CreateDispatch("Excel.Application"))       {        AfxMessageBox("Couldn't CreateDispatch() for Excel");        return;       }      // Set visible.      app.SetVisible(TRUE);      // Register the Analysis ToolPak.      CString sAppPath;      sAppPath.Format ("%s\\Analysis\\Analys32.xll", app.GetLibraryPath());      if(!app.RegisterXLL(sAppPath))        AfxMessageBox("Didn't register the Analys32.xll");      // Get the Workbooks collection.      lpDisp = app.GetWorkbooks();     // Get an IDispatch pointer.      ASSERT(lpDisp);      books.AttachDispatch(lpDisp);    // Attach the IDispatch pointer                                       // to the books object.      // Open a new workbook and attach that IDispatch pointer to the      // Workbook object.      lpDisp = books.Add( covOptional );      ASSERT(lpDisp);      book.AttachDispatch( lpDisp );         // To open an existing workbook, you need to provide all         // arguments for the Open member function. In the case of          // Excel 2002 you must provide 16 arguments.         // However in Excel 2003 you must provide 15 arguments.         // The code below opens a workbook and adds it to the Workbook's         // Collection object. It shows 13 arguments, required for Excel         // 2000.         // You need to modify the path and file name for your own         // workbook.      //       // lpDisp = books.Open("C:\\Test",     // Test.xls is a workbook.      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional );   // Return Workbook's IDispatch      // pointer.      // Get the Sheets collection and attach the IDispatch pointer to your      // sheets object.      lpDisp = book.GetSheets();      ASSERT(lpDisp);      sheets.AttachDispatch(lpDisp);      // Get sheet #1 and attach the IDispatch pointer to your sheet      // object.      lpDisp = sheets.GetItem( COleVariant((short)(1)) );                                        //GetItem(const VARIANT &index)      ASSERT(lpDisp);      sheet.AttachDispatch(lpDisp);      // Fill range A1 with "1/25/98", the settlement date.      lpDisp = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1/25/98")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1/25/98")); // Excel 2002 and Excel 2003      // Fill range A2 with "11/15/99", the maturity date.      lpDisp = sheet.GetRange(COleVariant("A2"), COleVariant("A2"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("11/15/99"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("11/15/99")); // Excel 2002 and Excel 2003      // Fill range A3 with "2", the frequency for semi-annual interest      // payments.      lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("A3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("2"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("2"));  // Excel 2002 and Excel 2003      // Fill range A4 with 1, the basis (actual/actual).      lpDisp = sheet.GetRange(COleVariant("A4"), COleVariant("A4"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1")); // Excel 2002 and  Excel 2003      // Fill range C1 with the formula "=COUPNCD(A1, A2, A3, A4)" and      // format the cell with a Date type of the Number format.      lpDisp = sheet.GetRange(COleVariant("C1"), COleVariant("C1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetNumberFormat(COleVariant("mm/dd/yy"));      range.SetFormula(COleVariant("=COUPNCD(A1, A2, A3, A4)"));      /* This is an alternative that works without placing variables on      // the worksheet.      // The values are arguments contained in the SetFormula() call.      // range.SetFormula(COleVariant(                       "=COUPNCD(\"09/15/96\",\"11/15/99\",2,1)"));      */       // *** The example in this block uses a built-in Microsoft Excel      // function.      // You do not have to register any add-in to use the built-in      // Microsoft Excel worksheet functions.      lpDisp = sheet.GetRange(COleVariant("C3"), COleVariant("C3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetFormula(COleVariant("=SUM(A3, A4)"));      // or use:      // range.SetFormula(COleVariant("=SUM(2,1)"));      // *** End of example for built-in function usage.      // Release dispatch pointers.      range.ReleaseDispatch();      sheet.ReleaseDispatch();      // This is not really necessary because      // the default second parameter of AttachDispatch releases      // when the current scope is lost.      } // End of processing.        catch(COleException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);        ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);      }      catch(COleDispatchException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf,               "COleDispatchException. SCODE: %08lx, Description: \"%s\".",               (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));        ::MessageBox(NULL, buf, "COleDispatchException",                           MB_SETFOREGROUND | MB_OK);      }      catch(...)      {        ::MessageBox(NULL, "General Exception caught.", "Catch-All",                           MB_SETFOREGROUND | MB_OK);      }					
Odkazy
Další informace o automatizaci systému Office aplikací klepněte v článku číslo článku databáze Microsoft Knowledge Base:
222101Jak: Najít a použití dokumentace Office objektového modelu
MFC VC ++ automatizace typelib IDispatch ATP toolpack

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 178781 - Poslední kontrola: 12/05/2015 08:16:12 - Revize: 4.2

Microsoft Foundation Class Library 4.2, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbautomation kbhowto kbinterop KB178781 KbMtcs
Váš názor