Pouvez-vous extraire des données Excel à partir d'un fichier .csv externe (et dynamique)?


14

J'ai un script qui génère un certain nombre de mesures de performances pour un ordinateur dans un fichier .csv. L'Excel effectue une vérification des statistiques de base pour l'écart type, etc.

Je me rends compte que vous pouvez importer des fichiers .csv dans Excel, mais ce que j'essaie de faire est de lire ces données dynamiquement dans mon modèle Excel sans avoir à réimporter et à re-modéliser à chaque fois.

Existe-t-il un moyen pour une cellule / table de référencer un .csv externe sans réimporter à chaque fois?


Lorsque le fichier est mis à jour, est-il ajouté ou écrasé?
Benjamin Anderson

Complètement écrasé. Mais je suppose que je pourrais le modifier pour qu'il fonctionne de toute façon.
éditeur

Réponses:


5

Le moyen le plus simple consiste à importer les données dans Access ou SQL Express, puis à utiliser les fonctionnalités et fonctions de connexion de données dans Excel. Après la configuration initiale, tout ce que vous auriez à faire est de cliquer sur Actualiser tout et il extraira les données et recalculera les valeurs.

Vous pouvez importer directement le CSV avec la fonction de connexion de données, mais il va vouloir extraire les données et les ajouter à une feuille de calcul. Cela fonctionnera, tant que vous l'importez dans une feuille de calcul secondaire et que vous laissez vos formules et calculs sur une autre feuille. Lorsque vous cliquez sur Actualiser à l'aide de cette méthode, il va demander le nom du fichier, puis le réimporter en utilisant les mêmes paramètres que ceux utilisés à l'origine. Cette méthode est également généralement plus lente ou inutilisable avec de grands ensembles de données.


2
En utilisant la fonction de connexion de données, vous pouvez désactiver l'invite de nom de fichier (il y a une case à cocher à la fin de l'assistant). À ce stade, vous pouvez également le configurer pour qu'il se rafraîchisse automatiquement toutes les X minutes. Fonctionne bien pour les petits ensembles de données.
Martin McNulty

4

les fenêtres

Vous pouvez également utiliser Power Query qui est un moyen un peu plus flexible pour obtenir le même résultat que dans la réponse de @ andy-lynch .

  1. Obtenez-le ici
  2. Installez-le
  3. Accédez au nouvel onglet du ruban "Power Query".
  4. Cliquez sur "Depuis un fichier" ou "Depuis le Web" et suivez les instructions à l'écran.

Voir ci-dessous un gif animé pour un aperçu:

entrez la description de l'image ici

MacOS

Power Query n'est pas disponible pour MacOS; la boîte de dialogue d'ouverture de fichier Excel "From Text" sous MacOS n'accepte pas non plus une URL (au moins dans la version 15.33).

Pour créer une telle connexion, il faudrait d'abord créer un fichier de requête Web (.iqy), comme expliqué dans ce guide , puis l'importer avec la commande de menu "Données -> Obtenir des données externes -> Exécuter la requête enregistrée".


Je suis d'accord - dans Excel 2016+, je comprends que c'est maintenant la valeur par défaut (comme Get et Transform )
Andy Lynch

2

La question est "Comment référencer des données dans un fichier .csv?

Ma façon serait de découper le fichier .csv et d'utiliser une macro contenant VBA et ADO qui reçoit les données et les place directement dans une feuille de calcul dans Excel. Toute base de données compatible ODBC peut être votre source.

Excel 2010 contient des données >> Obtenir des données externes - à partir de diverses sources de données. Cependant, je préfère écrire mon propre code car j'ai un contrôle absolu et je peux formater les résultats dans la macro. L'actualisation est au clic d'un bouton et vous pouvez tout faire avec.

Je pourrais vous faire savoir quelques détails si vous me dites de quelle base de données proviennent les mesures.

PS Regardez la liste des pilotes dans Data >> Get External Data >> Existing Connections >> Browse for More >> New Source >> Other Advanced >> Next qui vous mène à la liste Data Link Properties. Vous devez ensuite savoir quelle base de données source et quel pilote utiliser. Vous pouvez m'envoyer un email à cliffbeacham at hotmail avec plus de détails.


2

Un moyen plus simple (grâce à cet article ) consiste à simplement importer les données comme vous le feriez pour un fichier texte que vous avez déjà téléchargé (c'est-à-dire Data > Import Text File), mais au lieu de saisir un nom de fichier, collez plutôt l'URL du fichier CSV.


C'est utile. Si le fichier distant change, j'imagine qu'il ne se met pas à jour dynamiquement.
éditeur

C'est vrai - bien que les options habituelles de rafraîchissement à l'ouverture / toutes les <x> minutes s'appliquent toujours.
Andy Lynch


0

Avec VBS, la macro ou le script ressemblerait à (Excel2010 et versions ultérieures):

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

Cette macro a en fait été enregistrée par l'enregistreur de macros Excel 2013. Vous pouvez créer un bouton qui déclenche cette macro.Enregistreur de macros dans la barre d'outils de MS Excel 2013

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.