Cómo automatizar Microsoft Excel desde Microsoft Visual C# .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 302084 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Este artículo muestra cómo crear un cliente de automatización para Microsoft Excel utilizando Microsoft Visual C# .NET.

Más información

La automatización es un proceso que permite a las aplicaciones escritas en lenguajes como Visual C# .NET controlar otras aplicaciones mediante programación. La automatización de Excel permite realizar acciones como crear un libro nuevo, agregar datos al libro o crear gráficos. Con Excel y otras aplicaciones de Microsoft Office, prácticamente todas las acciones ejecutables manualmente desde la interfaz de usuario pueden ser realizadas mediante programación utilizando la automatización.

Excel expone esta función de programación por medio de un modelo de objetos. El modelo de objetos es un conjunto de clases y métodos que actúan como equivalentes de los componentes lógicos de Excel. Por ejemplo, hay un objeto Application, un objeto Workbook y un objeto Worksheet, cada uno de los cuales incluye la funcionalidad de dichos componentes de Excel. Para tener acceso al modelo de objetos de Visual C# .NET, puede establecer una referencia al proyecto en la biblioteca de tipos.

Este artículo muestra cómo establecer la referencia al proyecto apropiada en la biblioteca de tipos de Excel para Visual C# .NET y proporciona código de ejemplo para automatizar Excel.

Crear un cliente de automatización para Microsoft Excel

  1. Inicie Microsoft Visual Studio .NET.
  2. En el menú Archivo, haga clic en Nuevo y, después, haga clic en Proyecto. Seleccione Aplicación para Windows en los tipos de proyecto de Visual C#. De forma predeterminada, se crea Form1.
  3. Agregue una referencia a la Biblioteca de objetos de Microsoft Excel. Para ello, siga estos pasos:
    1. En el menú Proyecto, haga clic en Agregar referencia.
    2. En la ficha COM, busque la Biblioteca de objetos de Microsoft Excel y haga clic en Seleccionar.

      Nota: Microsoft Office 2003 incluye ensamblados de interoperabilidad primarios (PIA, Primary Interop Assemblies). Microsoft Office XP no incluye PIA, pero se pueden descargar. Para obtener más información acerca de los PIA de Office XP, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
      328912 Hay disponibles ensamblados de interoperabilidad primarios (PIA) de Microsoft Office XP para descargar
    3. Haga clic en Aceptar en el cuadro de diálogo Agregar referencias para aceptar sus selecciones. Si se le pregunta si desea generar contenedores para las bibliotecas seleccionadas, haga clic en .
  4. En el menú Ver, seleccione Cuadro de herramientas para mostrar el cuadro de herramientas y agregue un botón a Form1.
  5. Haga doble clic en Button1. Aparece la ventana de código del formulario.
  6. En la ventana de código, reemplace el código siguiente
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    por:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	Excel.Application oXL;
    	Excel._Workbook oWB;
    	Excel._Worksheet oSheet;
    	Excel.Range oRng;
    	try
    	{
    		//Start Excel and get Application object.
    		oXL = new Excel.Application();
    		oXL.Visible = true;
    		//Get a new workbook.
    		oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
    		oSheet = (Excel._Worksheet)oWB.ActiveSheet;
    		//Add table headers going cell by cell.
    		oSheet.Cells[1, 1] = "First Name";
    		oSheet.Cells[1, 2] = "Last Name";
    		oSheet.Cells[1, 3] = "Full Name";
    		oSheet.Cells[1, 4] = "Salary";
    		//Format A1:D1 as bold, vertical alignment = center.
    		oSheet.get_Range("A1", "D1").Font.Bold = true;
    		oSheet.get_Range("A1", "D1").VerticalAlignment = 
    			Excel.XlVAlign.xlVAlignCenter;
    		
    		// Create an array to multiple values at once.
    		string[,] saNames = new string[5,2];
    		
    		saNames[ 0, 0] = "John";
    		saNames[ 0, 1] = "Smith";
    		saNames[ 1, 0] = "Tom";
    		saNames[ 1, 1] = "Brown";
    		saNames[ 2, 0] = "Sue";
    		saNames[ 2, 1] = "Thomas";
    		saNames[ 3, 0] = "Jane";
    		saNames[ 3, 1] = "Jones";
    		saNames[ 4, 0] = "Adam";
    		saNames[ 4, 1] = "Johnson";
            	//Fill A2:B6 with an array of values (First and Last Names).
    	        oSheet.get_Range("A2", "B6").Value2 = saNames;
    		//Fill C2:C6 with a relative formula (=A2 & " " & B2).
    		oRng = oSheet.get_Range("C2", "C6");
    		oRng.Formula = "=A2 & \" \" & B2";
    		//Fill D2:D6 with a formula(=RAND()*100000) and apply format.
    		oRng = oSheet.get_Range("D2", "D6");
    		oRng.Formula = "=RAND()*100000";
    		oRng.NumberFormat = "$0.00";
    		//AutoFit columns A:D.
    		oRng = oSheet.get_Range("A1", "D1");
    		oRng.EntireColumn.AutoFit();
    		//Manipulate a variable number of columns for Quarterly Sales Data.
    		DisplayQuarterlySales(oSheet);
    		//Make sure Excel is visible and give the user control
    		//of Microsoft Excel's lifetime.
    		oXL.Visible = true;
    		oXL.UserControl = true;
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }
    private void DisplayQuarterlySales(Excel._Worksheet oWS)
    {
    	Excel._Workbook oWB;
    	Excel.Series oSeries;
    	Excel.Range oResizeRange;
    	Excel._Chart oChart;
    	String sMsg;
    	int iNumQtrs;
    	//Determine how many quarters to display data for.
    	for( iNumQtrs = 4; iNumQtrs >= 2; iNumQtrs--)
    	{
    		sMsg = "Enter sales data for ";
    		sMsg = String.Concat( sMsg, iNumQtrs );
    		sMsg = String.Concat( sMsg, " quarter(s)?");
    		DialogResult iRet = MessageBox.Show( sMsg, "Quarterly Sales?", 
    			MessageBoxButtons.YesNo );
    		if (iRet == DialogResult.Yes)
    			break;
    	}
    	sMsg = "Displaying data for ";
    	sMsg = String.Concat( sMsg, iNumQtrs );
    	sMsg = String.Concat( sMsg, " quarter(s)." );
    	MessageBox.Show( sMsg, "Quarterly Sales" );
    	//Starting at E1, fill headers for the number of columns selected.
    	oResizeRange = oWS.get_Range("E1", "E1").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Formula = "=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\"";
    	//Change the Orientation and WrapText properties for the headers.
    	oResizeRange.Orientation = 38;
    	oResizeRange.WrapText = true;
    	//Fill the interior color of the headers.
    	oResizeRange.Interior.ColorIndex = 36;
    	//Fill the columns with a formula and apply a number format.
    	oResizeRange = oWS.get_Range("E2", "E6").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Formula = "=RAND()*100";
    	oResizeRange.NumberFormat = "$0.00";
    	//Apply borders to the Sales data and headers.
    	oResizeRange = oWS.get_Range("E1", "E6").get_Resize( Missing.Value, iNumQtrs);
    	oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin;
    	//Add a Totals formula for the sales data and apply a border.
    	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;
    	//Add a Chart for the selected data.
    	oWB = (Excel._Workbook)oWS.Parent;
    	oChart = (Excel._Chart)oWB.Charts.Add( Missing.Value, Missing.Value, 
    		Missing.Value, Missing.Value );
    	//Use the ChartWizard to create a new chart from the selected data.
    	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 );
    	//Move the chart so as not to cover your 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. Vaya al principio de la ventana de código. Agregue la línea siguiente al final de la lista de directivas using:
    using Excel = Microsoft.Office.Interop.Excel;
    using System.Reflection; 
    					

Probar el cliente de automatización

  1. Presione F5 para generar y ejecutar el programa.
  2. Haga clic en Button1 en el formulario. El programa inicia Excel y rellena los datos en una nueva hoja de cálculo.
  3. Cuando se le pregunte si desea escribir los datos trimestrales de ventas, haga clic en . Se agrega a la hoja de cálculo un gráfico que se vincula a los datos trimestrales.

Referencias

Para obtener más información, visite el siguiente sitio web de Microsoft Developer Network (MSDN):
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/es-es/library/aa188489.aspx

Propiedades

Id. de artículo: 302084 - Última revisión: miércoles, 16 de abril de 2008 - Versión: 7.4
La información de este artículo se refiere a:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
Palabras clave: 
kbpia kbautomation kbhowto KB302084

Enviar comentarios

 

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