Comment analyser excel rangées à l'arrière à l'aide de types de EPPlus
EPPlus a une pratique LoadFromCollection<T>
méthode pour obtenir des données de mon propre type de contenu dans une feuille de calcul.
Par exemple si j'ai une classe:
public class Customer
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Surname { get; set; }
public DateTime Birthdate { get; set; }
}
Alors le code suivant:
var package = new ExcelPackage();
var sheet = package.Workbook.Worksheets.Add("Customers");
var customers = new List<Customer>{
new Customer{
Id = 1,
Firstname = "John",
Surname = "Doe",
Birthdate = new DateTime(2000, 1, 1)
},
new Customer{
Id = 2,
Firstname = "Mary",
Surname = "Moe",
Birthdate = new DateTime(2001, 2, 2)
}
};
sheet.Cells[1, 1].LoadFromCollection(customers);
package.Save();
...va ajouter 2 lignes dans une feuille de calcul appelé "Clients".
Ma question est si il est un moyen pratique de contrepartie pour extraire les lignes à partir d'excel (par exemple, après certaines modifications ont été apportées), dans mon des types.
Quelque chose comme:
var package = new ExcelPackage(inputStream);
var customers = sheet.Dimension.SaveToCollection<Customer>() ??
J'ai
- de regarder à travers les EPPlus codebase
- recherche toute d'économie d' questions
- recherche toute l'analyse questions
- vu cette question sur la lecture des cellules individuelles
... mais rien trouvé sur comment simplement analyser les lignes de mon type.
OriginalL'auteur Philip Bijker | 2015-10-30
Vous devez vous connecter pour publier un commentaire.
Inspiré par le ci-dessus je l'ai pris une voie légèrement différente.
Ce faisant, elle me permet d'utiliser le modèle traditionnel de la validation, et de tenir compte des changements aux en-têtes de colonne
--
Utilisation:
Dto que des cartes à excel
C'est la définition d'attribut
Classe d'Extension pour gérer la cartographie des lignes de DTO
const int RESOURCES_WORKSHEET = 1
(feuille de calcul des indices sont à 1)Il est simple de modifier cela pour que la Colonne d'Attribut spécifie le Nom de la Colonne à la place de l'index de Colonne.
J'étais à la recherche d'un moyen efficace de cartographie de la PropertyInfo et de la Colonne dans une Liste, belle utilisation de
Func
et belle utilisation de Linq, j'ai de réduire le temps pour la même opération dans 7,5%, ce qui ne semble pas beaucoup, mais il va de 680k ms à 50 ms Cette solution serait plus rapide si vous appliquez Parallèle.foreach. J'ai beaucoup à apprendre de cette réponse. Merci!pourriez-vous dire comment utiliser le Nom de la Colonne dans cet échantillon?
public class Colonne : Système.Attribut { public string Nom { get; set; } public Colonne(string nom) { Nom = nom; } } puis
var columns = typeof(T) .GetProperties() .Where(x => x.CustomAttributes.Any(columnOnly)) .Select(p => new { Property = p, Column = p.GetCustomAttributes<Column>().First().Name,
OriginalL'auteur Nix
Il n'existe pas de méthode native de EPPlus malheureusement. Ses une noix dure à casser depuis que vous auriez à utiliser réflexions, si vous voulez vraiment qu'il soit générique. Et à cause de Excel le stockage de tous les numéros et les dates que le double que vous avez à traiter avec beaucoup d'unboxing et les vérifications de type.
C'est quelque chose que j'ai travaillé. C'est une méthode d'extension qui permettra de le faire via
Generics
. Il fonctionne, mais seulement dans un nombre limité de tests donc, assurez-vous que vous vérifiez vous-même. Je ne peux pas garantir qu'il est le plus optimisé (encore), mais il est assez décent à son point de vue. Vous pouvez l'utiliser comme ceci:L'extension:
Un exemple COMPLET:
Sortie De La Console:
OriginalL'auteur Ernie