Você pode extrair dados do Excel de um arquivo .csv externo (e dinâmico)?


14

Eu tenho um script que gera várias métricas de desempenho para um computador em um arquivo .csv. O Excel faz uma verificação básica de estatísticas para desvio padrão, etc.

Sei que você pode importar arquivos .csv para o Excel, mas o que estou tentando fazer é ler esses dados dinamicamente no meu modelo do Excel sem precisar reimportar e re-modelar todas as vezes.

Existe uma maneira de fazer com que uma célula / tabela faça referência a um .csv externo sem precisar reimportar a cada vez?


Quando o arquivo é atualizado, ele está sendo anexado ou substituído?
Benjamin Anderson

Completamente substituído. Mas acho que poderia modificá-lo para funcionar de qualquer maneira.
editor de

Respostas:


5

A maneira mais fácil de fazer isso é importar os dados para o Access ou SQL Express e, em seguida, usar os recursos e funções da Conexão de dados no Excel. Após a configuração inicial, tudo o que você precisa fazer é clicar em Atualizar tudo e ele puxará os dados e recalculará os valores.

Você pode importar diretamente o CSV com o recurso de conexão de dados, mas ele deseja extrair os dados e adicioná-los a uma planilha. Isso funcionará, desde que você o importe para uma planilha secundária e deixe suas fórmulas e cálculos em outra planilha. Quando você clica em Atualizar usando esse método, ele solicita o nome do arquivo e depois reimporta-o usando as mesmas configurações usadas originalmente. Esse método também costuma ser mais lento ou inutilizável, com grandes conjuntos de dados.


2
Usando o recurso Conexão de dados, você pode desativar o prompt do nome do arquivo (há uma caixa de seleção no final do assistente). Nesse ponto, você também pode configurá-lo para atualizar automaticamente a cada X minutos. Funciona bem para pequenos conjuntos de dados.
Martin McNulty

4

janelas

Você também pode usar o Power Query, que é uma maneira um pouco mais flexível de obter o mesmo que na resposta do @ andy-lynch .

  1. Adquira aqui
  2. Instale-o
  3. Vá para a nova guia da faixa de opções "Power Query".
  4. Clique em "Do arquivo" ou "Da Web" e siga as instruções na tela.

Veja abaixo gif animado para pré-visualização:

insira a descrição da imagem aqui

Mac OS

O Power Query não está disponível para MacOS; nem a caixa de diálogo de arquivo aberto do Excel "do texto" no MacOS está aceitando uma URL (pelo menos na versão 15.33).

Para criar essa conexão, seria necessário primeiro construir um arquivo de consulta da web (.iqy), conforme explicado neste guia , e depois importá-lo com o comando de menu "Dados -> Obter dados externos -> Executar consulta salva".


Concordo - no Excel 2016+ eu compreendo que este é agora o padrão (como Get e Transform )
Andy Lynch

2

A pergunta é "Como faço para referenciar dados em um arquivo .csv?

Meu caminho seria cortar o arquivo .csv e usar uma macro contendo VBA e ADO que recebe os dados e os coloca diretamente em uma planilha no Excel. Qualquer banco de dados compatível com ODBC pode ser sua fonte.

O Excel 2010 possui Dados >> Obter Dados Externos - de várias fontes de dados. No entanto, prefiro escrever meu próprio código porque tenho controle absoluto e posso formatar os resultados na macro. A atualização ocorre com o clique de um botão e você pode fazer qualquer coisa com ela.

Eu poderia informar alguns detalhes, se você me disser de que banco de dados as métricas estão vindo.

PS Observe a lista de drivers em Dados >> Obter dados externos >> Conexões existentes >> Procure mais >> Nova fonte >> Outro avançado >> Próximo, que o leva à lista Propriedades do link de dados. Você precisa saber qual banco de dados de origem e qual driver usar. Você pode me enviar um e-mail em cliffbeacham no hotmail com mais detalhes.


2

Uma maneira mais simples (graças a esta postagem ) é apenas importar os dados como você faria para um arquivo de texto que você já baixou (por exemplo Data > Import Text File), mas, em vez de inserir um nome de arquivo, cole a URL do arquivo CSV.


Isso é útil. Se o arquivo remoto mudar, imagino que não seja atualizado dinamicamente.
editor

Isso é verdade - embora as opções usuais para atualização em aberto / a cada <x> minutos ainda se apliquem.
Andy Lynch


0

Com o VBS, a macro ou o script seria semelhante (Excel2010 e posterior):

Sub Macro1()
'
' Macro1 Macro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;\\Path\To\CSV\Folder\CSV_Data.csv" _
        , Destination:=Range("$A$1"))
        .CommandType = 0
        .Name = "Book1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Essa macro foi realmente registrada pelo gravador de macro do Excel 2013. Você pode criar um botão que aciona essa macro.Gravador de macro na barra de ferramentas do MS Excel 2013

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.