> 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.
"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje
news:%23joXj0o...@TK2MSFTNGP06.phx.gbl...
en lugar de In wb.Worksheets
Muchas gracias!!!
"MS" <adha...@telecomm.net.mx> escribió en el mensaje
news:%23NpPvbq...@TK2MSFTNGP04.phx.gbl...
> 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».
"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje
news:eLUfhp0h...@TK2MSFTNGP04.phx.gbl...
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?
"IsakMtz" <Isa...@discussions.microsoft.com> escribió en el mensaje de
noticias:DEF97E6A-CAF7-4059...@microsoft.com...
¡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).
sludos
"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje de
noticias:eBpXzhT...@TK2MSFTNGP05.phx.gbl...
> 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. :-)
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??
> 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.
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
> 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
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.