Usa Power Query para extraer datos desde Oracle

Conectar un libro de Excel con la información de una vista de Oracle era cosa simple si se tenían los drivers adecuados, pero desde la llegada de Office 365 esto ha cambiado un poco. Los drivers que antes se usaban ya no sirven para conectar las vistas, por lo que es necesario recurrir a viejos trucos y adaptarlos con apoyo de Power Query y VBA.

La línea de conexión a Oracle

Bastará con modificar una macro para realizar las consultas de forma más precisa. Si lo que buscas es conectar con Oracle, esta línea de código será suficiente para establecer conexión:

ThisWorkbook.Sheets(1).ListObjects.Add(SourceType:=0, _
 Source:="OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Nombre_de_la_Vista"";Extended Properties=""""", _
 Destination:=Range("$A$1")).QueryTable

Entender el significado de cada línea te ayudará a poder adaptar el código de ser necesario:

"ThisWorkbook.Sheets(1)" 

corresponde a la primera hoja de tu libro actual.

".ListObjects.Add" 

se encarga de agregar un nuevo objeto a la colección de Power Query.

"Source:="OLEDB;Provider=Microsoft.Mashup.OleDb.1:" 

utiliza el motor de acción de Office en lugar de algún driver específico como se hacía antes al usar drivers externos.

"Data Source=$Workbook$;" 

dicta que la instancia se creará dentro de todo el libro en la lista de objetos.

"Location=""Nombre_de_la_Vista""" 

dará el nombre de la vista de Oracle que se va a importar.

"Destination:=Range("$A$1"))" 

colocará en la hoja elegida anteriormente y en el rango A1, el cual puede cambiarse en el valor «$A$1» por otro rango.

".QueryTable" 

será lo que cree la tabla en Power Query.

Datos adicionales de la consulta

Para poder importar hará falta agregar algunas otras propiedades adicionales, por lo que será conveniente agregar un bloque With al código (si no recuerdas cómo hacerlo puedes revisar la documentación aquí). Para vista rápida, nuestro código quedaría así:

With ThisWorkbook.Sheets(1).ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Nombre_de_la_vista"";Extended Properties=""""" _
    , Destination:=Range("$A$1")).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array("SELECT * FROM [Nombre_de_la_vista]")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = "VISTA_1"
    .Refresh BackgroundQuery:=False
End With

Dentro de este bloque, algunas de las propiedades que es importante conocer son las siguientes:

    .CommandText = Array("SELECT * FROM [Nombre_de_la_vista]")

Aquí se puede cambiar con lenguaje SQL la forma en la que se hará la consulta. Por defecto se recibirá toda la información de la vista.

    .RowNumbers = False

En caso de querer limitar el número de filas que se importarán, el valor deberá cambiarse a True.

ListObject.DisplayName = "VISTA_1"

Aquí se puede cambiar el nombre con el que Excel reconocerá la vista.

Cosas a considerar con Power Query

Este código que comparto fue probado hace poco por mí para una empresa que no podía acceder a la instalación de los nuevos drivers propuestos por Office en su página oficial por un tema sobre las políticas de seguridad. Si quieres usar el driver de arriba, solo cambia la línea de código de abajo:

Provider=Microsoft.Mashup

Por:

Driver:=Oracle_for_Oraclient12g

O:

 Driver:=Oracle_for_Oraclient12g_32x
ThisWorkbook.Sheets(1).ListObjects.Add(SourceType:=0, _ Source:="OLEDB;Driver:=Oracle_for_Oraclient12g_32x;Data Source=$Workbook$;Location=""Nombre_de_la_Vista"";Extended Properties=""""", _ Destination:=Range("$A$1")).QueryTable

Adicional a esto, recuerda que debes tener instalado Oracle de tu organización y el nombre de usuario más contraseña para entrar a ver la consulta de Oracle.

Importar datos directamente de Oracle y crear modelos en Power Query puede ahorrarte muchas horas de trabajo y darle un valor agregado a tu trabajo.

Cualquier duda nos leemos abajo.

Usa Power Query para extraer datos desde Oracle
Scroll hacia arriba