10
votes

Lire un gros document Excel

Je veux savoir quel est le moyen le plus rapide de lire des cellules dans Excel. J'ai un fichier Excel contenant 50000 lignes et je veux savoir comment le lire rapidement. J'ai juste besoin de lire la première colonne et avec une connexion OLEDB, cela me prend comme 15 secondes. Y a-t-il un moyen plus rapide?

merci


3 commentaires

14 secondes est-elle assez rapide? Pouvez-vous sauter OLEDB et convertir la feuille en Fileand CSV, puis lisez les lignes du fichier? Comment ressemble votre requête OLEDB? Cette cellule a-t-elle beaucoup de données? Est-ce Excel OpenXML (AKA XLSX)?


Désolé, le document Excel est déjà en .csv.


S'il est déjà en CSV, utilisez un lecteur CVS: voyez ici CodeProject. Com / Articles / 9258 / A-Fast-CSV-Reader


5 Réponses :


2
votes

OLEDB prendra toujours plus de temps.

SQL Server 2005/2008 le rendra plus rapide.

pour les connexions OLEDB, il faut 7 enregistrements par secondes tandis que

Pour SQLServer, il faut 70 enregistrements par secondes.

Il n'existe pas beaucoup de temps à lire des fichiers séparés par des virgules, mais le temps est nécessaire pour insérer les données.

J'ai littéralement expérimenté cette chose.


3 commentaires

Comment cela aide-t-il? OP dit qu'ils veulent importer des CSV et ne pas comparer avec SQL Server?


@Belogix I. J'ai dit que la lecture ne nécessite pas de temps, le temps est requis pour insérer ce fichier à la base de données, je travaille déjà sur le projet associé à la bourse dans laquelle je dois faire face à de gros fichiers commerciaux au format .csv et que je fais de la même opération. C'est pourquoi je l'ai dit.


@Freelancer a accordé, mais OP n'a fait aucune implication que cela serait inséré dans une base de données. Veut juste "lire des cellules dans Excel". Je ne vois pas comment SQLServer entre même dans l'équation.



0
votes

Vous voulez juste lire une liste de numéros d'un fichier? Cela doit-il être dans Excel? Une personne non technique est-elle mise à jour de la liste? Si vous souhaitez lire 50 000 numéros à partir d'une seule colonne dans une liste en mémoire, copiez simplement les cellules dans un fichier texte et lisez avec un textreader. Ce sera instantané. XXX


0 commentaires

3
votes

Pouvez-vous mettre votre code pour lire 50000 enregistrements à l'aide du fournisseur OLEDB. J'ai essayé de le faire, il a fallu 4-5 secondes pour lire 50000 enregistrements avec 3 colonnes. J'ai fait de la manière suivante, je suis juste un coup d'œil, cela peut vous aider. :) xxx

si vous pouvez mettre votre code ici, afin que je puisse essayer de corriger. :)


1 commentaires

Pour un fichier Excel avec des lignes 50K et ils veulent choisir la première colonne, cette méthode a été battue en copiant au fichier CSV et en utilisant le lecteur de flux. Mais s'ils veulent choisir quelques colonnes de plus dans un fichier Excel avec beaucoup de colonnes. Je crois que les gens viendront avec celui-ci.



8
votes

Voici une méthode qui s'appuie sur l'utilisation de Microsoft.Office.interop.excel.

Remarque: le fichier Excel que j'ai utilisé n'avait qu'une colonne avec des données avec 50 000 entrées.

1) Ouvert Le fichier avec Excel, enregistrez-le sous CSV et fermer Excel.

2) Utilisez StreamReader pour lire rapidement les données.

3) Sélectionnez les données sur l'alimentation de la ligne de retour de chariot et ajoutez à une liste de chaînes.

4) Supprimer le fichier CSV que j'ai créé.

i utilisé System.Diagnostics.stopwatch à l'exécution et il a fallu 1,5568 secondes pour que la fonction soit exécutée. . xxx

ressources:

http://www.codeproject.com/articles/5123/Opening-and-navigating-excel-with-c

< Un href = "https://stackoverflow.com/questions/1814562/how-to-split-strings-on-carriage-return-with-c"> Comment scinder les chaînes sur le retour de chariot avec C #? < / p>


2 commentaires

Je voulais juste dire merci pour cela, amélioré drastiquement mon programme


Je pense que vous pouvez également utiliser ce code chaîne ligne = "" ligne = sr.readline () au lieu de vous inquiéter de l'alimentation de la ligne chariot



0
votes

Je faisais face à la même chose et je lisais dans l'Office Dev Center:

http://social.msdn.microsoft.com/forums/Office/en-us/418ada31-8748-48d2-858B-D177326DAA76/export-a-excel- Open-XML-SDK-VS-MicrosoftOfficeInterOpexcel? Forum = Oxmlsdk

Vous avez les deux choix pour manipuler des fichiers Excel:

  • microsoft.office.interop.excel qui utilise Excel.application comme couche ajoutée pour l'exécution de code
  • Ouvrez XML SDK qui permet au développeur de travailler directement avec le fichier fermé

    il n'y a pas beaucoup de différence entre les deux, mais dans votre cas où la performance est un problème que vous devez utiliser le SDK Open XML qui peut être un peu plus rapide et ne nécessitent pas beaucoup de temps l'ouverture d'un fichier volumineux avant le traitement. Comme vous pouvez également lire également dans le lien ci-dessus et je cite:

    Bureau à des fins d'automatisation n'est pas pris en charge. Les applications de bureau n'ont pas été conçues pour fonctionner sans surveillance humaine et avoir une tendance méchante à "Hang"

    Un bon démarrage pour apprendre l'Open XML SDK est fourni dans ce lien: http://msdn.microsoft.com/en-us/library/Office /gggg575571.aspx


0 commentaires