2017-06-12 43 views
0

我正在將項目移至Azure。該項目使用LinqToExcel從Excel文件讀取數據。LinqToExcel至EPPlus

LinqToExcel有一些依賴項,這在Azure WebApp中不受支持。所以,我將代碼遷移到EPPlus。

但是,怎麼能這樣的查找,看看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"] 

回答

0

它已經有好幾年我在LinqToExcel但已經看過我記得它把列作爲屬性的對象的屬性 - 那種華而不實的實際。但是EPPlus沒有那種封裝。

使用這樣的文件爲例:

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

enter image description here

,說你希望所有公司的> 200名員工,CEO們在其名稱中s,關於最好的,你可以做是這樣的:

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 
}