2017-06-12 3 views
0

Je déplace un projet vers Azure. Le projet utilise LinqToExcel pour lire les données d'un fichier Excel.LinqToExcel vers EPPlus

LinqToExcel a quelques dépendances, ce qui n'est pas pris en charge dans une WebApp Azure. Donc, je migre le code vers EPPlus.

Mais, comment une recherche comme celle-ci, regardez-vous dans EPPlus?

var excel = new ExcelQueryFactory(excelFile); 
var results = from c in excel.Worksheet(mySheet) 
        where c["columnName"] == Value1.ToString() 
        select c; 

myValue = results.First()["MyColumnName2"] 

Répondre

0

fait des années depuis que je l'ai regardé LinqToExcel mais de ce que je me souviens qu'il traite des colonnes comme des propriétés les propriétés des objets - type de la nappe en réalité. Mais EPPlus n'a pas ce genre d'encapsulation construit.

En utilisant quelque chose comme ce fichier comme un exemple:

https://github.com/paulyoder/LinqToExcel/blob/master/src/LinqToExcel.Tests/ExcelFiles/Companies.xlsx

enter image description here

et dire que vous voulez que tous les Companys> 200 employés et chefs d'entreprise avec s en leur nom, sur le mieux que vous pouvez faire est-ce:

var fi = new FileInfo(@"C:\temp\Companies.xlsx"); 

using (var pck = new ExcelPackage(fi)) 
{ 
    var wb = pck.Workbook; 
    var ws = wb.Worksheets["Sheet1"]; 

    var headerRow = ws.Cells 
     .Where(cell => cell.Start.Row == 1) 
     .ToList(); 

    var ceoCountColNum = headerRow 
     .First(cell => cell.Value.ToString() == "CEO") 
     .Start 
     .Column; 

    var empCountColNum = headerRow 
     .First(cell => cell.Value.ToString() == "EmployeeCount") 
     .Start 
     .Column; 

    var rows = ws.Cells 
     .GroupBy(cell => cell.Start.Row) 
     .Skip(1) 
     .Select(g => g.ToList()) 
     .Where(row => 
      (double) row[empCountColNum - 1].Value > 200 && 
      row[ceoCountColNum - 1].Value.ToString().Contains("s")) 
     .ToList(); 

    Console.WriteLine(rows.Count); //return 2 
}