首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinqToExcel到EPPlus

LinqToExcel到EPPlus
EN

Stack Overflow用户
提问于 2017-06-13 00:18:34
回答 1查看 994关注 0票数 0

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

Azure有一些依赖项,这在LinqToExcel WebApp中是不受支持的。因此,我正在将代码迁移到EPPlus。

但是,像这样的查找怎么可能在EPPlus中查找呢?

代码语言:javascript
复制
var excel = new ExcelQueryFactory(excelFile);
var results = from c in excel.Worksheet(mySheet)
                   where c["columnName"] == Value1.ToString()
                   select c;

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

回答 1

Stack Overflow用户

发布于 2017-06-13 08:05:29

我上次研究LinqToExcel已经有几年了,但据我记忆所及,它将列视为属性,即对象的属性--实际上,这是一种巧妙的做法。但是EPPlus并没有构建这种封装。

以下面这样的文件为例:

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

假设你想让所有员工和首席执行官的名字都有s,那么你能做的最好的事情是:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44504182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档