domingo 28 de enero de 2007

Obtener los nombres de las hojas EXCEL

Esta funcion permite obtener los nombres de las hojas de un libro EXCEL
(VB.NET)

'' Esta funcion obtiene los nombres de las hojas de un libro EXCEL
Public Function ObtenerHojasEXCEL(ByVal Directorio As String)
'

' Es necesario agregar una referencia a ADODB.

'

' vas al menú Proyecto->Agregar referencia..., ahí seleccionarás ADODB

'

Try
Dim Strconn As New ADODB.Connection ' Instancia una conexion
With Strconn ' Se arma la cadena de conexion
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Directorio & ";" & _
"Extended Properties='Excel 8.0'"

.Open()
End With
Dim rst As ADODB.Recordset ' Se instancia el recordset
rst = Strconn.OpenSchema(ADODB.SchemaEnum.adSchemaTables) ' Se guarda en el recordset el esquema de la tabla
Dim cadenas() As String ' Se crea el array en donde se almacenaran los nobres de las hojas
Dim contador As Integer ' Variable que se utiliza para control del array
contador = 0
While Not rst.EOF ' Mientras no se llege al final ( EOF ) del recordset se contiua en el bucle
ReDim Preserve cadenas(contador) ' Se re-dimenciona el array preservando su contenido.
cadenas(contador) = rst.Fields("TABLE_NAME").Value.ToString ' Se almacena en el array el nombre de la hoja
rst.MoveNext() ' Salta a la siguiente hoja en el libro
contador += 1 ' Incrementa el contador en uno
End While
Strconn.Close() ' Termina la conexion con el libro
Strconn = Nothing ' Vacia la conexion
Return (cadenas) ' Retorna el array para que pueda ser asigando a donde se desee

Catch ex As OleDb.OleDbException
MessageBox.Show("Error Cargando el Archivo de Excel: " & ex.Message)
End Try

End Function



Ejemplo:

Para probar el ejemplo se debera colocar un ListBox y un boton

Private Sub boton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles leer.Click

Dim contador As Integer ' Crea un contador para recorrer la coleccion
Dim cadenas() As String ' Crea una matriz en donde se almacenara el resultado de la consulta
Dim hojas As New LeerArchivos
cadenas = hojas.ObtenerHojasEXCEL("C:\Documents and Settings\Administrador\Mis documentos\daniel.xls")

For contador = 0 To cadenas.Length - 1
Me.ListBox1.Items.Add(cadenas(contador))

Next

End Sub