Comment importer généralement des données à partir d'une feuille de calcul à des colonnes de plusieurs bases de données?

StackOverflow https://stackoverflow.com/questions/390784

Question

Pour une raison quelconque, j'ai beaucoup de clients qui ont des données existantes qui sont stockées dans des feuilles de calcul. Souvent, il y a des centaines, sinon des milliers d'articles dans chaque feuille de calcul, et de demander au client de les saisir manuellement à travers un site Web (ou les importer à Dieu ne plaise que moi-même manière) est hors de question. En règle générale, ces données ne correspond pas simplement la colonne de feuille de calcul à la colonne de base de données. Ce serait trop facile. Souvent, les données doivent être manipulés avant d'entrer dans la base de données (données doit être divisé par des virgules, etc.) ou les données doivent être réparties sur plusieurs tables. Ou les deux.

Je vous pose cette question, non pas parce que je ne sais pas d'une multitude de façons de le faire, mais parce que je ne l'ai pas réglé sur une manière qui ne se sent pas comme il faut plus de travail que prévu. Jusqu'à présent, j'ai pris toutes les approches suivantes (et probablement plus que je l'ai oublié):

  • Utiliser Excel pour modifier les données, il est donc un peu plus facile à importer
  • Importer la feuille de calcul entière dans une table temporaire, puis l'importation avec SQL
  • Rédaction d'un script et d'importer les données avec (je l'ai utilisé VBScript, C # et maintenant Ruby)

Jusqu'à présent, en utilisant un script a été la façon qui semblait le plus souple, mais il se sent encore un peu maladroit. Je dois accomplir cette tâche assez que j'ai même envisagé d'écrire un peu DSL pour elle, juste pour accélérer les choses.

Mais avant de le faire, je suis curieux, est-il une meilleure façon?

Était-ce utile?

La solution

Vous devez fixer des limites, si vous le pouvez. Vous devriez essayer de fournir un modèle pour eux d'utiliser les données attendues, qui comprend le type de fichier (Excel, csv, etc.), les noms de colonnes, les valeurs valides, etc. Vous devriez permettre à l'utiliser pour rechercher le fichier et le télécharger sur votre page / formulaire.

Une fois le fichier téléchargé, vous devez faire la validation et à l'importation. Vous pouvez utiliser ADO.NET, les flux de fichiers, DTS / SSIS ou Office Automation pour le faire (si vous utilisez la pile Microsoft). Dans la partie de validation, vous devez indiquer à l'utilisateur exactement ce qu'ils ont mal ou besoin de changer. Cela pourrait inclure avoir la page de validation ont les données réelles dans une grille de données et fournir des étiquettes rouges avec des erreurs sur exactement ligne / colonne. Si vous utilisez Office Automation, vous pouvez leur donner le numéro de cellule exacte, mais l'Office PIA est une douleur dans le cou.

Une fois que la validation est acceptée, vous pouvez importer les informations comme bon vous semble. Je préfère le mettre dans une table de mise en scène et en utilisant un proc stocké pour le charger, mais c'est juste moi. Certains préfèrent utiliser le modèle d'objet, mais cela peut être très lent si vous avez beaucoup de données.

Si vous chargez personnellement ces fichiers manuellement et d'avoir à entrer et les manipuler, je suggère de trouver la communalité entre eux et venir avec une norme à suivre. Une fois que vous avez, vous pouvez faire en sorte que l'utilisateur peut le faire eux-mêmes ou vous pouvez le faire beaucoup plus vite vous.

Oui, cela est beaucoup de travail, mais à long mal, quand il y a un programme qui fonctionne 95% du temps, tout le monde gagne.

Si cela va être une situation qui ne peut pas être tout simplement automatisé, alors vous aurez probablement juste d'avoir une table de mise en scène de la vanille et ont sql à l'importation. Vous devrez charger les données dans une table de mise en scène, faites la manipulation de base, puis le charger dans te table mise en scène que SQL attend.

Je l'ai fait tant les importations et les outils ETL, et il n'y a vraiment aucun moyen facile à manipuler. La seule façon est de venir vraiment une norme qui est raisonnable et de s'y tenir et programme autour de cela.

Autres conseils

ouais .. que tout est nul.

J'irais avec le script. Et je suppose que vous avez à répéter les colonnes qui doivent correspondre à une seule ligne dans une autre table. Je ferais correspondance raisonnable et si vous rencontrez une ligne que le script ne peut pas traiter et déplacer les données ... puis connectez-vous et faire quelqu'un de le faire manuellement.

Ce sont les petits détails qui vous tueront à ce sujet, bien sûr, mais en général, je l'ai eu du succès avec l'exportation des données au format CSV à partir d'Excel, puis la lecture à l'aide d'un script ou rool, munging au besoin, et l'insérer. Selon le wonderfulness de mon environnement, qui peut être fait avec une interface de base de données pour le langage de script, jusques et y compris l'écriture d'instructions SQL INSERT dans un fichier script.

Il y a de bons paquets CSV disponibles pour Python , Ruby et Perl .

Un DSL est la voie à suivre.

Créer un modèle de domaine pour votre problème. Vous parlez de cellules, des colonnes, des lignes, des tables de base de données, les champs de division, combinant champs, cartographie des cellules à des colonnes de base de données, de sorte que les concepts dont vous avez besoin. En outre, vous voulez probablement gammes (de cellules) et des feuilles.

Une simple vue ne porte que sur les valeurs dans les feuilles de calcul, et non pas les formules sous-jacentes. Exportation de la feuille de calcul sous forme de texte séparé par des tabulations vous donne accès à cela. Si vous avez besoin d'accéder aux formules, vous êtes mieux avec la représentation XML, soit le XML de feuille de calcul, ou le format XML Office.

Vous pourriez être en mesure de trouver un DSL dans Excel. Cela pourrait permettre à vos utilisateurs plus intelligents à faire (en partie) la mise en correspondance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top