Chargement de grande quantité de données excel avec EPPlus
J'ai une base de winforms application que l'utilisateur peut télécharger un fichier excel (.xlsx) et je veux lire le contenu de ce fichier, donc je suis en utilisant EPPlus.
Le problème est, je suis en train de charger le contenu d'un très gros fichier excel, il a 7 onglets, avec un onglet haveing plus de 200k lignes, et un autre onglet avec 70k. Les autres 5 total d'environ 50k.
Ces fichier sera également continuer à s'agrandir.(L'objectif de la fin), Car je veux importer les données, lire les données, et selon les règles/les données que j'ai, j'ai besoin d'écrire des données sur le fichier excel et de les exporter.
Je vais avoir des problèmes mais avec EPPlus dans la réalisation du chargement des données.
voici le code
var file = new FileInfo(filePath);
using (var package = new ExcelPackage(file))
{
try
{
//Get the work book in the file
ExcelWorkbook workBook = package.Workbook; //Hangs here for about 2 mins
if (workBook != null)
{
if (workBook.Worksheets.Count > 0)
{
//Get the first worksheet
ExcelWorksheet currentWorksheet = workBook.Worksheets.First();
//gets the currentWorksheet but doesn't evaluate anything...
}
}
}
catch (Exception ex)
{
throw ex;
}
}
Le code se bloque sur l'emballage.classeur ligne pour près de 2 minutes. Ensuite, il descend dans le cas où il obtient le currentWorkSheet, et si je regarde le contenu de cette variable dans ma montre, rien n'est vraiment chargé, puisqu'il affiche:
L'évaluation de la fonction désactivée en raison d'une précédente évaluation de la fonction temporisée. Vous devez continuer l'exécution pour réactiver la fonction d'évaluation.
J'ai regardé ce lien de EPPlus et il montre que le seul problème de chargement de gros fichiers est charge de haut en bas et de gauche à droite, et il le dit plus de 5 000. J'ai plus que bien donc je me demande si cela pourrait même être possible avec EPPlus?
En outre, j'ai fait quelques recherche sur google et la plupart des questions sont qu'ils ne peuvent pas ouvrir la grande fichiers excel sur le serveur où ils pourraient localement...
J'ai aussi commencé à regarder les SDK Open XML et il semble être une meilleure performance sage, mais aussi beaucoup plus difficile à utiliser du code sage.
- Ce n'est pas mon travail, à l'aide d'excel. Je suis juste ramasser un projet où il a été laissé. Je n'ai jamais utilisé excel comme base de données. Mais, en ce qui concerne ma réponse, à l'aide de EPPlus fonctionne pour ce que j'ai l'intention de l'utiliser. Je viens de l'accès aux cellules de façon inappropriée. Aussi le sens que j'avais contre l'Open XML est (de mon point de vue) il avait l'air un peu plus fort à code par rapport à l'EPPlus. Encore une fois, je ne suis pas très familier avec elle, donc je ne sais pas. Aurais-je besoin d'aller dans cette voie, j'aurais appris.
- Si vous avez aucun contrôle sur la façon dont les fichiers sont générés, et les classeurs sont essentiellement des fichiers plats, c'est à dire pas de fonctions/macros/mise en forme, rien de vidage des données, vous seriez mieux avec plusieurs .les fichiers csv au lieu d'un fichier excel avec des classeurs différents. À défaut, @DJKRAZE la suggestion de mettre en place un OpenXML solution est la voie à suivre à ce sujet.
Vous devez vous connecter pour publier un commentaire.
Ces sons comme assez gros ensembles de données de sorte que vous voudrez peut-être lire ceci:
EPPlus Vaste ensemble de données d'un Problème avec la Mémoire de l'Exception
Fondamentalement, vous pouvez exécuter de RAM avec un "gros" jeu de données. Mais ce n'est pas seulement le nombre de lignes qui s'ajoute à la taille, mais aussi les colonnes ET le contenu de chaque cellule. Les chaînes prennent généralement beaucoup plus de place que des nombres, de sorte qu'il est parfois difficile de prédire quand PPE vont commencer à avoir des problèmes de mémoire. D'après la rumeur, la version la plus récente de la PPE est mieux, mais je n'ai pas testé moi-même.
Semble comme vous l'avez de travail en fonction de vos commentaires et c'est bon, mais conserver les limites de la mémoire à l'esprit. Je aggree avec vous - de le faire en Open XML ne serait pas un exercice simple.
Skip(x)
etTake(x)
méthodes, ou faut-il charger le classeur entier en mémoire indépendamment?