Do PostgreSQL para o Excel

 

Essa dica é pra quem precisa importar dados do postgres (ou qualquer outro SGBD) para o excel.

O comando é via macro e eu só usei no Excel 2003.


Sub Executa_SQL_PG(rSql As String, rPlaSaida As String, rCelSaida As String, rIP As String, rPorta As String, rBanco As String, rUsuario As String, rSenha As String, rSchema As String)

‘Esta função conecta no banco de dados, executa o sql e devolve na celula indicada
‘ rSql      => Comando a ser executado
‘ rPlaSaida => Nome da planilha onde os dados vão retornar. Se em branco, retorna na atual
‘ rCelSaida => Endereço de Célula onde os dados vão sair. Se em branco, retorna na A5
‘ rIP       => IP do servidor
‘ rPorta    => Porta onde conectar
‘ rBanco    => Nome do Banco de Dados
‘ rUsuario  => Nome do Usuario
‘ rSenha    => Senha do Usuário
‘ rSchema   => Schema a considerar

Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stSQL As String
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim rnStart As Range
Dim stADO As String

‘ valida planilha de saida
If rPlaSaida <> “” Then
Sheets(rPlaSaida).Select
End If

‘ valida celula de saida
If rCelSaida = “” Then
rCelSaida = “A5”
End If

stADO = “Driver={PostgreSQL UNICODE};Server=” & rIP & “;Port=” & rPorta & “;Database=” & rBanco & “;Uid=” & rUsuario & “;Pwd=” & rSenha & “;”

Set wbBook = ActiveWorkbook
Set wsSheet = wbBook.Worksheets(rPlaSaida)

With wsSheet
Set rnStart = .Range(rCelSaida)
End With

stSQL = rSql

Set cnt = New ADODB.Connection

With cnt
.CursorLocation = adUseClient
.Open stADO
.CommandTimeout = 5000000
Set rst = .Execute(stSQL)
End With

‘Here we add the Recordset to the sheet from A1
rnStart.CopyFromRecordset rst

‘Cleaning up.
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing

End Sub

 

Dá pra fazer gravando uma macro usando a importação de dados externos do excel. Mas ai depende de ter uma odbc na maquina e o resultado nao sai da tabela (até sai, mas da muito trabalho), o que aumenta o tamanho dela.

 

É isso. Abraços!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.