En este artículo se muestra cómo automatizar Microsoft Excel y cómo rellenar un rango de celdas con un Textbox y con un listview.
1. Iniciaremos 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:
- En el menú Proyecto, haga clic en Agregar referencia.
- En la ficha COM, busque la Biblioteca de objetos de Microsoft Excel y haga clic en Seleccionar.
- 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 Sí.
4. En el Form1 he agregado un TextBox y un ListView que son los usare para exportar los datos a Excel. Y un botón que es el encargado de generar la acción.
5 . En el código del botón agregare todo el código, es bastante sencillo y lo he comentado para aclarar que funciona cada línea importante.
| Visual Basic | | copy code | | ? |
- 'Variables locales
- Dim oExcel As Object
- Dim oBook As Object
- Dim oSheet As Object
- 'Iniciar un nuevo libro en Excel
- oExcel = CreateObject("Excel.Application")
- oBook = oExcel.Workbooks.Add
- 'Agregar datos a las celdas de la primera hoja en el libro nuevo
- oSheet = oBook.Worksheets(1)
- ' Agregamos Los datos que queremos agregar
- oSheet.Range("A3").Value = TextBox1.Text
- ' Esta celda tendra los datos del textbox
- oSheet.Range("A10").Value = "CODIGO"
- ' estas celdas por defecto solo seran para identificar cada columna
- oSheet.Range("B10").Value = "TIPO"
- oSheet.Range("C10").Value = "DESCRIPCION"
- oSheet.Range("D10").Value = "MODELO"
- oSheet.Range("E10").Value = "REGIS"
- oSheet.Range("F10").Value = "DISPO"
- 'Desde aqui empezaremos a exportar la lista
- If ListView1consul2.Items.Count > 0 Then
- ' primero verificamos cuantas filas tiene la lista
- Dim col As Integer = 11 empezaremos en el libro de excel a partir de la celda 11
- Dim i As Integer ' for para empezar a recorrer la lista
- For i = 0 To ListView1consul2.Items.Count
- If i = ListView1consul2.Items.Count Then
- Exit For
- End If
- ' estas son las columnas que usaremos y el contador nos ira cargando una a una cada fila
- Dim a As String = "A" + col.ToString + ""
- Dim b As String = "B" + col.ToString + ""
- Dim c As String = "C" + col.ToString + ""
- Dim d As String = "D" + col.ToString + ""
- Dim j As String = "E" + col.ToString + ""
- Dim f As String = "F" + col.ToString + ""
- oSheet.Range(a).Value = ListView1consul2.Items(i).SubItems.Item(0).Text.ToString
- oSheet.Range(b).Value = ListView1consul2.Items(i).SubItems.Item(1).Text.ToString
- oSheet.Range(c).Value = ListView1consul2.Items(i).SubItems.Item(2).Text.ToString
- oSheet.Range(d).Value = ListView1consul2.Items(i).SubItems.Item(3).Text.ToString
- oSheet.Range(j).Value = ListView1consul2.Items(i).SubItems.Item(4).Text.ToString
- oSheet.Range(f).Value = ListView1consul2.Items(i).SubItems.Item(5).Text.ToString
- col = col + 1
- ListView1consul2.Items.Remove(ListView1consul2.Items.Item(i))
- ' removemos cada el elemento esto es solo si desean hacerlo
- ' otra opcion es poner el contador positivo y no eliminar el elemento de la lista
- i = i − 1
- Next
- End If
- ' hacemos visible el documento
- oExcel.Visible = True
- oExcel.UserControl = True
- 'Guardaremos el documento en el escritorio con el nombre prueba
- oBook.SaveAs(Environ("UserProfile") & "\desktop\Prueba.xls")
Aquí encontraran el código del proyecto completo.















Excelente aporte, de verdad era lo que necesitaba sin embargo, me gustaría saber si tienes información o puedes publicar algo sobre los instaladores o los .exe en visualbasic.net ya que desde hace tiempo he tenido problema con eso y no he encontrado una buena información sobre ese tema.
Muchas gracias
saludos.
Buenos. Días Carlos
Me alegro que la información te funcione. Esa es la idea principal y claro que si con mucho gusto en la próxima nota puedo agregar a este proyecto. Del mismo modo agregare algunas otras herramientas que considero pueda ser de utilidad.
Saludos.
disculpa, ¿como le hago para incrementar el tamaño de una celda desde código?
disculpa la demora solo que habia estado alejado de la pagina por motivos personales. de igual forma tratare de responder tu pregunta
como puedes ver en la linea de codigo 57 encontraras la celda donde te posicionas en el excel ejemplo A7
EL A representa la letra y col es un integer que aumentamos con un ciclo de repetición iniciado en el ejercicio en 11. Sin embargo como concatenamos “A” + col tenemos que usar la funcion .ToString para convertir el mismo en un string y poder unir todo
Dim a As String = “A” + col.ToString + “”
si tienen alguna duda con gusto las aclarare mejor si no me hice entender
muchiisimas gracias es precisamente lo que buscaba
ola q tal muy buen aporte y otra tu no sabes como puedo aca en mismo en visual hacer exporataciones de hojas de excel desde una interfaz de visual a una bd de sql server espero tu ayuda amigo
gracias saludos !!!!!!!
Buenas noches, a ver si te entiendo:
lo que quieres hacer es obtener datos de excel a un programa hecho en visual y luego los datos guardarlos en una base de datos?
E X E L E N T E . . .
Alguna vez han renombrado un archivo XLSX (archivo.xlsx) a un ZIP (archivo.zip) es interesante ver como un archivo de excel (2007 en adelante) es el conjunto de varios xml por lo tanto crear tu archivo de excel sin depender de la instalación de office es mas sencillo guardando un archivo xml por cada “hoja de excel” los metes dentro de una carpeta “xl\worksheets” la zipeas y listo, tienes un documento que no depende de tener office y sobre todo que la versión de office sea compatible con la que tu compilaste en tu VB.Net, saludos (por cierto si no saben como hacer un zip aqui les dejo un link para hacer zips facilmente http://dotnetzip.codeplex.com/)
EXELENTE DE MUCHA AYUDA.
PERO NO TENDRAS OTRO QUE TE EXPORTE PERO A UN ARCHIVO DE EXEL EN ESPESIFICO
hola , como lo hago ocupando un gridview ???
Hola excelente aporte, pero tengo un problema, VB me dice que no se a declarado el nombre “minus”, de que tipo es para probar declarando la variable??
Hola que tal carlos gracia por tu aporte. Acabo de ver un error en la linea de codigo 89 que es donde me indicas remplaza esa linae ” i = i − 1″ por ” i = i – 1 ” de igual forma en el zip puedes ver el proyecto completo funcionando
hola esta bueno entodos les agradeceria que me mandaran post a mi correo estoy empesando a aprender a programar en visual nececito ayuda
hola oye tendras un ejemplo con TrueDBGrid saludos y te agradezco tu respuesta
excelente aporte,oye tengo una pregunta esto tambien funciona en un aplicativo .net web?
Buen dia para todos, porfavor si alguien sabe como enviar los datos de una consulta para que ubicar los digitos por cada celda y que estos se recuadren. Similar a los formatos fisicos donde te piden colocar letra e letra por cada cuadro. He pensado en tener la plantilla en excel. Pero no se el procedimiento para que cada letra o digito se ubique cada celda. agradezco la colaboración de Uds. bendiciones