Postup automatizace aplikace Excel pomocí MFC a Visual C++ 2005 nebo Visual C++ .NET vyplnit nebo získání dat v oblasti použití matic

Microsoft C# .NET verzi tohoto článku naleznete v tématu
302096 .
Microsoft Visual Basic .NET verzi tohoto článku naleznete v tématu
302094 .
Poznámka: Microsoft Visual C++ 2005, Microsoft Visual C++ .NET 2003 a Microsoft Visual C++ .NET 2002 podporují model spravovaný kód, který poskytuje společnost Microsoft rozhraní.NET Framework a nespravovaná nativní kód modelu Microsoft Windows. Informace v tomto článku platí pouze pro nespravovaný kód jazyka C++.

Souhrn

Tento článek ukazuje, jak automatizovat aplikaci Microsoft Excel z aplikace Visual C++ 2005 nebo Visual C++ .NET výplně a načíst hodnoty v rozsahu více buněk pomocí matice.

Vytvoření klienta automatizace aplikace Excel

Vyplnit oblast buněk více bez vyplnění buňky najednou, můžete nastavit hodnotu vlastnosti objektu Range na dvourozměrné pole. Podobně dvojrozměrné pole hodnot pro více buněk najednou načíst pomocí vlastnosti Value . Následující kroky ukazují tento proces pro nastavení a načtení dat pomocí dvourozměrné pole.
  1. Postupujte podle kroků v části "Vytváření automatizace klienta" v následujícím článku znalostní báze Microsoft Knowledge Base, chcete-li vytvořit základní klienta automatizace:
    307473 jak používat knihovnu typů pro automatizaci Office z Visual C++ .NET
    V kroku 3 přidejte druhého tlačítka a zaškrtávací políčko do formuláře. Změníte ID tlačítka na IDC_GETVALUES a titulek k Získání hodnoty. Změníte ID zaškrtnutí políčka IDC_CHECK a titulek k vyplnění řetězce.

    V kroku 4 tohoto článku vyberte "Microsoft Excel 10.0 Object Library" při automatizaci aplikace Excel 2002 ze sady Office XP. Výchozí umístění pro aplikaci Excel 2002 je C:\Program Files\Microsoft Office\Office10\Excel.exe. Nebo při automatizaci aplikace Microsoft Office Excel 2003, vyberte "Microsoft Excel 11.0 Object Library". Výchozí umístění pro aplikaci Excel 2003 je C:\Program Files\Microsoft Office\Office11\Excel.exe. Vyberte následující rozhraní aplikace Microsoft Excel:
    • _Application
    • _Workbook
    • _Worksheet
    • Rozsah
    • Sešity
    • Listy
    V kroku 6, přidejte následující #include příkazy přímo za direktivou #pragma once v Autoprojectdlg.h:
    #include "CApplication.h"#include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"

  2. Přidejte následující dvě veřejné členské proměnné třídy CAutoProjectDlg :
    CApplication oExcel;CWorkbook oBook;

  3. Na vaše dialogové okno IDC_CHECK klepněte pravým tlačítkem myši a vyberte Přidat proměnnou. Název proměnné m_bFillWithStrings a klepněte na tlačítko Dokončit.
  4. Na vaše dialogové okno poklepejte na položku Spustit a nahraďte následující kód
    void CAutoProjectDlg::OnBnClickedRun(){
    // TODO: Add your control notification handler code here
    }

    s:
    void CAutoProjectDlg::OnBnClickedRun(){
    CWorkbooks oBooks;
    CWorksheets oSheets;
    CWorksheet oSheet;
    CRange oRange;
    COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);

    // If you have not created Excel, create a new instance.
    if (oExcel.m_lpDispatch == NULL) {
    oExcel.CreateDispatch("Excel.Application");
    }
    // Show Excel to the user.
    oExcel.put_Visible(TRUE);
    oExcel.put_UserControl(TRUE);

    // Add a new workbook and get the first worksheet in that book.
    oBooks = oExcel.get_Workbooks();
    oBook = oBooks.Add(covOptional);
    oSheets = oBook.get_Worksheets();
    oSheet = oSheets.get_Item(COleVariant((short)1));

    // Get a range of data.
    oRange = oSheet.get_Range(COleVariant("A1"),covOptional);
    oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));

    COleSafeArray saRet;
    DWORD numElements[2];
    numElements[0] = 5;
    numElements[1] = 5;

    long index[2];
    // Create a BSTR or double safe array.
    if (m_bFillWithStrings.GetCheck())
    saRet.Create(VT_BSTR,2,numElements);
    else
    saRet.Create(VT_R8,2,numElements);

    // Fill the array with data.
    for (int iRow = 1; iRow <= 5; iRow++) {
    for (int iCol = 1; iCol <= 5; iCol++) {
    index[0]=iRow-1;
    index[1]=iCol-1;
    if (m_bFillWithStrings.GetCheck()) {
    CString szTemp;
    szTemp.Format("%d|%d",iRow,iCol);
    BSTR bstr = szTemp.AllocSysString();
    saRet.PutElement(index,bstr);
    SysFreeString(bstr);
    } else {
    double d = iRow * iCol;
    saRet.PutElement(index,&d);
    }
    }
    }
    // Send the array to Excel.
    oRange.put_Value(covOptional,COleVariant(saRet));
    }

    Poznámka: V aplikaci Visual C++ 2005 je třeba přidat společného jazyka runtime podporu možnost kompilátoru (/clr:oldSyntax) úspěšně zkompilovat předchozí ukázkový kód. Chcete-li přidat možnost kompilátoru podporu runtime běžné jazyk, postupujte takto:

    1. Klepněte na tlačítko projekta klepněte na tlačítko

      ProjectName vlastnosti.



      Poznámka: Název projektu je zástupný symbol pro název projektu.
    2. Rozbalte uzel Vlastnosti konfiguracea potom klepněte na tlačítko

      Obecné.

    3. V pravém podokně klepnutím vyberte Common Language Runtime Support, staré syntaxe (/ CLR: oldSyntax) v

      Podpora společného jazykového modulu Runtime nastavení projektu.
    4. Klepněte na tlačítko

      Použíta klepněte na tlačítko OK.

    Další informace o možnostech podpory kompilátoru společného jazyka runtime naleznete následujícím webu Microsoft Developer Network (MSDN):

    Tyto kroky platí pro celý tento článek.
  5. Vrátit dialogovém vyberte a poklepejte na položku Načíst hodnoty. Nahraďte následující kód
    void CAutoProjectDlg::OnBnClickedGetvalues(){
    // TODO: Add your control notification handler code here
    }

    s:
    void CAutoProjectDlg::OnBnClickedGetvalues(){
    CWorksheets oSheets;
    CWorksheet oSheet;
    CRange oRange;
    COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);

    // Make sure that Excel has been started.
    if (oExcel.m_lpDispatch == NULL) {
    AfxMessageBox("Excel has not been started. Press button1 to start Excel.");
    return;
    }
    // Get the first worksheet.
    oSheets = oBook.get_Worksheets();
    oSheet = oSheets.get_Item(COleVariant((short)1));
    // Set the range of data to retrieve
    oRange = oSheet.get_Range(COleVariant("A1"),COleVariant("E5"));

    // Get the data.
    COleSafeArray saRet(oRange.get_Value(covOptional));

    long iRows;
    long iCols;
    saRet.GetUBound(1, &iRows);
    saRet.GetUBound(2, &iCols);

    CString valueString = "Array Data:\r\n";
    long index[2];
    // Loop through the data and report the contents.
    for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
    for (int colCounter = 1; colCounter <= iCols; colCounter++) {
    index[0]=rowCounter;
    index[1]=colCounter;
    COleVariant vData;
    saRet.GetElement(index,vData);
    CString szdata(vData);
    valueString += szdata;
    valueString += "\t";
    }
    valueString += "\r\n";
    }
    AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
    }

Testování klienta automatizace

  1. Stisknutím klávesy F5 sestavit a spustit ukázkový program.
  2. Klepněte na příkaz Spustit. Program začíná nový sešit aplikace Excel a vyplní buňky A1:E5 prvního listu pro číselná data z pole.
  3. Klepněte na tlačítko načíst hodnoty. Program načítá data v buňkách A1:E5 do nového pole a zobrazí výsledky v okně se zprávou.
  4. Vyberte Výplně s řetězce a klepněte na tlačítko Spustit k vyplnění A1:E5 buněk s daty řetězec.
  5. Klepněte na příkaz Získat hodnoty pro zobrazení hodnoty řetězce v okně se zprávou.

Poradce při potížích

Přidáte třídy obálky pro knihovnu objektů Excel pomocí možnost soubor v třídy od TypeLib Průvodce přidáním, zobrazí chybovou zprávu při procházení knihovnu objektů. Chcete-li se tomuto problému vyhnout, zadejte úplnou cestu a název pro knihovnu objektů namísto procházení souboru.
Další informace získáte klepnutím na níže uvedené číslo článku znalostní báze Microsoft Knowledge Base:
Chyba 311408 : 'Čtení' upozornění při přidání třídy MFC z knihovny
Pokud při sestavování vzorové aplikace se zobrazí následující chybová zpráva, změna "Variant DialogBox" v CRange.h "Varianty _DialogBox":
upozornění C4003: není k dispozici dostatek aktuálních parametrů pro makro "DialogBoxA."
Další informace o příčině této chyby naleznete v následujícím článku znalostní báze Knowledge Base:
Chyba 311407 : Průvodce knihovny MFC se nevyřeší konflikty jmen s API makra

Odkazy

Další informace naleznete následujícím webu Microsoft Developer Network (MSDN):
Vývoj sady Microsoft Office s aplikací Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Další informace o použití pole k nastavení a načtení dat aplikace Excel v dřívějších verzích sady Visual Studio naleznete v následujících článcích znalostní báze Knowledge Base:
186120 jak použít k automatizaci aplikace Excel a vyplňte pole oblast MFC
186122 jak používat k automatizaci aplikace Excel a získat pole z oblasti MFC
247412 INFO: metody přenosu dat do aplikace Excel z aplikace Visual Basic
Vlastnosti

ID článku: 308407 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor