LinqToExcel到EPPlus

时间:2017-06-12 16:18:34

标签: c# asp.net excel epplus linq-to-excel

我正在将项目移至Azure。该项目使用LinqToExcel从Excel文件中读取数据。

LinqToExcel有一些依赖项,Azure WebApp不支持这些依赖项。所以,我正在将代码迁移到EPPlus。

但是,如何查找这样的查找,请查看EPPlus?

articles

1 个答案:

答案 0 :(得分: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
}