Jak automatizovat aplikaci Microsoft Excel pomocí jazyka Microsoft Visual C# .NET

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

Souhrn

Tento článek ukazuje, jak lze vytvořit klienta pro automatizaci v aplikaci Microsoft Excel pomocí jazyka Microsoft Visual C# .NET.

Další informace

Automatizace je proces, který umožní aplikacím naprogramovaným v jazycích, jako je Visual C# .NET, programově řídit jiné aplikace. Automatizace v aplikaci Excel umožňuje provést akce, jako je vytvoření nového sešitu, vložení dat do sešitu nebo vytváření grafů. Téměř všechny akce, které lze provést ručně pomocí uživatelského rozhraní, je možné v aplikaci Excel a dalších aplikacích systému Microsoft Office provést programově pomocí automatizace.

Aplikace Excel umožňuje tuto programovou funkcionalitu pomocí objektového modelu. Objektový model je kolekce tříd a metod, které slouží jako protějšek logických komponent aplikace Excel. Máme například objekt Aplikace, objekt Sešit a objekt List, přičemž každý zahrnuje funkcionalitu těchto částí aplikace Excel. Pro přístup k objektovému modelu z jazyka Visual C# .NET můžete nastavit odkaz na projekt v knihovně typů.

Tento článek ukazuje, jak správně nastavit odkaz na projekt v aplikaci Excel v knihovně typů jazyka Visual C# .NET a poskytuje vzorový kód pro automatizaci aplikace Excel.

Vytvoření klienta pro automatizaci aplikace Microsoft Excel

  1. Spusťte aplikaci Visual Studio .NET.
  2. V nabídce Soubor klepněte na příkaz Nový a potom klepněte na příkaz Projekt. Z typů projektů v jazyce Visual C# vyberte typ Aplikace Windows. Jako výchozí je vytvořen formulář Form1.
  3. Přidejte odkaz do Knihovny objektů aplikace Microsoft Excel. Postupujte následujícím způsobem:
    1. V nabídce Projekt klepněte na příkaz Přidat odkaz.
    2. Na kartě COM vyhledejte možnost Knihovna objektů aplikace Microsoft Excel a klepněte na možnost Vybrat.

      Poznámka: Aplikace sady Microsoft Office 2003 zahrnuje primární definiční sestavení (PIA). Sada Microsoft Office XP nezahrnuje sestavení PIA, ale ty lze stáhnout. Další informace o sestaveních PIA sady Office XP naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
      328912 Primární sestavení InterOp (PIA) sady Office XP jsou k dispozici ke stažení
    3. Potvrďte výběr klepnutím na tlačítko OK v dialogovém okně Přidat odkazy. Pokud se zobrazí výzva ke generování obálky pro vybrané knihovny, klepněte na tlačítko Ano.
  4. V nabídce Zobrazit vyberte příkaz Sada nástrojů, zobrazí se sada nástrojů a pak přidejte tlačítko do formuláře Form1.
  5. Poklepejte na možnost Button1. Zobrazí se okno s kódem pro formulář.
  6. V okně s kódem nahraďte následující kód
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    tímto kódem:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	Excel.Application oXL;
    	Excel._Workbook oWB;
    	Excel._Worksheet oSheet;
    	Excel.Range oRng;
    
    	try
    	{
    		//Spustí aplikaci Excel a získá aplikaci jako objekt.
    		oXL = new Excel.Application();
    		oXL.Visible = true
    
    		//Načte nový sešit.
    		oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
    		oSheet = (Excel._Worksheet)oWB.ActiveSheet;
    
    		//Přidá záhlaví tabulky buňku po buňce.
    		oSheet.Cells[1, 1] = "Jméno";
    		oSheet.Cells[1, 2] = "Příjmení";
    		oSheet.Cells[1, 3] = "Celé jméno";
    		oSheet.Cells[1, 4] = "Plat";
    
    		//Formát A1:D1 tučně, svislé zarovnání na střed.
    		oSheet.get_Range("A1", "D1").Font.Bold = true;
    		oSheet.get_Range("A1", "D1").VerticalAlignment = 
    			Excel.XlVAlign.xlVAlignCenter;
    		
    		// Vytvoří pole umožňující násobení hodnot najednou.
    		string[,] saNames = new string[5,2];
    		
    		saNames[ 0, 0] = "Jan";
    		saNames[ 0, 1] = "Kovář";
    		saNames[ 1, 0] = "Tomáš";
    		saNames[ 1, 1] = "Bílý";
    		saNames[ 2, 0] = "Zuzana";
    		saNames[ 2, 1] = "Tománková";
    		saNames[ 3, 0] = "Jana";
    		saNames[ 3, 1] = "Jonášová";
    		saNames[ 4, 0] = "Adam";
    		saNames[ 4, 1] = "Janík";
    
            	//Vyplní buňky A2:B6 polem hodnot (jména a příjmení).
    	        oSheet.get_Range("A2", "B6").Value2 = saNames;
    
    		//Vyplní buňky C2:C6 vzorcem s relativním odkazem (=A2 & " " & B2).
    		oRng = oSheet.get_Range("C2", "C6");
    		oRng.Formula = "=A2 & \" \" & B2";
    
    		//Vyplní buňky D2:D6 vzorcem (=RAND()*100000) a aplikuje formát buňky.
    		oRng = oSheet.get_Range("D2", "D6");
    		oRng.Formula = "=RAND()*100000";
    		oRng.NumberFormat = "$0.00";
    
    		//Automaticky přizpůsobí sloupce A:D.
    		oRng = oSheet.get_Range("A1", "D1");
    		oRng.EntireColumn.AutoFit();
    
    		//Zpracuje proměnlivý počet sloupců s údaji o čtvrtletním prodeji.
    		DisplayQuarterlySales(oSheet);
    
    		//Zajištění viditelnosti aplikace Excel a plné kontroly uživatelem
    		//po celou dobu funkčnosti aplikace Microsoft Excel.
    		oXL.Visible = true
    		oXL.UserControl = true
    	}
    	catch (Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Chyba: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Řádek: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Chyba" );
    	}
    }
    
    private void DisplayQuarterlySales(Excel._Worksheet oWS)
    {
    	Excel._Workbook oWB;
    	Excel.Series oSeries;
    	Excel.Range oResizeRange;
    	Excel._Chart oChart;
    	String sMsg;
    	int iNumQtrs;
    
    	//Určení pro kolik čtvrtletí se zobrazí data.
    	for( iNumQtrs = 4; iNumQtrs >= 2; iNumQtrs--)
    	{
    		sMsg = "Zadat data prodeje za ";
    		sMsg = String.Concat( sMsg, iNumQtrs );
    		sMsg = String.Concat( sMsg, " čtvrtletí?");
    
    		DialogResult iRet = MessageBox.Show( sMsg, "Čtvrtletní prodeje?", 
    			MessageBoxButtons.YesNo );
    		if (iRet == DialogResult.Yes)
    			break;
    	}
    
    	sMsg = "Zobrazení dat za ";
    	sMsg = String.Concat( sMsg, iNumQtrs );
    	sMsg = String.Concat( sMsg, " čtvrtletí." );
    
    	MessageBox.Show( sMsg, "Čtvrtletní prodeje" );
    
    	//Vyplnění záhlaví pro vybraný počet sloupců se začátkem v buňce E1.
    	oResizeRange = oWS.get_Range("E1", "E1").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Formula = "=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\"";
    
    	//Změna vlastností orientace a obalení textu v záhlaví.
    	oResizeRange.Orientation = 38;
    	oResizeRange.WrapText = true;
    
    	//Vyplnění záhlaví barvou výplně.
    	oResizeRange.Interior.ColorIndex = 36;
    
    	//Vyplnění sloupců vzorcem a použití číselného formátu.
    	oResizeRange = oWS.get_Range("E2", "E6").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Formula = "=RAND()*100";
    	oResizeRange.NumberFormat = "$0.00";
    
    	//Nastavení okrajů pro data o prodeji a záhlaví.
    	oResizeRange = oWS.get_Range("E1", "E6").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin;
    
    	//Vložení vzorce pro výpočet celkového objemu prodeje a nastavení okraje.
    	oResizeRange = oWS.get_Range("E8", "E8").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Formula = "=SUM(E2:E6)";
    	oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).LineStyle 
    		= Excel.XlLineStyle.xlDouble;
    	oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).Weight 
    		= Excel.XlBorderWeight.xlThick;
    
    	//Vložení grafu pro vybraná data.
    	oWB = (Excel._Workbook)oWS.Parent;
    	oChart = (Excel._Chart)oWB.Charts.Add( Missing.Value, Missing.Value, 
    		Missing.Value, Missing.Value );
    
    	//Použití průvodce vytvářením grafů pro vytvoření nového grafu z vybraných dat.
    	oResizeRange = oWS.get_Range("E2:E6", Missing.Value ).get_Resize( 
    		Missing.Value, iNumQtrs);
    	oChart.ChartWizard( oResizeRange, Excel.XlChartType.xl3DColumn, Missing.Value,
    		Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value, 
    		Missing.Value, Missing.Value, Missing.Value, Missing.Value );
    	oSeries = (Excel.Series)oChart.SeriesCollection(1);
    	oSeries.XValues = oWS.get_Range("A2", "A6");
    	for( int iRet = 1; iRet <= iNumQtrs; iRet++)
    	{
    		oSeries = (Excel.Series)oChart.SeriesCollection(iRet);
    		String seriesName;
    		seriesName = "=\"Q";
    		seriesName = String.Concat( seriesName, iRet );
    		seriesName = String.Concat( seriesName, "\"" );
    		oSeries.Name = seriesName;
    	}														  
    	
    	oChart.Location( Excel.XlChartLocation.xlLocationAsObject, oWS.Name );
    
    	//Posun grafu tak, aby nepřekrýval data.
    	oResizeRange = (Excel.Range)oWS.Rows.get_Item(10, Missing.Value );
    	oWS.Shapes.Item("Chart 1").Top = (float)(double)oResizeRange.Top;
    	oResizeRange = (Excel.Range)oWS.Columns.get_Item(2, Missing.Value );
    	oWS.Shapes.Item("Chart 1").Left = (float)(double)oResizeRange.Left;
    }
    					
  7. Přesun na začátek kódu. Přidejte následující řádek na konec seznamu direktiv using:
    using Excel = Microsoft.Office.Interop.Excel;
    using System.Reflection; 
    					

Testování klienta automatizace

  1. Chcete-li sestavit a spustit program, stiskněte klávesu F5.
  2. Na formuláři klepněte na tlačítko Button1. Program spustí aplikaci Excel a vyplní nový list daty.
  3. Až se zobrazí výzva k zadání dat o čtvrtletním objemu prodeje, klepněte na tlačítko Ano. Na list je přidán graf, který je propojen s údaji za čtvrtletí.

Odkazy

Další informace naleznete na následujících webech služby MSDN (Microsoft Developer Network):
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx

Vlastnosti

ID článku: 302084 - Poslední aktualizace: 29. prosince 2007 - Revize: 7.3
Informace v tomto článku jsou určeny pro produkt:
  • 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: 
kbpia kbautomation kbhowto KB302084

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