Jak automatizovat Excel z MFC a Visual C++ 2005 nebo Visual C++ .NET vyplnit nebo získat data v oblasti pomocí matice

Překlady článku Překlady článku
ID článku: 308407 - Produkty, které se vztahují k tomuto článku.
Microsoft C# .NET verzi tohoto článku naleznete 302096.
Microsoft Visual Basic .NET verzi tohoto článku naleznete 302094.
Poznámka: Microsoft Visual C++ 2005, Microsoft Visual C++ .NET 2003 a Microsoft Visual C++ .NET 2002 podporují model spravovaný kód, který je součástí Microsoft .NET Framework a Nespravovaná nativní kód modelu Microsoft Windows. Informace v tomto článku platí pouze pro nespravované Visual C++ kód.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek demonstruje automatizovat uzavřený z Visual C++ 2005 nebo Visual C++ .NET vyplnit a načíst hodnoty multi-cell oblasti pomocí matice.

Vytvořit klienta automatizace pro Excel

Vyplnit multi-cell oblast bez vyplnění buněk jeden najednou, můžete nastavit vlastnost Hodnotarozsahu objektu dvojrozměrné pole. Podobně můžete načíst dvojrozměrné pole hodnot pro více buněk současně pomocí vlastnost Hodnota. Následující kroky ukazují tento proces pro nastavení i načítání dat pomocí dvojrozměrné matice.
  1. Postupujte podle kroků v následujícím článku znalostní báze Microsoft Knowledge Base vytvoření základní klienta automatizace v části "Vytvoření klienta automatizace":
    307473Použití knihovny typů pro automatizaci Office z Visual C++ .NET
    V kroku 3 přidejte do formuláře zaškrtávací políčko a druhé tlačítko. ID na tlačítko změnit IDC_GETVALUES a titulek Načíst hodnoty. Změnit ID políčko IDC_CHECK a titulek výplně řetězce.

    V kroku 4 článku vyberte "Microsoft Excel 10.0 Object Library" Pokud automatizace 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 vyberte "Microsoft Excel 11.0 Object Library" Pokud automatizace aplikace Excel 2003. Výchozí umístění pro aplikaci Excel 2003 je C:\Program Files\Microsoft Office\Office11\Excel.exe. Vyberte uzavřený následující rozhraní:
    • _Application
    • _Workbook
    • _Worksheet
    • Rozsah
    • Sešity
    • Listy
    V kroku 6 přidat následující příkazy # include po direktiva # pragma jednou v Autoprojectdlg.h:
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. Přidat následující dvě proměnné veřejný člen třídy CAutoProjectDlg:
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. V dialogovém IDC_CHECK klepněte pravým tlačítkem myši a vyberte příkaz Přidat proměnné. Název proměnné m_bFillWithStrings a klepněte na tlačítko Dokončit.
  4. Na 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 Visual C++ 2005, musíte přidat možnost kompilátoru podporu runtime běžné jazyk (/ clr:oldSyntax) úspěšně zkompilovat předchozí ukázkový kód. Přidat možnost kompilátoru podporu runtime běžné jazyk, postupujte takto:
    1. Klepněte na tlačítko projekt a klepněte na příkaz vlastnosti ProjectName.

      Poznámka:ProjectName je zástupný název projektu.
    2. Rozbalte položku Konfigurace vlastnosti a potom klepněte na položku Obecné.
    3. V pravém podokně klepnutím vyberte Common Language Runtime podpory, staré syntaxe (/ clr:oldSyntax) v Common Language Runtime podporují nastavení projektu.
    4. Klepněte na tlačítko použít a potom klepněte na tlačítko OK.
    Další informace o společného jazykového modulu runtime kompilátor možnosti odborné pomoci, navštivte následující web společnosti Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Tyto kroky platí pro celý článek.
  5. Vrátit dialogové okno 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 tlačítko Spustit. Program začíná nový sešit Excel a vyplní buňky A1:E5 prvního listu s číselná data v matici.
  3. Klepněte na tlačítko načíst hodnoty. Program načte data v A1:E5 buněk do nového pole a zobrazí výsledky v okně se zprávou.
  4. Vyberte Výplně S řetězců a klepnutím na tlačítko Spustit vyplnění buněk A1:E5 řetězec data.
  5. Klepněte na příkaz Načíst hodnoty zobrazit hodnoty řetězce v okně se zprávou.

Odstraňování potíží

Přidat třídy obálky pro knihovnu objektů Excel pomocí možnost soubor v třídy od TypeLib Průvodce přidáním obdržíte chybovou zprávu při procházení knihovnu objektů. Chcete-li se tomuto problému vyhnout, zadejte úplnou cestu a název knihovnu objektů namísto procházení souboru. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
311408Chyba: 'Č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í dostatek skutečné parametry makro 'DialogBoxA
Další informace o příčina této chyby naleznete v následujícím článku znalostní báze Knowledge Base:
311407Chyba: Průvodce MFC Doesn't vyřešit konflikty s API makra Naming

Odkazy

Další informace naleznete na následující Microsoft Developer Network (MSDN) webu:
Microsoft Office Development s Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Další informace o použití matice k nastavení a načtení dat pomocí starší verze aplikace Visual Studio aplikaci Excel, naleznete v následujících článcích Knowledge Base:
186120Použití automatizace Excel a výplně rozsah s Array MFC
186122Jak automatizovat Excel a získat Array ze oblasti pomocí MFC
247412INFORMACE: Metody pro přenos dat do aplikace Excel z jazyka

Vlastnosti

ID článku: 308407 - Poslední aktualizace: 17. ledna 2007 - Revize: 6.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
Klíčová slova: 
kbmt kbautomation kbhowtomaster KB308407 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:308407

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