Cómo automatizar Microsoft Excel desde Visual Basic .NET

Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Resumen
En este artículo muestra cómo crear un cliente de automatización para Microsoft Excel utilizando Microsoft Visual Basic .NET.
Más información
La automatización es un proceso que permite que aplicaciones escritas en lenguajes como Visual Basic controlen otras aplicaciones mediante programación. La automatización de Excel permite realizar acciones como crear un nuevo libro, 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 Aplicación, un objeto Libro y un objeto Hoja de cálculo, cada uno de los cuales incluye la funcionalidad de dichos componentes de Excel. Para acceder al modelo de objetos desde Visual Basic .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 Basic .NET y proporciona el código de ejemplo para automatizar Excel.

Cree 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, en Proyecto. Seleccione Aplicación para Windows en los tipos de proyecto de Visual Basic. 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 pestaña COM, busque la Biblioteca de objetos de Microsoft Excel y haga clic en Seleccionar.

      Nota Microsoft Office 2003 incluye ensamblados de interoperabilidad primarios (PIA). Microsoft Office XP no incluye PIA, pero se pueden descargar. Para obtener información adicional acerca de los PIA de Office XP, haga clic en el siguiente número de artículo 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 referencia para aceptar sus selecciones.
  4. En el menú Ver, haga clic en Cuadro de herramientas para mostrar el cuadro de herramientas y, a continuación, agregue un botón a Form1.
  5. Haga doble clic en Button1. Aparecerá la ventana de código del formulario.
  6. En la ventana de código, localice el siguiente código:
        Private Sub Button1_Click(ByVal sender As System.Object, _      ByVal e As System.EventArgs) Handles Button1.Click    End Sub					
    Reemplace el código anterior por el código siguiente:
        Private Sub Button1_Click(ByVal sender As System.Object, _      ByVal e As System.EventArgs) Handles Button1.Click        Dim oXL As Excel.Application        Dim oWB As Excel.Workbook        Dim oSheet As Excel.Worksheet        Dim oRng As Excel.Range        ' Start Excel and get Application object.        oXL = CreateObject("Excel.Application")        oXL.Visible = True        ' Get a new workbook.        oWB = oXL.Workbooks.Add        oSheet = oWB.ActiveSheet        ' Add table headers going cell by cell.        oSheet.Cells(1, 1).Value = "First Name"        oSheet.Cells(1, 2).Value = "Last Name"        oSheet.Cells(1, 3).Value = "Full Name"        oSheet.Cells(1, 4).Value = "Salary"        ' Format A1:D1 as bold, vertical alignment = center.        With oSheet.Range("A1", "D1")            .Font.Bold = True            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter        End With        ' Create an array to set multiple values at once.        Dim saNames(5, 2) As String        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.Range("A2", "B6").Value = saNames        ' Fill C2:C6 with a relative formula (=A2 & " " & B2).        oRng = oSheet.Range("C2", "C6")        oRng.Formula = "=A2 & "" "" & B2"        ' Fill D2:D6 with a formula(=RAND()*100000) and apply format.        oRng = oSheet.Range("D2", "D6")        oRng.Formula = "=RAND()*100000"        oRng.NumberFormat = "$0.00"        ' AutoFit columns A:D.        oRng = oSheet.Range("A1", "D1")        oRng.EntireColumn.AutoFit()        ' Manipulate a variable number of columns for Quarterly Sales Data.        Call DisplayQuarterlySales(oSheet)        ' Make sure Excel is visible and give the user control        ' of Excel's lifetime.        oXL.Visible = True        oXL.UserControl = True        ' Make sure that you release object references.        oRng = Nothing        oSheet = Nothing        oWB = Nothing        oXL.Quit()        oXL = Nothing        Exit SubErr_Handler:        MsgBox(Err.Description, vbCritical, "Error: " & Err.Number)    End Sub    Private Sub DisplayQuarterlySales(ByVal oWS As Excel.Worksheet)        Dim oResizeRange As Excel.Range        Dim oChart As Excel.Chart        Dim oSeries As Excel.Series        Dim iNumQtrs As Integer        Dim sMsg As String        Dim iRet As Integer        ' Determine how many quarters to display data for.        For iNumQtrs = 4 To 2 Step -1            sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?"            iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _               Or vbMsgBoxSetForeground, "Quarterly Sales")            If iRet = vbYes Then Exit For        Next iNumQtrs        ' Starting at E1, fill headers for the number of columns selected.        oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=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.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)        oResizeRange.Formula = "=RAND()*100"        oResizeRange.NumberFormat = "$0.00"        ' Apply borders to the Sales data and headers.        oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)        oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin        ' Add a Totals formula for the sales data and apply a border.        oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)        oResizeRange.Formula = "=SUM(E2:E6)"        With oResizeRange.Borders(Excel.XlBordersIndex.xlEdgeBottom)            .LineStyle = Excel.XlLineStyle.xlDouble            .Weight = Excel.XlBorderWeight.xlThick        End With        ' Add a Chart for the selected data.        oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)        oChart = oWS.Parent.Charts.Add        With oChart            .ChartWizard(oResizeRange, Excel.XlChartType.xl3DColumn, , Excel.XlRowCol.xlColumns)            oSeries = .SeriesCollection(1)            oSeries.XValues = oWS.Range("A2", "A6")            For iRet = 1 To iNumQtrs                .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"            Next iRet            .Location(Excel.XlChartLocation.xlLocationAsObject, oWS.Name)        End With        ' Move the chart so as not to cover your data.        With oWS.Shapes.Item("Chart 1")            .Top = oWS.Rows(10).Top            .Left = oWS.Columns(2).Left        End With        ' Free any references.        oChart = Nothing        oResizeRange = Nothing    End Sub					
  7. Agregue el código siguiente al principio de Form1.vb:
    Imports Microsoft.Office.Core					

Pruebe el cliente de automatización

  1. Presione F5 para generar y ejecutar el programa.
  2. En el formulario, haga clic en Button1. El programa inicia Excel y coloca los datos en una nueva hoja de cálculo.
  3. Cuando se le solicite que escriba 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):
Desarrollo de Microsoft Office con Visual Studio
http://msdn.microsoft.com/es-es/library/aa188489(office.10).aspx
Para obtener información acerca de Excel y Visual Basic, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
219151 Cómo automatizar Microsoft Excel desde Visual Basic
xl2003 automating automation automate createobject
Nota: es un artículo de "PUBLICACIÓN RÁPIDA" creado directamente por la organización de soporte técnico de Microsoft. La información aquí contenida se proporciona como está, como respuesta a problemas que han surgido. Como consecuencia de la rapidez con la que lo hemos puesto disponible, los materiales podrían incluir errores tipográficos y pueden ser revisados en cualquier momento sin previo aviso. Vea las Condiciones de uso para otras consideraciones
Propiedades

Id. de artículo: 301982 - Última revisión: 12/06/2015 03:27:57 - Revisión: 1.0

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbpia kbautomation kbhowto KB301982
Comentarios