101 votes

Comment exécuter une requête SQL sur un tableau Excel ?

J'essaie de créer un sous-tableau à partir d'une autre table de tous les champs de nom de famille triés de A à Z qui ont un champ de numéro de téléphone qui n'est pas nul. Je pourrais le faire assez facilement avec SQL, mais je n'ai aucune idée de la façon de procéder pour exécuter une requête SQL dans Excel. Je suis tenté d'importer les données dans postgresql et de les interroger à cet endroit, mais cela semble un peu excessif.

Pour ce que j'essaie de faire, la requête SQL SELECT lastname, firstname, phonenumber WHERE phonenumber IS NOT NULL ORDER BY lastname ferait l'affaire. Cela semble trop simple pour que ce soit quelque chose qu'Excel ne puisse pas faire nativement. Comment puis-je exécuter une requête SQL comme celle-ci à partir d'Excel ?

4voto

Vous peut utiliser SQL dans Excel. Il est seulement bien caché. Voir ce tutoriel :

http://smallbusiness.chron.com/use-sql-statements-ms-excel-41193.html

2voto

unique2 Points 664

Si vous devez le faire une seule fois, suivez les descriptions de Charles, mais il est également possible de le faire avec des formules Excel et des colonnes d'aide si vous souhaitez rendre le filtre dynamique.

Supposons que vos données se trouvent sur la feuille DataSheet et commencent à la ligne 2 des colonnes suivantes :

  • A : nom de famille
  • B : prénom
  • C : numéro de téléphone

Vous avez besoin de deux colonnes d'aide sur cette feuille.

  • D2 : =if(A2 = "", 1, 0) il s'agit de la colonne de filtrage, correspondant à votre condition "where".
  • E2 : =if(D2 <> 1, "", sumifs(D$2:D$1048576, A$2:A$1048576, "<"&A2) + sumifs(D$2:D2, A$2:A2, A2)) ce qui correspond à l'ordre de

Copiez ces formules en fonction de vos données.

Sur la feuille qui doit afficher votre résultat, créez les colonnes suivantes.

  • A : Une séquence de chiffres commençant par 1 dans la rangée 2, ce qui limite le nombre total de rangées que vous pouvez obtenir (un peu comme une limite dans une suite).
  • B2 : =match(A2, DataSheet!$E$2:$E$1048576, 0) c'est la ligne des données correspondantes
  • C2 : =iferror(index(DataSheet!A$2:A$1048576, $B2), "") il s'agit des données actuelles ou vide si aucune donnée n'existe.

Copiez les formules en B2 et C2 et copiez-collez la colonne C vers D et E.

0voto

Mike T Points 7385

Si vous avez GDAL/OGR compilé avec la bibliothèque Expat, vous pouvez utiliser la commande Pilote XLSX pour lire les fichiers .xlsx et exécuter des expressions SQL à partir d'une invite de commande. Par exemple, à partir d'un osgeo4w dans le même répertoire que la feuille de calcul, utilisez la commande ogrinfo utilitaire :

ogrinfo -dialect sqlite -sql "SELECT name, count(*) FROM sheet1 GROUP BY name" Book1.xlsx

exécutera un SQLite la recherche sur sheet1 et de présenter le résultat de la requête sous une forme inhabituelle :

INFO: Open of `Book1.xlsx'
      using driver `XLSX' successful.

Layer name: SELECT
Geometry: None
Feature Count: 36
Layer SRS WKT:
(unknown)
name: String (0.0)
count(*): Integer (0.0)
OGRFeature(SELECT):0
  name (String) = Red
  count(*) (Integer) = 849

OGRFeature(SELECT):1
  name (String) = Green
  count(*) (Integer) = 265
...

Ou exécutez la même requête en utilisant ogr2ogr pour faire un simple CSV fichier :

$ ogr2ogr -f CSV out.csv -dialect sqlite \
          -sql "SELECT name, count(*) FROM sheet1 GROUP BY name" Book1.xlsx

$ cat out.csv
name,count(*)
Red,849
Green,265
...

Pour faire de même avec des fichiers .xls plus anciens, vous devez utiliser le fichier Pilote XLS Il s'agit de la bibliothèque FreeXL, qui n'est pas vraiment courante (par exemple, pas dans OSGeo4w).

-1voto

Akhilesh Singh Points 937

Vous pouvez expérimenter le pilote de base de données natif pour Excel dans la langue/plateforme de votre choix. Dans le monde Java, vous pouvez essayer avec http://code.google.com/p/sqlsheet/ qui fournit un pilote JDBC pour travailler directement avec les feuilles Excel. De même, vous pouvez obtenir des pilotes pour la technologie DB pour d'autres plateformes.

Toutefois, je peux vous garantir que vous vous heurterez rapidement à un mur en raison du nombre de fonctionnalités offertes par ces bibliothèques enveloppes. Une meilleure solution serait d'utiliser Apache HSSF/POI ou une bibliothèque de niveau similaire, mais cela nécessitera un effort de codage plus important.

-1voto

jbo5112 Points 392

Microsoft Access et LibreOffice Base peuvent ouvrir une feuille de calcul comme source et exécuter des requêtes sql sur celle-ci. Ce serait la façon la plus simple d'exécuter toutes sortes de requêtes, et d'éviter le désordre de l'exécution de macros ou de l'écriture de code.

Excel dispose également d'autofiltres et de tris de données qui permettent d'effectuer de nombreuses requêtes simples comme votre exemple. Si vous avez besoin d'aide avec ces fonctions, Google serait une meilleure source de didacticiels que moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X