Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cómo obtener las hojas que tiene un libro de excel

5,164 views
Skip to first unread message

MS

unread,
Apr 23, 2007, 6:51:12 PM4/23/07
to
Hola a todos, mi duda es la siguiente:
No se cómo obtener los nombres de las hojas que contiene cualquier archivo
de excel que quiera abrir desde VB.net, hasta ahora puedo abrir el archivo
de excel, dandole el nombre de la hoja o que la hoja sea la de default que
crea excel, pero ahora quiero tener la opción de obtener los nombres de cada
hoja de excel y de ahí elegir cual quiero abrir algun norte al respecto de
cómo hacer esto. Gracias.


SoftJaén

unread,
Apr 24, 2007, 12:24:53 PM4/24/07
to
"MS" escribió:

> No se cómo obtener los nombres de las hojas que contiene cualquier archivo

> de excel que quiera abrir desde VB.net, ...

Hola:

Si en tu proyecto estás utilizando la biblioteca de Excel, simplemente
tienes que recorrer la colección «Worksheets» de un objeto «Workbook»
previamente abierto:

Dim xlApp As New Excel.Application ' Aplicación Excel
Dim wb As Excel.Workbook ' Libro de trabajo

' Abrimos el libro de trabajo.
'
wb = xlApp.Workbooks.Open(Filename:="C:\Mis documentos\Libro1.xls")

' Recorrermos la colección de hojas de cálculo
'
For Each sheet As Excel.Worksheet In wb.Worksheets
MessageBox.Show(sheet.Name)
Next

' Cerramos el libro de trabajo.
'
wb.Close()
wb = Nothing

' Cerramos Excel.
'
xlApp.Quit()
xlApp = Nothing

Se entiende que debes de importar el espacio de nombres
«Microsoft.Office.Interop».


Un saludo

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.


MS

unread,
Apr 24, 2007, 3:29:48 PM4/24/07
to
Mil gracias, me ayudaste mucho thanks.


"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje
news:%23joXj0o...@TK2MSFTNGP06.phx.gbl...

MS

unread,
Apr 24, 2007, 7:51:15 PM4/24/07
to
El Código que me pasaste quedo a pedir de boca sólo en el for tuvo que
cambiar In wb.Application.Worksheets

en lugar de In wb.Worksheets

Muchas gracias!!!

"MS" <adha...@telecomm.net.mx> escribió en el mensaje
news:%23NpPvbq...@TK2MSFTNGP04.phx.gbl...

SoftJaén

unread,
Apr 25, 2007, 10:58:42 AM4/25/07
to
"MS" escribió:

> El Código que me pasaste quedo a pedir de boca sólo en el for tuvo que
> cambiar In wb.Application.Worksheets
>
> en lugar de In wb.Worksheets

Si el ejemplo lo has ejecutado tal cual yo lo escribí, no es necesario hacer
ese cambio, porque en definitiva, ambos códigos recorren la colección
«Worksheets» de un objeto «Workbook».

Ya que utilizas el objeto «Application», también puedes obtener el nombre de
las hojas de cálculo de la siguiente manera:

Dim xlApp As New Excel.Application ' Aplicación Excel

' Abrimos el libro de trabajo.
'
xlApp.Workbooks.Open "C:\Mis documentos\Libro1.xls"

' Recorrermos la colección de hojas de cálculo
'

For Each sheet As Excel.Worksheet In Application.Worksheets
MsgBox sheet.Name
Next

' Cerramos Excel.
'
xlApp.Quit
Set xlApp = Nothing

De esta forma nos ahorramos tener que declarar expresamente un objeto
«Workbook».

Como podrás observar, hay varias formas de hacerlo, por lo que ignoro por
qué dices que has tenido que cambiar la manera de referenciar la colección
«Worksheets».

MS

unread,
Apr 26, 2007, 12:49:32 PM4/26/07
to
Perfect!!!!, Muchas gracias :-) , las dos me sirvieron perfecto, Dios te
bendiga .


"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje

news:eLUfhp0h...@TK2MSFTNGP04.phx.gbl...

IsakMtz

unread,
Jul 17, 2007, 5:10:01 PM7/17/07
to
La manera de crear los objetos como:

Dim oExcelApp As Excel.Application
se hacia desde VB6, pero tiene la desventaja que se crea una instancia de
Excel, consumiendo recursos en la compu, y si se realiza en un servidor con
varios usuarios, puede generar problemas.

¿Hay alguna manera de utilizar OleDbConnection u OleDbCommand para conocer
el nombre de las hojas de un archivo de Excel?

J. Ramon A.

unread,
Jul 18, 2007, 7:31:33 AM7/18/07
to
oldb me parece que tenia driver, pero no se como es. puedes utilizar un odbc
al archivo y abrirlo con system.data.odbc, tiene connection y dataadapter


"IsakMtz" <Isa...@discussions.microsoft.com> escribió en el mensaje de
noticias:DEF97E6A-CAF7-4059...@microsoft.com...

SoftJaén

unread,
Jul 18, 2007, 8:37:48 AM7/18/07
to
"IsakMtz" preguntó:

>
> ¿Hay alguna manera de utilizar OleDbConnection u OleDbCommand para
> conocer el nombre de las hojas de un archivo de Excel?

¡Pues claro que la hay! Mediante la utilización del método
«GetOleDbSchemaTable» de un objeto «OleDbConnection», el cual nos devolverá
un objeto DataTable con la información de esquema del origen de datos OleDb
especificado.

El siguiente ejemplo establece una conexión con el libro de trabajo de
Excel, para conocer tanto el nombre de las hojas de cálculo, como los
nombres de los rangos de celdas existentes:

Try

' Construimos la cadena de conexión OleDb para conectarnos
' con el libro de trabajo de Excel.
'
Dim connString As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis Documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;'"

Using cnn As New OleDbConnection(connString)

' Abrimos la conexión.
'
cnn.Open()

' Obtenemos las tablas del origen de datos especificado.
'
Dim tables As DataTable = _
cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})

' Añadimos el nombre de las tablas a un control ListBox.
'
For Each row As DataRow In tables.Rows
ListBox1.Items.Add(row.Item("Table_Name").ToString)
Next

End Using

Catch ex As Exception
MessageBox.Show(ex.Message)

End Try

Te hago saber que los nombres de las hojas de cálculo terminan con el
carácter $ (Hoja1$, Hoja23$), no así el nombre de los rangos de celdas
existentes (RangoClientes, RangoAlumnos).

J. Ramon A.

unread,
Jul 18, 2007, 10:50:38 AM7/18/07
to
esto era lo que no sabia en provedor oldb
"Provider=Microsoft.Jet.OLEDB.4.0", este sirve tanto para access como
excell?, yo utilice odbc y obtuve el mismo resultado, de todas formas
sabiendolo lo cambiare y asi ahorro de crear dsn.

sludos


"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje de
noticias:eBpXzhT...@TK2MSFTNGP05.phx.gbl...

SoftJaén

unread,
Jul 18, 2007, 12:22:18 PM7/18/07
to
"J. Ramon A." preguntó:

> esto era lo que no sabia en provedor oldb
> "Provider=Microsoft.Jet.OLEDB.4.0", este sirve tanto para access como
> excell?, yo utilice odbc y obtuve el mismo resultado, de todas formas
> sabiendolo lo cambiare y asi ahorro de crear dsn.

Hola, J. Ramón:

Efectivamente, el proveedor OleDb de Jet sirve para conectarse tanto a una
base de datos de Access como a un libro de trabajo de Excel.

El motor Microsoft Jet dispone de una serie de drivers, llamados
genéricamente ISAM instalables (Método de Acceso Secuencial Indexado), que
se utilizan para conectarse a otros orígenes de datos distintos a Microsoft
Access, como por ejemplo archivos de Excel, dBASE, Paradox, HTML o un simple
archivo de texto delimitado, sin necesidad de utilizar el driver ODBC
correspondiente.

Si deseas información sobre los ISAM de Excel y Texto, échale un vistazo a
los artículos que tengo escritos sobre los mismos:

Trabajar con ADO, DAO y Excel
http://mvp-access.com/softjaen/articulos/excel/ado_dao_excel.htm

Trabajar con los datos de un archivo de texto
http://mvp-access.com/softjaen/articulos/texto/jet_text_isam.htm

Los ejemplos que aparecen en los artículos fueron escritos en su día para
ejecutarlos con Visual Basic clásico, aunque son fácilmente adaptables a
Visual Basic .net. Eso sí, la teoría que aparece es la misma para ambas
versiones de Visual Basic. :-)

Miguel

unread,
Oct 16, 2007, 11:26:04 AM10/16/07
to
He estado haciendo pruebas con el codigo que han puesto no me da ningun
problema de error de sintasis ni de librerias de referencias pero cuando lo
ejecuto me envia este error.

Error al crear una instancia del componente COM con CLSID
{00024500-0000-0000-C000-000000000046} desde IClassFactory debido al
siguiente error: 80070005.

Que creen que sea??

SoftJaén

unread,
Oct 16, 2007, 11:52:59 AM10/16/07
to
"Miguel" escribió:

> He estado haciendo pruebas con el codigo que han puesto no me da ningun
> problema de error de sintasis ni de librerias de referencias pero cuando
lo
> ejecuto me envia este error.
>
> Error al crear una instancia del componente COM con CLSID
> {00024500-0000-0000-C000-000000000046} desde IClassFactory debido al
> siguiente error: 80070005.
>
> Que creen que sea??

¿Con el ISAM de Excel obtienes ese error? ¿Qué código estás ejecutando para
que obtengas un error con el CLSID de la biblioteca de Microsoft Excel?

El ISAM de Excel no utiliza para nada la biblioteca de Microsoft Excel.

Miguel

unread,
Oct 16, 2007, 12:19:22 PM10/16/07
to
Te envio el codigo que estoy usando:

Dim OExcel As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim oBooks As Microsoft.Office.Interop.Excel.Workbooks
Dim OBook As Microsoft.Office.Interop.Excel.Workbook
Dim OSheet As Microsoft.Office.Interop.Excel.Worksheet

Dim i As Integer = 2

' Inicia Excel y abre el workbook
OExcel = CreateObject("Excel.Application", "")
OExcel.Visible = True
oBooks = OExcel.Workbooks
OBook = CType(OExcel.Workbooks.Add,
Microsoft.Office.Interop.Excel.WorkbookClass)
OSheet = CType(OBook.Sheets(1),
Microsoft.Office.Interop.Excel.Worksheet)

'_________________
'NOMBRE DE LA HOJA
OSheet.Name = "ROCS del DIA-" & dtpReportes.Value.Date
'________________
'TITULO DE CELDAS
OSheet.Cells(1, 1) = "ROC"
OSheet.Cells(1, 2) = "Recibido"
OSheet.Cells(1, 3) = "Concepto"
OSheet.Cells(1, 4) = "Cordobas"
OSheet.Cells(1, 5) = "Dolares"
'___________________
'VALOR DE LAS CELDAS

OSheet.Range("A" & i.ToString).Value = "Hola"
OSheet.Range("B" & i.ToString).Value = "Como"
OSheet.Range("C" & i.ToString).Value = "Estas?"
OSheet.Range("D" & i.ToString).Value = "Prueba De"
OSheet.Range("E" & i.ToString).Value = "Excell"


OSheet.Application.Visible = True

OSheet = Nothing
OBook = Nothing
OExcel = Nothing

SoftJaén

unread,
Oct 16, 2007, 1:30:32 PM10/16/07
to
"Miguel" escribió:

> Te envio el codigo que estoy usando:
>
> Dim OExcel As New Microsoft.Office.Interop.Excel.ApplicationClass

Ya me extrañaba a mí que obtuvieras el error que me has comentado
anteriormente con el ISAM de Excel.

Si deseas trabajar con la biblioteca de Excel, tendrás que declarar un
objeto Excel.Application:

Dim OExcel As New Microsoft.Office.Interop.Excel.Application

SoftJaén

unread,
Oct 16, 2007, 2:36:47 PM10/16/07
to
Ahora que estoy observando el código más detenidamente, la verdad es que no
encuentro un motivo aparente para que obtengas la excepción comentada,
siempre y cuando se encuentra instalada y debidamente registrada en el
equipo la biblioteca de Microsoft Excel.

Ignoro el motivo para que obtengas la excepción, porque el código lo he
probado tal cual lo has expuesto, y funciona bien.

No obstante, procura que en el equipo cliente esté instalada la misma
versión de Microsoft Excel que has utilizado para generar el proyecto, es
decir, que si en el proyecto has referenciado la biblioteca «Microsoft Excel
11.0 Object Library», en el equipo cliente deberá estar instalado Microsoft
Excel 2003.

0 new messages