Arquivo de etiquetas: Excel

Criação de ficheiro Excel com Python

Na jornada da análise de dados, a extração e organização de informações valiosas é crucial para embasar decisões estratégicas. Ao trabalhar com dados armazenados em bases de dados SQL, surge a necessidade de extrair esses dados e visualizá-los de maneira mais acessível e compreensível.

Nesse cenário, o Python destaca-se com sua biblioteca Pandas, oferecendo recursos poderosos para manipulação e análise de dados. A função to_excel do Pandas e a classe ExcelWriter são ferramentas essenciais nesse processo.

A função to_excel é uma funcionalidade simples e direta do Pandas, permitindo a exportação fácil e rápida de DataFrames para arquivos Excel. Com apenas algumas linhas de código é possível transformar conjuntos de dados complexos em planilhas estruturadas e visualmente atrativas.

Por outro lado, a classe ExcelWriter oferece um controle mais granular sobre a formatação do arquivo Excel. Ela permite a criação de arquivos mais elaborados, possibilitando a definição de configurações específicas, como formatação de células, múltiplos separadores, estilos e muito mais.

Essas ferramentas tornam-se fundamentais para profissionais e equipas que pretendem criar relatórios detalhados, dashboards ou compartilhar resultados de análises de dados de forma acessível e amigável para diferentes stakeholders.

Além disso, a capacidade de exportar dados SQL diretamente para um arquivo Excel simplifica o processo de comunicação entre equipas, facilitando a compreensão e a interpretação dos dados por partes interessadas que não estão familiarizadas com linguagens de consulta de base de dados.

Em resumo, a função to_excel e a classe ExcelWriter são recursos valiosos do Pandas que desempenham um papel crucial na transformação de dados SQL em visualizações ricas e formatadas em Excel. Essas ferramentas simplificam o processo de geração de relatórios e fortalecem a comunicação de insights vitais derivados da análise de dados.

Ver todo o script.

Espero que vos seja útil!

Bom ano de 2024!

Problema de importação de dados Excel para SQL – existência de “carriage returns (line breaks)”

Olá,
normalmente a publicação de artigos que aqui coloco relaciona-se com algum tipo de processo ou anormalidade que ocorre nas minhas tarefas diárias. Hoje, trago aqui um problema de importação de dados para uma tabela SQL a partir de um ficheiro em Excel cujas colunas estão formatadas com a presença de “carriage returns” – mudança de linha.

A mudança de linha nas células do Excel pode estar relacionada com a cópia de web pages ou com a conjugação das teclas “Alt + Enter” no final de alguma frase.

Veja-se a seguinte figura, onde no lado esquerdo da coluna azul as células estão escritas terminando cada ponto com o “Alt+Enter”, passando para a parte de baixo mas dentro da mesma célula; no lado direito, o mesmo texto está escrito na mesma linha, apenas separado por vírgula, dentro da mesma célula:

cr1

Visualmente, acredito que o primeiro formato (lado esquerdo) seja melhor mas pode implicar muitos problemas, nomeadamente na exportação desses dados para SQL.

Vamos lá simular o problema…

Para começar, iremos criar uma tabela no SQL com apenas dois campos, “superficie” e “ref”, para a simulação é suficiente; iremos chamar a nossa tabela de “carriage_returns”:

cr2

A nossa tabela está vazia, futuramente será populada com os dados do ficheiro Excel:

cr3

Quero notar aqui que este método de importação (ou cópia) de dados para o SQL é o mais fácil para poucos campos e quando apenas queremos um espelho dos dados, mas se fosse para uma tabela com dezenas de campos e/ou dados transformados a forma passaria por usar o SSIS…mas adiante…

O próximo passo será copiar os dados do ficheiro Excel para esta tabela SQL. Para tal, basta fazer o “copy” no Excel das células necessárias. No nosso ficheiro de laboratório deveremos copiar as células B2/C2, B3/C3 e B4/C4, conforme figura:

cr4

Como criámos previamente a tabela SQL, os campos necessários já se encontram lá; assim, não deveremos copiar os títulos do Excel.

De seguida, fazer o “paste” no SQL:

cr5

Este processo permite colocar os dados necessários na nossa tabela SQL. Repare-se que copiámos três linhas e, portanto, será isso que deveremos esperar do SQL…

cr6.png

Pois é, não ficaram três registos na nossa tabela SQL como era suposto. Cabe ao DBA tentar perceber o que se passou enquanto aguenta com as “bocas” do chefe acerca da facilidade de um copy/paste!…

O que se passou foi que como existe o “carriage return” no ficheiro de Excel a cópia para SQL criou tantos registos quantos “Alt+Enter” se deram…como resolver este problema?

Um dos processos passará por transformar as células “danificadas” do Excel em células “boas” para que o SQL perceba – passar para um célula escrita em linha.

Um artigo muito interessante que encontrei sobre este tema é: https://www.ablebits.com/office-addins-blog/2013/12/03/remove-carriage-returns-excel/

No nosso ficheiro Excel, poderemos fazer isso criando novas colunas de dados que irão copiar os dados das colunas originais através de uma fórmula que retire o “Alt+Enter” em cada célula.

A fórmula a colocar no Excel é:

=TRIM(SUBSTITUTE(SUBSTITUTE(B2;CHAR(13);””);CHAR(10);”, “))

a qual substituirá o “Alt+Enter” por uma vírgula. Isto fará com que a célula fique com todo o seu conteúdo escrito em linha mas separado por vírgulas, como se pode verificar através da primeira imagem do artigo na lateral direita.

De seguida, faremos novamente a cópia dos dados do Excel para o SQL e iremos verificar que serão criadas apenas três linhas de registos.

Em primeiro lugar, deveremos eliminar os dados actuais da tabela, seja na própria tabela em modo de edição:

cr7

ou em TSQL:

cr8

Seja qual o for o método a nossa tabela deverá estar vazia neste momento.

O passo seguinte é copiar as células já alteradas para a tabela SQL:

cr10

 

Repare-se, agora, que o número de registos copiados é três, conforme o pretendido. Toda a linha contém a informação separada por vírgula onde antes tinha um “Alt+Enter”:

cr11.png

Ficou resolvido o problema, o chefe pode ficar descansado pois mais uma vez o DBA conseguiu resolver algo que não deveria ser sua preocupação.

Este exemplo apenas contemplou duas colunas mas facilmente se poderá pensar no problema se colocarmos outra coluna com conta bancária ou o BI de alguém. A linha de dados tem de ser única, não podem ser criadas diversas linhas para a mesma conta ou mesmo BI.

Espero que vos seja útil,

JG

 

 

 

Transformação de ficheiro Excel para SQL Server (parte II)

Olá,

no artigo anterior criámos tabelas SQL com base nos separadores de um ficheiro Excel. Neste artigo, iremos criar um SSIS package que ao ser executado faz a actualização dessas tabelas a partir de um ficheiro Excel com a mesma estrutura mas com dados diferentes .

Comecemos por utilizar o mesmo ficheiro Excel colocando mais alguns dados e alterando outros:

f20

Utilizando o artigo anterior, deveremos seguir os passos até à figura que mostro a seguir, a que permite selecionar os dados do ficheiro Excel:

f21

Escolhendo cada uma das fontes a importar e premindo “Edit Mappings” teremos acesso ao tipo de acção que desejamos efetuar. Note-se que as tabelas de destino já existem, na figura anterior deveremos manter os mesmos nomes do primeiro artigo para a coluna “Destination”.
As possibilidades são duas: ou substituir toda a tabela destino pelos dados novos (“Delete rows in the destination table”) ou incrementar a tabela destino com a nova informação (“Append rows in the destination table”).

Faremos os dois processos.
A tabela “Clientes$” destino vai ser mesmo substituída por dados novos:

f22

A tabela “Abastecimentos$” será incrementada com novos dados, ou seja acumulará os dados que já tinha com os novos a importar:

f22b

O próximo passo será executar o processo mas não esquecer de marcar a opção “Save SSIS Package” para utilização futura:

f23

A gravação do SSIS package pode ser efetuada no SQL Server (MSDB) ou como File System (dtsx file). Optei por gravar no MSDB.

Poderemos ver as mensagens das acções que irão ser efetuadas:

f25

E por fim o resultado do processo:

f26

A imagem seguinte avisa-nos de possíveis erros por ter alterado um campo de dados de tamanho 256 para 10. É apenas informativo:

f27

Como verificação dos dados das tabelas SQL poderemos fazer os seguintes “selects”:

f28

Repare-se que a tabela clientes tem somente as três linhas de clientes do ficheiro Excel de agora, uma vez o processo ter eliminado as que lá existiam.

A tabela Abastecimentos tem agora mais registos pois foi incrementada.

Verificou-se, portanto, que o processo funcionou. Queremos agora verificar que também funcionará através de um SSIS package cuja intervenção será de segundos ou mesmo automática…

O SSIS package foi guardado e poderemos verificar o mesmo através da consola do SSIS (Integration Services) do SQL Server:

f29

O nome que optei por colocar foi “Importacao_Excel”, parece-me mesmo apropriado.

f30

Alteremos, então, dados no ficheiro Excel inicial. Após a alteração deveremos executar o SSIS Package e verificar que tudo funcionou:

f31

f32

O passo seguinte é executar o SSIS package através da consola do Managment Studio, optando pela opção “Run Package”:

f33

e premindo o botão “Execute”:

f34

Na imagem seguinte são mostradas as linhas de comando da execução em causa:

f35

e, por fim, poderemos verificar que tudo está conforme o previsto, ou seja o SSIS funcionou e alterou as tabelas finais:

f36

Portanto, para cada alteração do ficheiro Excel bastará executar o SSIS package e as tabelas finais do SQL ficarão actualizadas.

Um passo seguinte seria automatizar todo o processo, onde o utilizador utilizaria um interface para upload do ficheiro excel para o servidor seguindo-se as devidas acções de actualização das tabelas SQL.

Espero que vos seja útil,

JG

 

Transformação de ficheiro Excel para SQL Server (parte I)

Olá,
hoje apresento um artigo com informação prática de transformação de um ficheiro Excel em tabelas no SQL Server. É algo muito utilizado no mundo empresarial e será um bom guia para a sua concretização.

Para alguns profissionais, como os analistas, a obtenção de dados e seu cruzamento é essencial, permitem-lhes a criação de reports elaborados com a mais vasta informação fornecida por qualquer meio.  Um desses meios é precisamente o Excel, uma das formas mais comuns de transporte de dados.
Outro meio de armazenamento e manuseamento de dados é o SQL.

Como é que poderemos interligar ambos? Como é que poderemos utilizar dados de um ficheiro em Excel, com diversos separadores (sheets), juntamente com outros dados existentes em tabelas de SQL?

A resposta à questão seria: “de muitas formas”! Mas, o propósito deste artigo é explicar a forma de importação de dados por parte do SQL – com isto serão criadas tabelas no SQL cujos dados são os mesmos fornecidos pelo ficheiro de Excel.

Avancemos, então, para a prática. Comecemos por verificar a existência do seguinte ficheiro Excel que se chama frotas.xls e que queremos utilizar para as nossas querys no SQL:

f1
O ficheiro é composto por três separadores: abastecimentos, clientes e viaturas.
Resumindo, é uma forma de gerir a nossa frota automóvel onde se especificam as viaturas e os diversos abastecimentos para cada uma delas.

Separador Abastecimentos:f2
Separador Clientes:f3
Separador Viaturas:f4
É necessário colocar toda esta informação numa estrutura diferente onde já existe outro tipo de dados, ou seja, é necessária uma importação de dados.

Tomemos, então a DB “Testes”, local onde armazenaremos as novas tabelas importadas do Excel:

f5

Deveremos selecionar a opção “Import Data” existente nas tarefas a executar no SQL. Em cima da DB Testes, clicar com o botão do lado direito do rato e depois selecionar Import Data:

f6

Após premir “Import Data” aparecerá a janela de boas vindas do “SQL Server Import and Export wizard”:

f7
A continuidade no processo é feita através do botão “Next”. Continuemos, portanto.

No próximo interface, selecionar em “Data Source” o “Microsoft Excel”:

f8
e especificar, de seguida, o local onde está residente o ficheiro Excel, premindo o botão “Browse”.
Atenção à marcação do “First row has column names” pois permite colocar as colunas nas tabelas SQL a partir da primeira linha que vem especificada no Excel:f9
Premir Next.
De seguida, será necessário escolher o nome do servidor SQL assim como especificar a DB onde colocar as tabelas. Neste caso, a seleção vai para a DB Testes:f10
Premir Next.
Aparecerá uma janela onde se especificará se se copiarão dados automaticamente ou se se escreverá algum código TSQL para o efeito. Optemos pela primeira opção:

f11
No próximo interface, devem-se escolher os separadores do ficheiro excel que queremos importar:

f12
Como interessam os três separadores basta marcar a caixinha ao lado de “Source” e, automaticamente, todos ficarão selecionados.
Na coluna “Destination” aparecem as tabelas que serão criadas, ambos os nomes terminam em “$”, realcando a origem Excel (separador).
Ainda nesta coluna, poderemos alterar o nome ou aceder aos campos constituintes de cada uma para alteração, por exemplo, do tamanho, premindo a tabela necessária e clicando no botão “Edit Mappings”:
f13

No interface seguinte são mostrados os campos constituintes de cada tabela, a selecionada anteriormente.
Alteremos, por exemplo, o tamanho do campo “Titulo” para 10, tamanho mais que suficiente.
Repare-se que a opção “create destination table” é a única activa uma vez as tabelas finais ainda não existirem no SQL:

f14
Veremos adiante que poderemos utilizar este mesmo wizard para fazer updates às tabelas.

O próximo quadro mostra a possibilidade de alteração do nome das tabelas finais:

f15
Por fim, premindo o botão Next, chegaremos ao interface que permite executar o processo.
Existe, também, a opção de salvar o processo como SSIS package (Integration Services)  mas não nos interessa nesta fase. A criação de tabelas é uma fase, vou deixar a funcionalidade do SSIS package para posterior implementação:

f16
Repare-se nas mensagens seguintes, confirmando a criação das tabelas:

f17
e, agora, o processo a concluir com a criação e cópia dos dados para o SQL:

f18
Poderemos verificar e comprovar no SQL a existência das tabelas e dos dados iguais aos fornecidos no ficheiro Excel:

f19
Com isto,  importamos dados de um ficheiro Excel para o ambiente SQL. Este processo cria as tabelas finais com os dados dos separadores do Excel inicial.

Mais tarde, para actualizar novo documento fornecido, poderemos fazer o update às tabelas; uma vez elas existirem o processo a executar não será o de criar as tabelas mas sim actualizar as existentes.
A actualização poderá ser como acréscimo aos registos (append) ou substituição (delete and copy). Neste caso, no final do processo, deveremos gravar o SSIS package e simplesmente utilizar o mesmo para cada actualização.

Ficará para o próximo artigo.

Espero que vos seja útil,

JG